调整Spark(YARN)集群,通过HDFS读取200GB的CSV文件(pyspark)

时间:2015-12-03 23:18:53

标签: apache-spark hdfs bigdata pyspark emr

我正在使用在AWS上运行的11节点集群(1个主服务器,10个工作服务器--c3.4xlarge),我正在尝试读取~200GB的.csv文件(只有大约10个实际.csv)来自HDFS的文件)。

这个过程进展得很慢。我在命令行看火花,它看起来像这样..

[Stage 0:>                                                      (30 + 2) / 2044]

每20秒增加+2个单位(意味着30 + 2到32 + 2到34 + 2等等)。所以这是非常需要改进的,否则我们将在文件甚至完成阅读之前大约11个小时。

这是这一点的代码..

# AMAZON AWS EMR

def sparkconfig():
    conf = SparkConf()
    conf.setMaster("yarn-client)    #client gets output to terminals
    conf.set("spark.default.parallelism",340)
    conf.setAppName("my app")
    conf.set("spark.executor.memory", "20g")
    return conf


sc = SparkContext(conf=sparkconfig(),
             pyFiles=['/home/hadoop/temp_files/redis.zip'])

path = 'hdfs:///tmp/files/' 
all_tx = sc.textFile(my_path).coalesce(1024)
... more code for processing

现在显然1024分区可能不正确,这只是谷歌搜索和尝试不同的东西。在调整这份工作时,我真的很茫然。

工作节点@ AWS是c3.4xlarge实例(我在集群中有10个)包含30GB的RAM和16个vCPU。 HDFS分区由集群中每个节点的本地存储组成,即2x160GB SSD,所以我相信我们正在考虑(2 * 160GB * 10nodes / 3复制)=〜1TB的HDFS。

.csv文件的大小从5GB到90GB不等。

为了澄清相关的情况,就节点而言,Hadoop集群与spark集群相同。我将每个节点30GB的20GB分配给spark执行器,每个节点为OS + Hadoop / YARN等留下10GB。名称节点/ spark父节点是m3.xlarge,有4个vcpu和16GB RAM。

有没有人对我可能尝试加速此文件读取过程的调整选项(或其他任何东西)提出建议?

1 个答案:

答案 0 :(得分:0)

无耻插头(作者)尝试Sparklens https://github.com/qubole/sparklens 大多数情况下,真正的问题不在于应用程序是否缓慢,而是在扩展。对于大多数应用程序,答案是有限的。

spark应用程序的结构对其可伸缩性产生了重要的限制。阶段中的任务数量,阶段之间的依赖关系,偏差以及在驱动程序端完成的工作量是主要限制因素。