如何将基于pip和conda的PySpark集成HIVE访问(而不是来自Spark分发或包)

5
我通过使用conda和pip pyspark(就像我在这里演示的那样)从头开始构建并编写自己的PySpark环境,而不是使用可下载的Spark分发版中的PySpark。正如您可以在上面URL的第一个代码片段中看到的那样,我通过我的SparkSession启动脚本中的k/v conf-pairs等方式来实现这一点。(顺便说一句,这种方法使我能够在各种REPL、IDE和JUPYTER中进行工作)。
然而,关于配置支持访问HIVE数据库和元数据存储的Spark,手册中说道:
“通过将hive-site.xml、core-site.xml(用于安全配置)和hdfs-site.xml(用于HDFS配置)文件放置在conf/中来配置Hive。”
他们所说的conf/是指Spark发行包中的conf/目录。但是,通过pipconda安装的pyspark自然没有那个目录,那么在这种情况下,如何将HIVE数据库和元数据存储支持插入到Spark中呢?
我猜这可以通过特别前缀的SparkConf K/V对来实现:spark.hadoop.*(请参见这里);如果是这样,我仍然需要确定需要哪些HADOOP / HIVE / CORE指令。我想我会试错的。 :)
注意:.enableHiveSupport()已经被包含在内。
我将调整spark.hadoop.* K/V对,但如果有人知道如何立即完成此操作,请告诉我。
谢谢。 :) 编辑:在解决方案提供后,我更新了上述第一个URL中的内容。现在它整合了下面讨论的SPARK_CONF_DIRHADOOP_CONF_DIR环境变量方法。
1个回答

3
在这种情况下,我建议使用官方配置指南(重点是我的):

如果您计划使用Spark从HDFS读写数据,则应将两个Hadoop配置文件包含在Spark的类路径中:

  • hdfs-site.xml提供了HDFS客户端的默认行为。
  • core-site.xml设置了默认的文件系统名称。

(...)

要使这些文件对Spark可见,请在$SPARK_HOME/conf/spark-env.sh中设置HADOOP_CONF_DIR到包含配置文件的位置。

此外

要指定不同于默认“SPARK_HOME/conf”的配置目录,可以设置SPARK_CONF_DIR。Spark将使用此目录中的配置文件(spark-defaults.conf、spark-env.sh、log4j.properties等)。

因此,您可以使用与Spark安装可访问的任意目录来放置所需的配置文件,并且可以直接在脚本中使用os.environ设置SPARK_CONF_DIR和/或HADOOP_CONF_DIR。最后,大多数情况下甚至不需要单独的Hadoop配置文件,因为可以使用spark.hadoop.*前缀直接在Spark文档中设置Hadoop特定属性。

谢谢。我完全忘记了SPARK_CONF_DIR;而且我同意您更喜欢使用以spark.hadoop.*为前缀的键,而不是单独的Hadoop XML配置文件。我现在正在处理后者。感谢您在这个标记答案中确认了这一点。 - NYCeyes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接