错误:您必须使用 Hive 构建 Spark

Posted

技术标签:

【中文标题】错误:您必须使用 Hive 构建 Spark【英文标题】:Error: You must build Spark with Hive 【发布时间】:2016-07-10 18:12:48 【问题描述】:

我正在运行带有 Hive 0.13.1 和 Hadoop 2.6.0 的 Spark 1.6.2。

我尝试运行这个 pyspark 脚本:

import pyspark
from pyspark.sql import HiveContext

sc = pyspark.SparkContext('local[*]')
hc = HiveContext(sc)
hc.sql("select col from table limit 3")

使用这个命令行:

 ~/spark/bin/spark-submit script.py 

我收到了这个错误信息:

 File "/usr/local/hadoop/spark/python/pyspark/sql/context.py", line >552, in sql
 return DataFrame(self._ssql_ctx.sql(sqlQuery), self)
 File "/usr/local/hadoop/spark/python/pyspark/sql/context.py", line >660, in _ssql_ctx
 "build/sbt assembly", e)
 Exception: ("You must build Spark with Hive. Export 'SPARK_HIVE=true' and run build/sbt assembly", Py4JJavaError(u'An error occurred while >calling None.org.apache.spark.sql.hive.HiveContext.\n', JavaObject >id=o18))

按照他们的要求,我看到一条警告说“不推荐使用导出 SPARK_HIVE”并改用“-Phive -Phive-thriftserver” 所以我这样做了:

 cd ~/spark/
 build/sbt -Pyarn -Phadoop-2.6 -Phive -Phive-thriftserver assembly

但我也有同样的错误:

 [...]
 16/07/17 19:10:01 WARN metadata.Hive: Failed to access metastore. This class should not accessed in runtime.
 org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate      org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
     at org.apache.hadoop.hive.ql.metadata.Hive.getAllDatabases(Hive.java:1236)   
 [...]
 Traceback (most recent call last):
   File "/home/hadoop/spark3/./script.py", line 6, in <module>
     hc.sql("select timestats from logweb limit 3")
   File "/usr/local/hadoop/spark/python/lib/pyspark.zip/pyspark/sql/context.py",      line 552, in sql
   File "/usr/local/hadoop/spark/python/lib/pyspark.zip/pyspark/sql/context.py", line 660, in _ssql_ctx
 Exception: ("You must build Spark with Hive. Export 'SPARK_HIVE=true' and run build/sbt assembly", Py4JJavaError(u'An error occurred while calling None.org.apache.spark.sql.hive.HiveContext.\n', JavaObject id=o19))

我在网上搜索了有关此错误的信息,但如果答案对我有用,则没有...

有人可以帮帮我吗?


我也尝试使用spark version which is suposed to work with Hadoop(Joss 建议),我收到了这个错误:

 Traceback (most recent call last):
 File "/home/hadoop/spark3/./script.py", line 6, in <module>
hc.sql("select timestats from logweb limit 3")
 File "/usr/local/hadoop/spark/python/lib/pyspark.zip/pyspark/sql/context.py", line 552, in sql
 File "/usr/local/hadoop/spark/python/lib/pyspark.zip/pyspark/sql/context.py", line 660, in _ssql_ctx
 Exception: ("You must build Spark with Hive. Export 'SPARK_HIVE=true' and run build/sbt assembly", Py4JJavaError(u'An error occurred while calling None.org.apache.spark.sql.hive.HiveContext.\n', JavaObject id=o19))

【问题讨论】:

【参考方案1】:

我有一个默认附带 HiveContext 的 Apache Spark 版本,如果您有兴趣,可以点击这里下载:

Spark 1.6.2 with HiveContext

关于您遇到的问题,可能与您用于编译 Spark 的 Hadoop 版本有关。检查与您需要的 Hadoop 版本相关的参数。

【讨论】:

您好 Joss,您所说的“检查与您需要的 Hadoop 版本相关的参数”是什么意思。 ? 嗨..To this。示例:build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package。在这种情况下,使用的 Hadoop 版本是 2.4.0。对于sbt,您可以查看this。 另外,我认为您脚本中的sc 可能会在以后给您带来一些麻烦。您需要初始化上下文。参考:link 嗨 Joss,我下载了 Hivecontext 附带的 Spark 版本:wget http://www-eu.apache.org/dist/spark/spark-1.6.2/spark-1.6.2-bin-hadoop2.6.tgzgunzip -c spark-1.6.2-bin-hadoop2.6.tgz | tar -xvf -cd spark-1.6.2-bin-hadoop2.6,但是在这个目录中我看不到 ./build/mvn ... 如何做什么? 该版本不需要构建。直接运行 $SPARK_HOME/bin/spark-submit。记得添加各自的环境变量。

以上是关于错误:您必须使用 Hive 构建 Spark的主要内容,如果未能解决你的问题,请参考以下文章

必须使用 Hive 构建 Spark (spark 1.5.0)

使用 Spark 查询位于远程集群上的 Hive 数据

Hive3.1.2使用CDH自带的Spark2.4报配置错误解决方案

Spark与Hive集成

在 HIVE 中使用 CDH 5.4 和 Spark 1.3.0 和 Parquet 表的 PySpark 中的 Parquet 错误

Spark学习之路 (二十)SparkSQL的元数据[转]