[关闭]
@Arslan6and6 2016-05-02T06:04:03.000000Z 字数 1378 阅读 543

【作业四】殷杰

第四章、深入Hadoop 2.x

---HDFS API基本操作

作业描述:
需求:合并小文件,存放到HDFS上,例如,当需要分析许多来自服务器的apache日志时,各个文件可能比较小,然后 Hadoop 更适合处理大文件,效率会更高,此时就需要合并分散的文件,一般都是在向HDFS复制上传文件的过程中将小文件进行合并(场景描述也可参考上课视频),开发一个PutMerge程序,用于合并本地文件后存入 HDFS 系统中。(比如把/opt/modules/hadoop-2.5.0/etc/hadoop/下面所有的xml文件合并上传到HDFS形成一个大文件)

先把目标文件夹内所有xml文件复制到临时文件夹tmp中
2.png-16.8kB

  1. package org.apache.hadoop.studyhdfs;
  2. import java.io.IOException;
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.FSDataInputStream;
  5. import org.apache.hadoop.fs.FSDataOutputStream;
  6. import org.apache.hadoop.fs.FileStatus;
  7. import org.apache.hadoop.fs.FileSystem;
  8. import org.apache.hadoop.fs.Path;
  9. import org.apache.hadoop.io.IOUtils;
  10. public class PutMerge {
  11. public static void putMergeFunc(String LocalDir, String fsFile) throws IOException
  12. {
  13. Configuration conf = new Configuration();//fs是HDFS文件系统
  14. FileSystem fs =FileSystem.get(conf);
  15. FileSystem local = FileSystem.getLocal(conf);
  16. Path localDir = new Path(LocalDir);
  17. Path HDFSFlie = new Path(fsFile);
  18. FileStatus[] status = local.listStatus(localDir);
  19. FSDataOutputStream out = fs.create(HDFSFlie); //在HDFS上创建输出文件
  20. for(FileStatus st: status) {
  21. Path temp =st.getPath();
  22. FSDataInputStream in =local.open(temp);
  23. IOUtils.copyBytes(in, out, 4096, false); //读取in流中的内容放入out
  24. in.close(); //完成后,关闭当前文件输入流
  25. }
  26. out.close();
  27. }
  28. public static void main(String [] args) throws IOException
  29. {
  30. String l = "/opt/modules/hadoop-2.5.0/tmp";
  31. String f = "hdfs://hadoop-senior01.ibeifeng.com:8020/text/test.txt";
  32. putMergeFunc(l,f);
  33. }
  34. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注