作者:李太有才_905 | 来源:互联网 | 2023-01-26 20:42
使用HDP 2.5.3,我一直在尝试调试一些YARN容器类路径问题.
由于HDP包括Spark 1.6和2.0.0,因此存在一些冲突的版本
我支持的用户能够成功地在YARN client
模式下使用带有Hive查询的Spark2 ,但是不能从cluster
模式中获取有关未找到的表的错误,或类似的东西,因为未建立Metastore连接.
我猜测设置--driver-class-path /etc/spark2/conf:/etc/hive/conf
或者传递--files /etc/spark2/conf/hive-site.xml
后spark-submit
都可以工作,但为什么没有hive-site.xml
从conf
文件夹中加载?
根据Hortonworks文档的说法,hive-site
应该放入$SPARK_HOME/conf
,并且......
我看到hdfs-site.xml
和core-site.xml
,以及其他文件,HADOOP_CONF_DIR
例如,这是来自YARN UI容器信息.
2232355 4 drwx------ 2 yarn hadoop 4096 Aug 2 21:59 ./__spark_conf__
2232379 4 -r-x------ 1 yarn hadoop 2358 Aug 2 21:59 ./__spark_conf__/topology_script.py
2232381 8 -r-x------ 1 yarn hadoop 4676 Aug 2 21:59 ./__spark_conf__/yarn-env.sh
2232392 4 -r-x------ 1 yarn hadoop 569 Aug 2 21:59 ./__spark_conf__/topology_mappings.data
2232398 4 -r-x------ 1 yarn hadoop 945 Aug 2 21:59 ./__spark_conf__/taskcontroller.cfg
2232356 4 -r-x------ 1 yarn hadoop 620 Aug 2 21:59 ./__spark_conf__/log4j.properties
2232382 12 -r-x------ 1 yarn hadoop 8960 Aug 2 21:59 ./__spark_conf__/hdfs-site.xml
2232371 4 -r-x------ 1 yarn hadoop 2090 Aug 2 21:59 ./__spark_conf__/hadoop-metrics2.properties
2232387 4 -r-x------ 1 yarn hadoop 662 Aug 2 21:59 ./__spark_conf__/mapred-env.sh
2232390 4 -r-x------ 1 yarn hadoop 1308 Aug 2 21:59 ./__spark_conf__/hadoop-policy.xml
2232399 4 -r-x------ 1 yarn hadoop 1480 Aug 2 21:59 ./__spark_conf__/__spark_conf__.properties
2232389 4 -r-x------ 1 yarn hadoop 1602 Aug 2 21:59 ./__spark_conf__/health_check
2232385 4 -r-x------ 1 yarn hadoop 913 Aug 2 21:59 ./__spark_conf__/rack_topology.data
2232377 4 -r-x------ 1 yarn hadoop 1484 Aug 2 21:59 ./__spark_conf__/ranger-hdfs-audit.xml
2232383 4 -r-x------ 1 yarn hadoop 1020 Aug 2 21:59 ./__spark_conf__/commons-logging.properties
2232357 8 -r-x------ 1 yarn hadoop 5721 Aug 2 21:59 ./__spark_conf__/hadoop-env.sh
2232391 4 -r-x------ 1 yarn hadoop 281 Aug 2 21:59 ./__spark_conf__/slaves
2232373 8 -r-x------ 1 yarn hadoop 6407 Aug 2 21:59 ./__spark_conf__/core-site.xml
2232393 4 -r-x------ 1 yarn hadoop 812 Aug 2 21:59 ./__spark_conf__/rack-topology.sh
2232394 4 -r-x------ 1 yarn hadoop 1044 Aug 2 21:59 ./__spark_conf__/ranger-hdfs-security.xml
2232395 8 -r-x------ 1 yarn hadoop 4956 Aug 2 21:59 ./__spark_conf__/metrics.properties
2232386 8 -r-x------ 1 yarn hadoop 4221 Aug 2 21:59 ./__spark_conf__/task-log4j.properties
2232380 4 -r-x------ 1 yarn hadoop 64 Aug 2 21:59 ./__spark_conf__/ranger-security.xml
2232372 20 -r-x------ 1 yarn hadoop 19975 Aug 2 21:59 ./__spark_conf__/yarn-site.xml
2232397 4 -r-x------ 1 yarn hadoop 1006 Aug 2 21:59 ./__spark_conf__/ranger-policymgr-ssl.xml
2232374 4 -r-x------ 1 yarn hadoop 29 Aug 2 21:59 ./__spark_conf__/yarn.exclude
2232384 4 -r-x------ 1 yarn hadoop 1606 Aug 2 21:59 ./__spark_conf__/container-executor.cfg
2232396 4 -r-x------ 1 yarn hadoop 1000 Aug 2 21:59 ./__spark_conf__/ssl-server.xml
2232375 4 -r-x------ 1 yarn hadoop 1 Aug 2 21:59 ./__spark_conf__/dfs.exclude
2232359 8 -r-x------ 1 yarn hadoop 7660 Aug 2 21:59 ./__spark_conf__/mapred-site.xml
2232378 16 -r-x------ 1 yarn hadoop 14474 Aug 2 21:59 ./__spark_conf__/capacity-scheduler.xml
2232376 4 -r-x------ 1 yarn hadoop 884 Aug 2 21:59 ./__spark_conf__/ssl-client.xml
正如你可能看到的,hive-site
不存在,即使我肯定有conf/hive-site.xml
火花提交
[spark@asthad006 conf]$ pwd && ls -l
/usr/hdp/2.5.3.0-37/spark2/conf
total 32
-rw-r--r-- 1 spark spark 742 Mar 6 15:20 hive-site.xml
-rw-r--r-- 1 spark spark 620 Mar 6 15:20 log4j.properties
-rw-r--r-- 1 spark spark 4956 Mar 6 15:20 metrics.properties
-rw-r--r-- 1 spark spark 824 Aug 2 22:24 spark-defaults.conf
-rw-r--r-- 1 spark spark 1820 Aug 2 22:24 spark-env.sh
-rwxr-xr-x 1 spark spark 244 Mar 6 15:20 spark-thrift-fairscheduler.xml
-rw-r--r-- 1 hive hadoop 918 Aug 2 22:24 spark-thrift-sparkconf.conf
所以,我不认为我应该把蜂房网站HADOOP_CONF_DIR
为HIVE_CONF_DIR
是分开的,但我的问题是,我们怎么Spark2拿起hive-site.xml
无需手动将它传递在运行时的参数?
编辑自然,因为我在使用HDP我正在使用Ambari.以前的集群管理员已在所有计算机上安装了Spark2客户端,因此可能是潜在Spark驱动程序的所有YARN NodeManager都应具有相同的配置文件
1> Samson Schar..:
我了解它的方式,在local
或yarn-client
模式下...
启动器检查Hive / Hadoop客户端库是否在CLASSPATH中搜索了HDFS,YARN,Hive,HBase
> 是否需要Kerberos令牌(包括因为驱动程序在启动器中运行并且此时已构建合并的CLASSPATH)hive-site.xml
driver.extraClassPath
驱动程序将检查哪一种metastore的用于内部目的:独立metastore背靠挥发性Derby实例或常规蜂巢metastore
>说的$SPARK_CONF_DIR/hive-site.xml
使用Hive界面时,将使用Metastore连接来读取/写入驱动程序中的Hive元数据
> hive-site.xml
Hive / Hadoop客户端库在CLASSPATH中搜索(并且使用Kerberos令牌(如果有))
因此,您可以hive-site.xml
说一说Spark应该使用嵌入式的内存中Derby实例用作沙箱(内存中表示“停止将所有这些临时文件留在您的身后”),而另一个则hive-site.xml
给出实际的Hive Metastore URI。一切都很好。
现在,在yarn-cluster
模式下,所有这些机制几乎都在令人讨厌的,未记录的混乱中爆炸。
Launcher需要自己的CLASSPATH设置来创建Kerberos令牌,否则它会静默失败。最好转到源代码,找出您应该使用哪个未公开的Env变量。
它可能还需要在某些属性中进行覆盖,因为硬编码默认值突然不再是默认值(静默)。
驱动程序无法点击原始文件$SPARK_CONF_DIR
,它必须依靠启动程序可用于上传的内容。包括副本$SPARK_CONF_DIR/hive-site.xml
吗?看起来并非如此。
因此,您可能正在使用Derby东西作为存根。
驱动程序与YARN在容器CLASSPATH上施加的顺序无关。
此外,driver.extraClassPath
默认情况下,添加项不优先。为此,您必须强制执行spark.yarn.user.classpath.first=true
(将其转换为我现在不记得其确切名称的标准Hadoop属性,尤其是因为有多个名称相似的道具可能已弃用和/或在Hadoop 2.x中不起作用)
觉得不好吗?尝试以
yarn-cluster
模式连接到Kerberized HBase 。连接是在执行程序中完成的,这是另一层麻烦。但是我偏离了。
底线:再次开始诊断。
答:您是否真的确定神秘的“ Metastore连接错误”是由缺少属性(尤其是Metastore URI)引起的?
B.顺便说一句,您的用户是否明确使用HiveContext
????
C.在打开Metastore连接时,YARN呈现给驱动程序JVM的确切是什么CLASSPATH,驱动程序呈现给Hadoop库的CLASSPATH的确切是什么?
D.如果YARN构建的CLASSPATH由于某种原因而混乱,那么最小的解决办法是什么-优先规则的更改?加成?都?