9

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

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

我支持的用户能够成功地在 YARN 模式下将 Spark2 与 Hive 查询一起使用client,但不是从cluster模式下,他们会收到有关未找到表的错误,或者类似的错误,因为未建立 Metastore 连接。

我猜想设置--driver-class-path /etc/spark2/conf:/etc/hive/conf或传递--files /etc/spark2/conf/hive-site.xml之后spark-submit会起作用,但为什么还没有hive-site.xmlconf文件夹中加载?

根据Hortonworks docs,说hive-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.xmlspark-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

所以,我不认为我应该将 hive-site分开放置,但我的HADOOP_CONF_DIR问题HIVE_CONF_DIR是我们如何让 Spark2 拾取hive-site.xml而不需要在运行时手动将其作为参数传递?

编辑自然,因为我使用的是 HDP,所以我使用的是 Ambari。之前的集群管理员已经在所有机器上安装了 Spark2 客户端,因此所有可能成为 Spark 驱动程序的 YARN 节点管理器都应该具有相同的配置文件

4

4 回答 4

5

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

  1. Launcher 检查它是否需要 HDFS、YARN、Hive、HBase 的 Kerberos 令牌
    > hive-site.xml由 Hive/Hadoop 客户端库在 CLASSPATH 中搜索(包括driver.extraClassPath因为驱动程序在 Launcher 内运行并且此时已构建合并的 CLASSPATH)
  2. 驱动程序检查哪种类型的元存储用于内部目的:由 volatile Derby 实例支持的独立元存储,或常规 Hive 元存储
    >$SPARK_CONF_DIR/hive-site.xml
  3. 使用 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。连接是在 Executors 中完成的,这是另一层讨厌的事情。但我离题了。

底线:再次开始您的诊断

A.您真的确定神秘的“Metastore 连接错误”是由于缺少属性,特别是 Metastore URI 造成的吗?

B.顺便说一句,您的用户是否明确使用HiveContext???

C. YARN 呈现给 Driver JVM 的 CLASSPATH 究竟是什么,以及 Driver 在打开 Metastore 连接时呈现给 Hadoop 库的 CLASSPATH 究竟是什么?

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

于 2017-09-06T16:40:41.350 回答
5

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

于 2017-09-05T14:30:43.593 回答
1

在配置中是从运行容器的机器cluster mode的目录中读取的,而不是用于.confdriverspark-submit

于 2017-09-03T12:42:16.300 回答
0

发现这个问题

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

解决方案:在创建另一个 SQL 上下文之前创建配置单元上下文。

于 2018-05-02T17:21:42.540 回答