《Hadoop》之"踽踽独行"(十)如何快速搭建一个hadoop完全分布式集群Fully-Distributed Cluster

截止到今天,我已经在博客中给大家介绍了hadoop的本地模式、伪分布式搭建,并且在《Hadoop》之"踽踽独行"(四)中也总结了在CentOS6.5平台上搭建的hadoop2.7.3集群的步骤。在那篇文章中,会涉及到一些原理,比如节点之间的SSH无密码登录,时间同步,防火墙设置以及在多节点之间的文件传输等等。当然,那样的集群搭建很适合理解搭建原理。

现在呢,hadoop集群的搭建原理,我们也知道了,因此,我们可以通过一些手段,来快速的搭建hadoop多节点的完全分布式集群。

完全分布式集群(Fully-Distributed Cluster)的原理:

Hadoop的守护进程运行在由多台主机搭建的集群上,是真正的生产环境。我们需要在所有的主机上安装JDK和Hadoop,组成相互连通的网络。在主机间设置SSH免密码登录,把各从节点生成的公钥添加到主节点的信任列表。

一、准备工作:

1、VMware软件
2、操作平台:CentOS-6.10-x86_64-bin-DVD1.iso
3、jdk-8u172-linux-x64.tar.gz
4、hadoop-2.7.3.tar.gz

二、快速搭建一个hadoop集群

1、基本需求设置

第一步:在VMware上安装一台CentOS6.10虚拟机,设置主机名为master。

创建普通用户michael

第二步:如果没有在第一步中创建普通用户,那么就可以root身份创建一个普通用户michael。

[root@master ~]# useradd michael
[root@master ~]# passwd michael
New password:

第三步:配置网络服务。配置NAT模式下的静态IP。我配置的ip为:192.168.80.10,你的ip需要查看你自己机器上的VMnet8虚拟网卡。测试虚拟机与物理机是否互通。不会配置的话可以查看文章《Linux系统》之"皮毛系列"(七) 网络通信设置.

[root@master ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
.........
ONBOOT=yes           #修改成yes,开机自动启用
..........
BOOTPROTO=static     #修改成static/none
..........
IPADDR=192.168.80.10    #追加IP地址,设置成与VMnet8虚拟网卡同一段位的地址
NETMASK=255.255.255.0   #追加子网掩码,
GATEWAY=192.168.80.2    #追加网关,设置成VMnet8提供的网关,一般结尾都是2
DNS1=192.168.80.2       #追加DNS1,设置成与网关一致即可

第四步:修改/etc/hosts文件。在里面追加

[root@master ~]# vim /etc/hosts
192.168.80.10  master       #绑定好名称节点的ip与host
192.168.80.11  slave1       #绑定好数据节点的ip和host,这些为克隆linux做准备
192.168.80.12  slave2
192.168.80.13  slave3
192.168.80.10  slave4

第五步:关闭防火墙

[root@master michael]# chkconfig iptables off           #永久关闭
[root@master michael]# chkconfig iptables --list        #查看状态
iptables        0:off   1:off   2:off   3:off   4:off   5:off   6:off

第六步:配置SSH无密码登录。到这一步一定要切回普通用户michael。之前都是root身份。

[michael@master ~]$ ssh-keygen -t rsa       #一路回车下去
[michael@master ~]$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys    #更名成authorized_keys
[michael@master ~]$ chmod 600 ~/.ssh/authorized_keys               #修改权限为0600

第七步:准备jdk和hadoop安装包。

在~/目录下创建目录apps,将jdk-8u172-linux-x64.tar.gz和hadoop-2.7.3.tar.gz 上传到 ~/apps/目录下。

第八步:解压jdk和hadoop。(普通用户身份)

#解压软件包
[michael@master apps]$ tar -zxv -f jdk-8u172-linux-x64.tar.gz
[michael@master apps]$ tar -zxv -f hadoop-2.7.3.tar.gz
#创建软链接
[michael@master apps]$ ln -s jdk1.8.0_172/  jdk
[michael@master apps]$ ln -s hadoop-2.7.3 hadoop
#删除软件包,释放空间
[michael@master apps]$ rm jdk-8u172-linux-x64.tar.gz
[michael@master apps]$ rm hadoop-2.7.3.tar.gz

第九步:配置jdk和hadoop的环境变量

[michael@master apps]$ vim ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export JAVA_HOME=/home/michael/apps/jdk                #jdk env
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
 
export HADOOP_HOME=/home/michael/apps/hadoop           #hadoop env
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

[michael@master apps]$ source ~/.bash_profile          #导入到当前bash,使环境变量生效

到此为止,基本需求已经安装完毕,建议重启,使防火墙设置生效

2、配置Hadoop

第一步:在hadoop的根目录~/apps/hadoop/下创建一个目录tmp,用于设置配置文件信息和存储以后产生的数据

[michael@master hadoop]$ pwd
/home/michael/apps/hadoop
[michael@master hadoop]$ mkdir tmp

第二步:修改core-site.xml

<configuration>
  <property>
        <name>fs.defaultFS</name>      #默认文件系统名称,用于指定host,post
       <value>hdfs://master:9000</value>
  </property>
  <property>
       <name>hadoop.tmp.dir</name>  #指定临时文件的存储路径
       <value>file:/home/michael/apps/hadoop/tmp</value>
  </property>
</configuration>

第三步:修改hdfs-site.xml

<configuration>
       <property>
            <name>dfs.replication</name>           #用于指定副本个数
            <value>3</value>
       </property>
       <property>
           <name>dfs.namenode.name.dir</name>      #用于指定namenode存储路径
           <value>file:/home/michael/apps/hadoop/tmp/dfs/name</value>
       </property>
       <property>
           <name>dfs.datanode.data.dir</name>      #用于指定datenode存储路径
           <value>file:/home/michael/apps/hadoop/tmp/dfs/data</value>
       </property>
</configuration>

第四步:修改mapred-site.xml。此目录下没有该文件,我们需要将mapred-site.xml.template 复制一份,改成此名,然后再修改。

<configuration>
         <property>
                <name>mapreduce.framework.name</name>     #使用yarn运行框架
                <value>yarn</value>
       </property>
       <property>
               <name>mapreduce.jobhistory.address</name>  # Server IPC host:port
               <value>master:10020</value>
       </property>
       <property>
                <name>mapreduce.jobhistory.webapp.address</name>
               <value>master:19888</value>      # Server Web UI host:port
       </property>
</configuration>

第五步:修改yarn-site.xml

<configuration>
       <property> 
            <name>yarn.nodemanager.aux-services</name> 
            <value>mapreduce_shuffle</value> 
       </property> 
      <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>master</value>
      </property> 
</configuration>

第六步:修改hadoop-env.sh。打开此文件,重新设置JAVA_HOME的值,否则不能启动。  

[michael@master hadoop]$ vim ~/apps/hadoop/etc/hadoop/hadoop-env.sh
# The java implementation to use.
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/home/michael/apps/jdk

第七步:修改slaves文件。打开此文件,删除默认的localhost,增加四个数据节点

[michael@master hadoop]$ vim ~/apps/hadoop/etc/hadoop/slaves
slave1
slave2
slave3
slave4

第八步:修改yarn-env.sh。我们最好也重新设置一下此文件的java_home。

# exportJAVA_HOME=/home/y/libexec/jdk1.6.0/
export JAVA_HOME=/home/michael/apps/jdk         #增加内容
if ["$JAVA_HOME" != "" ]; then

3、克隆Linux

主机名master的虚拟机上完成了基本需求设置和配置hadoop这两大步,剩下的就是克隆多个虚拟机,然后分别进行网络配置和修改成主机名为slave1,slave2,slave3,slave4了。

关闭虚拟机master,然后右键点击master>>管理>>克隆>>下一步>>完整克隆>>命名为:CentOS_6.10_64_slave1>>等待完成。

第一步:修改网卡信息

修改/etc/udev/rules.d/70-persistent-net.rules。注释掉eth0这一行,然后将eth1的name属性改为eth0。即如下:

[michael@master ~]$ vim /etc/udev/rules.d/70-persistent-net.rules
..........
#SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:79:95:88", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:78:66:9f", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

然后记住新的eth0的MAC地址,去修改/etc/sysconfig/network-scripts/ifcfg-eth0里的信息,因此一会要重启虚拟机,所以重启网络服务可以不进行。

ONBOOT=yes
.............
BOOTPROTO=static
HWADDR=00:0C:29:78:66:9f     #改成新的MAC地址
..........
IPADDR=192.168.80.11         #改成192.168.80.11
NETMASK=255.255.255.0
GATEWAY=192.168.80.2
DNS1=192.168.80.2

第二步:修改主机名

打开/etc/sysconfig/network文件,修改主机名为slave1

[michael@master ~]$ vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=slave1      #改为slave1

第三步:重启机器。

再重复上面三步,分别配置主机名:

slave2,ip为192.168.80.12。
slave3,ip为192.168.80.13。
slave4,ip为192.168.80.14。

原理分析:因为是克隆,所有的克隆机器中就已有了jdk和hadoop,也不需要再生成公钥和私钥了,这些克隆机器上已经有了一对公钥和私钥。即master虚拟机上的那一对。可以直接进行无密登录。

这里有个建议:因为是同一套公钥和私钥,建议在master虚拟机上ssh一下所有的克隆机器,测试一下是否是无密登录。全部测试完,就ok了。(不连一遍的话,有可能对下面的操作有影响)

4、启动和测试

第一步:格式化集群

[michael@master ~]$ hdfs namenode -format
#这一步是格式化namenode,用于创建dfs/name/fsimage和edit文件

第二步:启动集群

[hyxy@master ~]$ start-all.sh
#使用这个脚本,启动所有的守护线程,如:namenode,datenode,resourcemanager,datamanager,secondarynamenode

第三步:检查守护线程

在master虚拟机下运行jps指令,应该至少有四个线程

[michael@master ~]$ jps
7845 Jps
6901 SecondaryNameNode
6709 NameNode
7047 ResourceManager

在slave虚拟机下运行jps指令,应该至少有三个线程

[michael@slave1 ~]$ jps
4262 Jps
3837 NodeManager
3726 DataNode

或者,在虚拟机内的浏览器上输入master:50070   /   master:8088

再或者,在物理机的浏览器上输入192.168.80.10:50070   /192.168.80.10:8088

第四步:测试项目    

测试就再累述了。可以参考《Hadoop》之"踽踽独行"(七)中的第三部分:程序测试。

------------------------------大功告成,如有疑问,敬请留言----------------------------------------

猜你喜欢

转载自blog.csdn.net/Michael__One/article/details/86226193
今日推荐