Apache spark Spark配置单元报告pyspark.sql.utils.AnalysisException:u';未找到表:XXX';在纱线簇上运行时

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

我正在尝试在云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/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。谢谢-我接受这个答案,并将其作为另一个问题提出。