在CentOS上安装Hadoop
环境:CentOS 6.4, JDK 1.7, Hadoop 1.1.2
1. 用vmware workstation 创建三台虚拟机
2 关闭防火墙
临时关闭防火墙
$ sudo service iptables stop
下次开机后,防火墙还是会启动。
永久关闭防火墙
$ sudo chkconfig iptables off
由于这几台虚拟机是开发机,不是生产环境,因此不必考虑安全性,可以永久关闭防火墙,还能给开发阶段带来很多便利。
3. 修改hostname
这一步看起来貌似不必要,其实是必须的,否则最后运行wordcount等例子时,会出现“Too many fetch-failures”。因为HDFS用hostname而不是IP,来相互之间进行通信(见后面的注意1)。
- 将
/etc/sysconfig/network
內的 HOSTNAME 改成 hostname2 - 用
hostname
命令,临时修改机器名,sudo hostname hostname2
用exit
命令退出shell,再次登录,命令提示字符串就会变成[dev@hostname2 ~]$
。
用上述方法,将131改名为master,132改名为slave01,133改名为slave02。
在三台机器的/etc/hosts文件中,添加以下三行内容
192.168.1.131 master 192.168.1.132 slave01 192.168.1.133 slave02
4. 本地模式和伪分布式模式
为了能顺利安装成功,我们先练习在单台机器上安装Hadoop。在单台机器上,可以配置成本地模式(local mode)和伪分布式模式(Pseudo-Distributed Mode),参考官方文档Single Node Setup。
将 hadoop-1.1.2-bin.tar.gz 上传到三台机器的 home目录下,然后解压。注意,三台机器hadoop所在目录必须一致,因为master会登陆到slave上执行命令,master认为slave的hadoop路径与自己一样。
4.1 编辑 conf/hadoop-env.sh,设置 JAVA_HOME
cd hadoop-1.1.2 vim conf/hadoop-env.sh
注释掉第8行的JAVA_HOME,设置正确的JDK位置
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.19.x86_64
4.2 测试本地模式是否正常
默认情况下,Hadoop就被配置为本地模式,现在就可以开始测试一下。
$ mkdir input $ cp conf/*.xml input $ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+' $ cat output/*
可以看到正常的结果,说明本地模式运行成功了,下面开始配置伪分布式模式。
4.3 配置SSH无密码登陆本机
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
修改sshd的配置文件(需要root权限)
$ sudo vim /etc/ssh/sshd_config
找到以下三行,并去掉注释符”#“
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
修改了配置文件需要重启sshd服务
$ chmod 600 ~/.ssh/authorized_keys
4.4 修改配置文件
conf/core-site.xml:
<configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> </configuration>
conf/hdfs-site.xml:
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
conf/mapred-site.xml:
<configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property> </configuration>
4.5 启动Hadoop,测试伪分布式模式
格式化namenode
$ bin/hadoop namenode -format
启动 Hadoop 后台进程
$ bin/start-all.sh
现在可以用浏览器打开NameNode和JobTracker的web界面了。
NameNode - http://localhost:50070/
JobTracker - http://localhost:50030/
将输入数据拷贝到分布式文件系统中:
$ bin/hadoop fs -put conf input
如果这时出现 SafeModeException
异常,不用担心,等待几分钟即可。因为hadoop刚刚启动时,会进入安全模式进行自检。
运行 Hadoop 自带的例子:
$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
查看输出文件:
$ bin/hadoop fs -cat output/*
当你做完了后,关闭 Hadoop: