[hadoop in Action] 第3章 Hadoop组件
- 管理HDFS中的文件
- 分析MapReduce框架中的组件
- 读写输入输出数据
- import java.io.IOException;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FSDataInputStream;
- import org.apache.hadoop.fs.FSDataOutputStream;
- import org.apache.hadoop.fs.FileStatus;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
- public class PutMerge {
- public static void main(String[] args) throws IOException {
- Configuration conf = new Configuration();
- FileSystem hdfs = FileSystem.get(conf);
- FileSystem local = FileSystem.getLocal(conf);
- Path inputDir = new Path(args[0]); //(1)设定输入目录和输出文件
- Path hdfsFile = new Path(args[1]);
- try {
- FileStatus[] inputFiles = local.listStatus(inputDir); //(2)得到本地文件列表
- FSDataOutputStream out = hdfs.create(hdfsFile); //(3)生成HDFS输出流
- for (int i=0; i<inputFiles.length; i++) {
- System.out.println(inputFiles[i].getPath().getName());
- FSDataInputStream in = local.open(inputFiles[i].getPath()); //(4)打开本地输入流
- byte buffer[] = new byte[256];
- int bytesRead = 0;
- while( (bytesRead = in.read(buffer)) > 0) {
- out.write(buffer, 0, bytesRead);
- }
- in.close();
- }
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- 输入数据;
- 输入数据被分布在节点上;
- 每个map任务处理一个数据分片;
- Mapper输出中间数据;
- 节点间的数据交换在“洗牌”阶段完成;
- 相同key的中间数据进入相同的reducer;
- 存储Reducer的输出。
类
|
描述
|
BooleanWritable
|
标准布尔变量的封装
|
ByteWritable
|
单字节数的封装
|
DoubleWritable
|
双字节数的封装
|
FloatWritable
|
浮点数的封装
|
IntWritable
|
整数的封装
|
LongWritable
|
长整数的封装
|
Text
|
使用UTF8格式的文本封装
|
NullWritable
|
无键值的占位符
|
- import java.io.DataInput;
- import java.io.DataOutput;
- import java.io.IOException;
- import org.apache.hadoop.io.WritableComparable;
- public class Edge implements WritableComparable<Edge> {
- private String departureNode;
- private String arrivalNode;
- public String getDepartureNode() { return departureNode;}
- @Override
- public void readFields(DataInput in) throws IOException { //(1)说明如何读入数据
- departureNode = in.readUTF();
- arrivalNode = in.readUTF();
- }
- @Override
- public void write(DataOutput out) throws IOException { //(2)说明如何写入数据
- out.writeUTF(departureNode);
- out.writeUTF(arrivalNode);
- }
- @Override
- public int compareTo(Edge o) { //(3)定义数据排序
- return (departureNode.compareTo(o.departureNode) != 0)
- ? departureNode.compareTo(o.departureNode)
- : arrivalNode.compareTo(o.arrivalNode);
- }
- }
- void configure(JobConfjob):该函数提取XML配置文件或者应用程序主类中的参数,在数据处理之前调用该函数。
- void close():作为map任务结束前的最后一个操作,该函数完成所有的结尾工作,如关闭数据库连接、打开文件等。
类
|
描述
|
IdentityMapper<k,v>
|
实现Mapper<k,v,k,v>将输入直接映射到输出
|
InverseMapper<k,v>
|
实现Mapper<k,v,v,k>反转键/值对
|
RegexMapper<k>
|
实现Mapper<k,text,text,LongWritable>,为每个常规表达式的匹配项生成一个(match,1)对
|
TokenCountMapper<k>
|
实现Mapper<k,text,text,LongWritable>,当输入的值为分词时,生成一个(token,1)对
|
类
|
描述
|
IdentityReudcer<k,v>
|
实现Reducer<k,v,k,v>将输入直接映射到输出
|
LongSumReducer<k>
|
实现<k,LongWritable,k,LongWritable>, 计算与给定键相对应的所有值的和
|
- public class EdgePartitioner implements Partitioner<Edge, Writable>
- {
- @verride
- public int getPartition(Edge key, Writable value, int numPartitions)
- {
- return key.getDepartureNode().hashCode() % numPartitions;
- }
- @verride
- public void configure(JobConf conf) { }
- }
- import org.apache.hadoop.fs.Path;
- import org.apache.hadoop.io.Text;
- import org.apache.hadoop.io.LongWritable;
- import org.apache.hadoop.mapred.FileInputFormat;
- import org.apache.hadoop.mapred.FileOutputFormat;
- import org.apache.hadoop.mapred.JobClient;
- import org.apache.hadoop.mapred.JobConf;
- import org.apache.hadoop.mapred.lib.TokenCountMapper;
- import org.apache.hadoop.mapred.lib.LongSumReducer;
- public class WordCount2 {
- public static void main(String[] args) {
- JobClient client = new JobClient();
- JobConf conf = new JobConf(WordCount2.class);
- FileInputFormat.addInputPath(conf, new Path(args[0]));
- FileOutputFormat.setOutputPath(conf, new Path(args[1]));
- conf.setOutputKeyClass(Text.class);
- conf.setOutputValueClass(LongWritable.class);
- conf.setMapperClass(TokenCountMapper.class);
- conf.setCombinerClass(LongSumReducer.class);
- conf.setReducerClass(LongSumReducer.class);
- client.setConf(conf);
- try {
- JobClient.runJob(conf);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
InputFormat
|
描述
|
TextInputFormat
|
在文本文件中每一行均为一个记录。键(key)为一行的字节偏移,而值(value)为一行的内容
key: LongWritable
value: Text
|
KeyValueTextInputFormat
|
在文本文件中的每一行均为一个记录。以每行的第一个分隔符为界,分隔符之前的是键(key),之后的是值(value)。分离器在属性key.value.separator.in.input.line中设定,默认为制表符(\t)。
key: Text
Value: Text
|
SequenceFileInputFormat<k,v>
|
用于读取序列文件的InputFormat。键和值由用户定义。序列文件为hadoop专用的压缩二进制文件格式。它专用于一个MapReduce作业和其他MapReduce作业之间传送数据。
key: K(用户定义)
value: V(用户定义)
|
NLineInputFormat
|
与TextInputFormat相同,但每个分片一定有N行。N在属性mapred.line.input.format.linespermap中设定,默认为1.
key: LongWritable
value: Text
|
OutputFormat
|
描述
|
TextOutputFormat<k,v>
|
将每个记录写为一行文本。键和值以字符串的形式写入,并以制表符(\t)分隔。这个分隔符可以在属性mapred.textoutputformat.separator中修改 |
SequenceFileOutputFormat<k,v>
|
以hadoop专有序列文件格式写入键/值对。与SequenceFileInputForamt配合使用 |
NullOutputFormat<k,v>
|
无输出 |
[hadoop in Action] 第3章 Hadoop组件的更多相关文章
- [Hadoop in Action] 第1章 Hadoop简介
编写可扩展.分布式的数据密集型程序和基础知识 理解Hadoop和MapReduce 编写和运行一个基本的MapReduce程序 1.什么是Hadoop Hadoop是一个开源的框架,可编写和运 ...
- [Hadoop in Action] 第7章 细则手册
向任务传递定制参数 获取任务待定的信息 生成多个输出 与关系数据库交互 让输出做全局排序 1.向任务传递作业定制的参数 在编写Mapper和Reducer时,通常会想让一些地方可以配 ...
- [Hadoop in Action] 第6章 编程实践
Hadoop程序开发的独门绝技 在本地,伪分布和全分布模式下调试程序 程序输出的完整性检查和回归测试 日志和监控 性能调优 1.开发MapReduce程序 [本地模式] 本地模式 ...
- [Hadoop in Action] 第5章 高阶MapReduce
链接多个MapReduce作业 执行多个数据集的联结 生成Bloom filter 1.链接MapReduce作业 [顺序链接MapReduce作业] mapreduce-1 | mapr ...
- [Hadoop in Action] 第4章 编写MapReduce基础程序
基于hadoop的专利数据处理示例 MapReduce程序框架 用于计数统计的MapReduce基础程序 支持用脚本语言编写MapReduce程序的hadoop流式API 用于提升性能的Combine ...
- Hadoop专业解决方案-第13章 Hadoop的发展趋势
一.前言: 非常感谢Hadoop专业解决方案群:313702010,兄弟们的大力支持,在此说一声辛苦了,经过两周的努力,已经有啦初步的成果,目前第13章 Hadoop的发展趋势小组已经翻译完成,在此对 ...
- [hadoop读书笔记] 第四章 Hadoop I/O操作
P92 压缩 P102 序列化 序列化:将结构化对象转为字节流便于在网上传输或写到磁盘进行永久性存储的过程 用于进程之间的通信或者数据的永久存储 反序列化:将字节流转为结构化对象的逆过程 Hadoop ...
- [Hadoop in Action] 第2章 初识Hadoop
Hadoop的结构组成 安装Hadoop及其3种工作模式:单机.伪分布和全分布 用于监控Hadoop安装的Web工具 1.Hadoop的构造模块 (1)NameNode(名字节点) ...
- Hadoop专业解决方案-第12章 为Hadoop应用构建企业级的安全解决方案
一.前言: 非常感谢Hadoop专业解决方案群:313702010,兄弟们的大力支持,在此说一声辛苦了,春节期间,项目进度有所延迟,不过元宵节以后大家已经步入正轨, 目前第12章 为Hadoop应用构 ...
随机推荐
- Failed to stop iptables.service: Unit iptables.service not loaded.
redhat 7 [root@lk0 ~]# service iptables stop Redirecting to /bin/systemctl stop iptables.service Fai ...
- C#学习总结之集合
一.集合接口和类型 命名空间: 集合类型 命名空间 一般集合 System.Collections 泛型集合 System.Collections.Generic 特定类型集合 Syst ...
- ★Kali信息收集~★6.Dmitry:汇总收集
概述: DMitry(Deepmagic Information Gathering Tool)是一个一体化的信息收集工具.它可以用来收集以下信息: 1. 端口扫描 2. whois主机IP和域名信息 ...
- 【解决方案】cvc-complex-type.2.4.a: Invalid content was found starting with element 'init-param'. One of '{"http://java.sun.com/xml/ns/javaee":run-as, "http://java.sun.com/xml/ns/javaee":security-role-r
[JAVA错误] cvc-complex-type.2.4.a: Invalid content was found starting with element 'init-param'. One o ...
- ASP.NET Core 阶段性总结
自从年前用 ASP.NET 5 磕磕绊绊重写了一个项目后 (2015.12),就没怎么关注 ASP.NET 5 相关内容了,为啥?因为实际应用问题太多,而且不是正式版本,变化实在太快,可能你今天了解的 ...
- jQuery源码学习感想
还记得去年(2015)九月份的时候,作为一个大四的学生去参加美团霸面,结果被美团技术总监教育了一番,那次问了我很多jQuery源码的知识点,以前虽然喜欢研究框架,但水平还不足够来研究jQuery源码, ...
- 一个可随意定位置的带色Toast——开源代码Crouton的简单使用
今天在公司要求的代码中,要求显示的提示能够更加具有多样化,而不是简单的Toast字样,第一想法肯定是自定义View呀,结果在浏览中发现还有这样的一个开源代码——Crouton. 几经折腾,发现这个东西 ...
- Java程序猿 :2016 年终小结
01 2016年即将进入尾声,不禁感叹,在学校的时候过日子是以天来算,而现在是以星期来算,甚至是月份. 这才发现,时间过得真快.这一年,遇到了很多人,很多事. 机缘巧合,年中去了趟帝都,爬了长城,游了 ...
- golang枚举类型 - iota用法拾遗
在c#.java等高级语言中,经常会用到枚举类型来表示状态等.在golang中并没有枚举类型,如何实现枚举呢?首先从枚举的概念入手. 1.枚举类型定义 从百度百科查询解释如下:http://baike ...
- External Configuration Store Pattern 外部配置存储模式
Move configuration information out of the application deployment package to a centralized location. ...