如何在 CDH 5.4.4 上从 Spark 查询 Hive
Posted
技术标签:
【中文标题】如何在 CDH 5.4.4 上从 Spark 查询 Hive【英文标题】:how to query Hive from Spark on CDH 5.4.4 【发布时间】:2015-07-10 23:21:46 【问题描述】:我正在运行 CDH 5.4.4(它捆绑了 Spark 1.3.0)并希望将 Hive 表读入 Spark 数据帧。
查看文档,建议我们可以执行以下操作:
from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)
results = sqlContext.sql("SHOW TABLES").collect()
...前提是 Spark 是使用 -Phive
和 -Phive-thriftserver
设置的标志构建的。
我不确定 Cloudera 的构建是否设置了这些标志。
当我运行 sn-p 时,它返回以下错误:
15/07/10 16:54:10 WARN HiveMetaStore: Retrying creating default database after error: Error creating transactional connection factory
javax.jdo.JDOFatalInternalException: Error creating transactional connection factory
我有两个问题:
-
Cloudera 的 Spark 版本是否设置了
hive
和 hive-thriftserver
标志?
我需要做什么才能从 Spark 查询 Hive?
更新
这几乎可以工作:
我创建了一个从$SPARK_HOME/conf/
到hive-site.xml
的符号链接,即
ln -s /etc/hive/conf.cloudera.hive/hive-site.xml $SPARK_HOME/conf/hive-site.xml
然后我重新启动了 Spark 服务并能够访问 Hive。不幸的是,符号链接在重新启动后无法幸免。
【问题讨论】:
不确定这是否对您有帮助,但您的代码在 Amazon EMR 上对我来说是开箱即用的......所以一种选择是使用 EMR?也可以检查results
肯定没有被创建——对我来说,当我运行命令时,我仍然收到一些“错误”消息,但仍然创建了正确的输出。
谢谢@maxymoo。听到它在 AWS 上运行令人鼓舞。在这种情况下,我有大量数据,因此将其移至 AWS 既昂贵又耗时。此外,在我自己的硬件上进行了投资后,收取 AWS 账单将是一个自己的目标。感谢您的想法/建议。
别担心,很高兴你越来越近了。您是什么意思“无法重新启动”?您是否尝试将该行放入您的.bash_profile
?
【参考方案1】:
将 hive-site.xml 从 hive conf 复制到 spark conf.dist 中,如下所示,
sudo cp /etc/impala/conf.dist/hive-site.xml /etc/spark/conf.dist/
现在尝试从 pyspark 读取配置单元数据
【讨论】:
以上是关于如何在 CDH 5.4.4 上从 Spark 查询 Hive的主要内容,如果未能解决你的问题,请参考以下文章