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守护进程。完全分布式模式是真正的分布式环境,用于实际的生产环境。
下表为完全分布式模式所需要配置的文件、属性名称、属性值及含义。注意:是主节点的主机名,根据实际修改。

安装前先做简单的节点规划,完全分布式模式规划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 reboot3、映射IP地址及主机名
对3台虚拟机,依次修改/etc/hosts文件。
$ sudo vi /etc/hosts在文件末尾添加以下内容,IP地址根据实际情况修改,每台虚拟机都需要添加以下全部内容。
192.168.30.131 node1
192.168.30.132 node2
192.168.30.133 node34、免密登录设置
在完全分布式模式下,集群内任一主机免密登录集群内所有主机,即实现两两免密登录。免密登录的设置方法和伪分布模式的免密登录设置方法一样,分别在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 node35、安装NTP服务
完全分布式模式由多台主机组成,各个主机的时间可能存在较大差异。如果时间差异较大,执行MapReduce程序的时候会存在问题。NTP服务通过获取网络时间使集群内不同主机的时间保持一致。默认安装Ubuntu操作系统时,没有安装NTP服务。在安装NTP服务时需连接互联网。
在3台主机分别安装NTP服务
$ sudo apt-get install ntp查看时间服务是否运行,如果输出有“ntp”字样,说明NTP正在运行。
$ sudo dpkg -l | grep ntp6、设置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为用户名,注意要按实际修改。

(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.xmlmapreduce.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.xmlyarn.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 -format8、启动Hadoop
启动命令只需在node1主机操作。
采用下面命令分别启动HDFS和YARN。
$
$ 或者用以下命令启动HDFS和YARN。
$ 9、验证Hadoop进程
用 jps命令分别在所有主机验证。
$ jpsnode1主机包含以下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.log10、通过Web访问Hadoop
(1)HDFS Web界面
在Windows的浏览器中,输入网址http://192.168.30.131:50070,可以查看NameNode和DataNode信息。

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

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

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

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
12、停止Hadoop进程
如果要关闭Hadoop进程,可采用下列命令分别关闭HDFS和YARN,
$
$ 或者使用以下命令停止所有进程。
$ 用命令jps查看是否已经关闭了Hadoop所有进程。
$ jpsHadoop完全分布式模式(集群模式)搭建完成。
















