①场景:合并小文件存放到HDFS上,列如,当需要分析来自许多服务其的Apache日志时,各个日志文件可能比较小,然而Hadoop更合适处理大文件,效率会更高,此时就需要合并分散文件。如果先将所有文件合并,在复制上传到HDFS上的话,需要占用用本地计算机的大量磁盘空间。采取在向HDFS复制上传文件的过程中将小文件进行合并,效果会更好。
②开发程序
开发一个PutMerge程序,用于将合并文件后放入HDFS。
③命令getmerge
用于将一组HDFS文件在复制到本地计算机一起合并。
1)hadoop fs -put dataout1 daout daout6 /tmp
//将多个文件夹上同时传到HDFS /tmp目录下
2)hadoop fs -put trade_info.txt datain /sort1
//将trade_info.txt和datain文件同时上传到/sort1下
3)hadoop fs -getmerge /sort1 /root/yunfan1
//将这几个文件合并为一个文件
代码实现
文件的上传和下载就是字节字符流的读写操作。
读文件:输入流–>read
写文件:输出流 –>write
分析:
localFileSystem(本地)中的许多小文件上传到(合并)到HDFS
①本地每个文件打开输入流进行读取内容
②HDFS文件打开输出流,进行内容写入
③循环操作
④关闭流
public