我有一个火花流应用程序,它负责动态地将文本文件转换为镶木地板格式,然后将数据保存在外部配置单元表中。请参考上面提到的代码片段,它是处理文本文件的类之一:
object HistTableLogic {val logger = Logger.getLogger("file")
def schemadef(batchId: String) {
println("process started!")
logger.debug("process started")
val sourcePath = "some path"
val destPath = "somepath"
println(s"source path :${sourcePath}")
println(s"dest path :${destPath}")
logger.debug(s"source path :${sourcePath}")
logger.debug(s"dest path :${destPath}")
// val sc = new SparkContext(new SparkConf().set("spark.driver.allowMultipleContexts", "true"))
val conf = new Configuration()
println("Spark Context created!!")
logger.debug("Spark Context created!!")
val spark = SparkSession.builder.enableHiveSupport().getOrCreate()
println("Spark session created!")
logger.debug("Spark session created!")
val schema = StructType.apply(spark.read.table("hivetable").schema.fields.dropRight(2))
try {
val fs = FileSystem.get(conf)
spark.sql("ALTER table hivetable drop if exists partition (batch_run_dt='"+batchId.substring(1,9)+"', batchid='"+batchId+"')")
fs.listStatus(new Path(sourcePath)).foreach(x => {
val df = spark.read.format("com.databricks.spark.csv").option("inferSchema","true").option("delimiter","\u0001").
schema(schema).csv(s"${sourcePath}/"+batchId).na.fill("").repartition(50).write.mode("overwrite").option("compression", "gzip")
.parquet(s"${destPath}/batch_run_dt="+batchId.substring(1,9)+"/batchid="+batchId)
spark.sql("ALTER table hivetable add partition (batch_run_dt='"+batchId.substring(1,9)+"', batchid='"+batchId+"')")
logger.debug("Partition added")
})
} catch {
case e: Exception => {
println("---------Exception caught---------!")
logger.debug("---------Exception caught---------!")
e.printStackTrace()
logger.debug(e.printStackTrace)
logger.debug(e.getMessage)
}
}
}}
我在另一个java类的main方法中传递上面类的schemadef
方法,该方法具有接收batchIds 24x7的逻辑,通过自定义接收器设置。
从功能上来说,应用程序运行良好,但需要大约15分钟来处理甚至1GB的数据。如果我尝试通过LOAD查询简单地将数据加载到hive表中,它会在一分钟内发生。
参考下面的火花作业配置:
SPARK_MASTER YARN SPARK_DEPLOY-MODE CLUSTER SPARK_DRIVER-MEMORY 13g SPARK_NUM-EXECUTORS 6 SPARK_EXECUTOR-MEMORY 15g SPARK_EXECUTOR-CORES 2
如果您发现我可以采取的此优化或任何其他优化措施中的任何缺陷,请通知我以加强此过程。谢谢