【问题标题】:You must build Spark with Hive. Export 'SPARK_HIVE=true'您必须使用 Hive 构建 Spark。导出“SPARK_HIVE=true”
【发布时间】:2016-06-30 08:33:22
【问题描述】:

我正在尝试在运行于 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 服务。

【问题讨论】:

    标签: apache-spark ibm-cloud


    【解决方案1】:

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

    1. Derby 数据库已经存在,还有剩余的锁定文件,因为上次使用它的笔记本内核没有正确关闭。
    2. Derby 数据库已经存在,当前正被另一个同样初始化 HiveContext 的笔记本内核使用。

    在 IBM 更改默认设置以避免此问题之前,可能的解决方法是:

    • 对于情况 1,删除剩余的锁定文件。在 Python 笔记本中,这是通过执行:

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

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

      但请注意,每次运行该笔记本时,它都会在文件系统中添加一个新目录和 Derby 数据库。

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

    【讨论】:

      【解决方案2】:

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

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

      然后再次运行代码。

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

      【讨论】:

        【解决方案3】:

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

        回到你的笔记本并再次运行,它必须工作

        【讨论】:

          【解决方案4】:

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

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

          其次,消息“您必须使用 Hive 构建 Spark。Export '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 元存储的文件系统。在您的情况下,您可能会收到不同的消息。但是 Java 中的问题是主要的——你应该先看看它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-17
            • 2023-03-30
            • 1970-01-01
            • 2013-07-09
            • 2022-06-10
            • 1970-01-01
            相关资源
            最近更新 更多