你必须用Hive构建Spark。导出'SPARK_HIVE = true'

时间:2016-06-30 08:33:22

标签: apache-spark ibm-cloud

我正在尝试在Bluemix上运行的Analytics for Apache Spark上运行笔记本,但是我遇到了以下错误:

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=o38))

错误是间歇性的 - 它并不总是发生。有问题的代码行是:

df = sqlContext.read.format('jdbc').options(
            url=url, 
            driver='com.ibm.db2.jcc.DB2Driver', 
            dbtable='SAMPLE.ASSETDATA'
        ).load()

stackoverflow上有一些类似的问题,但他们并不是在询问bluemix上的spark服务。

4 个答案:

答案 0 :(得分:8)

该语句初始化了一个HiveContext。然后,HiveContext初始化本地Derby数据库以保存其元数据。默认情况下,Derby数据库在当前目录中创建。报告的问题在这些情况下发生(其中包括):

  1. Derby数据库已经存在,并且有剩余的锁文件,因为上次使用它的笔记本内核没有正常关闭。
  2. Derby数据库已经存在,并且当前正由另一个也初始化HiveContext的笔记本内核使用。
  3. 在IBM更改默认设置以避免此问题之前,可能的解决方法是:

    • 对于案例1,删除剩余的锁定文件。从Python笔记本中,这可以通过执行:

      来完成
      !rm -f ./metastore_db/*.lck
      
    • 对于案例2,在创建Hive上下文之前更改当前工作目录。在Python笔记本中,这将更改为新创建的目录:

      import os
      import tempfile
      os.chdir(tempfile.mkdtemp())
      

      但要注意,每次运行该笔记本时,它都会使文件系统与新目录和Derby数据库混乱。

    我碰巧知道IBM正在修复。请仅在遇到问题时使用这些解决方法,而不是主动。

答案 1 :(得分:5)

在使用SQLContext之前创建一个新的sqlContext对象:

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

然后再次运行代码。

如果您有多个笔记本使用开箱即用sqlContext,则会发生此错误。

答案 2 :(得分:0)

很容易,你可以解决这个问题如下: 转到右上角,点击您的用户名,您将获得一个列表: 1.选择口译员 2.滚动页面直到你得到火花 3.在右边你有一个列表包含:spark ul,edit,... 选择重启

返回您的笔记本并再次运行,它必须正常工作

答案 3 :(得分:-1)

不幸的是,告诉“创建新的SQLContext”的答案是完全错误的。

用新的SQLContext实例替换sqlContext是一个坏主意,因为您失去了对蜂巢的支持:默认情况下,sqlContext是使用HiveContext初始化的。

第二,消息“您必须使用Hive构建Spark。导出'SPARK_HIVE = true'...”是PySpark(context.py)中编写错误的代码,该代码未从Java的Spark驱动程序中获取正确的异常并且不显示它。

要找出正在发生的情况,请进行构建,以便将Java驱动程序的日志写入某个文件。在我的情况下,客户使用带有DSE的Spark,并且在conf目录中有一些名为logback-spark * .xml的.xml文件。打开名为logback-spark.xml的文件(不带后缀),然后在其中添加文件附加程序。然后,重现该错误并读取Java驱动程序编写的异常+堆栈跟踪。

对于其他Spark版本/内部版本,请首先了解如何获取Java驱动程序日志,并进行配置以使其记录到文件中。

在我的spark驱动程序的日志中,我清楚地表明Spark的登录无法写入hive metastore的文件系统。根据您的情况,您可能会收到其他消息。但是Java中的问题是主要问题-您应该首先看一下它。