`

HDFS 输入文件避免切分

 
阅读更多

  •  自定义InputFormat的子类,并把重载方法isSplitable()返回值设为false

  • 增加最小分片的大小,设置成大于要处理文件中最大文件的大小,简单的设成Long.MAX_VALUE即可

      一般来说,分片大小计算公式如下:

      Max(minimumSize,min(maximumSize,blockSize))

      minimumSize < blockSize < maximumSize

      如果将分片大小设置成比HDFS块更大,会增加对于map任务来说不是本地文件的块数,也就是说map要跨块读取文件。如果分片大小的设置的比较小的话,那么一个文件就会有很多map任务,那么大量的mapper任务会造成mapper任务所涉及的任务管理和启动开销大量增加,造成hadoop效率的下降,一般来说分片大小设置成块大小,也可以设置块大小的整数倍。

       对于许多小文件的话,hadoop的处理效率是低下的,一种方法是我们使用Hadoop 存档工具把许多小文件打包成一个Har文件,但是这样会要求至少需要与原文件大小相同的另一份磁盘空间,而且har文件不能修改或者删除里面的文件,不过InputFormat类并不知道文件已经存档,所以处理效率仍然不好;另一种方法是使用CombineFileInputFormat类,同样这个类对大文件也有很好的效果,这对于HDFS中已经存在很多小文件的情况下值得一试。还有一种方法就是使用SequeneceFile 合并许多小文件,键是文件名,值是文件内容。

     尽量避免许多小文件的情况:

  •  处理小文件会增加运行作业需要的寻址次数

  •  浪费namenode的内存

 

     reducer个数选择

  • reducer最优个数与集群中可用的reducer任务槽数相关。

  • 总槽数=集群中节点数*每个节点的任务槽数。

  • 总槽数可以在mapred.tasktracker.reduce.tasks.maximun属性设置

 

 常用方法

  1.  设置比总槽数稍微少一些的reducer数,给任务留余地(容忍一些错误发生而不需要次延长作业运行时间),比如说计划性任务或者推测性任务。

  2.  如果reduce任务很大,较好的做法是使用更多reducer,使任务粒度变小,这样任务的失败才不至于显著影响作业执行时间。

分享到:
评论

相关推荐

    spark下实现wordcount

    在 HDFS 上创建输入文件目录,并将文本文件上传至 HDFS: ```bash hdfs dfs -mkdir /a hdfs dfs -put '/home/hadoop/one.txt' /a ``` 其中 `/a` 是 HDFS 上的目标目录,`/home/hadoop/one.txt` 是本地文件路径。...

    云计算基础课件—Hadoop:Google云计算的开源实现 dr.ppt

    5. **数据完整性检测**:HDFS客户端实现了对HDFS文件内容的校验和检查,确保数据的完整性。 6. **空间回收机制**:被删除的文件会先被移动到/trash目录,在这里可以随时恢复数据。 7. **元数据磁盘失效保护**:...

    2023大数据面试题,很全

    - **Map阶段**:输入数据被切分为键值对,由Mapper处理并生成中间键值对。 - **Shuffle阶段**:根据键排序并分发中间键值对到相应的Reducer。 - **Reduce阶段**:Reducer聚合和处理由Map产生的中间结果。 #### 14. ...

    深入云计算 Hadoop源代码分析

    - HDFS中的文件被切分为多个Block进行存储,默认情况下,一个Block大小为128MB(早期版本为64MB)。通过这种分块的方式,HDFS能够有效地利用集群中的存储资源。 #### 四、MapReduce工作流程 MapReduce是Hadoop的...

    2023最新最强大数据面试题汇总

    7. **小文件过多的危害与避免**:小文件过多会导致NameNode元数据管理压力增大,影响性能。可以通过归档小文件、使用Har或者MapReduce的CombineFileInputFormat减少小文件数量。 8. **HDFS架构**:HDFS由NameNode...

    Hadoop快速入门

    HDFS中的文件被切分为一个或多个块(block),这些块被分配存储在不同的DataNode上,并且通常会进行冗余存储,即每个块都保留了多个副本,这样即使某些节点出现故障,数据也不会丢失。 在Hadoop的架构中,作业调度...

    Hadoop面试100题.pdf

    - **知识点说明**:HDFS中文件被切分成固定大小的数据块存储,这个数据块的大小被称为Block Size。HDFS的默认块大小为128MB(在较早版本中为64MB),这有助于优化存储效率和数据传输速度。 6. **下列哪项通常是集群...

    《大数据平台搭建与配置管理》期末试题试卷及答案AB卷2套.docx

    - HDFS支持多种文件操作,如读写文件、复制文件等。需要注意的是,HDFS中的文件一旦写入,就不能修改,只能追加。 9. **HDFS为存储MapReduce设计** - HDFS针对MapReduce的特点进行了特殊设计,比如数据块的大容量...

    云计算下非结构化大数据存储系统设计.pdf

    MapReduce模型通过对输入数据的切分(Map步骤)和对中间结果的归约(Reduce步骤)来实现数据的并行处理,进而提高数据处理的速度。 系统设计中还需要考虑到数据的备份和恢复问题。通常会采用冗余存储策略来保障数据...

    MapReduce & Hadoop

    2. **映射阶段**(Map):将输入文件中的每一条记录转换为键值对形式,通常涉及一些初步的数据处理或聚合操作。 3. **洗牌阶段**(Shuffle):在这个阶段,中间结果会被按照键进行排序和分组,并发送到相应的reduce...

    Hadoop-MapReduce实践示例

    开发者可以设置输出路径,MapReduce作业完成后,可以通过HDFS上的文件访问到这些数据。 7. MapReduce与Hadoop生态系统中的其他组件交互:MapReduce不是孤立存在的,它与Hadoop生态系统中的其他组件,如Hive、Pig等...

    基于物品的协同推荐系统-HadoopMapReduce.zip

    1. Map阶段:在这个阶段,输入数据通常是用户-物品评分矩阵,每个键值对表示用户对某个物品的评分。Map函数将这些键值对分割,生成用户ID和物品ID的键值对,并附带对应的评分。例如,(user_id, (item_id, rating))。...

Global site tag (gtag.js) - Google Analytics