安装必要的软件:jdk,ssh。
在ubuntu下可以使用apt安装。
sudo apt-get install openjdk-6-jdk
sudo apt-get install ssh
ssh安装完成后需要做一个特殊的设置。Hadoop使用ssh对集群的机器进行控制,需要让ssh无密码的登录远程机器,本文使用单击模拟分布环境,只要能无密码登录到localhost即可。
首先使用 ssh-keygen 命令按提示生成ssh密钥对。
在使用ssh-copy-id user@localhost,把公钥复制到authorized_keys中。
最后验证一下能否ssh localhost无密码登录。
下载hadoop-0.20.2.tar.gz ,解压。并把bin目录添加到PATH中。
配置hadoop/conf/hadoop-env.sh,添加JAVA_HOME环境变量
export JAVA_HOME="/usr/lib/jvm/java-6-openjdk"
分别配置conf/core-site.xml,conf/hdfs-site.xml,conf/mapred-site.xml三个hadoop主要的配置文件。
fs.default.name hdfs://localhost:9000
dfs.replication 1
mapred.job.tracker localhost:9001
以上配置告诉hadoop在本机同时启动jobtracker,tasktracker,namenode,datanode,在本机模拟分布式的计算环境。
格式化一个新的分布式文件系统
hadoop namenode -format
启动所有的服务
start-all.sh
通过web UI查看namenode,jobtracker的状态。页面打开后表示hadoop启动完毕。
NameNode - http://localhost:50070/
JobTracker - http://localhost:50030/
编写简单WordCount Demo。需要把hadoop-0.20.2-core.jar api添加到classpath下。如果使用maven构建项目,可以添加以下依赖。
org.apache.hadoop hadoop-core 0.20.2
代码如下。
public class WordCountMapper extends Mapper{ @Override protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while(tokenizer.hasMoreTokens()){ context.write(new Text(tokenizer.nextToken()), new IntWritable(1)); } } }
public class WordCountReducer extends Reducer{ @Override protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException { int count = 0; for (IntWritable value : values) { count++; } context.write(key, new IntWritable(count)); } }
public class WordCountJobConf { public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException { if (args.length != 2) { System.err.println("Usage: NewMaxTemperature
编译项目打包为jar wordcount.jar(不需要包含依赖)
准备wordcount的输入文本stuff.txt,并复杂到hdfs上。
创建input目录。
hadoop dfs -mkdir input
hadoop dfs -put stufff.txt input
最后运行wordcount,注意output目录,不应该存在。
hadoop jar wordcount.jar WordCountJobConf input output
map和reduce都运行完成可以,可以到output查看计算结果。
hadoop dfs -ls output
hadoop dfs -cat output/part-r-00000
map方法使用hadoop默认的TextInputFormat从input目录读取文件,并把每一行作为一个输入,key为行号,value为该行文本内容。map方法,从数据中提取所有的token,并以该token为key,1为value作为输出。hadoop收集所有的map输出,并通过shuffle过程,归并所有相同的key。reduce过程的数据即为归并的结果,key为token,value为map中该token对应的所有value的集合。reduce方法简单计算value集合的大小,输出结果。key为token,value为数量。最后hadoop使用默认TextOutputFormat输出结果。
vast 1
version 3
very 4
via 36
view 4
viewed 1
views 1
virtual 1
void 8
walk 1
watch 1
wave 1
way 2
we 5
what 1
when 6
where 7