分享

hadoop多路径总结

desehawk 2015-2-4 23:59:16 发表于 总结型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 7 13118
本帖最后由 desehawk 于 2015-2-5 00:00 编辑
问题导读

1.如何将本地多个输入文件合并到hadoop中的一个文件?
2.MapReduce多路径输入,文说了几种路径模式?






目前为止知道MapReduce有三种路径输入方式。
1、第一种是通过一下方式输入:

  1. FileInputFormat.addInputPath(job, new Path(args[0]));
  2. FileInputFormat.addInputPath(job, new Path(args[1]));
  3. FileInputFormat.addInputPath(job, new Path(args[2]));
  4. FileInputFormat.addInputPath(job, new Path(args[3]));
复制代码
这种方式可以接收多个路径下的文件输入,但是这些文件都是通过一个Map进行处理

2、第二种是通过以下方式输入(第二个路径参数是通过,分割的多个路径):

  1. FileInputFormat.addInputPaths(job, args[0] + "," + args[1] + "," + args[2]);
复制代码
这种方式跟第一种相似,看源码会发现,该方式是先将路径通过,分割成String[] paths数组形式,然后再循环调用第一种方式,而且他也是通过一个Map进行处理

3、第三种是通过以下方式输入:

  1. MultipleInputs.addInputPath(job, new Path(args[0]), TextInputFormat.class,EmpMapper.class);
  2. MultipleInputs.addInputPath(job, new Path(args[1]), TextInputFormat.class,EmpMapper.class);
  3. MultipleInputs.addInputPath(job, new Path(args[2]), TextInputFormat.class,TestMapper.class);
复制代码
这种方式是针对不同的输入文件,他们的格式可能不同,然后针对他们的格式编写相应的Map分别进行处理,这种方式更灵活些。






如何将多个输入文件合并到hadoop中的一个文件


在使用hadoop是,我们有时候需要将本地文件系统上的多个文件合并为hadoop文件系统上的一个文件,但是 hadoop文件系统本身的shell命令并不支持这样的功能,但是hadoop的put命令支持从标准输入读取数据,所以实现标题功能的hadoop命令如下:
  1. cat localfile1 localfile2 | bin/hadoop fs -put /dev/fd/0 destfile  
复制代码




已有(7)人评论

跳转到指定楼层
Riordon 发表于 2015-2-5 08:35:40
回复

使用道具 举报

hery 发表于 2015-2-5 12:05:44
回复

使用道具 举报

cochou 发表于 2015-2-5 14:35:44
回复

使用道具 举报

cochou 发表于 2015-2-5 14:36:50
回复

使用道具 举报

cochou 发表于 2015-2-5 14:37:28
回复

使用道具 举报

cochou 发表于 2015-2-5 14:38:01
回复

使用道具 举报

cochou 发表于 2015-2-5 14:38:35
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条