1.环境概述
尚硅谷数仓5.0提供的spark with hadoop与对应适配无hadoop的spark,hive是经过修改过的添加了spark3相应jar包的spark,出现了fail to create spark client for spark session 的错误,但是hive不走spark的其他查询可以正常使用。
2.解决
当启动hive时执行spark相关任务时,yarn的application上什么也没有显示,直到结束,此时可以对hive日志进行监控,hive日志的位置可以去hive/conf的log4j文件中查看
这里的hive日志存储路径是/tmp/用户名称,进入hivelog的路径下执行对日志进行监控。
tail -f hive.log
再打开一个窗口重新启动hive然后运行spark相关语句,比如插入insert与count(*)之后在另一个窗口查看结果。
9-ad46-86c583699c86 main] client.SparkClientImpl: client token: N/A
2022-07-07T00:42:38,112 INFO [RemoteDriver-stderr-redir-527071be-93b4-4219-ad46-86c583699c86 main] client.SparkClientImpl: diagnostics: [星期四 七月 07 00:42:37 +0800 2022] Application is Activated, waiting for resources to be assigned for AM. Details : AM Partition = <DEFAULT_PARTITION> ; Partition Resource = <memory:23500, vCores:24> ; Queue's Absolute capacity = 100.0 % ; Queue's Absolute used capacity = 0.0 % ; Queue's Absolute max capacity = 100.0 % ; Queue's capacity (absolute resource) = <memory:23500, vCores:24> ; Queue's used capacity (absolute resource) = <memory:0, vCores:0> ; Queue's max capacity (absolute resource) = <memory:23500, vCores:24> ;
2022-07-07T00:42:38,112 INFO [RemoteDriver-stderr-redir-527071be-93b4-4219-ad46-86c583699c86 main] client.SparkClientImpl: ApplicationMaster host: N/A
2022-07-07T00:42:38,113 INFO [RemoteDriver-stderr-redir-527071be-93b4-4219-ad46-86c583699c86 main] client.SparkClientImpl: ApplicationMaster RPC port: -1
2022-07-07T00:42:38,113 INFO [RemoteDriver-stderr-redir-527071be-93b4-4219-ad46-86c583699c86 main] client.SparkClientImpl: queue: default
2022-07-07T00:42:38,113 INFO [RemoteDriver-stderr-redir-527071be-93b4-4219-ad46-86c583699c86 main] client.SparkClientImpl: start time: 1657125757635
2022-07-07T00:42:38,113 INFO [RemoteDriver-stderr-redir-527071be-93b4-4219-ad46-86c583699c86 main] client.SparkClientImpl: final status: UNDEFINED
2022-07-07T00:42:38,113 INFO [RemoteDriver-stderr-redir-527071be-93b4-4219-ad46-86c583699c86 main] client.SparkClientImpl: tracking URL: http://hadoop103:8088/proxy/application_1657125588906_0001/
2022-07-07T00:42:38,113 INFO [RemoteDriver-stderr-redir-527071be-93b4-4219-ad46-86c583699c86 main] client.SparkClientImpl: user: wenlan
2022-07-07T00:42:38,211 INFO [RemoteDriver-stderr-redir-527071be-93b4-4219-ad46-86c583699c86 main] client.SparkClientImpl: 2022-07-07 00:42:38,211 INFO util.ShutdownHookManager: Shutdown hook called
2022-07-07T00:42:38,215 INFO [RemoteDriver-stderr-redir-527071be-93b4-4219-ad46-86c583699c86 main] client.SparkClientImpl: 2022-07-07 00:42:38,214 INFO util.ShutdownHookManager: Deleting directory /tmp/spark-ef148fe5-2af3-47dc-83b2-31bd1f70a223
2022-07-07T00:42:38,220 INFO [RemoteDriver-stderr-redir-527071be-93b4-4219-ad46-86c583699c86 main] client.SparkClientImpl: 2022-07-07 00:42:38,220 INFO util.ShutdownHookManager: Deleting directory /tmp/spark-20ba387e-1676-4fd1-89e8-9fb9d4f5e057
我的程序卡在了以上画面,然后修改client.timeout的参数也不解决问题,说明不是网络之类的问题,日志提供了tarcking URL,进入到对应的页面中,我这边是http://hadoop103:8088/proxy/application_1657125588906_0001/
等待一段时间让他fail之后进行查看
我这里的错误是缺少相应的依赖,org/apache/hadoop/mapred/JobConf,查询资料,发现可以直接从maven那边下载对应的包上传上去,
下载地址在
https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-core
然后下载3.1.2版本的
我下载的是和我的hadoop对应版本的3.1.2的,然后将下载好的jar包上传到hdfs上的sparkjar依赖位置,也就是spark.yarn.jars配置的对应目录,重启一下hive应该就可以正常运行hive on spark了。
这样配置后我成功的运行了insert的语句,当我放假回来重新使用groupby的时候又继续开始报错,考虑了以下解决方式。
其他
如果您遇到了下面的问题说您没有这个路径
只需要把您的spark复制一份后,改成对应的名字即可,出现这个问题应该是其他地方有修改过一些内容。
如果您查看产生的日志遇到了说您没有什么log4j的路径依赖只需要在spark对应路径下的spark-env.sh文件进行修改,在其中添加上
export SPARK_DIST_CLASSPATH=$(/opt/module/hadoop-3.1.3/bin/hadoop classpath)
就可以解决相应的问题了!
总结
如果不是偶发性的hive on spark无法使用就先不用去调内存设置和网络设置,首先检查相应配置文件是否合理配置,之后通过日志对问题进行监测,如果缺少依赖项目,只需要在依赖路径上传对应依赖即可解决问题。