2017-03-22 59 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集羣開始或者你需要禁用的變量。

相關問題