前提条件:Java环境配置没问题
配置过程
配置Hadoop环境变量
- 官网上下载Hadoop 2.7.3 二进制压缩包,并进行解压
- 配置Hadoop环境变量,在~/.bash_profile文件末尾添加
1
2export HADOOP_HOME=/Users/zhuyali/prjs/hadoop
export PATH="$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin"
添加完成后,编译该文件使其立即生效。
source ~/.bash_profile
- 然后在命令行输入
hadoop version
可以查看到Hadoop的版本信息,那么说明至此步骤已经全部正确完成
创建目录,后续配置文件中会用到
1
2
3
4$ mkdir tmp
$ mkdir hdfs
$ mkdir hdfs/data
$ mkdir hdfs/name修改Hadoop目录/etc/hadoop/hadoop-env.sh文件,在该文件末尾添加
1
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
修改Hadoop目录/etc/hadoop/yarn-env.sh文件,在该文件末尾添加
1
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
修改Hadoop目录/etc/hadoop/core-site.xml文件,设置临时目录和文件系统
1
2
3
4
5
6
7
8
9
10
11
12<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
<description>HDFS的URL(文件系统:namenode标识:端口号)</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/Users/zhuyali/prjs/hadoop/tmp</value>
<description>本地hadoop临时文件夹</description>
</property>
</configuration>修改Hadoop目录/etc/hadoop/hdfs-site.xml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<configuration>
<property>
<name>dfs.name.dir</name>
<value>/Users/zhuyali/prjs/hadoop/hdfs/name</value>
<description>用于确定将HDFS文件系统的元信息保存在什么目录下</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/Users/zhuyali/prjs/hadoop/hdfs/data</value>
<description>用于确定将HDFS文件系统的数据保存在什么目录下</description>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>副本个数,应该小于datanode机器数量,默认情况为3</description>
</property>
</configuration>修改Hadoop目录/etc/hadoop/yarn-site.xml文件
1
2
3
4
5
6
7
8
9
10
11<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>localhost:8099</value>
</property>
</configuration>修改Hadoop目录/etc/hadoop/mapred-site.xml
1
2
3
4
5
6<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>配置SSH密码
运行该命令,看是否需要输入密码1
$ ssh localhost
如果需要输入密码,则执行下面的命令
1
2
3$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
运行过程
格式化NameNode,仅在第一次启动Hadoop时运行该命令
1
$ bin/hdfs namenode -format
启动HDFS
1
$ sbin/start-dfs.sh
启动yarn
1
$ sbin/start-yarn.sh
查看进程
1
$ jps
然后出现类似下图的效果,则启动正确
此时可以通过 http://localhost:50070 查看HDFS的web页面
示例代码Wordcount运行
创建输入目录
1
$ hadoop fs -mkdir /input
将Hadoop目录下的README.txt文件上传到HDFS输入目录下
1
$ hadoop fs -put README.txt /input
运行Wordcount程序
1
$ hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /input /output
查看结果
1
$ hadoop fs -cat /output/par*
遇到的问题
有时候会遇到执行 jps
后,发现 datanode 没有启动的问题。一种可能的解决方案为:1
$ cd /Users/zhuyali/prjs/hadoop/hdfs/name/current
然后将该目录下 VERSION 文件中的 clusterId 复制到1
$ cd /Users/zhuyali/prjs/hadoop/hdfs/data/current
该文件夹下的 VERSION 文件中的 clusterId 处
出现该问题的原因是:在第一次格式化 dfs 后,启动并使用了 hadoop,后来又重新执行了格式化命令(hdfs namenode -format),这时 namenode 的 clusterID 会重新生成,而 datanode 的 clusterID 保持不变。