【问题标题】:Spark 2.1 - Error While instantiating HiveSessionStateSpark 2.1 - 实例化 HiveSessionState 时出错
【发布时间】:2017-03-22 04:11:37
【问题描述】:

全新安装 Spark 2.1 时,执行 pyspark 命令时出现错误。

Traceback (most recent call last):
File "/usr/local/spark/python/pyspark/shell.py", line 43, in <module>
spark = SparkSession.builder\
File "/usr/local/spark/python/pyspark/sql/session.py", line 179, in getOrCreate
session._jsparkSession.sessionState().conf().setConfString(key, value)
File "/usr/local/spark/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py", line 1133, in __call__
File "/usr/local/spark/python/pyspark/sql/utils.py", line 79, in deco
raise IllegalArgumentException(s.split(': ', 1)[1], stackTrace)
pyspark.sql.utils.IllegalArgumentException: u"Error while instantiating 'org.apache.spark.sql.hive.HiveSessionState':"

我在同一台机器上安装了 Hadoop 和 Hive。 Hive 配置为使用 MySQL 作为元存储。 Spark 2.0.2 没有出现这个错误。

有人可以指点我正确的方向吗?

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    我在 Windows 环境中遇到了同样的错误,下面的技巧对我有用。

    shell.py 中,火花会话是用.enableHiveSupport() 定义的

     spark = SparkSession.builder\
                .enableHiveSupport()\
                .getOrCreate()
    

    移除 hive 支持并重新定义 spark 会话,如下所示:

    spark = SparkSession.builder\
            .getOrCreate()
    

    您可以在 spark 安装文件夹中找到 shell.py。 对我来说是"C:\spark-2.1.1-bin-hadoop2.7\python\pyspark"

    希望对你有帮助

    【讨论】:

    • 在 Windows 上为我工作......在我将它推送到主服务器上的 spark 服务器之前需要在本地运行一些。 +1
    【解决方案2】:

    我遇到了同样的问题。 sudo chmod -R 777 /tmp/hive/ 的一些答案,或者使用 hadoop 将 spark 降级到 2.6 对我不起作用。 我意识到导致这个问题的原因是我使用 sqlContext 而不是 sparkSession 进行 SQL 查询。

    sparkSession =SparkSession.builder.master("local[*]").appName("appName").config("spark.sql.warehouse.dir", "./spark-warehouse").getOrCreate()
    sqlCtx.registerDataFrameAsTable(..)
    df = sparkSession.sql("SELECT ...")
    

    这对我现在非常有效。

    【讨论】:

    • 感谢 /tmp/hive 目录权限的指针。这似乎成功了!
    • 此错误可能由您提到的所有 3 种可能性(/tmp/hive 权限、Hadoop conf 或旧 Spark 1.6 代码)引起。感谢您提及所有这些。
    • 任何其他不是 chmod 777 的解决方案?将这种类型的烫发给 dir 绝不是一个好主意(安全方面)
    • @AlessioG 我的回答不推荐这个解决方案,因为它对我不起作用,而且我不确定它是一般问题的根本原因。
    【解决方案3】:

    Spark 2.1.0 - 当我使用 yarn 客户端选项运行它时 - 我没有看到这个问题,但是 yarn 集群模式会给出“实例化 'org.apache.spark.sql.hive.HiveSessionState' 时出错:”。

    仍在寻找答案。

    【讨论】:

      【解决方案4】:

      通过禁用 HADOOP_CONF_DIR 环境变量解决了我的问题。它指向 hadoop 配置目录,在启动 pyspark shell 时,该变量导致 spark 启动未启动的 hadoop 集群。

      因此,如果您启用了 HADOOP_CONF_DIR 变量,那么您必须在使用 spark shell 之前启动 hadoop 集群

      或者您需要禁用该变量。

      【讨论】:

        【解决方案5】:

        您缺少 spark-hive 罐子。

        例如,如果你在 Scala 2.11 上运行,使用 Spark 2.1,你可以使用这个 jar。

        https://mvnrepository.com/artifact/org.apache.spark/spark-hive_2.11/2.1.0

        【讨论】:

          【解决方案6】:

          我在 Java 10 随附的新 (2018) Mac 上看到此错误。修复方法是将 JAVA_HOME 设置为 Java 8:

          export JAVA_HOME=`usr/libexec/java_home -v 1.8`

          【讨论】:

            【解决方案7】:

            我也在集群模式下苦苦挣扎。从 sparkconf 目录添加 hive-site.xml,如果你有 hdp 集群,那么它应该在 /usr/hdp/current/spark2-client/conf。它对我有用。

            【讨论】:

              【解决方案8】:

              当我的 HDFS 未启动时,我在尝试运行 pyspark 和 spark-shell 时遇到此错误。

              【讨论】:

                【解决方案9】:

                我已经从 shell.py 文件中删除了 ".enableHiveSupport()\" 并且它的工作完美

                /*****之前********/ 火花 = SparkSession.builder\ .enableHiveSupport()\ .getOrCreate()

                /**********之后********/

                spark = SparkSession.builder\ .getOrCreate()

                /******************************/

                【讨论】:

                  【解决方案10】:

                  项目位置和文件权限会出现问题。尽管我的 pom 文件发生更改,但我观察到此错误发生。然后我将项目目录更改为我拥有完全权限的用户目录,这解决了我的问题。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2019-07-26
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-01-02
                    • 2011-03-21
                    相关资源
                    最近更新 更多