我有一个四节点hadoop集群(mapr),每个集群有40GB内存。我需要申请'大数据集的一个字段(5亿行)上的函数。我的代码流是我从hive表中读取数据作为spark数据帧,并在其中一列上应用所需的函数,如下所示:
schema = StructType([StructField("field1", IntegerType(), False), StructField("field2", StringType(), False),StructField("field3", FloatType(), False)])
udfCos = udf(lambda row: function_call(row), schema)
result = SparkDataFrame.withColumn("temp", udfCos(stringArgument))
类似的RDD版本可能如下所示:
result = sparkRDD.map(lambda row: function_call(row))
我希望提高这段代码的性能,确保代码以最大的并行性和降低的吞吐量运行 - 我需要帮助使用诸如“重新分区”之类的spark概念。 ' SparkConf中的并行度值'或者其他方法,在我的问题的背景下。任何帮助表示赞赏。
我的火花启动参数:
MASTER="yarn-client" /opt/mapr/spark/spark-1.6.1/bin/pyspark --num-executors 10 --driver-cores 10 --driver-memory 30g --executor-memory 7g --executor-cores 5 --conf spark.driver.maxResultSize="0" --conf spark.default.parallelism="150"
答案 0 :(得分:0)
要调整应用程序,您需要了解一些事情
1)您需要监控您的应用程序,无论您的群集是否未被利用,或者您创建的应用程序使用了多少资源
可以使用各种工具进行监控,例如。 Ganglia从Ganglia您可以找到CPU,内存和网络使用情况。
2)基于对CPU和内存使用情况的观察,您可以更好地了解应用程序需要何种调整
形成你的Spark点
在spark-defaults.conf
中您可以指定应用程序所需的驱动程序内存和执行程序内存的类型序列,即使您可以更改垃圾收集算法。
以下是一些示例,您可以根据需要调整此参数
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.executor.extraJavaOptions -XX:MaxPermSize=2G -XX:+UseG1GC
spark.driver.extraJavaOptions -XX:MaxPermSize=6G -XX:+UseG1GC