0
我正在使用CombineTextInputFormat讀取Spark上的很多小文件。Spark:使用CombineTextInputFormat時,任務大小很大
的Java代碼如下(我寫它作爲一個效用函數):
public static JavaRDD<String> combineTextFile(JavaSparkContext sc, String path, long maxSplitSize, boolean recursive)
{
Configuration conf = new Configuration();
conf.setLong(CombineTextInputFormat.SPLIT_MAXSIZE, maxSplitSize);
if (recursive)
conf.setBoolean(CombineTextInputFormat.INPUT_DIR_RECURSIVE, true);
return
sc.newAPIHadoopFile(path, CombineTextInputFormat.class, LongWritable.class, Text.class, conf)
.map(new Function<Tuple2<LongWritable, Text>, String>()
{
@Override
public String call(Tuple2<LongWritable, Text> tuple) throws Exception
{
return tuple._2().toString();
}
});
}
它的工作原理,但在程序運行時,以下警告印:
WARN TaskSetManager: Stage 0 contains a task of very large size (159 KB). The maximum recommended task size is 100 KB.
程序總共讀取約3.5MB,文件數量爲1234.這些文件位於一個目錄中。
這是正常的嗎?否則,我該如何擺脫這個信息?
我的Spark版本是1.3。
程序以本地模式運行。
這是真的,但CombineTextInputFormat是在我的情況更快。完成這項工作需要9秒,而sc.textFile()需要300秒。 (是的,三百秒) – zeodtr 2015-03-31 07:23:45
我覺得它很棒。你對數據集進行什麼樣的操作?你可以提供一個你的應用程序的樣本,以便自己測試它嗎? – 2015-03-31 07:25:39
目前這只是我的電腦上的一項測試。問題是目前測試輸入文件的數量是1234,每個文件的大小範圍從1KB到5KB,這對於hadoop應用程序來說是非常罕見的情況。測試輸入文件在實際系統上會更大。所以,這可能不是問題,但爲了測試,我需要CombineTextInputFormat。 – zeodtr 2015-04-01 00:07:06