簡體   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