2017-03-22 58 views
3

随着Spark 2.1的全新安装,执行pyspark命令时出现错误。Spark 2.1 - 实例化HiveSessionState时出错

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作为Metastore。我没有得到Spark 2.0.2的这个错误。

有人可以请指出我在正确的方向吗?

回答

5

我有同样的问题。一些答案sudo chmod -R 777 /tmp/hive/,或者将hadoop的火花降级到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 ...") 

这现在完全适合我。

+0

感谢/ tmp/hive目录权限上的指针。这似乎已经成功了! – Kring

+0

此错误可能是由您提到的所有3种可能性(/ tmp/hive权限,Hadoop conf或旧的Spark 1.6代码)引起的。感谢提及所有这些。 – Bastien

+0

其他任何不是chmod 777的解决方案?这不是一个好主意给这种类型的烫发(安全) – AlessioG

3

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

还在寻找答案。

10

我是在windows环境及以下技巧为我工作得到同样的错误。

shell.py火花会话与.enableHiveSupport()

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

定义卸下蜂箱的支持,并重新定义火花会话如下:

spark = SparkSession.builder\ 
     .getOrCreate() 

,你可以找到你的火花安装文件夹shell.py。 对我来说这在"C:\spark-2.1.1-bin-hadoop2.7\python\pyspark"

希望这有助于

+0

好的。谢谢。看。 +1 –

+0

在windows上工作...需要在本地运行很少,然后将其推送到主服务器上的spark服务器。 +1 – krinker

1

对我来说,问题解决了通过禁用HADOOP_CONF_DIR环境变量。它指向hadoop配置目录,同时启动pyspark shell,导致的变量产生以启动未启动的hadoop簇。

所以,如果你有HADOOP_CONF_DIR变量启用,那么你必须开始使用火花

之前Hadoop集群开始或者你需要禁用的变量。

相关问题