Mac上运行第一个Hadoop实例

Yeolar   2013-10-27 14:01  

之前转过 一篇文章 ,介绍如何配置伪分布式的Hadoop。不过在Mac上的配置方法和Linux上有一点点区别。另外,本篇还从头介绍了一下创建和运行Hadoop工程的方法。

配置Hadoop

首先确保 java 已经正确安装,最好使用1.6以上的版本, java -version 查看正在使用的版本。把 java 加到 ~/.bash_profile 里。

1 export JAVA_HOME=`/usr/libexec/java_home`

配置 ssh ,为了简单点儿,使用当前用户账号。需要把密钥文件给自己加上,方便地用 ssh 访问本机。

1 $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
2 # /usr/sbin/sshd        # 有点儿麻烦,需要启动ssh
3 $ ssh localhost         # 验证一下

以伪分布式安装Hadoop。把Hadoop下载下来,解压放到比如 /usr/local/ 下,加到环境变量里:

1 PATH="$PATH:/usr/local/hadoop/bin"

改一下用户,以便后面可以在自己的账号下启动它:

1 # chown -R yeolar:admin /usr/local/hadoop

Hadoop需要个临时目录:

1 $ mkdir /tmp/hadoop
2 $ chmod 777 /tmp/hadoop

配置Hadoop的环境变量,在 /usr/local/hadoop/conf/hadoop-env.sh 中:

1 export JAVA_HOME=`/usr/libexec/java_home`
2 export HADOOP_OPTS="-Djava.security.krb5.realm=OX.AC.UK -Djava.security.krb5.kdc=kdc0.ox.ac.uk:kdc1.ox.ac.uk"   # Mac需要这个

修改一些配置文件:

/usr/local/hadoop/conf/core-site.xml:

 1 <property>
 2   <name>hadoop.tmp.dir</name>
 3   <value>/tmp/hadoop</value>
 4   <description>A base for other temporary directories.</description>
 5 </property>
 6 
 7 <property>
 8   <name>fs.default.name</name>
 9   <value>hdfs://localhost:54310</value>
10   <description>The name of the default file system.  A URI whose
11   scheme and authority determine the FileSystem implementation.  The
12   uri's scheme determines the config property (fs.SCHEME.impl) naming
13   the FileSystem implementation class.  The uri's authority is used to
14   determine the host, port, etc. for a filesystem.</description>
15 </property>

/usr/local/hadoop/conf/mapred-site.xml:

1 <property>
2   <name>mapred.job.tracker</name>
3   <value>localhost:54311</value>
4   <description>The host and port that the MapReduce job tracker runs
5   at.  If "local", then jobs are run in-process as a single map
6   and reduce task.
7   </description>
8 </property>

/usr/local/hadoop/conf/hdfs-site.xml:

1 <property>
2   <name>dfs.replication</name>
3   <value>1</value>
4   <description>Default block replication.
5   The actual number of replications can be specified when the file is created.
6   The default is used if replication is not specified in create time.
7   </description>
8 </property>

格式化HDFS文件系统:

1 $ hadoop namenode -format

现在就可以通过 start-all.shstop-all.sh 来启动和停止这个单点集群了。

创建一个Hadoop工程

现在大多用maven创建Java工程。

1 $ mvn archetype:create -DgroupId=com.yeolar.hmapred -DartifactId=hmapred -DpackageName=com.yeolar.hmapred

默认会创建一个App.java,把它删掉,然后把Hadoop源代码里面的WordCount.java复制过来,改一下 package

我们还要在pom.xml中加上Hadoop依赖:

1 <dependency>
2   <groupId>org.apache.hadoop</groupId>
3   <artifactId>hadoop-core</artifactId>
4   <version>1.1.1</version>
5 </dependency>

现在在工程的根目录就可以编译打包了:

1 $ mvn clean compile
2 $ mvn package

maven首次会自动下载依赖,需要一些时间。

如果想把maven工程转换为eclipse工程,可以执行 mvn eclipse:eclipse 。同时还要在Preferences/Java/Build Path/Classpath Variables中添加变量 M2_REPO = /Users/yeolar/.m2/repository

运行Hadoop任务

运行普通的Java包可以使用命令 java -cp <jar file> <class> ,不过Hadoop有它自己的方式。

首先,确保Hadoop已经启动,如果还没有,使用 start-all.sh 启动起来。

然后把要处理的文档放到HDFS里面:

1 $ hadoop dfs -put doc.txt ~

运行Hadoop任务:

1 $ hadoop jar target/hmapred-1.0-SNAPSHOT.jar com.yeolar.hmapred.WordCount doc.txt out

可以合并取出输出的结果( -getmerge ),或者直接查看( -cat )。

http://www.yeolar.com/note/2013/10/27/hadoop-example/

http://www.yeolar.com/note/2013/10/27/hadoop-example/