`

使用hadoop编写mapreduce程序的注意点

阅读更多

编程时需要注意:

1、实例化job后,不要再使用原来的configuration,而需通过job.getCongfigure()来进行参数的配置

 

public static Job createSubmittableJob(Configuration conf, String[] args) 
		throws IOException {
	String tableName = args[0];

	conf.set(TableInputFormat.INPUT_TABLE, tableName);
	conf.set(TableInputFormat.SCAN, 
		ScanAccessor.getTableInputFormatScan(conf, tableName));
		
	Job job = new Job(conf, 
		Index.class.getSimpleName() + "_" + tableName + ":" + Utils.now());
	job.setJarByClass(Index.class);

	// conf.set(..., ...);
	job.getConfiguration().set(...

 

2、map输出的keyvalue与reduce的输出keyvalue对象不统一。但是还是把reduce作为combine类。

 

job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);

job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(FloatWritable.class);

job.setOutputKeyClass(Text.class);
//job.setOutputValueClass(FloatWritable.class);
job.setOutputValueClass(Text.class);

 

这样的错误,出现后,如果不是认真的查看的话,还是比较难发现的!

如果map和reduce的keyvalue类型不同时,不要把Reduce的类作为Combine的处理类!

 

3、聚合类型的操作才使用reduce

  OK: sqoop导数据功能

  DAD: hadoop contrib index (详...)

 

4、命令行参数的顺序

-D参数,以及Hadoop内置的参数, 必须放在class后面,不能跟在args

 

· ERROR

% hadoop jar hadoop-*-examples.jar sort -r numbers.seq sorted \
-inFormat org.apache.hadoop.mapred.SequenceFileInputFormat \
-outFormat org.apache.hadoop.mapred.SequenceFileOutputFormat \
-outkey org.apache.hadoop.io.IntWritable \
-outvalue org.apache.hadoop.io.Text 

 

· OK

% hadoop jar hadoop-*-examples.jar sort -r \
-inFormat org.apache.hadoop.mapred.SequenceFileInputFormat \
-outFormat org.apache.hadoop.mapred.SequenceFileOutputFormat \
-outkey org.apache.hadoop.io.IntWritable \
-outvalue org.apache.hadoop.io.Text \
numbers.seq sorted

 

配置属性注意点:

1、开启trash

 

<property>
<name>fs.trash.interval</name>
<value>720</value>
</property>

 

2、去除mapreduce完成后"SUCCESS","history目录"

3、共享jvm

4、不要关闭mapreduce的超时

 

Configuration conf = ...
conf.set("hadoop.job.history.user.location", "none");
conf.setBoolean("mapreduce.fileoutputcommitter.marksuccessfuljobs", false);

conf.set("mapred.job.reuse.jvm.num.tasks", "-1");

// conf.set("mapred.task.timeout", "0");

 

5、 pid的存放目录最好自定义。长期放置在tmp下的文件会被清除。

 http://winseclone.iteye.com/blog/1772989

 

export HADOOP_PID_DIR=/var/hadoop/pids

 

Hadoop入门资料:

1 官网

2 https://ccp.cloudera.com/display/DOC/Hadoop+Tutorial

 

 

分享到:
评论

相关推荐

    Hadoop集群搭建部署与MapReduce程序关键点个性化开发.doc

    本文将详细阐述如何搭建Hadoop集群以及进行MapReduce程序的关键点个性化开发。 首先,我们来看任务1——Hadoop集群的部署。这一步至关重要,因为它为整个大数据处理系统提供了基础架构。在虚拟机中安装Ubuntu Kylin...

    java操作hadoop之mapreduce计算整数的最大值和最小值实战源码

    在这个实例中,我们将创建一个简单的MapReduce程序,该程序读取包含整数的文件,找出最大值和最小值。以下是实现这个功能的关键步骤: 1. **设置环境**:确保已经安装了Hadoop,并配置了相应的环境变量。同时,需要...

    Hadoop mapreduce实现wordcount

    在这个案例中,我们将深入探讨如何在 Hadoop 环境中使用 MapReduce 实现 WordCount。 【描述】在 Hadoop 环境中,WordCount 的实现主要涉及两个关键阶段:Map 阶段和 Reduce 阶段。Map 阶段将原始输入数据(通常是...

    使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0

    ### 使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0 #### Hadoop 2.x 版本变化及依赖分析 在Hadoop 2.x版本中,相较于早期版本,其架构和依赖库有了明显的变化。在早期版本如1.x中,所有的依赖都集中在`...

    Java操作Hadoop Mapreduce基本实践源码

    在Java中实现MapReduce程序,我们需要创建两个类:`Mapper`和`Reducer`,分别对应Map和Reduce阶段的逻辑。此外,还需要配置Job对象,指定输入输出路径、Mapper和Reducer类以及其他的Hadoop配置参数。 例如,一个...

    大数据-hadoop-mapreduce代码

    为了运行这些MapReduce程序,开发者需要设置Hadoop环境,包括安装Hadoop,配置集群参数,以及正确设置Hadoop的环境变量。此外,代码中可能还会涉及到Hadoop的相关API,如`InputFormat`、`OutputFormat`和`...

    window下eclipse中运行mapreduce程序所需要的Hadoop全部jar包

    6. **测试和运行**:编写MapReduce程序后,可以使用Eclipse的“运行”菜单选择“运行配置”来创建一个MapReduce配置。配置包括指定主类、输入输出路径、集群地址等参数。然后点击“运行”执行程序。 7. **提交作业*...

    hadoop eclipse mapreduce 下开发所有需要用到的 JAR 包

    在Hadoop生态系统中,Eclipse是一个常用的集成开发环境(IDE),用于编写MapReduce程序。MapReduce是一种编程模型,用于大规模数据集的并行处理。它将大数据任务分解为两个主要阶段:映射(Map)和化简(Reduce)。...

    Hadoop原理与技术MapReduce实验

    (2)编写MepReduce程序 (3)调试和运行MepReduce程序 (4)完成上课老师演示的内容 二、实验环境 Windows 10 VMware Workstation Pro虚拟机 Hadoop环境 Jdk1.8 二、实验内容 1.单词计数实验(wordcount) (1)输入...

    第一个Mapreduce程序.pdf

    编写MapReduce程序通常需要以下jar包:hadoop-client, hadoop-common, hadoop-hdfs, hadoop-mapreduce-client-core和commons-cli。这些jar包可以通过Maven的pom文件来导入,从而确保代码能够正常编译和运行。 接...

    windows下编写mapreduce程序

    在Windows上编写MapReduce程序时,UnxUtils可以帮助你模拟Linux环境,因为Hadoop通常是与Unix/Linux环境一起使用的。 3. **编程语言**:MapReduce程序通常用Java编写,因为它是最兼容的编程语言,Hadoop的API也主要...

    Hadoop_MapReduce教程

    - **Hadoop Pipes**:提供了 C++ API,允许开发者使用 C++ 编写 MapReduce 程序。 #### 六、Hadoop MapReduce 的局限性 尽管 Hadoop MapReduce 在大规模数据处理方面表现出色,但它也有一些局限性: - **不适合...

    使用hadoop-streaming运行Python编写的MapReduce程序.rar

    这个压缩包“使用hadoop-streaming运行Python编写的MapReduce程序.rar”显然是一个教程或示例,旨在指导用户如何利用Python编写MapReduce任务,并通过Hadoop Streaming进行执行。 MapReduce是一种编程模型,由...

    Hadoop_MapReduce教程.doc

    如Hadoop Streaming允许使用任意可执行程序(如Shell脚本)作为mapper和reducer,而Hadoop Pipes则是一个C++ API,可用于创建MapReduce应用程序。 7. **输入与输出**: MapReduce作业的输入和输出都是键值对的形式...

    大数据 hadoop mapreduce 词频统计

    【大数据Hadoop MapReduce词频统计】 大数据处理是现代信息技术领域的一个重要概念,它涉及到海量数据的存储、管理和分析。Hadoop是Apache软件基金会开发的一个开源框架,专门用于处理和存储大规模数据集。Hadoop的...

    Hadoop MapReduce实现tfidf源码

    在Hadoop 2.7.7版本中,开发MapReduce程序通常需要使用Java编程语言。你需要导入Hadoop的相关库,创建Mapper和Reducer类,并实现它们的map()、reduce()方法。此外,还需要配置Job参数,如输入路径、输出路径、Mapper...

    hadoop eclipse mapreduce下开发所有需要用到的JAR包

    在Hadoop生态系统中,Eclipse是一个常用的集成开发环境(IDE),用于编写MapReduce程序。MapReduce是一种编程模型,由Google提出,主要用于大规模数据集的并行处理。它将复杂的分布式计算任务分解为两个主要阶段:...

    深入探究如何使用Java编写MapReduce程序.rar

    本篇将深入探讨如何使用Java编程语言来编写MapReduce程序。 一、MapReduce模型概述 MapReduce包含两个主要阶段:Map阶段和Reduce阶段。Map阶段将输入数据分割成多个小块,然后对每个数据块应用一个用户定义的Map...

Global site tag (gtag.js) - Google Analytics