编程时需要注意:
1、实例化job后,不要再使用原来的configuration,得通过job.getCongfigure()来进行参数的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
2、map输出的keyvalue与reduce的输出keyvalue对象不统一,这种情况不应该把reduce作为combine类。
1 2 3 4 5 6 7 8 9 10 |
|
这样的错误,出现后,如果不认认真真检查的话,比较难发现问题的!
如果map和reduce的keyvalue类型不同时,不要把Reduce的类作为Combine的处理类!
3、聚合类型的操作才使用reduce
- GOOD: sqoop导数据功能
- WORSE: 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
配置属性注意点:
- 开启trash
<property> <name>fs.trash.interval</name> <value>720</value> </property>
- 去除mapreduce完成后”SUCCESS”,”history目录”
- 共享jvm
不要关闭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”); “` 可以在执行任务时,新建一个发送心跳的线程,告诉jobtracker当前的任务没有问题。
pid的存放目录最好自定义。长期放置在tmp下的文件将会被清除。 http://winseclone.iteye.com/blog/1772989
export HADOOP_PID_DIR=/var/hadoop/pids
Hadoop入门资料:
–END