版本: 233
Hive on Spark为Hive提供了 Apache Spark 作为执行引擎。
set hiveexecutionengine=spark;
Hive 11+以上版本提供Hive on Spark 。它在“ spark ”和“spark2”分支中仍处于发展阶段,并且定期合并到Hive的“主”分支中。
参见 HIVE-7292 及其子任务和相关问题。
Hive on Spark仅用特定版本的Spark进行测试,因此给定版本的Hive只能保证与Spark的特定版本兼容。Spark的其他版本可能与给定版本的Hive一起使用,但不能保证。以下是Hive版本及其相应兼容Spark版本的列表。
按照说明安装Spark:
YARN模式: >
简介
由于spark有多种运行模式,远程调试的时候,虽然大体步骤相同,但是还是有小部分需要注意的地方,这里记录一下调试运行在spark on yarn模式下的程序。
环境准备
需要完好的Hadoop,spark集群,以便于提交spark on yarn程序。我这里是基于CDH的环境
步骤
1随便写个spark程序,比如序列化一个集合,然后求和。然后使用maven打包,上传至集群。可以先提交运行一次,确保可以运行成功。
[root@kjtlxsvr5 bin]# /spark-submit --class cnsparkstudycoreParallelizeCollection --master yarn-cluster --num-executors 3 --executor-cores 2 --executor-memory 1G --driver-java-options "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8787" /home/spark-study-scala-001-SNAPSHOT-jar-with-dependenciesjar
现在有两个办法可以解决这个问题。
第一个办法是节点少的话,通过修改上面IDEA远程主机地址来一个一个试。
第二办法可以精确知道ApplicationMaster在哪里:
①通过CDH进入yarn的应用程序界面
②然后点击进入该程序的详细信息界面,如下图就可以知道Applicationmaster在哪台NodeManager上:
③可以去该节点查看进程,的确有一个ApplicationMaster,然后在IDEA中修改为该远程主机地址,开始debug程序看源码吧!
创建 maven 工程
使用下面命令创建一个普通的 maven 工程:
bash
$ mvn archetype:generate -DgroupId=comclouderasparkwordcount -DartifactId=sparkwordcount -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
将 sparkwordcount 目录重命名为simplesparkapp,然后,在 simplesparkapp 目录下添加 scala 源文件目录:
bash
$ mkdir -p sparkwordcount/src/main/scala/com/cloudera/sparkwordcount
修改 pomxml 添加 scala 和 spark 依赖:
xml
<dependencies>
<dependency>
<groupId>orgscala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2104</version>
</dependency>
<dependency>
<groupId>orgapachespark</groupId>
<artifactId>spark-core_210</artifactId>
<version>120-cdh530</version>
</dependency>
</dependencies>
Spark 的运行模式有 Local(也称单节点模式),Standalone(集群模式),Spark on Yarn(运行在Yarn上),Mesos以及K8s等常用模式,本文介绍前三种模式。
Spark-shell 参数
Spark-shell 是以一种交互式命令行方式将Spark应用程序跑在指定模式上,也可以通过Spark-submit提交指定运用程序,Spark-shell 底层调用的是Spark-submit,二者的使用参数一致的,通过- -help 查看参数:
sparkconf的传入有三种方式:
1通过在spark应用程序开发的时候用set()方法进行指定
2通过在spark应用程序提交的时候用过以上参数指定,一般使用此种方式,因为使用较为灵活
3通过配置spark-defaultconf,spark-envsh文件进行指定,此种方式较shell方式级别低
Local模式
Local 模式是最简单的一种Spark运行方式,它采用单节点多线程(cpu)方式运行,local模式是一种OOTB(开箱即用)的方式,只需要在spark-envsh导出JAVA_HOME,无需其他任何配置即可使用,因而常用于开发和学习
方式:/spark-shell - -master local[n] ,n代表线程数
Standalone模式
Spark on Yarn
on Yarn的俩种模式
客户端的Driver将应用提交给Yarn后,Yarn会先后启动ApplicationMaster和excutor,另外ApplicationMaster和executor都装在在container里运行,container默认的内存是1g,ApplicationMaster分配的内存是driver-memory,executor分配的内存是executor-memory同时,因为Driver在客户端,所以程序的运行结果可以在客户端显示,Driver以进程名为SparkSubmit的形式存在。
Cluster 模式
1由client向ResourceManager提交请求,并上传Jar到HDFS上
这期间包括四个步骤:
a)连接到RM
b)从RM ASM(applicationsManager)中获得metric,queue和resource等信息。
c)upload app jar and spark-assembly jar
d)设置运行环境和container上下文
2ResourceManager向NodeManager申请资源,创建Spark ApplicationMaster(每个SparkContext都有一个ApplicationManager)
3NodeManager启动Spark App Master,并向ResourceManager ASM注册
4Spark ApplicationMaster从HDFS中找到jar文件,启动DAGScheduler和YARN Cluster Scheduler
5ResourceManager向ResourceManager ASM注册申请container资源(INFO YarnClientImpl: Submitted application)
6ResourceManager通知NodeManager分配Container,这是可以收到来自ASM关于container的报告。(每个container的对应一个executor)
7Spark ApplicationMaster直接和container(executor)进行交互,完成这个分布式任务。
进入spark安装目录下的conf文件夹
[atguigu@hadoop102 module] mv slavestemplate slaves
[atguigu@hadoop102 conf] vim slaves
hadoop102
hadoop103
hadoop104
4)修改spark-envsh文件,添加如下配置:
[atguigu@hadoop102 conf]$ vim spark-envsh
SPARK_MASTER_HOST=hadoop102
SPARK_MASTER_PORT=7077
5)分发spark包
[atguigu@hadoop102 module] sbin/start-allsh
注意:如果遇到 “JAVA_HOME not set” 异常,可以在sbin目录下的spark-configsh 文件中加入如下配置:
export JAVA_HOME=XXXX
官方求PI案例
spark-submit
--class orgapachesparkexamplesSparkPi
--master spark://server-2:7077
--executor-memory 1G
--total-executor-cores 2
/home/xxx/software/spark-244-bin-hadoop27/examples/jars/spark-examples_211-244jar
100
spark-shell
--master spark://server-2:7077
--executor-memory 1g
--total-executor-cores 2
spark-shell --master spark://server-2:7077 --executor-memory 1g --total-executor-cores 2
参数:--master spark://server-2:7077 指定要连接的集群的master
Spark客户端直接连接Yarn,不需要额外构建Spark集群。有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点。
yarn-client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出
yarn-cluster:Driver程序运行在由RM(ResourceManager)启动的AP(APPMaster)适用于生产环境。
安装使用
1)修改hadoop配置文件yarn-sitexml,添加如下内容:
2)修改spark-envsh,添加如下配置:
[atguigu@hadoop102 conf]$ vi spark-envsh
YARN_CONF_DIR=/opt/module/hadoop-272/etc/hadoop
3)分发配置文件
[atguigu@hadoop102 conf] xsync spark-envsh
4)执行一个程序
spark-submit
--class orgapachesparkexamplesSparkPi
--master yarn
--deploy-mode client
/home/xxx/software/spark-244-bin-hadoop27/examples/jars/spark-examples_211-244jar
100
注意:在提交任务之前需启动HDFS以及YARN集群。
日志查看
修改配置文件spark-defaultsconf
添加如下内容:
sparkyarnhistoryServeraddress=server-2:18080
sparkhistoryuiport=18080
2)重启spark历史服务
[atguigu@hadoop102 spark] sbin/start-history-serversh
starting orgapachesparkdeployhistoryHistoryServer, logging to /opt/module/spark/logs/spark-atguigu-orgapachesparkdeployhistoryHistoryServer-1-hadoop102out
3)提交任务到Yarn执行
spark-submit
--class orgapachesparkexamplesSparkPi
--master yarn
--deploy-mode client
/home/xxx/software/spark-244-bin-hadoop27/examples/jars/spark-examples_211-244jar
100
Spark的安装模式一般分为三种:1伪分布模式:即在一个节点上模拟一个分布式环境,master和worker共用一个节点,这种模式一般用于开发和测试Spark程序;2全分布模式:即真正的集群模式,master和worker部署在不同的节点之上,一般至少需要3个节点(1个master和2个worker),这种模式一般用于实际的生产环境;3HA集群模式:即高可用集群模式,一般至少需要4台机器(1个主master,1个备master,2个worker),这种模式的优点是在主master宕机之后,备master会立即启动担任master的职责,可以保证集群高效稳定的运行,这种模式就是实际生产环境中多采用的模式。本小节来介绍Spark的全分布模式的安装和配置。
安装介质:
jdk-8u162-linux-x64targz 提取码:2bh8
hadoop-273targz 提取码:d4g2
scala-2126tgz 提取码:s2ly
spark-210-bin-hadoop27tgz 提取码:5kcf
准备3台Linux主机,按照下面的步骤在每台主机上执行一遍,设置成如下结果:
安装Linux *** 作系统比较简单,这里不再详细。参考:《 Linux从入门到精通1:使用 VMware Workstation 14 Pro 安装 CentOS 7 详细图文教程 》
编辑hosts配置文件:# vi /etc/hosts,追加3行:
测试主机名是否可用:
(1)使用ssh-keygen工具生成秘钥对:
(2)将生成的公钥发给三台主机:master、slave1、slave2:
(3)测试秘钥认证是否成功:
由于各个主机上的时间可能不一致,会导致执行Spark程序出现异常,因此需要同步各个主机的时间。在实际生成环境中,一般使用时间服务器来同步时间,但是搭建时间服务器相对较为复杂。这里介绍一种简单的方法来快速同步每台主机主机的时间。我们知道,使用date命令可以设置主机的时间,因此这里使用putty的插件MTPuTTY来同时向每一台主机发送date命令,以到达同步时间的目的。
(1)使用MTPuTTY工具连接三台主机,点击MTPuTTY工具的Tools菜单下的“Send script…”子菜单,打开发送脚本工具窗口。
(2)输入命令:date -s 2018-05-28,然后回车(注意:一定要回车,否则只发送不执行),在下面服务器列表中选择要同步的主机,然后点击“Send script”,即可将时间同步为2018-05-28 00:00:00。
使用winscp工具将JDK安装包 jdk-8u144-linux-x64targz 上传到/root/tools/目录中,该目录是事先创建的。
进入/root/tools/目录,将jdk安装包解压到/root/training/目录中,该目录也是事先创建的。
使用winscp工具将Hadoop安装包 hadoop-273targz 上传到master节点的/root/tools/目录中,该目录是事先创建的。
进入/root/tools/目录,将hadoop安装包解压到/root/training/目录中,该目录也是事先创建的。
进入Hadoop配置文件目录:
(1) 配置hadoop-envsh文件:
(2) 配置hdfs-sitexml文件:
(3) 配置core-sitexml文件:
(4) 配置mapred-sitexml文件:
将模板文件mapred-sitexmltemplate拷贝一份重命名为mapred-sitexml然后编辑:
(5) 配置yarn-sitexml文件:
(6) 配置slaves文件:
将master上配置好的Hadoop安装目录分别复制给两个从节点slave1和slave2,并验证是否成功。
第一次启动需要输入yes继续。
启动成功后,使用jps命令查看各个节点上开启的进程:
使用命令行查看HDFS的状态:
使用浏览器查看HDFS的状态:
使用浏览器查看YARN的状态:
(1) 在HDFS上创建输入目录/input:
(2) 将本地数据文件datatxt上传至该目录:
(3) 进入到Hadoop的示例程序目录:
(4) 执行示例程序中的Wordcount程序,以HDFS上的/input/datatxt作为输入数据,输出结果存放到HDFS上的/out/wc目录下:
(5) 查看进度和结果:
可以通过终端打印出来的日志信息知道执行进度:
执行结束后可以在HDFS上的/out/wc目录下查看是否有_SUCCESS标志文件来判断是否执行成功。
如果执行成功,可以在输出目录下看到_SUCCESS标志文件,且可以在part-r-00000文件中查看到wordcount程序的结果:
由于Scala只是一个应用软件,只需要安装在master节点即可。
使用winscp工具将Scala安装包上传到master节点的/root/tools目录下:
进入/root/tools目录,将Scala安装包解压到安装目录/root/training/:
将Scala的家目录加入到环境变量PATH中:
使环境变量生效:
输入scala命令,如下进入scala环境,则证明scala安装成功:
我们先在master节点上配置好参数,再分发给两个从节点slave1和slave2。
使用winscp工具将Spark安装包上传到master节点的/root/tools目录下:
进入/root/tools目录,将Spark安装包解压到安装目录/root/training/下:
注意:由于Spark的命令脚本和Hadoop的命令脚本有冲突(比如都有start-allsh和stop-allsh等),
所以这里需要注释掉Hadoop的环境变量,添加Spark的环境变量:
按Esc:wq保存退出,使用source命令使配置文件立即生效:
进入Spark的配置文件目录下:
(1) 配置spark-envsh文件:
(2) 配置slaves文件:
将master上配置好的Spark安装目录分别复制给两个从节点slave1和slave2,并验证是否成功。
启动后查看每个节点上的进程:
使用浏览器监控Spark的状态:
使用spark-shell命令进入SparkContext(即Scala环境):
启动了spark-shell之后,可以使用4040端口访问其Web控制台页面(注意:如果一台机器上启动了多个spark-shell,即运行了多个SparkContext,那么端口会自动连续递增,如4041,4042,4043等等):
注意:由于我们将Hadoop从环境变量中注释掉了,这时只能手动进入到Hadoop的sbin目录停止Hadoop:
Spark中常用的端口总结:
以上就是关于Hive on Spark全部的内容,包括:Hive on Spark、针对spark运行的基本流程哪个说法是错误的、spark远程debug之调试spark on yarn 程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)