【发布时间】:2016-09-05 02:59:10
【问题描述】:
我正在研究一个必须将数据从 RDBMS 传输到 HDFS 的用例。我们使用 sqoop 对该案例进行了基准测试,发现我们能够在 6-7 分钟内传输大约 20GB 的数据。
当我尝试使用 Spark SQL 时,性能非常低(1 Gb 的记录从 netezza 传输到 hdfs 需要 4 分钟)。我正在尝试进行一些调整并提高其性能,但不太可能将其调整到 sqoop 级别(1 分钟内大约 3 Gb 的数据)。
我同意 spark 主要是一个处理引擎这一事实,但我的主要问题是 spark 和 sqoop 都在内部使用 JDBC 驱动程序,所以为什么在性能上有这么大的差异(或者我可能遗漏了一些东西)。我在这里发布我的代码。
object helloWorld {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("Netezza_Connection").setMaster("local")
val sc= new SparkContext(conf)
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
sqlContext.read.format("jdbc").option("url","jdbc:netezza://hostname:port/dbname").option("dbtable","POC_TEST").option("user","user").option("password","password").option("driver","org.netezza.Driver").option("numPartitions","14").option("lowerBound","0").option("upperBound","13").option("partitionColumn", "id").option("fetchSize","100000").load().registerTempTable("POC")
val df2 =sqlContext.sql("select * from POC")
val partitioner= new org.apache.spark.HashPartitioner(14)
val rdd=df2.rdd.map(x=>(String.valueOf(x.get(1)),x)).partitionBy(partitioner).values
rdd.saveAsTextFile("hdfs://Hostname/test")
}
}
我查看了许多其他帖子,但无法得到关于 sqoop 内部工作和调整的明确答案,也没有得到 sqoop 与 spark sql 基准测试。请帮助理解这个问题。
【问题讨论】:
标签: hadoop apache-spark-sql sqoop bigdata