需要软件:
ssh:fedore 9 自带。
jdk:http://java.sun.com/javase/downloads/index.jsp,下最近版本jdk-6u18-linux-i586
Hadoop:http://apache.etoak.com/hadoop/core/hadoop-0.20.1/,最新版本0.20.1,据说这个版本jdk必须1.6以上。
三种运行模式:
单机(非分布式)模式,伪分布式运行模式(用不同进程模仿分布式运行中的各类结点),分布式运行模式。
其中前两种运行模式体现不了Hadoop分布式计算的优势,并没有什么实际意义,但对程序的测试及调试很有帮助。现在只有一台机器, 主要想了解基于Hadoop的分布式并行程序是如何运行的。
单机模式安装步骤:
1.解压安装包至:/usr/local/hadoop
如果安装jdk已经设置了路径,安装完毕。否则:
2.cd /usr/local/hadoop/conf,修改hadoop-env.sh,最后一行添加:export JAVA_HOME=/usr/local/jdk1.6.0_18(jdk路径).
看看这玩意怎么跑的:
1.
[root@localhost hadoop]# mkdir input
[root@localhost hadoop]# cp conf/*.xml input
[root@localhost hadoop]# bin/hadoop jar hadoop-0.20.1-examples.jar grep input output 'dfs[a-z.]+'
10/01/26 00:22:54 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
10/01/26 00:22:54 INFO mapred.FileInputFormat: Total input paths to process : 5
...
[root@localhost hadoop]# cat output/*
1 dfsadmin
[root@localhost hadoop]# ls output/
part-00000
程序是hadoop自带的,把conf下的xml文件拷贝到input下作为输入,找到并显示所有与最后一个正则表达式匹配的行,输出到output.
jar 是 bin/hadoop 脚本定义的参数,会调用 Hadoop 自己的一个工具类 RunJar,这个工具类能够执行一个 Jar 文件。
2.
[root@localhost hadoop]# mkdir test-in
[root@localhost hadoop]# echo "hello world bye world" > test-in/file1.txt
[root@localhost hadoop]# echo "hello hadoop googbye hadoop" > test-in/file2.txt
[root@localhost hadoop]# bin/hadoop jar hadoop-0.20.1-examples.jar wordcount test-in test-out
10/01/26 00:43:46 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
10/01/26 00:43:46 INFO input.FileInputFormat: Total input paths to process : 2
...
[root@localhost hadoop]# cat test-out/*
bye 1
googbye 1
hadoop 2
hello 2
world 2
[root@localhost hadoop]# ls test-out/
part-r-00000
这个程序也是hadoop自带的,统计各个单词出现次数。
刚开始上网搜的结果都是修改fs.default.name,mapred.job.tracker等等,都是分布式运行模式的配置,没想到单机模式这么简单,浪费了不少时间。