分享

Eclipse与命令行执行的差异

Riordon 发表于 2014-10-23 09:25:54 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 12 17025
代码中通过job.setNumReduceTasks(19);在eclipse中执行结果:

2.png
在打包成.jar在命令行上执行:

3.png

已有(12)人评论

跳转到指定楼层
bioger_hit 发表于 2014-10-23 10:56:01
在一般情况下,Hadoop 每一个 Reducer 产生一个输出文件,文件以part-r-00000、part-r-00001 的方式进行命名。

如果需要人为的控制输出文件的命名或者每一个 Reducer 需要写出多个输出文件时,可以采用 MultipleOutputs 类来完成。


MultipleOutputs 采用输出记录的键值对(output Key 和 output Value)或者任意字符串来生成输出文件的名字,文件一般以 name-r-nnnnn 的格式进行命名,其中 name 是程序设置的任意名字;nnnnn 表示分区号。MultipleOutputs 的使用方式 的使用方式: :: :





也就是说你设置的reduce为19在集群上生效了但是在eclipse中没有生效,eclipse在运行的时候默认还是一个reduce。可以尝试下面,通过multipleOutputs来实现看看,是否可以控制多个输出







想要使用 MultipeOutputs,需要完成以下四个步骤:

1. 在 Reducer 中声明 MultipleOutputs 的变量
private MultipleOutputs<NullWritable, Text> multipleOutputs;

2. 在 Reducer 的 setup 函数中进行 MultipleOutputs 的初始化
protected void setup(Context context)throws IOException, InterruptedException {
multipleOutputs = new MultipleOutputs<NullWritable, Text>(context);
}

3. 在 reduce 函数中进行输出控制
protected void reduce(Text key, Iterable<Text> values, Context context)throws IOException,
InterruptedException {
for (Text value : values) {
multipleOutputs.write(NullWritable.get(), value, key.toString());
}
}

4. 在 cleanup 函数中关闭输出 MultipleOutputs
protected void cleanup(Context context)throws IOException, InterruptedException {
multipleOutputs.close();
}

注意:multipleOutputs.write(key, value, baseOutputPath)方法的第三个函数表明了该输出所在的目录(相对于用户指定的输出目录)。如果baseOutputPath不包含文件分隔符“/”,那么输出的文件格式为baseOutputPath-r-nnnnn(name-r-nnnnn);如果包含文件分隔符“/”,例如baseOutputPath=“029070-99999/1901/part”,那么输出文件则为



回复

使用道具 举报

Riordon 发表于 2014-10-23 09:28:19
它们分别的执行流程是怎样的呢?Eclipse是否要增加什么样的配置呢?
回复

使用道具 举报

desehawk 发表于 2014-10-23 11:13:49
把在eclipse中执行过程中,在控制台输出的信息,贴出来看一下。
回复

使用道具 举报

howtodown 发表于 2014-10-23 11:20:52
有多少reduce,就有多少输出文件,在eclipse中运行应该是在本地运行的,配置文件之类的都是用的本地,导致只有一个reduce.可以尝试,把集群配置文件复制到本地,一定复制全面,保证集群环境与本地环境一直,在看看效果。








至于集群中为什么19个,可以参考下面内容:

MapReduce的大体流程是这样的,如图所示:
0_1325811532hijt.gif
由图片可以看到mapreduce执行下来主要包含这样几个步骤
1.首先对输入数据源进行切片
2.master调度worker执行map任务
3.worker读取输入源片段
4.worker执行map任务,将任务输出保存在本地
5.master调度worker执行reduce任务,reduce worker读取map任务的输出文件
6.执行reduce任务,将任务输出保存到HDFS






回复

使用道具 举报

Riordon 发表于 2014-10-23 11:27:57
desehawk 发表于 2014-10-23 11:13
把在eclipse中执行过程中,在控制台输出的信息,贴出来看一下。

eclipse中控制台信息如下:
14/10/23 11:23:19 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
14/10/23 11:23:19 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
14/10/23 11:23:19 WARN mapred.JobClient: No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
14/10/23 11:23:19 INFO input.FileInputFormat: Total input paths to process : 1
14/10/23 11:23:19 WARN snappy.LoadSnappy: Snappy native library not loaded
14/10/23 11:23:19 INFO mapred.JobClient: Running job: job_local1543091770_0001
14/10/23 11:23:19 INFO mapred.LocalJobRunner: Waiting for map tasks
14/10/23 11:23:19 INFO mapred.LocalJobRunner: Starting task: attempt_local1543091770_0001_m_000000_0
14/10/23 11:23:19 INFO mapred.Task:  Using ResourceCalculatorPlugin : null
14/10/23 11:23:19 INFO mapred.MapTask: Processing split: hdfs://192.168.137.100:9000/data:0+292
14/10/23 11:23:19 INFO mapred.MapTask: io.sort.mb = 100
14/10/23 11:23:19 INFO mapred.MapTask: data buffer = 79691776/99614720
14/10/23 11:23:19 INFO mapred.MapTask: record buffer = 262144/327680
14/10/23 11:23:19 INFO mapred.MapTask: Starting flush of map output
14/10/23 11:23:19 INFO mapred.MapTask: Finished spill 0
14/10/23 11:23:19 INFO mapred.Task: Task:attempt_local1543091770_0001_m_000000_0 is done. And is in the process of commiting
14/10/23 11:23:19 INFO mapred.LocalJobRunner:
14/10/23 11:23:19 INFO mapred.Task: Task 'attempt_local1543091770_0001_m_000000_0' done.
14/10/23 11:23:19 INFO mapred.LocalJobRunner: Finishing task: attempt_local1543091770_0001_m_000000_0
14/10/23 11:23:19 INFO mapred.LocalJobRunner: Map task executor complete.
14/10/23 11:23:19 INFO mapred.Task:  Using ResourceCalculatorPlugin : null
14/10/23 11:23:19 INFO mapred.LocalJobRunner:
14/10/23 11:23:19 INFO mapred.Merger: Merging 1 sorted segments
14/10/23 11:23:19 INFO mapred.Merger: Down to the last merge-pass, with 1 segments left of total size: 1094 bytes
14/10/23 11:23:19 INFO mapred.LocalJobRunner:
14/10/23 11:23:19 INFO mapred.Task: Task:attempt_local1543091770_0001_r_000000_0 is done. And is in the process of commiting
14/10/23 11:23:19 INFO mapred.LocalJobRunner:
14/10/23 11:23:19 INFO mapred.Task: Task attempt_local1543091770_0001_r_000000_0 is allowed to commit now
14/10/23 11:23:20 INFO output.FileOutputCommitter: Saved output of task 'attempt_local1543091770_0001_r_000000_0' to hdfs://192.168.137.100:9000/out
14/10/23 11:23:20 INFO mapred.LocalJobRunner: reduce > reduce
14/10/23 11:23:20 INFO mapred.Task: Task 'attempt_local1543091770_0001_r_000000_0' done.
14/10/23 11:23:20 INFO mapred.JobClient:  map 100% reduce 100%
14/10/23 11:23:20 INFO mapred.JobClient: Job complete: job_local1543091770_0001
14/10/23 11:23:20 INFO mapred.JobClient: Counters: 19
14/10/23 11:23:20 INFO mapred.JobClient:   File Output Format Counters
14/10/23 11:23:20 INFO mapred.JobClient:     Bytes Written=252
14/10/23 11:23:20 INFO mapred.JobClient:   File Input Format Counters
14/10/23 11:23:20 INFO mapred.JobClient:     Bytes Read=292
14/10/23 11:23:20 INFO mapred.JobClient:   FileSystemCounters
14/10/23 11:23:20 INFO mapred.JobClient:     FILE_BYTES_READ=1416
14/10/23 11:23:20 INFO mapred.JobClient:     HDFS_BYTES_READ=584
14/10/23 11:23:20 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=141536
14/10/23 11:23:20 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=252
14/10/23 11:23:20 INFO mapred.JobClient:   Map-Reduce Framework
14/10/23 11:23:20 INFO mapred.JobClient:     Reduce input groups=19
14/10/23 11:23:20 INFO mapred.JobClient:     Map output materialized bytes=1098
14/10/23 11:23:20 INFO mapred.JobClient:     Combine output records=0
14/10/23 11:23:20 INFO mapred.JobClient:     Map input records=42
14/10/23 11:23:20 INFO mapred.JobClient:     Reduce shuffle bytes=0
14/10/23 11:23:20 INFO mapred.JobClient:     Reduce output records=42
14/10/23 11:23:20 INFO mapred.JobClient:     Spilled Records=84
14/10/23 11:23:20 INFO mapred.JobClient:     Map output bytes=1008
14/10/23 11:23:20 INFO mapred.JobClient:     Total committed heap usage (bytes)=456130560
14/10/23 11:23:20 INFO mapred.JobClient:     SPLIT_RAW_BYTES=97
14/10/23 11:23:20 INFO mapred.JobClient:     Map output records=42
14/10/23 11:23:20 INFO mapred.JobClient:     Combine input records=0
14/10/23 11:23:20 INFO mapred.JobClient:     Reduce input records=42

回复

使用道具 举报

Riordon 发表于 2014-10-23 11:31:48
howtodown 发表于 2014-10-23 11:20
有多少reduce,就有多少输出文件,在eclipse中运行应该是在本地运行的,配置文件之类的都是用的本地,导致 ...

“把集群配置文件复制到本地”是什么意思呢?不太明白...
回复

使用道具 举报

desehawk 发表于 2014-10-23 11:34:57
Riordon 发表于 2014-10-23 11:27
eclipse中控制台信息如下:
14/10/23 11:23:19 WARN util.NativeCodeLoader: Unable to load native-had ...
执行过程都是一样的,不过eclipse是在本地环境执行的,用命令是在集群环境执行的。

版主说的配置文件是指:
你的hdfs-site.xml,core-site.xml等在conf下面的配置文件
回复

使用道具 举报

sstutu 发表于 2014-10-23 11:38:16
记得在运行的时候,本地环境(hadoop版本)一定与集群hadoop版本一致
回复

使用道具 举报

Riordon 发表于 2014-10-23 11:43:19
desehawk 发表于 2014-10-23 11:34
执行过程都是一样的,不过eclipse是在本地环境执行的,用命令是在集群环境执行的。

版主说的配置文件是 ...

恩,谢谢,配置文件我知道,所说的“本地”指的是哪里呢? eclipse安装目录下的某个地方还是什么呢?
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条