hive查询为什么在yarn上看不到

发布网友 发布时间:2022-04-23 05:37

我来回答

2个回答

懂视网 时间:2022-04-30 07:51

1、编程时无法加载hive包,需要在编译好的spark(用spark-shell启动,用spark-sql能够直接访问hive表)的lib目录下,考出assembly包,为其创建一个maven的repository,然后添加到dependency里面。最笨的创建repository的办法就是直接创建相应路径,然后把spark-core里面的.pom修改一下target里面的名称,直接copy。

2、用yarn-cluster提交时,遇到:spark sql java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive这样的问题,这是程序没有将$SPARK_HOME/lib里面的datanucleus包导入,在--jars里面加入即可:$(echo $SPARK_HOME/lib/*.jar| tr ‘ ‘ ‘ ‘ | grep datanucleus | tr ‘ ‘ ‘,‘)

3、载入jar包后,发现遇到: spark metastore.RetryingHMSHandler: NoSuchObjectException错误,这是spark没有找到hive-site.xml文件,在--files里面加入即可。

spark-sql用hive表格,在yarn-cluster模式下运行遇到的问题及解决办法

标签:

热心网友 时间:2022-04-30 04:59

原因应该是用户提交一个sql到HiveServer后立马关闭了session,而此时SparkClientImpl又刚好在阻塞等待来自RemoteDriver的连接。
1.Hive要提交一个Spark任务时,会先通过spark-submit提交一个spark程序到yarn集群运行。而运行的MainClass就是RemoteDriver
2.RemoteDriver在yarn的container启动后,会主动去连接Hiveserver2开放的rpc端口(这个端口在spark-submit时会带上,因此RemoteDriver知道要连接的host和ip)
3.连接建立后,SparkClientImpl这边会根据clientId从RpcServer中找到对应的channel,之后将要运行的job通过kvro工具序列化成字节流发送给RemoteDriver
4.RemoteDriver这边在连接成功后,就开始准备接收SparkClientImpl发送过来的消息并执行。
5.最后,如果在SparkClientImpl关闭时也会相应的关闭远程的RemoteDriver,具体做法是发送一个关闭的消息给RemoteDriver,告诉它可以停掉了。(SparkClientImpl一般是在整个客户端的session关闭时关闭的)
RpcServer在整个Hiveserver2进程中只会有一个,因此需要通过clientId来标识对应的RemoteDriver客户端。这个clientId也会在spark-submit时带上。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com