写在前面
本文采用的方法是先配置好单台机器,然后克隆,只需要修改克隆机器的mac、ip、hostname就可以完成完全分布式集群的搭建。
slave文件控制datanode节点的位置。本文将resourcemanager节点放在Aslave102,secondnamenode放在Aslave103节点。原因是resourcemanager消耗大量内存,secondnamenode可以做到namenode的备份。
1.虚拟机准备
为虚拟机准备了,20GB内存。400G硬盘。Centos6.10操作系统
2.修改mac地址、ip地址、主机名称
(1)查看ip
[root@Aslave101 /]# ifconfig
(2)修改mac
[root@Aslave101 /]#vim /etc/udev/rules.d/70-persistent-net.rules
(3)修改ip地址为静态ip
[root@Aslave101 /]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
修改前:
修改后:
(4)重启网络
[root@Aslave101 /]#service network restart
注意ifconfig查看是否修改成功
(5)配置主机名称
[root@Aslave101 /]# vi /etc/sysconfig/network
修改HOSTNAME= Aslave101
(6)打开/etc/hosts
[root@Aslave101 /]# vim /etc/hosts
添加如下内容
192.168.11.102 hadoop102 (指定ip对应的名称,建议多添加一些,方便扩充节点)
并重启设备,重启后,查看主机名,已经修改成功
(7)关闭防火墙
[root@Aslave101 /]chkconfig iptables off
查看状态
[root@Aslave101 /]service iptables status
3.配置jdk和hadoop 环境变量(注意,jdk和hadoop的文件所有者是Hadoop
(1)使用hadoop用户,在根目录的/opt目录下创建module(安装位置)、和software(压缩包位置)目录。目录的所有者是hadoop。
(2)查询是否安装java软件:
rpm –qa|grep java
(3)如果安装的版本低于1.7,卸载该jdk:
rpm –e 软件包
(4)上传jdk和hadoop编译后的安装包到software文件夹下。并解压到module文件夹。
(5)安装jdk
获取jdk的安装路径
[root@Aslave101jdk1.7.0_67]# pwd
/opt/module/jdk1.7.0_79
配置环境变量:
[root@Aslave101jdk1.7.0_79]# vi /etc/profile
在profie文件末尾添加jdk路径:
##JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.7.0_79
export PATH=$PATH:$JAVA_HOME/bin
使文件生效
[root@Aslave101 jdk1.7.0_79]# source /etc/profile
测试jdk是否安装成功
[root@hadoop101 jdk1.7.0_79]# java -version
java version "1.7.0_79"
(6)安装hadoop
修改hadoop-env.sh文件中JAVA_HOME 路径:
export JAVA_HOME=/opt/module/jdk1.7.0_79
获取hadoop安装路径:
[root@ Aslave101 hadoop-2.7.2]# pwd /opt/module/hadoop-2.7.2
打开/etc/profile文件:
添加:
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
让文件生效:
[root@ hadoop101 hadoop-2.7.2]# source /etc/profile
4.配置完全分布式集群
(1)集群部署规划
项目 | Aslave101 | Aslave102 | Aslave103 |
---|---|---|---|
HDFS | NameNode | SecondaryNameNode | |
datanode | datanode | ||
ResourceManager&NodeManager | NodeManager |
(2)配置文件
core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://Aslave101:8020</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.7.0_79
hdfs-site.xml定义副本数和secondaryNamenode的位置
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property> <name>dfs.namenode.secondary.http-address</name>
<value>Aslave103:50090</value>
</property>
</configuration>
slaves
Aslave102
Aslave103
Aslave104
yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.7.0_79
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Aslave102</value>
</property>
</configuration>
mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.7.0_79
mapred-site.xml
<configuration>
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(3)克隆虚拟机
修改mac 地址,ip,hostname。即可。(见第2节)
5.配置ssh免密登录
(1)进入到我的home目录
cd ~/.ssh
(2)生成公钥和私钥:
ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
(3)将公钥拷贝到要免密登录的目标机器上
ssh-copy-id 192.168.1.102
注意:主机和自己也要拷贝。Aslave101和Aslave102都需要向其他集群拷贝。
6.启动Hadoop集群
在Aslave101 节点
$HADOOP_HOME/sbin/start-dfs.sh
在Aslave102
$HADOOP_HOME/sbin/start-yarn.sh
jps查看启动状况
hdfs状态
http://Aslave101:50090
资源管理
http://Aslave102:8088