侧边栏壁纸
博主头像
故黎

tt--

  • 累计撰写 29 篇文章
  • 累计创建 5 个标签
  • 累计收到 7 条评论
标签搜索

HDFS 合并碎文件

故黎
2020-11-13 / 0 评论 / 7 点赞 / 1,998 阅读 / 541 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2021-12-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

我们都知道,在HDFS中不宜存储大量的小文件。所谓小文件,就是大小远小于dfs.block.size的文件。如果有大量小文件的话,会浪费block,使元数据增加,挤占宝贵的NameNode内存。另外,大文件能够发挥磁盘顺序读写的优势,小文件会产生很多随机读写,性能下降。

前几天编写了Spark Streaming程序作为consumer,处理数据并下沉到以天分区的Hive外部表中,批次间隔(batch duration)为10秒钟。久而久之,产生了很多小文件。直觉上讲可以通过增长batch duration来减少输出,但这肯定是下下策。

如何合并碎文件

方式一:通过命令 Usage: hadoop fs [generic options] -getmerge [-nl] [-skip-empty-file]

将hdfs小文件合并到本地,然后删除hdfs原文件,再将本地文件上传到hdfs

# 合并小文件至本地
hadoop fs -getmerge -skip-empty-file /hdfspath/* /localpath/test.txt

# 删除hdfs源文件
hdfs dfs -rm /hdfspath/*

# 将合并后的文件上传至hdfs
hdfs dfs -put /localpath/test.txt /hdfspath/
0

评论区