首页 文章

使用spark-submit YARN群集模式时缺少hive-site

提问于
浏览
5

使用HDP 2.5.3,我一直在尝试调试一些YARN容器类路径问题 .

由于HDP包括Spark 1.6和2.0.0,因此存在一些冲突的版本

我支持的用户能够成功地在YARN client 模式下使用带有Hive查询的Spark2,但是不能从 cluster 模式获得有关未找到的表的错误,或类似的东西,因为未 Build Metastore连接 .

我猜_1153251_之后设置 --driver-class-path /etc/spark2/conf:/etc/hive/conf 或传递 --files /etc/spark2/conf/hive-site.xml 会有效,但为什么 hive-site.xml 文件夹中已经没有 hive-site.xml 加载?

根据Hortonworks docshive-site 应该放在 $SPARK_HOME/conf 中,它是......

我看到 hdfs-site.xmlcore-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-submit

[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-site放置为 HIVE_CONF_DIR ,但我的问题是我们如何让Spark2拿起 hive-site.xml 而无需在运行时手动将其作为参数传递?

EDIT 当然,因为我在使用HDP,所以我正在使用Ambari . 以前的集群管理员已在所有计算机上安装了Spark2客户端,因此可能是潜在Spark驱动程序的所有YARN NodeManager都应具有相同的配置文件

4 回答

  • 0

    您可以使用spark属性 - spark.yarn.dist.files 并指定hive-site.xml的路径 .

  • 4

    我理解它的方式,在 localyarn-client 模式......

    • Launcher检查它是否需要HDFS,YARN,Hive,HBase的Kerberos令牌
      > hive-site.xml 在HAS / Hadoop客户端库中在CLASSPATH中搜索(包括在 driver.extraClassPath 中,因为驱动程序在Launcher中运行,此时已合并的CLASSPATH已构建)

    • 驱动程序检查用于 internal purposes 的哪种Metastore:由易失性Derby实例或常规Hive Metastore支持的独立Metastore
      > 那是 $SPARK_CONF_DIR/hive-site.xml

    • 使用Hive接口时,Metastore连接用于读取/写入驱动程序中的Hive元数据
      > hive-site.xml 在HAS / Hadoop客户端库中在CLASSPATH中搜索(如果有的话,使用Kerberos令牌)

    所以你可以有一个 hive-site.xml 声明Spark应该使用嵌入式内存中的Derby实例作为沙箱(内存中暗示"stop leaving all these temp files behind you"),而另一个 hive-site.xml 则给出实际的Hive Metastore URI . 一切都很好 .


    现在,在 yarn-cluster 模式中,所有这些机制在一个令人讨厌的,无证件的混乱中爆炸了 .

    Launcher需要自己的CLASSPATH设置来创建Kerberos令牌,否则它会无声地失败 . 最好转到源代码,找出你应该使用的未记录的Env变量 .
    它可能还需要在某些属性中覆盖,因为硬编码的默认值突然不再是默认值(静默) .

    驱动程序无法点击原始 $SPARK_CONF_DIR ,它必须依赖Launcher提供的上传内容 . 这包括 $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 . 连接在Executors中完成,这是另一层讨厌 . 但我不以为然 .

    底线: start your diagnostic again .

    A. 你真的,真的确定神秘的"Metastore connection errors"是由缺少属性引起的,特别是Metastore URI吗?

    B. 那么,你的用户是否明确使用了 HiveContext ???

    C. YARN提供给驱动程序JVM的CLASSPATH究竟是什么,以及驱动程序在打开Metastore连接时向Hadoop库提供的CLASSPATH究竟是什么?

    D. 如果YARN构建的CLASSPATH由于某种原因搞砸了,那么最小修正是什么 - 优先规则的改变?加成?都?

  • 3

    cluster mode 配置中从机器的 conf 目录中读取,该目录运行 driver 容器,而不是 spark-submit 的容器 .

  • 1

    发现了这个问题

    在创建配置单元上下文之前创建 org.apache.spark.sql.SQLContext ,在创建配置单元上下文时未正确选择 hive-site.xml .

    Solution :在创建另一个SQL上下文之前创建配置单元上下文 .

相关问题