我正在使用在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。
有没有人对我可能尝试加速此文件读取过程的调整选项(或其他任何东西)提出建议?
答案 0 :(得分:0)
无耻插头(作者)尝试Sparklens https://github.com/qubole/sparklens 大多数情况下,真正的问题不在于应用程序是否缓慢,而是在扩展。对于大多数应用程序,答案是有限的。
spark应用程序的结构对其可伸缩性产生了重要的限制。阶段中的任务数量,阶段之间的依赖关系,偏差以及在驱动程序端完成的工作量是主要限制因素。