上一篇我们介绍了单机模式搭建Hadoop的环境,很简单,这一篇我们来介绍集群模式的Hadoop的搭建,有很多部分是和部署单机是一样的,在这一篇就会省略带过。
搭建环境:
在这里我们使用的是本地局域网内的服务器,分别是2G内存、50G硬盘、CentOS6.0的环境
172.16.139.128 Master
172.16.139.132 Slave1
172.16.139.130 Slave2
部署环境:
这一步我们只需要安装单机模式,把上面每台服务器都部署一下,可以参考上一篇Linux下Hadoop集群的搭建(2)—单机模式,我们在这里不再讲述。
SSH免登陆:
这里也和上一篇介绍的原理差不多,但是需要建立的是服务器之间的免登陆协议
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa_salve1 //在Slave1中执行,生成ssh秘钥
scp ~/.ssh/id_dsa_slave1.pub root@172.16.139.128:/root/.ssh/ //把Slave1中生成的ssh秘钥,复制到Master的/root/.ssh/
cat id_dsa_slave1.pub >> authorized_keys //在Master中把复制的Slave1的秘钥加入到authorized_keys中
验证下免登陆是否配置成功
配置成功,这是配置的Slave1->Master之间免登陆,但是Master->Slave1依旧需要密码,因此也需要配置反向的免登陆,因为Hadoop集群之间的通讯是双向的。
同理,配置Master->Slave1、Slave2->Master、Master->Slave2之间的免登陆协议。
修改/etc/hosts文件
添加一下内容,注意不能有关于localhost的内容,否则会报错,这里三台服务器都需要修改
172.16.139.128 Master
172.16.139.132 Slave1
172.16.139.130 Slave2
这一步配置完成以后我们可以使用以下命令把在Master服务器中已经部署好的软件复制到Slave1、Slave2中
scp -r hadoop-2.2.0 jdk1.7.0_71 root@Slave2:/usr/local/soft/
scp -r hadoop-2.2.0 jdk1.7.0_71 root@Slave2:/usr/local/soft/
配置Slave1和Slave2的环境变量
在/etc/profile.d/下新建文件cutom.sh,并写入下面内容,并使之生效
#/etc/profile.d/custom.sh
JAVA_HOME=/usr/local/soft/jdk1.7.0_71
export JAVA_HOME
HADOOP_PREFIX=/usr/local/soft/hadoop-2.2.0
export HADOOP_PREFIX
export PATH=$JAVA_HOME/bin:$PATH
export PATH=$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin:$PATH
修改hadoop目录下的etc/hadoop/slaves文件
Master
Slave1
Slave2
修改Hadoop的相关配置文件
修改core_site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/mnt/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
</configuration>
修改hdfs-size.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/mnt/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/mnt/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
修改mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>Master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Master:19888</value>
</property>
</configuration>
修改yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>Master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>Master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>Master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>Master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>Master:8088</value>
</property>
</configuration>
启动运行Hadoop
hdfs namenode -format //格式化Hadoop
start-all.sh //启动Hadoop集群
jps //查看状态
hdfs dfsadmin -report //查看Hadoop集群工作状态
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/root
hdfs dfs -mkdir input
hadoop jar /usr/local/soft/hadoop-2.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar grep input output 'dfs[a-z.]+'
查看运行结果
hdfs dfs -cat output/*
OK,配置完成!