[英]Spark-submit job performance
我目前在以下环境上运行spark-submit:
单节点 ( RAM :40GB, VCores :8, Spark版本 :2.0.2, Python :3.5)
我的pyspark程序基本上将从HDFS读取一个450MB的非结构化文件。 然后它将遍历每行并获取必要的数据并将其放置在列表中。 最后,它将使用createDataFrame并将数据帧保存到Hive表中。
我的pyspark程序代码段:
sparkSession = (SparkSession
.builder
.master("yarn")
.appName("FileProcessing")
.enableHiveSupport()
.config("hive.exec.dynamic.partition", "true")
.config("hive.exec.dynamic.partition.mode", "nonstrict")
.getOrCreate())
lines = sparkSession.read.text('/user/test/testfiles').collect()
for line in lines:
// perform some data extrating and place it into rowList and colList using normal python operation
df = sparkSession.createDataFrame(rowList, colList)
df.registerTempTable("tempTable")
sparkSession.sql("create table test as select * from tempTable");
我的spark-submit命令如下:
spark-submit --master yarn --deploy-mode cluster --num-executors 2 --driver-memory 4g --executor-memory 8g --executor-cores 3 --files /usr/lib/spark-2.0.2-bin-hadoop2.7/conf/hive-site.xml FileProcessing.py
完成处理大约需要5分钟。 表现好吗? 如何设置执行程序内存和执行程序核心以进行调整,以便该过程可以在1-2分钟内完成?
感谢您的回应。 谢谢。
为了调整您的应用程序,您需要了解几件事
1)您需要监视您的应用程序,无论您的群集是否被充分利用,您创建的应用程序使用了多少资源
可以使用各种工具进行监视。 Ganglia在Ganglia中,您可以找到CPU,内存和网络使用情况。
2)根据对CPU和内存使用情况的观察,您可以更好地了解应用程序需要进行哪种调整
形成你的火花点
在spark-defaults.conf中
您可以指定所需的序列化类型,即使您可以更改垃圾回收算法,应用程序也需要多少驱动程序内存和执行程序内存。
以下是一些示例,您可以根据自己的要求调整此参数
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.driver.memory 5g
spark.executor.memory 3g
spark.executor.extraJavaOptions -XX:MaxPermSize=2G -XX:+UseG1GC
spark.driver.extraJavaOptions -XX:MaxPermSize=6G -XX:+UseG1GC
有关更多详细信息,请参见http://spark.apache.org/docs/latest/tuning.html
希望这可以帮助!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.