spark从oracle导入数据-java.lang.classnotfoundexception:oracle.jdbc.driver.oracledriver

eqqqjvef  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(847)

在尝试使用aws emr上的spark从oracle数据库读取数据时,我收到以下错误消息:
java.lang.classnotfoundexception:oracle.jdbc.driver.oracledriver。
有人能告诉我是否有人面临这个问题以及他们是如何解决的吗?

pyspark --driver-class-path /home/hadoop/ojdbc7.jar --jars   /home/hadoop/ojdbc7.jar

from pyspark import SparkContext, HiveContext, SparkConf

from pyspark.sql import SQLContext

sqlContext = SQLContext(sc)

df = sqlContext.read.format("jdbc").options(url="jdbc:oracle:thin:user/pass@//10.200.100.142:1521/BMD", driver = "oracle.jdbc.driver.OracleDriver", 
dbtable="S_0COORDER_TEXT_D").load()
hrirmatl

hrirmatl1#

在您的\u spark\u home\u path/conf/spark defaults.conf中添加以下代码,“/opt/modules/extraclass/”是我放置额外jar的目录:

spark.driver.extraClassPath = /opt/modules/extraClass/jodbc7.jar
spark.executor.extraClassPath = /opt/modules/extraClass/jodbc7.jar

或者您可以简单地将jodbc7.jar添加到您的\u spark\u home\u路径/jar中。

disho6za

disho6za2#

我在aws emr集群(emr-5.31.0)上遇到了完全相同的问题。
设置 spark.driver.extraClassPath 以及 spark.executor.extraClassPathSparkSession.builder.config() ,或 spark-defaults.conf ,或与 spark-submit --jars 命令的位置 jodbc6.jar 不起作用。
我把maven坐标传给 spark.jars.packages 然后我还必须 spark.driver.extraClassPath 以及 spark.executor.extraClassPath$HOME/.ivy2/jars/* .

import os
from pyspark.sql import SparkSession

spark_packages_list = [
    'io.delta:delta-core_2.11:0.6.1',
    'com.oracle.database.jdbc:ojdbc6:11.2.0.4',
]
spark_packages = ",".join(spark_packages_list)

home = os.getenv("HOME")

spark = (
    SparkSession
    .builder
    .config("spark.jars.packages", spark_packages)
    .config('spark.driver.extraClassPath', f"{home}/.ivy2/jars/*")
    .config('spark.executor.extraClassPath', f"{home}/.ivy2/jars/*")
)

然后执行以下操作(相应地更改参数):

host = "111.111.111.111"
port = "1234"
schema = "YourSchema"
URL = f"jdbc:oracle:thin:@{host}:{port}/{schema}"

with open(f"{home}/username.file", "r") as f:
    username = f.read()

with open(f"{home}/password.file", "r") as f:
    password = f.read()

query  = "SELECT * FROM YourTable"

df = (spark.read.format("jdbc")
    .option("url", URL)
    .option("query", query)
    .option("user", username)
    .option("password", password)
    .load()
)

df.printSchema()
df.show()

properties = {
    "user": username,
    "password": password,
}

df = spark.read.jdbc(
    url=URL, 
    table="YourTable",
    properties=properties,
    )

df.printSchema()
df.show()
5jvtdoz2

5jvtdoz23#

虽然你还没有提到你使用的是哪种版本的spark。。。你可以在下面试试。。。。
将jar导入驱动程序和执行程序。所以,你需要编辑 conf/spark-defaults.conf 在下面添加两行。

spark.driver.extraClassPath /home/hadoop/ojdbc7.jar
spark.executor.extraClassPath /home/hadoop/ojdbc7.jar


您可以在提交作业时尝试通过以下示例:

--conf spark.driver.extraClassPath /home/hadoop/ojdbc7.jar
--conf spark.executor.extraClassPath /home/hadoop/ojdbc7.jar

相关问题