Apache spark 调谐Spark(纱线)群集,通过HDFS读取200GB的CSV文件(pyspark)

Apache spark 调谐Spark(纱线)群集,通过HDFS读取200GB的CSV文件(pyspark),apache-spark,hdfs,bigdata,pyspark,emr,Apache Spark,Hdfs,Bigdata,Pyspark,Emr,我现在正在使用一个在AWS上运行的11节点集群(1个主节点,10个工作节点-c3.4XL),我正在尝试从HDFS中读取约200GB的.csv文件(只有大约10个实际的.csv文件) 这一过程进展非常缓慢。我正在命令行上观看spark,它看起来是这样的 [Stage 0:> (30 + 2) / 2044] 每20秒增加+2个单位(意味着30+2到32+2到34+2等…)的进度。所以这

我现在正在使用一个在AWS上运行的11节点集群(1个主节点,10个工作节点-c3.4XL),我正在尝试从HDFS中读取约200GB的.csv文件(只有大约10个实际的.csv文件)

这一过程进展非常缓慢。我正在命令行上观看spark,它看起来是这样的

[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.4X大型实例(集群中有10个),由30GB的RAM和16个vCPU组成。HDFS分区由集群中每个节点的本地存储组成,即2x160GB SSD,因此我认为我们正在研究(2*160GB*10nodes/3复制)=~1TB的HDFS

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

为了澄清相关情况,Hadoop集群与spark集群在节点方面是相同的。我将30GB中的20GB分配给spark执行器,将10GB分配给OS+Hadoop/Thread等。。名称节点/spark父节点是一个m3.xlarge,它有4个vcpu和16GB的RAM

有没有人对我可能尝试加快文件读取过程的优化选项(或任何东西)有什么建议?

无耻的插件(作者)试试Sparklens 大多数时候,真正的问题不是应用程序是否慢,而是它是否能扩展。对于大多数应用程序,答案都是有限的

spark应用程序的结构对其可扩展性提出了重要限制。一个阶段中的任务数量、阶段之间的依赖关系、偏差以及在驱动端完成的工作量是主要的约束条件

无耻插头(作者)试试Sparklens 大多数时候,真正的问题不是应用程序是否慢,而是它是否能扩展。对于大多数应用程序,答案都是有限的


spark应用程序的结构对其可扩展性提出了重要限制。一个阶段中的任务数量、阶段之间的依赖关系、偏差以及在驱动端完成的工作量是主要的约束条件

建议,将它们转换为
拼花地板
,并在
HDFS
集群中小心分割,注意分割的数量谢谢!我将研究将现有CSV文件转换为拼花地板的最佳方法,并了解这将如何提高性能。建议,将它们转换为
parquet
,并在
HDFS
集群中仔细分割它们,注意分区数谢谢!我将研究将现有CSV文件转换为拼花地板的最佳方法,并了解这将如何提高性能。