Hadoop 2.7.2 手动部署

一、集群简介

Hadoop 集群具体来说包含两个集群:HDFS集群和YARN集群,两个逻辑上分离,但物理上常在一起。

HDFS集群负责海量数据的存储,集群中的角色主要有:NameNodeDataNodeSecondaryNameNode

YARN集群负责海量数据运算时的资源调度,集群中的角色主要有:ResourceManagerNodeManager

mapreduce是什么呢?它其实是一个分布式运算编程框架,是应用程序开发包,由用户按照编程规范进行程序开发后打包运行在HDFS集群上,并且受到YARN集群的资源调度管理。

Hadoop的部署方式分三种:独立模式伪分布式完全分布式,其中前两种都是在单机部署。独立模式又称为单机模式,仅1个机器运行1个的java进程,主要用于调试。伪分布模式也是在1个机器上运行HDFS的NameNode、DataNode、SecondaryNameNode、ResourceManger和NodeManager,但分别启动单独的java的进程,主要用于调试。完全分布式模式主要用于生产环境部署。会使用n台主机组成一个Hadoop的集群。这种部署模式下,主节点和从节点会分开部署在不同的机器上。

二、部署Hadoop 分布式集群

2.1 集群规划

服务器IP地址部署组件
hadoop110.10.8.11namenode、datanode、resourcemanager、nodemanager
hadoop210.10.8.12secondarynamenode、datanode、nodemanager
hadoop310.10.8.13datanode、nodemanager

以后如果需要为集群增加节点,只需要在新节点上运行datanodenodemanager

2.2 部署前准备

2.2.1 调整文件句柄数

在所有hadoop服务器上执行

1
2
3
4
5
6
[root@hadoop1 ~]# vim /etc/security/limits.conf
#修改内容如下
* soft nproc 102400
* hard nproc 102400
* soft nofile 102400
* hard nofile 102400

2.2.2 配置主机名和hosts

在所有hadoop服务器上执行

为所有服务器配置主机名和hosts解析,在生产环境一般都由DNS解析这里用hosts代替

1
2
3
4
[root@hadoop1 ~]# hostnamectl set-hostname hadoop1
10.10.8.11 hadoop1
10.10.8.12 hadoop2
10.10.8.13 hadoop3

2.2.3 创建hadoop专属用户

在所有hadoop服务器上执行

1
2
3
[root@hadoop1 ~]# groupadd hadoop
[root@hadoop1 ~]# useradd -u 501 hadoop -g hadoop
[root@hadoop1 ~]# passwd hadoop

2.2.4 配置SSH免密登录

免密登录主要是为了以后使用sbin目录下的脚本一键进行启动/关闭HDFS和YARN

1
2
3
4
5
[dev@hadoop1 ~]# su - hadoop
[hadoop@hadoop1 ~]$ ssh-keygen
[hadoop@hadoop1 ~]$ ssh-copy-id hadoop1
[hadoop@hadoop1 ~]$ ssh-copy-id hadoop2
[hadoop@hadoop1 ~]$ ssh-copy-id hadoop3

2.2.5 安装jdk

在所有hadoop服务器上执行

这里我只在运行hadoop用户下配置jdk环境变量,为了避免以后使用到非hadoop用户执行命令而造成损失

1
2
3
4
5
6
7
8
[hadoop@hadoop1 ~]$ tar xf downloads/jdk-8u301-linux-x64.tar.gz
[hadoop@hadoop1 ~]$ vim .bash_profile
export JAVA_HOME=/home/hadoop/jdk1.8.0_301
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

[hadoop@hadoop1 ~]$ source .bash_profile

2.3 Hadoop配置文件修改

Hadoop的安装主要就是配置文件的修改,一般在主节点进行修改,完毕后SCP下发给其他各个从节点机器。

在hadoop安装目录下创建3个文件夹 用于存储hadoop数据,生产环境中应使用单独的磁盘

1
2
3
[hadoop@hadoop1 ~]$ tar xf downloads/hadoop-2.7.2.tar.gz
[hadoop@hadoop1 ~]$ cd hadoop-2.7.2
[hadoop@hadoop1 ~/hadoop-2.7.2]$ mkdir -p current/tmp hdfs/data hdfs/name

current/tmp目录,用来存储hadoop运行时生成的文件
hdfs/data目录,用来存储datanode数据
hdfs/name目录,用来存储namenode元数据

2.3.1 修改 hadoop-env.sh

文件中设置的是 Hadoop的运行时需要的环境变量JAVA_HOME是必须设置的,即使我们当前的系统中设置了JAVA_HOME,它也是不认识的,因为Hadoop的即使是在本机上执行,它也是把当前的执行环境当成远程服务器。

1
2
3
[hadoop@hadoop1 ~/hadoop-2.7.2]$ cd etc/hadoop/
[hadoop@hadoop1 ~/hadoop-2.7.2/etc/hadoop]$ vim hadoop-env.sh
export JAVA_HOME=/home/hadoop/jdk1.8.0_301

2.3.2 修改4个*-site.xml文件

修改Hadoop全局配置文件 core-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[hadoop@hadoop1 ~/hadoop-2.7.2/etc/hadoop]$ vim core-site.xml
<configuration>
<!--指定使用hdfs作为默认文件系统 以及指定hdfs主角色所在ip和端口 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<!--指定hadoop运行时存储数据所在的位置 -->
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop-2.7.2/current/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>

修改HDFS的核心配置文件 hdfs-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[hadoop@hadoop1 ~/hadoop-2.7.2/etc/hadoop]$ vim hdfs-site.xml
<configuration>
<!-- 设置namenode存放的路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop-2.7.2/hdfs/name</value>
</property>
<!-- 设置datanode存放的路径 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop-2.7.2/hdfs/data</value>
</property>
<!--指定hdfs存储文件的副本数 默认是3 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!--设置secondarynamenode的http通讯地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop2:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>

修改MapReduce的核心配置文件 mapred-site.xml

需要从mapred-site.xml.template模板拷贝

1
2
3
4
5
6
7
8
9
[hadoop@hadoop1 ~/hadoop-2.7.2/etc/hadoop]$ cp mapred-site.xml.template mapred-site.xml
[hadoop@hadoop1 ~/hadoop-2.7.2/etc/hadoop]$ vim mapred-site.xml
<configuration>
<!--指定mr程序运行的框架,也就是由谁为mr程序运行提供运算的资源 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

修改yarn的核心配置文件 yarn-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
[hadoop@hadoop1 ~/hadoop-2.7.2/etc/hadoop]$ vim yarn-site.xml
<configuration>
<!--指定yarn主角色所在的机器 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop1</value>
</property>

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

2.3.3 修改 slaves

1
2
3
4
[hadoop@hadoop1 ~/hadoop-2.7.2/etc/hadoop]$ vim slaves
hadoop1
hadoop2
hadoop3

2.4 配置hadoop命令环境变量

为运行hadoop用户配置hadoop命令环境变量

1
2
3
4
[hadoop@hadoop1 ~]$ vim .bash_profile
export HADOOP_HOME=/home/hadoop/hadoop-2.7.2
export PATH=${JAVA_HOME}/bin:$HADOOP_HOME/bin:$PATH
[hadoop@hadoop1 ~]$ source .bash_profile

2.5 格式化集群文件系统

在进行格式化操作前,先将修改好的hadoop目录scp到其它节点上

1
2
[hadoop@hadoop1 ~]$ rsync -av hadoop-2.7.2 hadoop@hadoop2:~/
[hadoop@hadoop1 ~]$ rsync -av hadoop-2.7.2 hadoop@hadoop3:~/

在主节点上格式化集群的文件系统

1
2
3
4
5
[hadoop@hadoop1 ~]$ hadoop namenode -forma
#会输出类似以下信息
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop1/10.10.8.11
************************************************************/

format中主要生成了hdfs(namenode)工作所需要的目录和一些初始化的文件

如果初始化了多次,format多次会导致主从之间的集群标识clusterID不一致造成互相不认识,并且数据丢失;可以删除每台机器上hadoop.tmp.dir指定的文件夹内容,然后再重新format这样就相当于重新建了一个集群

2.6 启动hadoop分布式集群

hadoop启动方式可以分为以下三种:

单节点逐个启动

hdfs

hadoop-daemon.sh start|stop (namenode/datanode/secondarynamenode)

yarn

yarn-daemon.sh start|stop (resourcemanager/nodemanager)

脚本一键启动(需要做免密)

hdfs

start-dfs.sh|stop-dfs.sh

yarn

start-yarn.sh|stop-yarn.sh

start-all启动(需要做免密)

start-all.sh|stop-all.sh

2.6.1 启动 hdfs

1
2
[hadoop@hadoop1 ~]$ cd hadoop-2.7.2/sbin
[hadoop@hadoop1 ~/hadoop-2.7.2/sbin]$ ./start-dfs.sh

2.6.2 启动 yarn

1
[hadoop@hadoop1 ~/hadoop-2.7.2/sbin]$ ./start-yarn.sh

查看各节点服务进程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[hadoop@hadoop1 ~]$ jps
4880 Jps
4353 ResourceManager
6753 NameNode
6888 DataNode
4460 NodeManager

[hadoop@hadoop2 ~]$ jps
29697 DataNode
30258 Jps
30121 NodeManager
29788 SecondaryNameNode

[hadoop@hadoop3 ~]$ jps
29108 Jps
28970 NodeManager
28767 DataNode

到此分布式的hadoop集群已经搭好了

2.7 访问web页面

2.7.1 访问hdfs web页面

hdfs集群:http://namenode_host:50070

图片1

2.7.2 访问yarn web页面

yarn集群:http://resourcemanager_host:8088

图片2

-------------本文结束感谢您的阅读-------------