分享

hive on spark(yarn mode)配置遇到的问题

zixia 发表于 2017-10-19 17:46:36 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 6 16835
hive里面目前支持的计算引擎有mr、tez,目前想尝试下spark引擎,由于我们的hadoop是HDP的,默认不支持spark引擎,因此需要自己配置下。
  1、我目前使用的版本如下:(以下均已通过Ambari安装好)
    hadoop版本:Hadoop 2.7.3.2.5.0.0-1245(HDP)
    Hive版本:Hive 1.2.1000.2.5.0.0-1245
    Spark版本:version 1.6.2

  2、配置步骤
    由于hive1.2.1的源码pom里面指定spark.version为1.3.1,因此下载1.3.1的spark源码。
    1)spark1.3源码打包,执行命令mvn -Pyarn,hadoop-provided,hadoop-2.7,parquet-provided -DskipTests clean package ,编译出来的Jar不包含hadoop的任何组件,大概93M,编译过程没有报错
    2)spark1.3版本的Jar包放入hive/lib下;
    3)设置spark引擎,执行hiveSql,结果如下:

set spark.master=local;set hive.execution.engine=spark;以后,执行select count(*) from test;结果正常;
set spark.master=yarn,或者不设置spark.master的时候(默认也是走yarn模式),set hive.execution.engine=spark;以后,执行select count(*) from test报错:FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.spark.SparkTask,具体查看hive.log:
2017-10-19 02:44:25,849 ERROR [main]: status.SparkJobMonitor (SessionState.java:printError(948)) - Status: Failed
只有这一行报错,实在不知道为啥?
local模式可以跑,yarn模式就不行?求高手指点?
注意:我没有重新安装spark1.3,只是打包扔在hive/lib下了。原来有安装的spark1.6,不知道是不是这个原因造成的?
hive on spark用的spark,跟我原来安装的spark1.6有啥关系?


求高手解答,在线等。。。


已有(7)人评论

跳转到指定楼层
zixia 发表于 2017-10-24 15:53:40
结帖,今日已经测试成功。上次没成功,应该是使用1.3.1的spark的driver跑在1.6.2的spark cluster上。
今天测试,hive2.1.0+spark1.6.2 on yarn模式,步骤如下:
1、window上,mvn编译spark1.6.2源码spark-assembly-1.6.2-hadoop2.6.0.jar:
a) mvn clean package -DskipTests -Pyarn,hadoop-provided,hadoop-2.6
b) mvn clean package -DskipTests -Pyarn,hadoop-provided,hadoop-2.6,parquet-provided
注:要使用自己编译的,官网下载的不行;
       必须带hadoop-provided,编译的包里面不能有hadoop组件(org/apache下不能有hadoop);
       若带parquet-provided,编译的包里面没有org/apache/parquet/hadoop,虽然hive on spark可以成功,但不能执行spark-shell。若要支持spark-shell,需要用a编译命令。
2、把spark编译的spark-assembly包放入3个服务器的hive2/lib下,然后重启hive(不重启没用);
3、把spark编译的spark-assembly包放入3个服务器的spark/lib下,删除或备份原来的带-Phive的spark-assembly包(必须替换为自己编译的包,不然报错,具体见下面说明);
4、在ambari的spark的Configs里面,修改Advanced spark-env下的spark-env template,最下面加上一行export SPARK_DIST_CLASSPATH=$(hadoop classpath);
   这样就把这一行加在了spark/conf/spark.env里面;(必须加在这里面,命令行输入不行)
重启spark;
5、执行beeline(或者进入hive2/bin下,执行./beeline),输入2.1.0版本的JDBC连接串,然后执行
set hive.execution.engine=spark;
set spark.master=yarn;
set spark.eventLog.enabled=true;
set spark.eventLog.dir=file:///tmp/spark;
set spark.executor.memory=512m;            
set spark.serializer=org.apache.spark.serializer.KryoSerializer;
执行sql成功。

点评

厉害!  发表于 2017-10-25 10:54
回复

使用道具 举报

einhep 发表于 2017-10-19 19:09:22
1.确保版本兼容,spark1.6似乎跟hadoop2.6是兼容的,2.7.3楼主确定兼容?
2.jar包是否都复制了,包括
scala-library
spark-core
spark-network-common
还有复制后,权限是否发生变化
3.hive还需要做一些设置是否已经设置了。
set spark.master=<Spark Master URL>
set spark.eventLog.enabled=true;
set spark.eventLog.dir=<Spark event log folder (must exist)>
set spark.executor.memory=512m;            
set spark.serializer=org.apache.spark.serializer.KryoSerializer;

更多参考
https://cwiki.apache.org//conflu ... rk:+Getting+Started

回复

使用道具 举报

zixia 发表于 2017-10-20 09:54:14
einhep 发表于 2017-10-19 19:09
1.确保版本兼容,spark1.6似乎跟hadoop2.6是兼容的,2.7.3楼主确定兼容?
2.jar包是否都复制了,包括
sca ...

您好,非常感谢回复,首先
1、我自己编译的spark是1.3.1的,但是集群上已经安装了spark1.6,我只是把1.3.1的spark包放入hive/lib,没有做别的操作,不确定是否还需要安装一下spark1.3?
    我启动spark1.6的spark-submit ,指定master=yarn,是可以跑成功的,也就是spark1.6跟我的hadoop2.7应该是可以兼容的。
2、您说的这几个jar包,是哪里的?spark/lib下也没有这几个jar呀,这几个Jar包是需要放在hive/lib下吗?
3、set spark.master=<Spark Master URL>
set spark.eventLog.enabled=true;
set spark.eventLog.dir=<Spark event log folder (must exist)>
set spark.executor.memory=512m;            
set spark.serializer=org.apache.spark.serializer.KryoSerializer;这几个配置除了第一个set spark.master=yarn,其余配置都做了。
现在不确定的问题有2点:

1、spark1.3.1是否还需要安装一下?
2、我打包编译的spark1.3.1,跟我集群上安装的spark1.6有什么关系吗?是因为冲突,所以不能再yarn上跑hive on spark吗?
3、spark1.3.1,跟我现在的hadoop2.7是不兼容导致不能再yarn上跑hive on spark吗?
回复

使用道具 举报

einhep 发表于 2017-10-21 22:13:25
zixia 发表于 2017-10-20 09:54
您好,非常感谢回复,首先
1、我自己编译的spark是1.3.1的,但是集群上已经安装了spark1.6,我只是把1.3 ...

最好安装下,否则很难排除问题
回复

使用道具 举报

zixia 发表于 2017-10-23 15:56:52
einhep 发表于 2017-10-21 22:13
最好安装下,否则很难排除问题

您好,我现在的问题是,指定spark.master=local是可以成功的,但是spark.master=yarn就不能成功,总是报错。而且日志里面显示我还是跑在spark1.6的集群上的。
2017-10-23 02:47:54,637 WARN  [main]: client.SparkClientImpl (SparkClientImpl.java:<init>(101)) - Error while waiting for client to connect.
java.util.concurrent.ExecutionException: java.util.concurrent.TimeoutException: Timed out waiting for client connection.
        at io.netty.util.concurrent.AbstractFuture.get(AbstractFuture.java:37)
        at org.apache.hive.spark.client.SparkClientImpl.<init>(SparkClientImpl.java:99)
        at org.apache.hive.spark.client.SparkClientFactory.createClient(SparkClientFactory.java:80)
        at org.apache.hadoop.hive.ql.exec.spark.RemoteHiveSparkClient.<init>(RemoteHiveSparkClient.java:90)
        at org.apache.hadoop.hive.ql.exec.spark.HiveSparkClientFactory.createHiveSparkClient(HiveSparkClientFactory.java:65)
        at org.apache.hadoop.hive.ql.exec.spark.session.SparkSessionImpl.open(SparkSessionImpl.java:55)
        at org.apache.hadoop.hive.ql.exec.spark.session.SparkSessionManagerImpl.getSession(SparkSessionManagerImpl.java:116)
        at org.apache.hadoop.hive.ql.exec.spark.SparkUtilities.getSparkSession(SparkUtilities.java:112)
        at org.apache.hadoop.hive.ql.optimizer.spark.SetSparkReducerParallelism.process(SetSparkReducerParallelism.java:115)
        at org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher.dispatch(DefaultRuleDispatcher.java:90)
        at org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.dispatchAndReturn(DefaultGraphWalker.java:95)
        at org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.dispatch(DefaultGraphWalker.java:79)
        at org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.walk(DefaultGraphWalker.java:133)
        at org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.startWalking(DefaultGraphWalker.java:110)
        at org.apache.hadoop.hive.ql.parse.spark.SparkCompiler.optimizeOperatorPlan(SparkCompiler.java:128)
        at org.apache.hadoop.hive.ql.parse.TaskCompiler.compile(TaskCompiler.java:102)
        at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:10492)
        at org.apache.hadoop.hive.ql.parse.CalcitePlanner.analyzeInternal(CalcitePlanner.java:216)
        at org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:230)
        at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:464)
        at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:320)
        at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1219)
        at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1260)
        at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1156)
        at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1146)
        at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:216)
        at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:168)
        at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:379)
        at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:739)
        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:684)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:624)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:233)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:148)
Caused by: java.util.concurrent.TimeoutException: Timed out waiting for client connection.
        at org.apache.hive.spark.client.rpc.RpcServer$2.run(RpcServer.java:141)
        at io.netty.util.concurrent.PromiseTask$RunnableAdapter.call(PromiseTask.java:38)
        at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:123)
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
        at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
        at java.lang.Thread.run(Thread.java:745)


回复

使用道具 举报

einhep 发表于 2017-10-23 17:26:44
zixia 发表于 2017-10-23 15:56
您好,我现在的问题是,指定spark.master=local是可以成功的,但是spark.master=yarn就不能成功,总是报 ...

那就是环境没有清除干净造成的。这个只有自己知道,仔细检测核实下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条