我目前正在以下环境中运行spark-submit:
单个节点( RAM :40GB, VCores :8, Spark版本:2.0.2,< strong> 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分钟内完成,是否可能?
感谢您的回复。感谢。
答案 0 :(得分:0)
要调整应用程序,您需要了解一些事情
1)您需要监控您的应用程序,无论您的群集是否未被利用,或者您创建的应用程序使用了多少资源
可以使用各种工具进行监控,例如。 Ganglia从Ganglia您可以找到CPU,内存和网络使用情况。
2)基于对CPU和内存使用情况的观察,您可以更好地了解应用程序需要何种调整
形成你的Spark点
在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
希望这有助于!!