Я пытаюсь загрузить данные из DB2 в Hive с помощью Spark 2.1.1. и Скала 2.11. Используемый код приведен ниже
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.hive.HiveContext;
object DB2SparkDataImport {
def main(args: Array[String]): Unit = {
//Start the Spark context
val conf = new SparkConf().setAppName("DB2SparkDataImport").set("mapreduce.fileoutputcommitter.algorithm.version","2").set("spark.serializer","org.apache.spark.serializer.KryoSerializer").set("spark.kryoserializer.buffer.mb","24")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
val hiveContext = new HiveContext(sc)
val sparkSession = SparkSession.builder().enableHiveSupport().getOrCreate()
val df = sqlContext.read.format("jdbc").option("url", "jdbc:db2://<<host>>:<<port>>/<<db>>")
.option("driver", "com.ibm.db2.jcc.DB2Driver").option("dbtable", "<<table name>>").option("user", "<<user name>>").option("password", "pswd").option("column", "LAST_UPD").option("numPartitions", "100").option("lowerBound", "1").option("upperBound", "100000").load()
df.createOrReplaceTempView("mytempTable")
val query = "INSERT OVERWRITE TABLE test.temp_stage select * from mytempTable"
sparkSession.sql(query);
}
}
Используемая команда Spark Submit
export SPARK_MAJOR_VERSION=2
spark-submit --master yarn --deploy-mode cluster --class com.test.DB2SparkDataImport --driver-memory 5g --executor-memory 3G --num-executors 10 --executor-cores 3 --conf spark.sql.shuffle.partitions=23 --conf spark.default.parallelism=23 --conf 'spark.executor.extraJavaOptions=-Ddb2.jcc.charsetDecoderEncoder=3' --conf 'spark.driver.extraJavaOptions=-Ddb2.jcc.charsetDecoderEncoder=3' --jars db2jcc4-10.1.jar --files hive-site.xml DB2SparkDataImport-0.0.1-SNAPSHOT.jar
Выполнение этой работы занимает более 30 минут. №: записей в таблице 34901381 и 678,7422 МБ. Я добавил значения столбца, numPartitions, нижней и верхней границы. Мне нужно выполнять задание ежечасно, чтобы получить все данные из таблицы.
Пожалуйста, помогите решить, почему для этой программы генерируется только одно этапное задание и как я могу сократить время выполнения этого задания.
Спасибо,
Амрута К.