ハイブテーブルにアクセスするCloud 4.2 EnterpriseのBigInsightsでpysparkスクリプトを実行しようとしています。スパークハイブの報告pyspark.sql.utils.AnalysisException:糸のクラスタで実行したときに 'テーブルが見つかりません:XXX'
まず、私はハイブのテーブルを作成します。
[[email protected] ~]$ hive
hive> CREATE TABLE pokes (foo INT, bar STRING);
OK
Time taken: 2.147 seconds
hive> LOAD DATA LOCAL INPATH '/usr/iop/4.2.0.0/hive/doc/examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;
Loading data to table default.pokes
Table default.pokes stats: [numFiles=1, numRows=0, totalSize=5812, rawDataSize=0]
OK
Time taken: 0.49 seconds
hive>
それから私は、単純なpysparkスクリプトを作成します。
[[email protected] ~]$ cat test_pokes.py
from pyspark import SparkContext
sc = SparkContext()
from pyspark.sql import HiveContext
hc = HiveContext(sc)
pokesRdd = hc.sql('select * from pokes')
print(pokesRdd.collect())
私が実行しようとする:
[[email protected] ~]$ spark-submit \
--master yarn-cluster \
--deploy-mode cluster \
--jars /usr/iop/4.2.0.0/hive/lib/datanucleus-api-jdo-3.2.6.jar, \
/usr/iop/4.2.0.0/hive/lib/datanucleus-core-3.2.10.jar, \
/usr/iop/4.2.0.0/hive/lib/datanucleus-rdbms-3.2.9.jar \
test_pokes.py
しかし、私が遭遇エラー:
Traceback (most recent call last):
File "test_pokes.py", line 8, in <module>
pokesRdd = hc.sql('select * from pokes')
File "/disk6/local/usercache/biadmin/appcache/application_1477084339086_0481/container_e09_1477084339086_0481_01_000001/pyspark.zip/pyspark/sql/context.py", line 580, in sql
File "/disk6/local/usercache/biadmin/appcache/application_1477084339086_0481/container_e09_1477084339086_0481_01_000001/py4j-0.9-src.zip/py4j/java_gateway.py", line 813, in __call__
File "/disk6/local/usercache/biadmin/appcache/application_1477084339086_0481/container_e09_1477084339086_0481_01_000001/pyspark.zip/pyspark/sql/utils.py", line 51, in deco
pyspark.sql.utils.AnalysisException: u'Table not found: pokes; line 1 pos 14'
End of LogType:stdout
私は火花提出スタンドアロンで実行した場合、私はテーブルがOK存在を確認できます。この質問は、この他の質問に似てhive spark yarn-cluster job fails with: "ClassNotFoundException: org.datanucleus.api.jdo.JDOPersistenceManagerFactory"
:
[[email protected] ~]$ spark-submit test_pokes.py
…
…
16/12/21 13:09:13 INFO Executor: Finished task 0.0 in stage 0.0 (TID 0). 18962 bytes result sent to driver
16/12/21 13:09:13 INFO TaskSetManager: Finished task 0.0 in stage 0.0 (TID 0) in 168 ms on localhost (1/1)
16/12/21 13:09:13 INFO TaskSchedulerImpl: Removed TaskSet 0.0, whose tasks have all completed, from pool
16/12/21 13:09:13 INFO DAGScheduler: ResultStage 0 (collect at /home/biadmin/test_pokes.py:9) finished in 0.179 s
16/12/21 13:09:13 INFO DAGScheduler: Job 0 finished: collect at /home/biadmin/test_pokes.py:9, took 0.236558 s
[Row(foo=238, bar=u'val_238'), Row(foo=86, bar=u'val_86'), Row(foo=311, bar=u'val_311')
…
…
は、この問題に関連し、私の前の質問を参照してください。 Spark can access Hive table from pyspark but not from spark-submit。しかし、その質問とは異なり、私はHiveContextを使用しています。
更新:スパーク提出ジョブがhive-site.xml
を見つけることができないので、それはハイブメタストアに接続できないので、これは最終的な解決のためにここにhttps://stackoverflow.com/a/41272260/1033422
スタンドアロンモードで動作する理由はそれほど説明できません –
これは私をさらに進歩させます。 'MetaException(メッセージ:com.ibm.biginsights.bigsql.sync.BIEventListenerという名前のリスナーのインスタンス化に失敗しました。理由:java.lang.ClassNotFoundException:com.ibm.biginsights.bigsql.sync.BIEventListener)' –
申し訳ありませんが、私は説明する必要があります。スタンドアローンを実行すると、ドライバはマシン自体で実行されます。したがって、ローカルクラスパスから 'hive-site.xml'を取得します。 'cluster-mode'を実行すると、このxmlファイルはクラスタ上のコンテナに転送されないため、手動で指定する必要があります.Sparkはそれをクラスパスに入れます。 –