Hadoop安装(二)---完全分布式模式(集群模式)

  • 1、安装前准备
  • 2、修改主机名
  • 3、映射IP地址及主机名
  • 4、免密登录设置
  • 5、安装NTP服务
  • 6、设置Hadoop配置文件
  • 7、格式化HDFS
  • 8、启动Hadoop
  • 9、验证Hadoop进程
  • 10、通过Web访问Hadoop
  • 11、测试Hadoop
  • 12、停止Hadoop进程



完全分布式模式(Fully-Distributed Mode)也称为集群模式,是真正的分布式的、由3个及以上的实体机或者虚拟机组成的集群,是将Hadoop运行在多台主机中,各个主机按照相关配置运行相应的Hadoop守护进程。完全分布式模式是真正的分布式环境,用于实际的生产环境。

下表为完全分布式模式所需要配置的文件、属性名称、属性值及含义。注意:是主节点的主机名,根据实际修改。

HA hdfs完全分布式架构 hadoop完全分布式_HA hdfs完全分布式架构


安装前先做简单的节点规划,完全分布式模式规划1个主节点(Master)和2个从节点(Slave),一共3个节点,其中,主节点运行NameNode、SecondaryNameNode以及ResourceManager;从节点运行DataNode、NodeManager。安装规划如下表。

主机名称

IP地址

角色

运行进程

node1

192.168.30.131

主节点

NameNode、SecondaryNameNode、ResourceManager

node2

192.168.30.132

从节点

DataNode、NodeManager

node3

192.168.30.133

从节点

DataNode、NodeManager

1、安装前准备

参考
这里采用3台克隆后的虚拟机。IP地址依次为192.168.30.131、192.168.30.132、192.168.30.133。

2、修改主机名

(1)修改克隆出来的第一台主机名称为node1
在虚拟机上打开克隆出来的第一台主机上,编辑/etc/hostname文件,

$ sudo vi /etc/hostname

将原有内容替换为如下内容,

node1

重启使之生效。

$ sudo reboot

(2)修改克隆出来的第二台主机名称为node2
在虚拟机上打开克隆出来的第二台主机,编辑/etc/hostname文件。

$ sudo vi /etc/hostname

将原有内容替换为如下内容,

node2

重启使之生效。

$ sudo reboot

(3)修改克隆出来的第三台主机名称为node3
在虚拟机上打开克隆出来的第三台主机,编辑/etc/hostname文件,

$ sudo vi /etc/hostname

将原有内容替换为如下内容,

node3

重启使之生效。

$ sudo reboot

3、映射IP地址及主机名

对3台虚拟机,依次修改/etc/hosts文件。

$ sudo vi /etc/hosts

在文件末尾添加以下内容,IP地址根据实际情况修改,每台虚拟机都需要添加以下全部内容。

192.168.30.131  node1
192.168.30.132 	node2
192.168.30.133 	node3

4、免密登录设置

在完全分布式模式下,集群内任一主机免密登录集群内所有主机,即实现两两免密登录。免密登录的设置方法和伪分布模式的免密登录设置方法一样,分别在node1、node2、node3主机上生成公钥/私钥密钥对,然后将公钥发送给集群内的所有主机。
(1)在node1主机生成密钥对。rsa表示加密算法,键入上面一条命令后连续回车,系统会自动在~/.ssh目录下生成公钥(id_rsa.pub)和私钥(id_rsa),

$ ssh-keygen -t rsa

查看公钥(id_rsa.pub)和私钥(id_rsa),

$ ls ~/.ssh

将node1公钥id_rsa.pub复制到node1、node2和node3主机上。

$ ssh-copy-id -i  ~/.ssh/id_rsa.pub node1
$ ssh-copy-id -i  ~/.ssh/id_rsa.pub node2
$ ssh-copy-id -i  ~/.ssh/id_rsa.pub node3

(2)在node2主机生成密钥对。rsa表示加密算法,键入上面一条命令后连续回车,系统会自动在~/.ssh目录下生成公钥(id_rsa.pub)和私钥(id_rsa),

$ ssh-keygen -t rsa

查看公钥(id_rsa.pub)和私钥(id_rsa),

$ ls ~/.ssh

将node2公钥id_rsa.pub复制到node1、node2和node3主机上。

$ ssh-copy-id -i  ~/.ssh/id_rsa.pub node1
$ ssh-copy-id -i  ~/.ssh/id_rsa.pub node2
$ ssh-copy-id -i  ~/.ssh/id_rsa.pub node3

(3)在node3主机生成密钥对。rsa表示加密算法,键入上面一条命令后连续回车,系统会自动在~/.ssh目录下生成公钥(id_rsa.pub)和私钥(id_rsa),

$ ssh-keygen -t rsa

查看公钥(id_rsa.pub)和私钥(id_rsa),

$ ls ~/.ssh

将node3公钥id_rsa.pub复制到node1、node2和node3主机上。

$ ssh-copy-id -i  ~/.ssh/id_rsa.pub node1
$ ssh-copy-id -i  ~/.ssh/id_rsa.pub node2
$ ssh-copy-id -i  ~/.ssh/id_rsa.pub node3

(4)验证免密登录。在node1主机输入一下命令验证,注意主机名称的变化。

$ ssh node1
$ ssh node2
$ ssh node3

5、安装NTP服务

完全分布式模式由多台主机组成,各个主机的时间可能存在较大差异。如果时间差异较大,执行MapReduce程序的时候会存在问题。NTP服务通过获取网络时间使集群内不同主机的时间保持一致。默认安装Ubuntu操作系统时,没有安装NTP服务。在安装NTP服务时需连接互联网。
在3台主机分别安装NTP服务

$ sudo apt-get install ntp

查看时间服务是否运行,如果输出有“ntp”字样,说明NTP正在运行。

$ sudo dpkg -l | grep ntp

6、设置Hadoop配置文件

在node1主机进行操作。进入node1主机的Hadoop配置文件目录${HADOOP_HOME}/ etc/hadoop。

$ cd ~/hadoop/etc/hadoop

(1)配置

$ vi 

找到export JAVA_HOME一行,把行首的#去掉,并按实际修改JAVA_HOME的值。注意:JAVA_HOME=/home/hadoop/jdk,其中的hadoop为用户名,注意要按实际修改。

HA hdfs完全分布式架构 hadoop完全分布式_xml_02


(2)配置core-site.xml

$ vi core-site.xml

配置说明:
fs.defaultFS属性指定默认文件系统的URI地址,一般格式为“hdfs://host:port”。其中,host可以设置为Ubuntu操作系统的IP地址以及主机名称中的任意一个,这里设置为主机名node1;port如果不配置,则使用默认端口号8020。
hadoop.tmp.dir指定Hadoop的临时工作目录,设置为/home/<用户名>/hadoop/tmp,<用户名>请根据实际情况修改。注意:一定要配置hadoop.tmp.dir,否则默认的tmp目录在/tmp下,重启Ubuntu操作系统时tmp目录下的dfs/name文件夹会被删除,造成没有NameNode。
参考以下内容进行修改,修改完保存退出。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node1:8020</value>
        <!-- 以上ip地址或主机名要按实际情况修改 -->
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/hadoop/tmp</value>
    </property>
</configuration>

(3)配置hdfs-site.xml
dfs.replication的默认值是3,因为完全分布式有2个datanode,所以值设置为2。
参考以下内容进行修改,修改完保存退出。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
</configuration>

(4)配置mapred-site.xml
复制mapred-site.xml.template文件生成mapred-site.xml,查看是否复制成功

$ cp mapred-site.xml.template mapred-site.xml
$ ll

修改mapred-site.xml文件内容

$ vi mapred-site.xml

mapreduce.framework.name默认值为local,设置为yarn,让MapReduce程序运行在YARN框架上。
参考以下内容进行修改,修改完保存退出。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

(5)配置yarn-site.xml

$ vi yarn-site.xml

yarn.resourcemanager.hostname属性为资源管理器的主机,设置为Ubuntu操作系统的主机名或IP地址。
yarn.nodemanager.aux-services属性为节点管理器的辅助服务器,默认值为空,设置为mapreduce_shuffle。
参考以下内容进行修改,修改完保存退出。

<?xml version="1.0"?>
<configuration>
        <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>node1</value>
            <!-- 以上主机名或IP地址按实际情况修改 -->
        </property>
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
</configuration>

(6)配置slavers文件。配置slavers文件就是指定哪些主机是Slaver。
进入配置目录${HADOOP_HOME}/etc/hadoop,修改slaves文件。

$ cd ~/hadoop/etc/hadoop
$ vi slaves

将原有内容替换为以下内容。

node2
node3

(7)分发配置
将node1的配置文件分发至node2和node3主机。

$ cd ~/hadoop/etc/
$ scp -r hadoop hadoop@node2:~/hadoop/etc/
$ scp -r hadoop hadoop@node3:~/hadoop/etc/

7、格式化HDFS

在node1主机操作,命令如下。

$ hdfs namenode -format

8、启动Hadoop

启动命令只需在node1主机操作。
采用下面命令分别启动HDFS和YARN。

$ 
$ 

或者用以下命令启动HDFS和YARN。

$ 

9、验证Hadoop进程

用 jps命令分别在所有主机验证。

$ jps

node1主机包含以下3个进程表示启动Hadoop成功。

$ jps
SecondaryNameNode
NameNode
ResourceManager

在node2和node3主机分别执行jps命令,均包含以下两个进程表示启动Hadoop成功。

$ jps
NodeManager
DataNode

如果某个主机少了某个进程,应该到对应主机去找相关的log查看原因,log存放在$ {HADOOP_HOME}/logs目录下。例如,node3主机少了DataNode进程,则应该进入到node3主机的${HADOOP_HOME}/logs目录下,查看DataNode相关的log,最新出现的错误,其信息都在文件末尾,找到含有“WARN”“Error”“Exception”等的关键字句,从而找到解决问题的办法。

$ ssh node3 
$ cd ~/hadoop-2.7.3/logs
$ cat hadoop-hadoop-datanode-node3.log

10、通过Web访问Hadoop

(1)HDFS Web界面

在Windows的浏览器中,输入网址http://192.168.30.131:50070,可以查看NameNode和DataNode信息。

HA hdfs完全分布式架构 hadoop完全分布式_HA hdfs完全分布式架构_03


单击Web页面的Datanodes查看DataNode信息,如图2-32所示,有2个DataNode正在运行。

HA hdfs完全分布式架构 hadoop完全分布式_Hadoop_04

在Windows浏览器中,输入网址http://192.168.30.131:50090,可以查看SecondaryNameNode信息。

HA hdfs完全分布式架构 hadoop完全分布式_HA hdfs完全分布式架构_05


(2)YARN Web界面

在Windows的浏览器中,输入网址http://192.168.30.131:8088,可以查看集群所有应用程序的信息,可以看到Active Nodes为2,说明集群有2个NodeManager节点正在运行。

HA hdfs完全分布式架构 hadoop完全分布式_hadoop_06

11、测试Hadoop

通过一个MapReduce程序测试Hadoop,统计HDFS中/input/data.txt文件内单词出现的次数。
(1)在Ubuntu操作系统的根目录下,创建一个文本文件data.txt,

$ cd ~
$ vi data.txt

在data.txt文件中输入如下内容。

Hello World
Hello Hadoop

(2)在HDFS创建input文件夹

$ hdfs dfs -mkdir /input

(3)将data.txt上传到HDFS

$ hdfs dfs -put data.txt /input

(4)查看是否上传成功

$ hdfs dfs -ls /input

(5)运行MapReduce WordCount例子

$ cd ~/hadoop/share/hadoop/mapreduce
$ hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /input/data.txt /output

(6)查看结果

$ hdfs dfs -cat /output/part-r-00000

HA hdfs完全分布式架构 hadoop完全分布式_hadoop_07

12、停止Hadoop进程

如果要关闭Hadoop进程,可采用下列命令分别关闭HDFS和YARN,

$ 
$ 

或者使用以下命令停止所有进程。

$ 

用命令jps查看是否已经关闭了Hadoop所有进程。

$ jps

Hadoop完全分布式模式(集群模式)搭建完成。