【问题标题】:Spark can access Hive table from pyspark but not from spark-submitSpark 可以从 pyspark 访问 Hive 表,但不能从 spark-submit
【发布时间】:2017-03-17 22:40:29
【问题描述】:

所以,当从 pyspark 运行时,我会输入(不指定任何上下文):

df_openings_latest = sqlContext.sql('select * from experian_int_openings_latest_orc')

.. 它工作正常。

但是,当我从spark-submit 运行我的脚本时,就像

spark-submit script.py我把以下内容放入

from pyspark.sql import SQLContext
from pyspark import SparkConf, SparkContext
conf = SparkConf().setAppName('inc_dd_openings')
sc = SparkContext(conf=conf)
sqlContext = SQLContext(sc)

df_openings_latest = sqlContext.sql('select * from experian_int_openings_latest_orc')

但它给了我一个错误

pyspark.sql.utils.AnalysisException: u'Table not found: experian_int_openings_latest_orc;'

所以它看不到我的桌子。

我做错了什么?请帮忙

附: Spark 版本是 1.6,在 Amazon EMR 上运行

【问题讨论】:

    标签: python hadoop apache-spark pyspark


    【解决方案1】:

    Spark 2.x

    如果在没有enabling Hive support 的情况下创建了SparkSession,Spark 2.x 中可能会出现同样的问题。

    Spark 1.x

    这很简单。当您使用 PySpark shell 并且 Spark 已在 Hive 支持的情况下构建时,默认的 SQLContext 实现(可作为 sqlContext 使用的实现)为 HiveContext

    在您的独立应用程序中,您使用不提供 Hive 功能的普通 SQLContext

    假设其余配置正确,只需替换:

    from pyspark.sql import SQLContext
    
    sqlContext = SQLContext(sc)
    

    from pyspark.sql import HiveContext
    
    sqlContext = HiveContext(sc)
    

    【讨论】:

    • 非常感谢! :)
    【解决方案2】:

    在 Spark 2.x (Amazon EMR 5+) 中,如果您未像这样启用 Hive 支持,您将遇到spark-submit 的此问题:

    from pyspark.sql import SparkSession
    spark = SparkSession.builder.master("yarn").appName("my app").enableHiveSupport().getOrCreate()
    

    【讨论】:

    • 谢谢,Mike 我错过了添加enableHiveSupport 并且未能运行所需的命令。通过添加属性,我可以获得所需的详细信息。
    • 这对加载 EMRFS jar 没有帮助,对吧? (例如,Caused by: java.lang.ClassNotFoundException: Class com.amazon.ws.emr.hadoop.fs.EmrFileSystem not found
    • 适用于发布标签:emr-5.23.0 - Hadoop 发行版:Amazon 2.8.5 - 应用程序:Hive 2.3.4、Pig 0.17.0、Hue 4.3.0、Spark 2.4.0、Zeppelin 0.8.1,Presto 0.215,Livy 0.5.0,谢谢@Mike
    【解决方案3】:

    您的问题可能与您的Hive 配置有关。如果您的配置使用local metastore,则在您启动Hive 服务器的目录中创建metastore_db 目录。

    由于spark-submit 是从不同的目录启动的,它会在该目录中创建一个新的metastore_db,其中不包含有关您以前的表的信息。

    快速解决方法是从与spark-submit 相同的目录启动Hive 服务器并重新创建表。

    SO Post 中引用了一个更永久的修复程序

    您需要更改$HIVE_HOME/conf/hive-site.xml中的配置

    property name = javax.jdo.option.ConnectionURL
    
    property value = jdbc:derby:;databaseName=/home/youruser/hive_metadata/metastore_db;create=true
    

    您现在应该能够从任何位置运行 hive 并且仍然可以找到您的表

    【讨论】:

      猜你喜欢
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 2018-12-01
      • 2014-12-09
      • 2018-05-15
      相关资源
      最近更新 更多