http://chqz1987.blog.163.com/blog/static/514383112013261505866/
假如执行下面命令:
cd /home/hadoop/ && hadoop jar ./test/wordcount/wordcount.jar org.codetree.hadoop.v1.WordCount /test/chqz/input /test/chqz/output
那么这个命令内部到底做了些什么呢?
1、首先,在 ${HADOOP_HOME}/bin/hadoop 脚本中我们可以看到有如下代码:
由于这里$starting_secure_dn=false的(这里可以参见hadoop脚本),所以最终会执行下面这行代码:
从上面shell脚本中,我们可以明确看出当执行hadoop jar命令时,实际上执行了org.apache.hadoop.util.RunJar类。
下面#run it这一行代码实质上是为执行这个类的main方法设置所需的类路径classpath。
2、继续研究org.apache.hadoop.util.RunJar来内发生的事情:
因此,命令hadoop jar ./test/wordcount/wordcount.jar org.codetree.hadoop.v1.WordCount /test/chqz/input /test/chqz/output的各段的含义:
(1) hadoop:${HADOOP_HOME}/bin下的shell脚本名。
(2) jar:hadoop脚本需要的command参数。
(3) ./test/wordcount/wordcount.jar:要执行的jar包在本地文件系统中的完整路径,参递给RunJar类。
(4) org.codetree.hadoop.v1.WordCount:main方法所在的类,参递给RunJar类。
(5) /test/chqz/input:传递给WordCount类,作为DFS文件系统的路径,指示输入数据来源。
(6) /test/chqz/output:传递给WordCount类,作为DFS文件系统的路径,指示输出数据路径。
3、org.codetree.hadoop.v1.WordCount类代码:
Source Code
1. | package org.myorg; |
2. | |
3. | import java.io.IOException; |
4. | import java.util.*; |
5. | |
6. | import org.apache.hadoop.fs.Path; |
7. | import org.apache.hadoop.conf.*; |
8. | import org.apache.hadoop.io.*; |
9. | import org.apache.hadoop.mapred.*; |
10. | import org.apache.hadoop.util.*; |
11. | |
12. | public class WordCount { |
13. | |
14. | public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { |
15. | private final static IntWritable one = new IntWritable(1); |
16. | private Text word = new Text(); |
17. | |
18. | public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { |
19. | String line = value.toString(); |
20. | StringTokenizer tokenizer = new StringTokenizer(line); |
21. | while (tokenizer.hasMoreTokens()) { |
22. | word.set(tokenizer.nextToken()); |
23. | output.collect(word, one); |
24. | } |
25. | } |
26. | } |
27. | |
28. | public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> { |
29. | public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { |
30. | int sum = 0; |
31. | while (values.hasNext()) { |
32. | sum += values.next().get(); |
33. | } |
34. | output.collect(key, new IntWritable(sum)); |
35. | } |
36. | } |
37. | |
38. | public static void main(String[] args) throws Exception { |
39. | JobConf conf = new JobConf(WordCount.class); |
40. | conf.setJobName("wordcount"); |
41. | |
42. | conf.setOutputKeyClass(Text.class); |
43. | conf.setOutputValueClass(IntWritable.class); |
44. | |
45. | conf.setMapperClass(Map.class); |
46. | conf.setCombinerClass(Reduce.class); |
47. | conf.setReducerClass(Reduce.class); |
48. | |
49. | conf.setInputFormat(TextInputFormat.class); |
50. | conf.setOutputFormat(TextOutputFormat.class); |
51. | |
52. | FileInputFormat.setInputPaths(conf, new Path(args[0])); |
53. | FileOutputFormat.setOutputPath(conf, new Path(args[1])); |
54. | |
55. | JobClient.runJob(conf); |
57. | } |
58. | } |
59. |
相关推荐
4. **运行hadoop jar命令**:使用命令行输入`hadoop jar <jar_file> <main_class> [args...]`,其中`<jar_file>`是你创建的JAR文件,`<main_class>`是你的程序的主类,`[args...]`是传递给主类的参数。例如,如果你...
Hadoop是一款开源的大数据处理框架,由Apache基金会开发,它主要设计用于分布式...用户在使用时,通常需要通过`hadoop jar [jar_file] [main_class] [args...]`命令来执行包含在jar包中的主类,从而启动Hadoop作业。
在实际使用中,用户通常会通过`hadoop jar`命令来执行自定义的MapReduce程序,这时会指定包含主类的JAR文件,而Hadoop会自动加载合集中其他的依赖库,确保程序的正常运行。例如,下面的命令可以用来运行一个位于my...
开发者通常会将编写好的Java程序与依赖的Hadoop库一起打包成jar文件,然后通过`hadoop jar`命令在Hadoop集群上运行这个jar文件,执行MapReduce任务。 例如,以下是一个简单的`hadoop jar`命令执行流程: ```bash ...
1. `bin`: 包含Hadoop的可执行脚本,如启动和停止Hadoop服务的命令。 2. `sbin`: 存放管理脚本,用于管理Hadoop集群。 3. `lib`: Hadoop的库文件,包含了运行Hadoop所需的各种依赖。 4. `etc/hadoop`: 配置文件目录...
7. **开发与调试**:对于开发和调试Hadoop应用,使用`hadoop jar`命令可以提交MapReduce作业到集群上执行。例如,`hadoop jar myjob.jar com.example.MyMainClass`将运行包含在`myjob.jar`中的`MyMainClass`。 总之...
在本文中,我们将深入探讨Hadoop 1.2.1版本的基本概念,特别是与使用`hadoop jar`命令相关的知识。Hadoop是一个开源框架,它允许分布式存储和处理大规模数据集,是大数据处理领域的基石。1.2.1是Hadoop的一个早期...
使用Hadoop提供的jar命令来启动WordCount程序。命令格式如下: ``` hadoop jar <jar文件路径> <主类名称> <输入文件路径> <输出文件路径> ``` 例如: ``` hadoop jar /usr/hadoop/Myhadoop.jar ...
- **`hadoop jar myjob.jar myclass /input /output`**:运行名为`myjob.jar`的Jar文件,其中包含名为`myclass`的主类,输入路径为`/input`,输出路径为`/output`。 #### 3. **hadoop distcp** `distcp`命令用于在...
> hadoop jar test-1.0-SNAPSHOT-jar-with-dependencies.jar /user/test/input /user/test/out 2.运行Jar包指定类中的主函数 > java -cp test-1.0-SNAPSHOT-jar-with-dependencies.jar com.test.main.MainTest
10. **运行MapReduce程序**:将Java MapReduce程序打包成jar文件,使用`hadoop jar`命令提交作业到Hadoop集群执行。 在Windows 7环境下运行Hadoop可能遇到的问题包括权限问题、路径分隔符差异、文件系统不兼容等。...
### Hadoop常用命令详解 Hadoop是一款开源软件框架,主要用于分布式存储与处理大规模数据集。在实际使用过程中,掌握一些常用的Hadoop命令对于管理和维护Hadoop集群至关重要。下面将详细介绍这些命令及其用法。 ##...
`hadoop jar`用于运行用户编写的MapReduce程序,例如`hadoop jar your-jar-file.jar your.MainClass input output`,这里`your-jar-file.jar`是你的JAR文件,`your.MainClass`是主类名,`input`和`output`分别是输入...
执行`mvn clean package`命令,就可以生成编译后的jar文件。 压缩包中的“hadoop-2.7.2”文件夹可能包含了以下内容: 1. `bin`: 包含Hadoop的可执行脚本,如`hadoop`, `hdfs`, `yarn`, `mapred`等。 2. `conf`: ...
MapReduce作业通过hadoop jar命令提交到集群,Hadoop会自动处理数据分布、任务调度和容错。 此外,Hadoop 2.5.2还引入了安全特性,如Kerberos认证,以增强集群的安全性。同时,这个版本优化了数据本地性和网络通信...
使用hadoop jar命令来执行自定义的Java程序。 需要注意的是,虽然Hadoop官方支持Windows,但社区普遍推荐在Linux环境下运行Hadoop,因为Linux的性能更优且稳定性更高。不过,对于开发和测试环境,Windows上的Hadoop...
3. **运行Job**:编译并打包MapReduce程序后,使用hadoop jar命令提交作业到Hadoop集群上运行。 4. **监控和调试**:通过Hadoop的Web界面或者命令行工具查看作业的进度和状态,分析Resultlog0406.txt中的数据,根据...
Hadoop 命令手册 Hadoop 命令是 Hadoop 分布式计算系统的核心组件之一,负责执行各种作业和管理任务。Hadoop 命令手册提供了一个详细的命令参考指南,帮助用户熟悉 Hadoop 命令,让云计算更上一步。 Hadoop 命令的...
在运行jar包中的Hadoop程序时,可以使用hadoop jar命令直接运行,但需要注意的是,MR打包运行与普通的Java程序运行存在差异,需要特别指定jar包的主类,并在代码中设置相应的属性。此外,HDFS提供了一套shell命令,...