一步一步学习hadoop(二)
要想真正发挥hadoop的威力,必须将hadoop在集群上部署,下面介绍hadoop集群的部署。hadoop的集群部署是建立在伪集群安装的基础上,现假设有三台机器,一台master,两台slave,分别为slave1和slave2(其实两台机器也可以实现集群,其中一台机器同时扮演master和slave的角色)。
1.首先分别在三台机器上安装好hadoop,使hadoop可以运行伪集群(参照我的文章一步一步学习hadoop(一) )2.关掉三个单节点hadoop集群
3.使master机器可以无密码访问master,slave1和slave2机器,
假设master,slave1,slave2的机器的ip地址分别为128.0.0.1,128.0.0.2,128.0.0.3
1'在三台机器上修改/etc/hosts 文件,增加如下三行
128.0.0.1 master2'修改三台机器的/etc/hostname文件,该文件一般只有一行。(如果不修改运行hadoop作业是可能会出错,报Too much fetch failure错误)
128.0.0.2 slave1
128.0.0.3 slave2
将master机器改为master
将slave1机器改为slave1
将slave2机器改为slave2
3'将hduser@master的公钥分发到slave1和slave2里去,这一次是需要输入密码的。
ssh-copy-id -i ~/.ssh/id_rsa.pub hduser@slave1完成后使用ssh命令测试一下,看是不是已经可以访问了
ssh-copy-id -i ~/.ssh/id_rsa.pub hduser@slave2
4.对hadoop进行配置
1'在master机器上修改conf/masters文件和conf/slaves文件
将masters里的localhost改为master,文件内容如下
master将slaves的内容修改为
slave1解释一下这两个文件的作用,其实这两个文件是为了简化启动集群的工作量的,不要被它的名字误导了,其实NameNode和JobTracker总是你运行
slave2
start-dfs.sh和start-mapred.sh脚本的机器,如果使用start-all.sh则NameNode和JobTracker会在同一台机器上。这个留待以后再详细介绍
2'将所有机器的core-site.xml的修改为如下
<?xml version="1.0"?>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:54310</value>
</property>
<property>
<name>fs.tmp.dir</name>
<value>/usr/local/app/hadoop/tmp</value>
</property>
</configuration>
所有机器的mapred-site.xml修改为
<?xml version="1.0"?>
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:54311</value>
</property>
</configuration>
所有机器的hdfs-site.xml修改为,不能设为大于2的数字,不然日志中会有很多备份不足的错误,设为1的话就没有并行的优势了
<?xml version="1.0"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
5.格式化HDFS,在master机器上执行
hadoop namenode -format
6.启动hadoop集群
start-dfs通过jps命令看是否已经启动成功
start-mapred
7.运行hadoop作业
1'将数据拷贝到HDFS文件系统中,使用如下命令将hadoop的配置文件拷贝到HDFS下的input目录下
hadoop fs -put /usr/local/hadoop/conf /input2'运行hadoop作业
hadoop jar /usr/local/hadoop/hadoop-examples-1.0.4.jar WordCount /input /output运行成功表示安装OK了
8.停止hadoop集群,和启动hadoop集群刚好相反
stop-mapred
stop-dfs