Hadoop使用MultipleOutputs输出多文件或者指定命名
Hadoop使用MultipleOutputs输出多文件或者指定命名
@(HADOOP)[hadoop]
(一)输出多文件(未测试)
比如将不同国家的信息分别输出到一份对应的文件中。
1、在reduce或map类中创建MultipleOutputs对象,将结果输出
class reduceStatistics extends Reducer<Text, IntWritable, Text, IntWritable>{ //将结果输出到多个文件或多个文件夹 private MultipleOutputs<Text,IntWritable> mos; //创建对象 protected void setup(Context context) throws IOException,InterruptedException { mos = new MultipleOutputs<Text, IntWritable>(context); } //关闭对象 protected void cleanup(Context context) throws IOException,InterruptedException { mos.close(); }
}
2、在map或reduce方法中使用MultipleOutputs对象输出数据,代替congtext.write()
Java代码 收藏代码
protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { IntWritable V = new IntWritable(); int sum = 0; for(IntWritable value : values){ sum = sum + value.get(); } System.out.println("word:" + key.toString() + " sum = " + sum); V.set(sum); //使用MultipleOutputs对象输出数据 if(key.toString().equals("hello")){ mos.write("hello", key, V); }else if(key.toString().equals("world")){ mos.write("world", key, V); }else if(key.toString().equals("hadoop")){ //输出到hadoop/hadoopfile-r-00000文件 mos.write("hadoopfile", key, V, "hadoop/"); } }
3、在创建job时,定义附加的输出文件,这里的文件名称与第二步设置的文件名相同
Java代码 收藏代码
//定义附加的输出文件 MultipleOutputs.addNamedOutput(job,"hello",TextOutputFormat.class,Text.class,IntWritable.class); MultipleOutputs.addNamedOutput(job,"world",TextOutputFormat.class,Text.class,IntWritable.class); MultipleOutputs.addNamedOutput(job,"hadoopfile",TextOutputFormat.class,Text.class,IntWritable.class);
(二)指定输出命名
1、创建变量
private static MultipleOutputs<Text, Text> mos;
2、初始化变量
在map或者reduce的setup()方法中初始化变量
mos = new MultipleOutputs<Text, Text>(context);
3、使用变量代替context来write
在map()或者reduce()方法中使用mos作输出:
mos.write("outputname", key, new Text(""));
4、关于变量传递
在主类中定义的变量,如定义了一个outputname,需要将其写入conf分发至其它nodemanager:
Configuration conf = new Configuration();//需要将变量分发至所有的nodemanagerconf.set("outputname", outputName);
然后在map/reduce中从context获取这个变量:
context.getConfiguration().get("outputname")
5、关于part-**的输出
使用multioutput改变了默认的输出名称后,原有的part-**也会输出的,此时需要加上:
import org.apache.hadoop.mapreduce.lib.output.LazyOutputFormat;
LazyOutputFormat.setOutputFormatClass(job, TextOutputFormat.class);
这将在有内容写入文件时才创建文件,详细可看:http://stackoverflow.com/questions/14555313/renaming-part-files-in-hadoop-map-reduce
另外,即使不使用multiOutput,如果任务输出中有大量的空文件,也应加上这代码。x
Hadoop使用MultipleOutputs输出多文件或者指定命名相关推荐
- (转载)输出文件的指定行
Preface 最近我不是开始学Linux系统了吗= =,说真的,感觉自己有点蠢= =最近新弄了个QQ号,用来应对闲杂事情,然后突然就想加个Linux相关的群,来谈谈人生,结果问的第一个问题就把我难到 ...
- 遍历指定jar包中class文件名并输出到文件中
import java.io.*; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; i ...
- linux将屏幕输出到文件,Linux命令执行的屏幕输出内容重定向到日志文件
摘要: 作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 快速mark一下这个命令细节,免得以后使用又忘记了 大家都知道可以用echo来输出内容到 ...
- Hadoop的log4j审计日志文件
自定义修改hadoop/conf/log4j.properties hdfs审计日志(Auditlog)记录了用户针对hdfs的所有操作,详细信息包括操作成功与否.用户名称.客户机地址.操作命令.操作 ...
- python3查找文件中指定字符串_Python3在指定路径下递归定位文件中出现的字符串...
[本文出自天外归云的博客园] 脚本功能:在指定的路径下递归搜索,找出指定字符串在文件中出现的位置(行信息). 用到的python特性: 代码如下: import os import sys __all ...
- python下载文件到指定文件夹-python实现指定文件夹下的指定文件移动到指定位置...
# coding:utf-8 import os import shutil import sys reload(sys) sys.setdefaultencoding('utf8') # print ...
- 学python看什么书好1002无标题-如何使用pandas读取txt文件中指定的列(有无标题)
最近在倒腾一个txt文件,因为文件太大,所以给切割成了好几个小的文件,只有第一个文件有标题,从第二个开始就没有标题了. 我的需求是取出指定的列的数据,踩了些坑给研究出来了. import pandas ...
- BAT 批处理命令 - 实现输出当前文件夹下的所有文件夹名的功能实例演示
如下功能为输出当前文件夹下的所有文件夹名并用逗号连接. 需要把 bat 文件放到指定文件夹下执行即可. @echo off for /D %%i in (*) do set /p=%%i,<nu ...
- 成功解决cv2.imwrite(filename, img)代码输出中文文件乱码的问题(cv2.imencode方法解决)
成功解决cv2.imwrite(filename, img)代码输出中文文件乱码的问题(cv2.imencode方法解决) 目录 解决问题 解决思路 1.从网络读取图像数据并转换成图片格式 2.将图片 ...
最新文章
- 吴恩达老师深度学习视频课笔记:构建机器学习项目(机器学习策略)(1)
- mysql通过订单量排序_mysql8 参考手册--通过排序优化
- rails 常用方法
- python实现排序算法_python实现各种排序算法
- python字典的常见操作_Python 字典(Dictionary) 基本操作
- 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 13丨每日新用户统计【难度中等】
- hibernate mysql autocommit_Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?...
- GirlsInAI 近期计划,求扩散,欢迎大家转起来!
- 基于块的linux驱动程序,基于块的Linux驱动程序 块设备驱动 centos内核编译过程 操作系统课程设计...
- apt get 安装mysql5.7_ubuntu16.04下apt-get安装mysql5.7,文件目录结构
- python从键盘获取列表,python – 从5行中的列表列表中获取所有元素
- httpUtils 工具类
- linux的桌面分辨率设置,linux xorg屏幕分辨率设置
- 海康威视Linux下SDK开发(Ubuntu16.04 QT5.10)
- c语言d是什么意思,c d是什么意思
- 使用cfssl签发证书
- 【维修】如何成功做网线?
- linux mv移动文件到指定目录,Linux mv命令使用示例-移动或重命令文件/目录
- java实现筛选_java实现简单的文件筛选
- golang中的rune类型
热门文章
- 【双100%提交】剑指 Offer 09. 用两个栈实现队列
- HashMap方法源码
- 传统公司部署OpenStack(t版)简易介绍(七)——cinder模块部署
- 人生需要往前看,一直回味过去只会迷失,如果已经开始迷失,请回想初心
- python做数据库管理系统_python+Django+mysql+bootstrap前端,数据库一次搞定)从头教你毕设实现一个简易好看的仓储物资管理之类系统...
- 80核处理器_标压版锐龙处理器更香!联想小新Pro 13轻薄笔记本评测
- java序列化Serializable
- java的int、char、long、float、double对byte的转换,在通信的时候会用到
- 请列举你了解的分布式锁_终于搞懂分布式锁是什么了!
- 沃舍尔算法_[数据结构拾遗]图的最短路径算法