Ich arbeite an einem Anwendungsfall, wo ich Daten von RDBMS zu HDFS übertragen muss. Wir haben das Benchmarking dieses Falles mit sqoop durchgeführt und herausgefunden, dass wir in der Lage sind, etwa 20 GB Daten in 6-7 Minuten zu übertragen.Apache Spark-SQL vs Sqoop Benchmarking beim Übertragen von Daten aus RDBMS zu HDFs
Wo, wenn ich das gleiche mit Spark SQL versuche, ist die Leistung sehr gering (1 GB von Datensätzen dauert 4 Minuten, um von Netezza auf hdfs zu übertragen). Ich versuche, etwas abzustimmen und seine Leistung zu erhöhen, aber es ist unwahrscheinlich, dass es auf das Niveau von sqoop abgestimmt wird (ungefähr 3 GB Daten in 1 Min).
Ich stimme der Tatsache zu, dass Spark in erster Linie eine Verarbeitungsmaschine ist, aber meine Hauptfrage ist, dass sowohl Funken und sqoop JDBC-Treiber intern verwenden, also warum gibt es so viel Unterschied in der Leistung (oder vielleicht bin ich etwas fehlt) . Ich poste meinen Code hier.
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")
}
}
Ich habe viele andere Post überprüfe, konnte aber keine klare Antwort auf die internen Arbeits und Tuning von Sqoop noch ich bekam Sqoop vs Funken SQL Benchmarking Kindly Hilfe zum Verständnis dieses Problems bekommen.
: - Vielen Dank für Ihre Kommentare .. Ich habe Master als „lokal“ in meinem Code gegeben becoz ich meine Firma Garn URL posten hier nicht in der Lage war zu .. In Wirklichkeit habe ich das auf Garnhaufen laufen lassen. Auch die Parallelität von 14 wird beim Schreiben der Daten auf hdfs und nicht während des Lesens erreicht. Beim Lesen gibt es nur einen Thread, der aus SQL db liest, was den Gesamtprozess sehr langsam macht. In diesem Fall denke ich, Marco Polo Antwort ist richtig. Das ist meine Meinung. Bitte zögern Sie nicht, mich zu korrigieren, falls mir etwas fehlt. Vielen Dank. –
Wie viele Executoren werden dem Job zugewiesen? Können Sie die Verwendung von Spark UI überprüfen? – bigdatamann