Apache spark Spark配置单元报告pyspark.sql.utils.AnalysisException:u';未找到表:XXX';在纱线簇上运行时
我正在尝试在云4.2企业版的BigInsights上运行pyspark脚本,该脚本访问配置单元表 首先,我创建配置单元表:Apache spark Spark配置单元报告pyspark.sql.utils.AnalysisException:u';未找到表:XXX';在纱线簇上运行时,apache-spark,hive,ibm-cloud,yarn,biginsights,Apache Spark,Hive,Ibm Cloud,Yarn,Biginsights,我正在尝试在云4.2企业版的BigInsights上运行pyspark脚本,该脚本访问配置单元表 首先,我创建配置单元表: [biadmin@bi4c-xxxxx-mastermanager ~]$ 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/exampl
[biadmin@bi4c-xxxxx-mastermanager ~]$ 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脚本:
[biadmin@bi4c-xxxxxx-mastermanager ~]$ 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() )
我尝试执行以下操作:
[biadmin@bi4c-xxxxxx-mastermanager ~]$ 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
请参阅我先前提出的与此问题相关的问题:
此问题类似于另一个问题:。但是,与这个问题不同,我使用的是HiveContext
更新:有关最终解决方案,请参见此处这是因为spark submit作业无法找到
配置单元站点.xml,因此无法连接到配置单元元存储。请将--files/usr/iop/4.2.0.0/hive/conf/hive site.xml
添加到spark submit命令中。这是因为spark submit作业无法找到hive site.xml
,因此无法连接到hive元存储。请将--files/usr/iop/4.2.0.0/hive/conf/hive site.xml
添加到spark submit命令中。看起来您受到了此错误的影响:
我在HDP-2.5.0.0上的Spark 1.6.2和2.0.0也有类似的问题:
我的目标是在以下条件下从配置单元SQL查询创建数据框架:
- python API
- 群集部署模式(在其中一个executor节点上运行的驱动程序)
- 使用Thread管理executor JVM(而不是独立的Spark主实例)
初步试验得出以下结果:
spark提交--部署模式客户端--主本地…
=>
工作
spark提交--部署模式客户端--主纱线…
=>工作
spark提交--部署模式集群--主纱线…
=>不工作
在案例#3中,在其中一个executor节点上运行的驱动程序可以找到数据库。错误是:
pyspark.sql.utils.AnalysisException: 'Table or view not found: `database_name`.`table_name`; line 1 pos 14'
上面列出的福克·德里斯普隆的答案对我很有用。
使用下面列出的命令,在executor节点上运行的驱动程序能够访问数据库中的配置单元表,该数据库不是默认的
$ /usr/hdp/current/spark2-client/bin/spark-submit \
--deploy-mode cluster --master yarn \
--files /usr/hdp/current/spark2-client/conf/hive-site.xml \
/path/to/python/code.py
我用Spark 1.6.2和Spark 2.0.0测试的python代码是:
(将SPARK_版本更改为1以使用SPARK 1.6.2进行测试。确保相应地更新SPARK submit命令中的路径)
您似乎受到此错误的影响:
我在HDP-2.5.0.0上的Spark 1.6.2和2.0.0也有类似的问题:
我的目标是在以下条件下从配置单元SQL查询创建数据框架:
- python API
- 群集部署模式(在其中一个executor节点上运行的驱动程序)
- 使用Thread管理executor JVM(而不是独立的Spark主实例)
初步试验得出以下结果:
spark提交--部署模式客户端--主本地…
=>
工作
spark提交--部署模式客户端--主纱线…
=>工作
spark提交--部署模式集群--主纱线…
=>不工作
在案例#3中,在其中一个executor节点上运行的驱动程序可以找到数据库。错误是:
pyspark.sql.utils.AnalysisException: 'Table or view not found: `database_name`.`table_name`; line 1 pos 14'
上面列出的福克·德里斯普隆的答案对我很有用。
使用下面列出的命令,在executor节点上运行的驱动程序能够访问数据库中的配置单元表,该数据库不是默认的
$ /usr/hdp/current/spark2-client/bin/spark-submit \
--deploy-mode cluster --master yarn \
--files /usr/hdp/current/spark2-client/conf/hive-site.xml \
/path/to/python/code.py
我用Spark 1.6.2和Spark 2.0.0测试的python代码是:
(将SPARK_版本更改为1以使用SPARK 1.6.2进行测试。确保相应地更新SPARK submit命令中的路径)
这并不能真正解释为什么它在独立模式下工作,这让我更进一步。我现在收到错误:MetaException(消息:未能实例化名为com.ibm.biginsights.bigsql.sync.BIEventListener的侦听器,原因:java.lang.ClassNotFoundException:com.ibm.biginsights.bigsql.sync.BIEventListener)
对不起,我应该解释一下。如果独立运行,则驱动程序在机器本身上运行。因此,它将从本地类路径中获取hive site.xml
。如果您在集群模式下运行
,此xml文件不会传输到集群上的容器,因此您必须手动指定它,Spark将为您将其放入类路径。我不认识错误,但这很可能是因为我对BigInsights的经验很少。我想说,您在应用程序的类路径中缺少一个jar文件,但我不知道需要什么jar。谢谢-我接受这个答案,并提出另一个问题。这并不能真正解释为什么它在独立模式下工作。这让我更进一步。我现在收到错误:MetaException(消息:未能实例化名为com.ibm.biginsights.bigsql.sync.BIEventListener的侦听器,原因:java.lang.ClassNotFoundException:com.ibm.biginsights.bigsql.sync.BIEventListener)
对不起,我应该解释一下。如果独立运行,则驱动程序在机器本身上运行。因此,它将从本地类路径中获取hive site.xml
。如果您在集群模式下运行
,此xml文件不会传输到集群上的容器,因此您必须手动指定它,Spark将为您将其放入类路径。我不认识错误,但这很可能是因为我对BigInsights的经验很少。我想说,您在应用程序的类路径中缺少一个jar文件,但我不知道需要什么jar。谢谢-我接受这个答案,并将其作为另一个问题提出。