- 浏览: 218984 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (114)
- hbase (3)
- akka (7)
- hdfs (6)
- mapreduce (1)
- hive (0)
- zookeeper (8)
- storm (0)
- geese (0)
- leaf (0)
- stormbase (0)
- scala (2)
- oozie (11)
- zeromq (1)
- netty (3)
- mongodb (0)
- sqoop (2)
- flume (3)
- mahout (1)
- redis (0)
- lucene (1)
- solr (1)
- ganglia (3)
- 分布式理论 (2)
- hadoop (42)
- others (14)
- mq (1)
- clojure (3)
- flume ng (1)
- linux (1)
- esper (0)
最新评论
-
javalogo:
[b][i][u]引用[list]
[*][*][flash= ...
什么是Flume -
leibnitz:
what are they meanings
Hadoop Ganglia Metric Item -
di1984HIT:
没用过啊。
akka 介绍-Actor 基础 -
di1984HIT:
写的不错。
Hadoop管理-集群维护 -
developerinit:
很好,基本上介绍了
什么是Flume
转发:http://jbm3072.iteye.com/blog/1112741
最近在编写Hadoop 的MapReduce程序的时侯,学到了不少东西,记下来备忘:
1. Mapper和Reducer的上下文执行环境信息:
在编写Mapper类时,一般使用如下的类继承声明:
Java代码
public class DistinctProcessor extends MapReduceBase implements Mapper<Text,Text,Text,Text> {
MapReduceBase里面声明了如下方法:
Java代码
public class MapReduceBase
implements Closeable, JobConfigurable
{
public void close()
throws IOException
{
}
public void configure(JobConf job)
{
}
}
MapReduce框架在创建Mapper对象后,会调用configure方法,实现类可以从job获得到想要的信息,供map函数使用。不过MapReduce在JobConf也放置了关于MapTask的信息,供实现类使用:
Java代码
mapred.job.id String The job id
mapred.jar String job.jar location in job directory
job.local.dir String The job specific shared scratch space
mapred.tip.id String The task id
mapred.task.id String The task attempt id
mapred.task.is.map boolean Is this a map task
mapred.task.partition int The id of the task within the job
map.input.file String The filename that the map is reading from
map.input.start long The offset of the start of the map input split
map.input.length long The number of bytes in the map input split
mapred.work.output.dir String The task's temporary output directory
map.input.file表示读入的文件,这个比较有用,尤其是在根据不同文件名称进行不同处理的时候,可以据此来进行处理。
mapred.tip.id和mapred.job.id表示task和Job id。map.input.length表示此次map处理的文件长度。
总结: 借助Map和Reducer的上下文信息,我们可以在map和reduce函数中增加额外的判断和处理。
2. 使用MultipleOutputs使程序支持多输出
有时候,我们的输出可能不是一类,而是多类,例如统计每月和每周的交易次数。我们可以在collect(key,value)中的key加上不同的标识来表示不同的输出类型。但我们可能更想得到的是两个不同的文件,一个文件记录每月的交易次数,一个文件则记录每周的交易次数。使用MultiOuputs就可以做到。在Hadoop的文档中介绍了相关的例子,这里贴出来:
Java代码
JobConf conf = new JobConf();
conf.setInputPath(inDir);
FileOutputFormat.setOutputPath(conf, outDir);
conf.setMapperClass(MOMap.class);
conf.setReducerClass(MOReduce.class);
...
// Defines additional single text based output 'text' for the job
MultipleOutputs.addNamedOutput(conf, "text", TextOutputFormat.class,
LongWritable.class, Text.class);
// Defines additional multi sequencefile based output 'sequence' for the
// job
MultipleOutputs.addMultiNamedOutput(conf, "seq",
SequenceFileOutputFormat.class,
LongWritable.class, Text.class);
...
JobClient jc = new JobClient();
RunningJob job = jc.submitJob(conf);
...
Job configuration usage pattern is:
public class MOReduce implements
Reducer<WritableComparable, Writable> {
private MultipleOutputs mos;
public void configure(JobConf conf) {
...
mos = new MultipleOutputs(conf);
}
public void reduce(WritableComparable key, Iterator<Writable> values,
OutputCollector output, Reporter reporter)
throws IOException {
...
mos.getCollector("text", reporter).collect(key, new Text("Hello"));
mos.getCollector("seq", "A", reporter).collect(key, new Text("Bye"));
mos.getCollector("seq", "B", reporter).collect(key, new Text("Chau"));
...
}
public void close() throws IOException {
mos.close(); //此处一定要加上!!!!!!!
...
}
}
需要特别注意的就是close方法里面必须要有mos.close(),否则输出无法写出到文件中。
3.使用MultipleInputs
MultipleOutputs支持多输出,那MultipleInputs自然是指支持多输入啦。但是我们在使用FileInputFormat的addInputPath时,就会发现FileInputFormat支持多输入。但这并不意味着MulitpleInputs就无用武之地了。我们看看MultipleInputs的方法,就可以看到MultipleInputs的作用了:
Java代码
public static void addInputPath(JobConf conf, Path path, Class<? extends InputFormat> inputFormatClass) ;
public static void addInputPath(JobConf conf, Path path, Class<? extends InputFormat> inputFormatClass, Class<? extends Mapper> mapperClass)
根据提供的方法,就可以看到MultipleInputs的强大了吧。也就是说使用MultipleInputs你可以使用两个完全不同的输入类型,一个可能是TextInputFormat,另一个则可能是SeqFileInputFormat,也可能是DBInputFormat。而针对每一种输入类型,你还可以指定对应的Mapper类,强大的MultipleInputs可以对不同的输入类型进行融合,消化,然后传给reduce方法进行处理。
4. 多个Job的依赖关系JobControl
使用JobControl可以控制多个Job之间的依赖关系。实现workflow的效果。例如Job2需要在Job1干完之后才能开始干活,那该怎么办?总不能Job1启动执行结束后再启动Job2吧。
使用JobControl可以实现工作流。
在JobControl中可以设置Job与Job之间的依赖关系。JobControl根据依赖关系进行Job的调度。 JobControl实现了Runnable接口,意味着这个类可以在线程中启动运行。在运行时,我们可以调用JobControl的getRunningJobs获取到正在运行的Job。Job里面的JobClient可以得到Job运行的详细信息。
最近在编写Hadoop 的MapReduce程序的时侯,学到了不少东西,记下来备忘:
1. Mapper和Reducer的上下文执行环境信息:
在编写Mapper类时,一般使用如下的类继承声明:
Java代码
public class DistinctProcessor extends MapReduceBase implements Mapper<Text,Text,Text,Text> {
MapReduceBase里面声明了如下方法:
Java代码
public class MapReduceBase
implements Closeable, JobConfigurable
{
public void close()
throws IOException
{
}
public void configure(JobConf job)
{
}
}
MapReduce框架在创建Mapper对象后,会调用configure方法,实现类可以从job获得到想要的信息,供map函数使用。不过MapReduce在JobConf也放置了关于MapTask的信息,供实现类使用:
Java代码
mapred.job.id String The job id
mapred.jar String job.jar location in job directory
job.local.dir String The job specific shared scratch space
mapred.tip.id String The task id
mapred.task.id String The task attempt id
mapred.task.is.map boolean Is this a map task
mapred.task.partition int The id of the task within the job
map.input.file String The filename that the map is reading from
map.input.start long The offset of the start of the map input split
map.input.length long The number of bytes in the map input split
mapred.work.output.dir String The task's temporary output directory
map.input.file表示读入的文件,这个比较有用,尤其是在根据不同文件名称进行不同处理的时候,可以据此来进行处理。
mapred.tip.id和mapred.job.id表示task和Job id。map.input.length表示此次map处理的文件长度。
总结: 借助Map和Reducer的上下文信息,我们可以在map和reduce函数中增加额外的判断和处理。
2. 使用MultipleOutputs使程序支持多输出
有时候,我们的输出可能不是一类,而是多类,例如统计每月和每周的交易次数。我们可以在collect(key,value)中的key加上不同的标识来表示不同的输出类型。但我们可能更想得到的是两个不同的文件,一个文件记录每月的交易次数,一个文件则记录每周的交易次数。使用MultiOuputs就可以做到。在Hadoop的文档中介绍了相关的例子,这里贴出来:
Java代码
JobConf conf = new JobConf();
conf.setInputPath(inDir);
FileOutputFormat.setOutputPath(conf, outDir);
conf.setMapperClass(MOMap.class);
conf.setReducerClass(MOReduce.class);
...
// Defines additional single text based output 'text' for the job
MultipleOutputs.addNamedOutput(conf, "text", TextOutputFormat.class,
LongWritable.class, Text.class);
// Defines additional multi sequencefile based output 'sequence' for the
// job
MultipleOutputs.addMultiNamedOutput(conf, "seq",
SequenceFileOutputFormat.class,
LongWritable.class, Text.class);
...
JobClient jc = new JobClient();
RunningJob job = jc.submitJob(conf);
...
Job configuration usage pattern is:
public class MOReduce implements
Reducer<WritableComparable, Writable> {
private MultipleOutputs mos;
public void configure(JobConf conf) {
...
mos = new MultipleOutputs(conf);
}
public void reduce(WritableComparable key, Iterator<Writable> values,
OutputCollector output, Reporter reporter)
throws IOException {
...
mos.getCollector("text", reporter).collect(key, new Text("Hello"));
mos.getCollector("seq", "A", reporter).collect(key, new Text("Bye"));
mos.getCollector("seq", "B", reporter).collect(key, new Text("Chau"));
...
}
public void close() throws IOException {
mos.close(); //此处一定要加上!!!!!!!
...
}
}
需要特别注意的就是close方法里面必须要有mos.close(),否则输出无法写出到文件中。
3.使用MultipleInputs
MultipleOutputs支持多输出,那MultipleInputs自然是指支持多输入啦。但是我们在使用FileInputFormat的addInputPath时,就会发现FileInputFormat支持多输入。但这并不意味着MulitpleInputs就无用武之地了。我们看看MultipleInputs的方法,就可以看到MultipleInputs的作用了:
Java代码
public static void addInputPath(JobConf conf, Path path, Class<? extends InputFormat> inputFormatClass) ;
public static void addInputPath(JobConf conf, Path path, Class<? extends InputFormat> inputFormatClass, Class<? extends Mapper> mapperClass)
根据提供的方法,就可以看到MultipleInputs的强大了吧。也就是说使用MultipleInputs你可以使用两个完全不同的输入类型,一个可能是TextInputFormat,另一个则可能是SeqFileInputFormat,也可能是DBInputFormat。而针对每一种输入类型,你还可以指定对应的Mapper类,强大的MultipleInputs可以对不同的输入类型进行融合,消化,然后传给reduce方法进行处理。
4. 多个Job的依赖关系JobControl
使用JobControl可以控制多个Job之间的依赖关系。实现workflow的效果。例如Job2需要在Job1干完之后才能开始干活,那该怎么办?总不能Job1启动执行结束后再启动Job2吧。
使用JobControl可以实现工作流。
在JobControl中可以设置Job与Job之间的依赖关系。JobControl根据依赖关系进行Job的调度。 JobControl实现了Runnable接口,意味着这个类可以在线程中启动运行。在运行时,我们可以调用JobControl的getRunningJobs获取到正在运行的Job。Job里面的JobClient可以得到Job运行的详细信息。
发表评论
-
Hadoop TestDFSIO
2013-04-21 21:02 2433@VM [bigdata@bigdata hadoo ... -
Hadoop NNBENCH
2013-04-21 20:46 1631@VM [bigdata@bigdata hadoop]$ ... -
Hadoop 安装手册
2013-04-08 15:47 1194Hadoop 安装手册 软件准备 ... -
What do real life hadoop workloads look like
2012-09-10 15:52 833http://www.cloudera.com/blog/20 ... -
CDH4 HA 切换时间
2012-09-05 15:15 4373blocksize:35M filesize 96M zk-s ... -
CDH4 HA 切换
2012-09-05 10:51 1386HA 切换问题 切换时间太长。。。 copy 0 ... ... -
Hadoop CDh4 Standby HA 启动过程
2012-08-02 11:40 2863根据日志: StandBy NN启动过程 1.获得Active ... -
CDH4 HA test
2012-08-01 14:55 2647场景: NN HA 设置成功,HA切换客户端出现异 ... -
Hadoop TextOutput
2012-07-29 21:08 908TextOutputFormat 分隔符参数: mapredu ... -
Hadoop SteamXMLRecordReader
2012-07-28 23:59 705StreamXmlRecordReader 设置属性 str ... -
Hadoop NLineInputFormat
2012-07-28 23:52 1648NLineInputFormat 重写了splits 设置 ... -
KeyValueTextInputFormat
2012-07-28 23:40 954key/value 分割符 mapreduce.input. ... -
Hadoop 控制split尺寸
2012-07-28 23:08 1338三个参数决定Map的Split尺寸 1.mapred.min ... -
Setting up Disks for Hadoop
2012-07-22 12:13 874Setting up Disks for Hadoop He ... -
Upgrade hadoop need think about it
2012-07-21 17:17 884Compatibility When movin ... -
Hadoop 0.23 config differ from 0.20.205
2012-07-21 17:14 923http://hadoop.apache.org/common ... -
Hadoop hdfs block 状态
2012-07-15 13:37 7231.In Service -
Hadoop 配置不当引起集群不稳
2012-07-05 15:35 1026配置不当内容 资源配置不当:内存、文件句柄数量、磁盘空间 ... -
Hadoop管理-集群维护
2012-07-03 15:27 50051.检查HDFS状态 fsck命令 1)f ... -
Hadoop Ganglia Metric Item
2012-06-27 11:13 2026dfs.FSDirectory.files_delete ...
相关推荐
《Hadoop MapReduce实战手册》是一本专注于大数据处理技术的专著,主要针对Apache Hadoop中的MapReduce框架进行了深入的探讨。MapReduce是Hadoop生态系统中的核心组件之一,用于处理和生成大规模数据集。该书旨在...
在Hadoop 2.7.7版本中,开发MapReduce程序通常需要使用Java编程语言。你需要导入Hadoop的相关库,创建Mapper和Reducer类,并实现它们的map()、reduce()方法。此外,还需要配置Job参数,如输入路径、输出路径、Mapper...
可能包括了 Java 代码示例,讲解如何创建 MapReduce 程序,并将其提交到 Hadoop 集群执行。 7. **运行与调试**: 在实际环境中,我们需要配置 Hadoop 集群,设置输入文件路径,编译并打包 WordCount 程序,最后...
【大数据Hadoop MapReduce词频统计】 大数据处理是现代信息技术领域的一个重要概念,它涉及到海量数据的存储、管理和分析。Hadoop是Apache软件基金会开发的一个开源框架,专门用于处理和存储大规模数据集。Hadoop的...
在大数据处理领域,Hadoop MapReduce是一个至关重要的组件,它为海量数据的并行处理提供了分布式计算框架。本文将深入探讨如何使用Java编程语言来操作Hadoop MapReduce进行基本实践,通过源码分析来理解其核心工作...
《Hadoop MapReduce Cookbook 源码》是一本专注于实战的书籍,旨在帮助读者通过具体的例子深入理解并掌握Hadoop MapReduce技术。MapReduce是大数据处理领域中的核心组件,尤其在处理大规模分布式数据集时,它的重要...
实验报告的标题为“云计算技术实验报告三运行Hadoop MapReduce程序”,这表明实验的核心是了解和实践Hadoop MapReduce的编程模型。MapReduce是一种分布式计算框架,常用于处理和生成大规模数据集,由Google提出并被...
本文将深入探讨如何使用Python来编写Hadoop MapReduce程序,以实现微博关注者之间的相似用户分析。这个任务的关键在于理解并应用分布式计算原理,以及熟悉Python编程语言在大数据环境下的应用。 首先,Hadoop ...
附件是一个简单的 Hadoop MapReduce 程序示例,用于统计文本文件中单词出现的次数。、 要运行这个程序,你需要将上述代码保存为 .java 文件,然后编译并打包成一个 JAR 文件。之后,你可以使用 Hadoop 的命令行工具...
### Hadoop MapReduce V2 知识点概览 #### 一、Hadoop MapReduce V2 生态系统介绍 **Hadoop MapReduce V2** 是Hadoop生态系统中的一个关键组件,用于处理大规模数据集。相较于V1版本,V2版本在架构上进行了重大...
* WordCount 程序编写及代码分析 * 新建一个 MapReduce 工程 * 修改源程序 * 上传处理数据 * 运行以及结果分析 * map 程序分析 * reduce 程序分析 * WordCount 主程序分析 MapReduce 编程模型 MapReduce 编程模型...
在大数据处理领域,Apriori算法与Hadoop MapReduce的结合是实现大规模数据挖掘的关键技术之一。Apriori算法是一种经典的关联规则学习算法,用于发现数据集中频繁出现的项集,进而挖掘出有趣的关联规则。而Hadoop ...
1、程序设计模式不容易使用,而且 Hadoop 的 Map Reduce API 太过低级,很难提高开发者的效率。 2、有运行效率问题,MapReduce 需要将中间产生的数据保存到硬盘中,因此会有读写数据延迟问题。 3、不支持实时处理...
它包含必要的工具和资源,帮助你配置Hadoop环境,编写并执行MapReduce程序,从而深入理解分布式计算的核心概念。在学习过程中,记得结合文档资料,实践操作,不断调试和优化,才能更好地掌握这一技术。
Hadoop MapReduce v2 Cookbook (第二版), Packt Publishing
Hadoop MapReduce 教程概述 Hadoop MapReduce 是 Hadoop 生态系统中的一部分,它是一种可靠的、可扩展的并行处理框架,用于处理大规模数据集。MapReduce 是一种编程模型,它将计算任务分解为两个阶段:Map 阶段和 ...
本书《Hadoop MapReduce v2 Cookbook》会详细介绍如何使用Hadoop MapReduce v2进行大数据处理,包括编写MapReduce程序、调试、性能优化等方面的知识。读者将学习到如何利用Java API实现自定义Mapper和Reducer,以及...
基于Hadoop Mapreduce 实现酒店评价文本情感分析(python源码+项目说明).zip基于Hadoop Mapreduce 实现酒店评价文本情感分析(python源码+项目说明).zip基于Hadoop Mapreduce 实现酒店评价文本情感分析(python...