【问题标题】:Py4JJavaError java.sql.SQLException: Method not supported." Error while trying to fetch hive tables via pyspark using connection stringPy4JJavaError java.sql.SQLException: Method not supported." 尝试使用连接字符串通过 pyspark 获取配置单元表时出错
【发布时间】:2020-08-14 16:38:19
【问题描述】:

我正在尝试通过 pyspark 使用连接详细信息从服务器中提取配置单元表。

代码如下:

from pyspark.sql.session import SparkSession
from pyspark import SparkContext 
from pyspark.sql import SQLContext 

database = "some_db_name"
table = "some_table_name"
user = "user"
password  = "pwd"

#read table data into a spark dataframe
jdbcDF = spark.read.format("jdbc") \
    .option("url", f"jdbc:hive2://dbslp_server:10159/{database};") \
    .option("dbtable", table) \
    .option("user", user) \
    .option("password", password) \
    .option("driver", "org.apache.hive.jdbc.HiveDriver") \
    .load()


我基本上是在尝试连接到其中包含配置单元表的服务器,同时使用配置单元驱动程序向该服务器验证我的凭据。但是我收到以下错误:


Py4JJavaError Traceback(最近调用 最后)在 10 .option(“用户”,用户)\ 11 .option("密码", 密码) \ ---> 12 .option("驱动程序", "org.apache.hive.jdbc.HiveDriver") \ 13 .load()

/anaconda3/lib/python3.6/site-packages/pyspark/sql/readwriter.py 在 加载(自我、路径、格式、模式、**选项) 170返回self._df(self._jreader.load(self._spark._sc._jvm.PythonUtils.toSeq(路径))) 171 其他: --> 172 返回 self._df(self._jreader.load()) 173 第174章

/anaconda3/lib/python3.6/site-packages/py4j/java_gateway.py 在 call(self, *args) 1255 answer = self.gateway_client.send_command(command) 1256 return_value = get_return_value( -> 1257 answer, self.gateway_client, self.target_id, self.name) 1258 1259 for temp_args in temp_args:

/anaconda3/lib/python3.6/site-packages/pyspark/sql/utils.py 在 装饰(*a, **kw) 61 def deco(*a, **kw): 62 尝试: ---> 63 返回 f(*a, **kw) 64 除了 py4j.protocol.Py4JJavaError 作为 e: 65 秒 = e.java_exception.toString()

/anaconda3/lib/python3.6/site-packages/py4j/protocol.py 在 get_return_value(answer, gateway_client, target_id, name) 第326章 327 “调用 {0}{1}{2} 时出错。\n”。 --> 328 格式(target_id, ".", name), value) 329 其他: 330引发Py4JError(

Py4JJavaError:调用 o623.load 时出错。 : java.sql.SQLException:不支持的方法 org.apache.hive.jdbc.HiveStatement.setQueryTimeout(HiveStatement.java:739) 在 org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:60) 在 org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation$.getSchema(JDBCRelation.scala:210) 在 org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:35) 在 org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:318) 在 org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:223) 在 org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:211) 在 org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:167) 在 sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) 在 py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) 在 py4j.Gateway.invoke(Gateway.java:282) 在 py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) 在 py4j.commands.CallCommand.execute(CallCommand.java:79) 在 py4j.GatewayConnection.run(GatewayConnection.java:238) 在 java.lang.Thread.run(Thread.java:748)

我知道这是一个驱动相关的错误,试图改变其他蜂巢相关的驱动,但都是徒劳的,因为同样的错误仍然存​​在。我必须下载任何驱动程序。明确地或以任何其他方式链接它?

任何人都可以对这个问题有所了解并告诉我如何解决这个问题吗? 或者有没有其他方法可以实现?

【问题讨论】:

    标签: python pyspark hive database-connection data-extraction


    【解决方案1】:
    1. 下载 Hive JDB jar https://repo1.maven.org/maven2/org/apache/hive/hive-jdbc/3.1.2/hive-jdbc-3.1.2.jar
    2. 将 jar 添加到 Spark 的 /jar 目录中。
    3. 重启服务器
    4. 运行 PySpark 作业

    确保您的 Spark 文件夹中有以下具有正确版本的 jar

    • ibthrift-0.9.0.jar
    • httpclient-4.2.5.jar
    • httpcore-4.2.5.jar
    • commons-logging-1.1.3.jar
    • hive-common.jar
    • slf4j-api-1.7.5.jar
    • hive-metastore.jar
    • hive-service.jar
    • hadoop-common.jar
    • hive-jdbc.jar
    • guava-11.0.2.jar

    【讨论】:

    • 感谢您的快速响应。但是我收到更多错误消息:java.lang.NoClassDefFoundError: org/apache/hive/service/rpc/thrift/TCLIService$Iface at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:107) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$createConnectionFactory$1.apply(JdbcUtils.scala:63) 您能否让我知道如何解决此问题或为什么会出现此错误?提前致谢
    • 请用全新的错误堆栈跟踪更新问题。这条线没有给出错误的完整图片@Mrinalinimadhusudan
    • 这里你去:在多个部分附加错误消息,因为 cmets Py4JJavaError: An error occurred while calling o166.load. : java.lang.NoSuchFieldError: HIVE_CLI_SERVICE_PROTOCOL_V10 at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:205) at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:107) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$createConnectionFactory$1.apply(JdbcUtils.scala:63) 中存在字符限制@
    • at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$createConnectionFactory$1.apply(JdbcUtils.scala:54) at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:56) at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation$.getSchema(JDBCRelation.scala:210) at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:35) at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:318)
    • at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:223) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:211) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:167) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2011-08-01
    • 2019-11-06
    相关资源
    最近更新 更多