美文网首页
Hadoop 学习番外篇3-小文件处理

Hadoop 学习番外篇3-小文件处理

作者: Kean_L_C | 来源:发表于2019-05-05 11:57 被阅读0次

    代码见:https://github.com/JNUpython/hadoop_spark/tree/master/src/main/java/org/shangu/serialization

    image.png

    小文件hdfs存储

    每个文件都会占用一个block(默认yarn block_size=128mb),文件多直接导致namenode资源耗尽, image.png

    小文件切片

    小文件分块和切片是两个完全不同概念:前者为物理过程,将数据存储在磁盘上;后者为数据读取逻辑处理过程,读取数据作为maptask的输入,因此切片数量直接对应maptask开启的数量。
    如果直接采用下面代码读取数据:

    FileInputFormat.setInputPaths(job, new Path(args[0]));
    

    因为数据切片,不考虑数据整体大小而是分文件单独考虑那么直接采用该方法就会有4个切片,即多少个小文件对应多少个切片,实际根本不要这么多task,maptask启动也是很费时间。

    [INFO ] 2019-05-05 11:39:27,437 method:org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:198)
    number of splits:4
    

    上面是利用 FileInputFormat 提交job信息输出 切片数量为4, 对用4个maptask

    小文件切片:CombineTextInputFormat

    FileInputFormat运行之前设置:4mb

            job.setInputFormatClass(CombineTextInputFormat.class);
            CombineTextInputFormat.setMaxInputSplitSize(job, 4194304);
    
            FileInputFormat.setInputPaths(job, new Path(args[0]));
            FileOutputFormat.setOutputPath(job, new Path(args[1]));
    

    切片数量变为1

    [INFO ] 2019-05-05 11:53:15,298 method:org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:198)
    number of splits:1
    

    相关文章

      网友评论

          本文标题:Hadoop 学习番外篇3-小文件处理

          本文链接:https://www.haomeiwen.com/subject/tndcoqtx.html