如何在 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 版本是否设置了 hivehive-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的主要内容,如果未能解决你的问题,请参考以下文章

CDH5.12.0 如何升级到Spark2.0 版本

如何在CDH中启用Spark Thrift

Spark使用OSS Select加速数据查询

如何在CDH5上运行Spark应用

如何在CDH5上运行Spark应用

CDH中如何升级Spark