繁体   English   中英

小文件的spark重新分区数据

[英]spark repartition data for small file

我对Spark很新,我使用的是一个主要用于paralellizing目的的集群。 我有一个100MB的文件,每行都由一些算法处理,这是一个非常繁重和漫长的处理。

我想使用10节点集群并并行化处理。 我知道块大小超过100MB ,我试图重新分区textFile 如果我理解的话,这种repartition方法会增加分区的数量:

JavaRDD<String> input = sc.textFile(args[0]);
input.repartition(10);

问题是,当我部署到群集时,只有一个节点正在有效地处理。 如何管理并行处理文件?

更新1:这是我的spark-submit命令:

/usr/bin/spark-submit --master yarn --class mypackage.myclass --jars 
myjar.jar 
gs://mybucket/input.txt outfile

更新2:分区后,基本上有2个操作:

JavaPairRDD<String, String> int_input = mappingToPair(input);
JavaPairRDD<String, String> output = mappingValues(int_input, option);
output.saveAsTextFile("hdfs://...");

mappingToPair(...)位置

public JavaPairRDD<String, String> mappingToPair(JavaRDD<String> input){
        return input.mapToPair(new PairFunction<String, String, String>() {
            public Tuple2<String, String> call(String line) {
                String[] arrayList = line.split("\t", 2);
                return new Tuple2(arrayList[0], arrayList[1]);
            }
        });
    }

mappingValues(...)是以下类型的方法:

public JavaPairRDD<String,String> mappingValues(JavaPairRDD<String,String> rdd, final String option){
        return rdd.mapValues(
                new Function<String, String>() {
                    // here the algo processing takes place...
                }
        )
}

这里可能存在多个问题:

  1. 该文件只有一个块大。 使用多个执行程序读取此函数根本没用,因为HDFS节点可以全速运行一个节点,或者速度减半(加上开销)的两个节点等等。执行程序计数变得有用(对于读取步骤)有多个块分散在不同的HDFS节点上。
  2. 您也可能以不可拆分的压缩格式存储文件,因此输入步骤只能用一个执行程序读取它,即使它是块大小的100倍。
  3. 您不会将repartition(10)调用链接到您的流程中,因此它根本无效。 如果你替换这一行: input.repartition(10); 用这一个: input = input.repartition(10); 它将被使用,它应该将RDD分成多个,然后再继续下一步。

请注意,重新分区可以使您的流程更长,因为必须将数据拆分并传输到其他计算机,这可能很容易被慢速网络瓶颈。

使用客户端部署模式时尤其如此。 这意味着第一个执行程序(驱动程序)是您提交的本地Spark实例。 因此,它将首先从群集中将所有数据下载到驱动程序,然后在分区后将其上载回其他YARN节点。

我可以继续讨论这个问题,但我想说的主要是:如果你的算法很简单,那么进程甚至可以在一个执行器上运行得更快,而不是分区,传输,然后在所有执行器上运行算法平行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM