【问题标题】:Hive queries failing with "Unable to fetch table test_table. Invalid method name: 'get_table_req'" with pyspark 3.0.0 & Hive 1.1.0使用 pyspark 3.0.0 和 Hive 1.1.0 的 Hive 查询因“无法获取表 test_table。无效的方法名称:'get_table_req'”而失败
【发布时间】:2020-12-08 01:57:05
【问题描述】:

在相当新的环境中挖掘 POC 以获取 spark 并检查 spark 功能,但在 pyspark 终端中运行 sql 查询时遇到问题,而 Hive 正在工作,因为我们可以查询元数据。

知道这里发生了什么以及如何解决这个问题吗?

$ pyspark --driver-class-path /etc/spark2/conf:/etc/hive/conf
>>> from pyspark.sql import SparkSession
>>> from pyspark.sql import Row
>>> spark = SparkSession \
...     .builder \
...     .appName("sample_query_test") \
... .enableHiveSupport() \
...     .getOrCreate()
>>> spark.sql("show tables in user_tables").show(5)
20/08/18 19:57:01 WARN conf.HiveConf: HiveConf of name hive.enforce.sorting does not exist
20/08/18 19:57:01 WARN conf.HiveConf: HiveConf of name hive.enforce.bucketing does not exist
20/08/18 19:57:01 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
+-----------+--------------------+-----------+
|   database|           tableName|isTemporary|
+-----------+--------------------+-----------+
|user_tables|              a_2019|      false|
|user_tables|abcdefgjeufjdsahh...|      false|
|user_tables|testtesttesttestt...|      false|
|user_tables|newnewnewnewnenwn...|      false|
|user_tables|blahblahblablahbl...|      false|
+-----------+--------------------+-----------+
only showing top 5 rows

>>> spark.sql("select count(*) from user_tables.test_table where date_partition='2020-08-17'").show(5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/conda/lib/python3.7/site-packages/pyspark/sql/session.py", line 646, in sql
    return DataFrame(self._jsparkSession.sql(sqlQuery), self._wrapped)
  File "/opt/conda/lib/python3.7/site-packages/pyspark/python/lib/py4j-0.10.9-src.zip/py4j/java_gateway.py", line 1305, in __call__
  File "/opt/conda/lib/python3.7/site-packages/pyspark/sql/utils.py", line 137, in deco
    raise_from(converted)
  File "<string>", line 3, in raise_from
**pyspark.sql.utils.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to fetch table test_spark_cedatatransfer. Invalid method name: 'get_table_req';**

集群信息:

$ hive --version
Hive 1.1.0-cdh5.13.0
Subversion file:///data/jenkins/workspace/generic-package-ubuntu64-16-04/CDH5.13.0-Packaging-Hive-2017-10-04_10-50-44/hive-1.1.0+cdh5.13.0+1269-1.cdh5.13.0.p0.34~xenial -r Unknown
Compiled by jenkins on Wed Oct 4 11:46:53 PDT 2017

$ pyspark --version
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 3.0.0
      /_/

Using Scala version 2.12.10, OpenJDK 64-Bit Server VM, 1.8.0_252
Branch HEAD
Compiled by user ubuntu on 2020-06-06T11:32:25Z
Revision 3fdfce3120f307147244e5eaf46d61419a723d50
Url https://gitbox.apache.org/repos/asf/spark.git

$ hadoop version
Hadoop 2.6.0-cdh5.13.0
Subversion http://github.com/cloudera/hadoop -r 42e8860b182e55321bd5f5605264da4adc8882be
Compiled by jenkins on 2017-10-04T18:50Z
Compiled with protoc 2.5.0
From source with checksum 5e84c185f8a22158e2b0e4b8f85311
This command was run using /usr/lib/hadoop/hadoop-common-2.6.0-cdh5.13.0.jar

很明显,我添加了 hive conf 以确保使用相同的元存储,并且在进行插入覆盖的简单查询时失败!

【问题讨论】:

  • 我认为 CDH 还不支持 Spark 3。另外,Spark 3 可能使用了更高版本的 Hive 本身
  • @OneCricketeer 我已经分享了环境细节,你能建议正确的 pyspark 版本或解决方法吗?如果必要,将尝试与集群管理员沟通以进行必要的更改
  • 从 CDH 6 开始,包括 Spark 2,according to documentation
  • 我们有 spark 1.6.0 附带的 cdh 5.13.0 > 那么哪个 pyspark 应该是理想的? (来自版本:2.1.2、2.1.3、2.2.0.post0、2.2.1、2.2.2、2.2.3、2.3.0、2.3.1、2.3.2、2.3.3、2.3.4、 2.4.0、2.4.1、2.4.2、2.4.3、2.4.4、2.4.5、2.4.6、3.0.0)
  • 无... 您需要单独下载 Spark 1.6,因为您不能pip install 低于 2.1.2 的版本

标签: apache-spark hadoop pyspark hive cloudera


【解决方案1】:

我遇到了同样的问题,尝试将 Spark 3.0.1 与 HDP2.6 一起使用。

问题已通过从 jars 文件夹中删除所有 hive*.jar 文件并从 HDP 分发附带的 Spark2 中复制 hive*jar 来解决。

【讨论】:

  • 有什么版本的spark与哪个版本的pyspark和hive兼容的兼容性图表吗?如果能充分利用环境,那就太好了
【解决方案2】:

在 spark-defaults.conf 中设置以下属性对我有用:

spark.sql.hive.metastore.jars=maven
spark.sql.hive.metastore.version=1.2.1

spark.sql.catalogImplementation=hive
spark.sql.warehouse.dir=/user/hive/warehouse

当然,最后一行可以自定义到适当的位置。此路径适用于 Cloudera (CDH)。

这些设置将指示 Spark 下载并缓存 Hive 1.2.1 的 ~/.ivy2/jars 中的 jar 文件。您也可以选择在自己的路径中提供自己的 jar,但 maven 会产生最舒适的选择。

详情请见Spark configuartion properties

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2011-01-14
    • 1970-01-01
    相关资源
    最近更新 更多