【发布时间】:2019-07-29 07:58:39
【问题描述】:
我想将数据从 Oracle 数据库导入到我们的 Hadoop HDFS,并考虑使用 Sqoop。当我尝试时,我发现 Oracle 和 Hadoop 的数据连接器已断开连接。
2019-07-18 09:19:58,203 [uber-SubtaskRunner] INFO org.apache.sqoop.manager.oracle.OraOopManagerFactory - Data Connector for Oracle and Hadoop is disabled.
我联系了系统管理员,他告诉我,我们的 Sqoop 目前没有为 Oracle 数据库配置,也不会配置。相反,他们建议使用下面的 pyspark 脚本。
我在我们的 CDSW 上使用了提到的脚本,它在我的一些配置中运行得非常好。
import os
import netrc
from pyspark.sql import SparkSession
'''Set up the pyspark dependencies: In order to connect to the Oracle DB
via JDBC we are going to need the jar provided by Oracle'''
ORACLE_JAR = "ojdbc7.jar"
JAR_LOC = os.path.join(os.environ["JARS_DIR"], ORACLE_JAR)
#Create a SparkSession
spark = SparkSession.builder \
.appName("My Sample App") \
.config("spark.jars", "local://" + JAR_LOC) \
.getOrCreate()
# Set the Exadata host to which you are connecting to
db_host = "exadata.host.address"
#Read the values from the .netrc
user, account, password = netrc.netrc().authenticators(db_host)
# Check the Spark version and other config information
spark.sparkContext.getConf().getAll()
driver = "oracle.jdbc.OracleDriver"
#The SID of your database
sid = "mydb.sid.tns"
url = "/".join(["jdbc:oracle:thin:@/", db_host +":1521", sid])
# The query that you need to run
dbtable = "(select * from table)"
jdbc_df = spark.read.format("jdbc").option("url", url) \
.option("driver", driver) \
.option("dbtable", dbtable) \
.option("user", user) \
.option("password", password).load()
我的问题是:与 Sqoop 或 Flume 相比,使用此 pyspark 脚本的相对优势/劣势是什么?
【问题讨论】:
标签: oracle pyspark hdfs sqoop flume