Fork me on GitHub

HDFS小文件处理

请先查看一叶舟的介绍 : https://blog.csdn.net/zyd94857/article/details/79946773

小文件处理有两个方向:

  1. 适用于文档存储方法:HAR File
    • 优点:
      一.易操作,小文件归档 --hadoop archive -archiveName harFileName.har -p /neetArchiveFilesPath /ArchiveFileStorePath
      二.可直接从hdfs查看 -- hdfs dfs -cat /ArchiveFileStorePath/harFileName.har/part-0~100+(从0开始加一)
    • 缺点:
      一.访问一个指定的小文件需要访问两层索引文件才能获取小文件在HAR文件中的存储位置,因此,访问一个HAR文件的效率可能会比直接访问HDFS文件要低
      二.创建的har文件跟源文件大小一致,且无法压缩
      三.创建后无法对har文件进行修改
  2. 流动文件处理:Sequence Files
    • 优点:
      一.解决HDFS过多小文件导致mapreduce消耗性能问题
      二.支持压缩,占用空间更小
    • 缺点:
      一.SequenceFile 文件不能追加写入,适用于一次性写入大量小文件的操作
      二.在hdfs上将表中的数据以二进制格式编码,并且将数据压缩了,下载数据以后是二进制格式,不可以直接查看,
      需在hive中查看或者通过java类org.apache.hadoop.io.SequenceFile进行读写操作;下面是创建hive表结构中有
       stored as sequecefile
       或者显示指定:
       STORED AS INPUTFORMAT 
      

'org.apache.hadoop.mapred.SequenceFileInputFormat' 
OUTPUTFORMAT 
'org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat'
```
三.访问只能从文件头开始访问

以上生成文件块大小皆可通过hdfs属性dfs.blocksize设置,默认128M
其中sequence还可以通过io.seqfile.compress.blocksize设置

posted @ 2020-03-11 15:15  郑的左耳有个关  阅读(446)  评论(0编辑  收藏  举报