我想将数据从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脚本的相对优势/劣势是什么?
2条答案
按热度按时间35g0bw711#
sqoop是一种数据摄取工具,它使用mapreduce技术,spark是一种著名的大数据处理工具,它以内存执行和dag智能取代mapreduce,比磁盘计算快10倍。
谢谢,阿米特
gdx19jrr2#
使用sparkjdbc从关系数据库读取数据要比sqoop快得多。以下是一些好处。
您可以将所有读取、转换和写入操作组合到一个脚本/程序中,而不是在一个脚本中通过sqoop单独读取,然后在另一个脚本中执行转换和写入。
如果希望以适当的方式对数据进行分区,可以动态地定义一个新的拆分列(使用ora\u hash之类的函数)。
您可以控制与数据库的连接数。增加连接的数量肯定会加快数据导入的速度。