日期:2014-05-16  浏览次数:20702 次

Hadoop + eclipse + linux 单机运行 WordCount

Eclipse版本3.5, Hadoop版本hadoop-0.20.2

?

1. 安装Hadoop

? ? 下载hadoop-0.20.2, http://www.apache.org/dyn/closer.cgi/hadoop/core/

? ? 解压Hadoop并配置Hadoop home 环境变量$ gzip -d hadoop-0.20.2.tar.gz. 切换到Hadoop用户(不切换也可)

$ tar xvf hadoop-0.20.2.tar 
$ vi .bash_profile
$ export JAVA_HOME=~/software/jdk1.6.0_11
# 添加 HADOOP=~/software/hadoop-0.20.2
# 添加PATH=$HADOOP/bin:$PATH
$ export PATH
$ source .bash_profile

?

? ??编辑 conf/hadoop-env.sh文件,将JAVA_HOME设置为Java安装根路径。

?

export JAVA_HOME=~/software/jdk1.6.0_11
?

?

? ? 修改Hadoop配置文件:[其中ip地址是我的local地址]

? ??conf/ hdfs-site.xml

?

<configuration>
<property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>

?

?

? ? conf/core-site.xml:

?

<configuration>
<property>
    <name>fs.default.name</name>
    <value>hdfs://192.168.13.171:9000</value>
  </property>
</configuration>

?

?

? ??conf/mapred-site.xml

?

<configuration>
<property>
    <name>mapred.job.tracker</name>
    <value>192.168.13.171:9001</value>
  </property>
</configuration>

?

?

? ? 启动Hadoop:

?

$ bin/start-all.sh
?

?

? ? 查看是否成功

? ? http://ubuntu:50030 可以查看JobTracker的运行状态:

? ? http://ubuntu:50070 可以查看NameNode及整个分布式文件系统的状态等:

?

? ? #如不成功,则配置有问题。我遇见的情况是java远程调试端口占用了9000,所以NameNode启动不起来

?

2. Eclipse 开发Hadoop

?

? ? 下载hadoop-eclipse-plugin-0.20.3-SNAPSHOT.jar

https://issues.apache.org/jira/secure/attachment/12460491/hadoop-eclipse-plugin-0.20.3-SNAPSHOT.jar

?

? ? 注意不要用hadoop-0.20.2下自带的eclise插件,那个是坑爹的。否则会导致run on Hadoop 无反应。这个插件的版本是配合eclipse3.5的。下载后将其重命名为hadoop-0.20.2-eclipse-plugin.jar,并放入到eclipse插件目录中。

?

? ? 启动eclipse:打开windows->open perspective->other->map/reduce 可以看到map/reduce开发视图。设置Hadoop location.

?

? ? 打开windows->show view->other-> map/reduce Locations视图,在点击大象后【new Hadoop location】弹出的对话框(General tab)进行参数的添加:

? ? Location name: 任意

? ??map/reduce master:?与mapred-site.xml里面mapred.job.tracker设置一致。

? ? DFS master:与core-site.xml里fs.default.name设置一致。

? ? User name: 服务器上运行hadoop服务的用户名。

?

? ? 这些已经足够用。当然,如果你需要特殊设置,那么打开Advanced parameters设置面板,查看当前的选项以及修改其值.

?

? ? 创建Map/Reduce Project。运行最简单的WordCount程序。首先准备2个文件

?

$ bin/hadoop dfs -mkdir /tmp/input 
$ bin/hadoop dfs -put file1.txt input
$ bin/hadoop dfs -put file2.txt input

?

import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
import org.apache.log4j.Logger;

public class WordCount {

	public static Logger loger = Logger.getLogger(WordCount.class);

	public static class TokenizerMapper extends
			Mapper<Object, Text, Text, IntWritable> {

		private final static IntWritable one = new IntWritable(1);
		private Text word = new Text();

		public void map(Object key, Text value, Context context)
				throws IOExceptio