Hive on Spark

Hive on Spark,第1张

版本: 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 程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10084806.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存