1. Hadoop概述
1.1. Hadoop的组成部分
hadoop2.0以后的四个模块:
- Hadoop Common:Hadoop模块的通用组件
- Hadoop Distributed File System:分布式文件系统
- Hadoop YARN:作业调度和资源管理框架
- Hadoop MapReduce:基于YARN的大型数据集并行计算处理框架
hadoop3.0新扩展的两个模块:
- Hadoop Ozone:Hadoop的对象存储机制
- Hadoop Submarine:Hadoop的机器学习引擎
1.2. Hadoop的生态系统
2. Hadoop集群安装
2.1 集群规划(先完成一台的配置,后面两台采用克隆技术)
集群规划 | 规划 |
---|
操作系统 | Mac、Windows | 虚拟软件 | Parallels Desktop(Mac)、VMWare(Windows) | 虚拟机 | 主机名: zrclass01, IP地址: 192.168.111.101 主机名: zrclass02, IP地址: 192.168.111.102 主机名: zrclass03, IP地址: 192.168.111.103 | 软件包上传路径 | /home/soft | 软件包安装路径 | /usr/local | JDK | Jdk-8u221-linux-x64.tar.gz | Hadoop | hadoop-2.7.6.tar.gz | 用户 | root |
2.2 安装JDK
2.2.1 检查一下是否已经安装过或者系统内置JDK,如果有内置的,将其卸载
[root@zrclass01 ~]
[root@zrclass01 ~]
2.2.2 上传jdk1.8
将jdk-8u221-linux-x64.tar.gz上传到/root目录中
2.2.3 解压jdk到/usr/local/下
[root@zrclass01 ~]
2.2.4 更名jdk
[root@zrclass01 ~]
[root@zrclass01 local]
2.2.5 配置Jdk的环境变量:/etc/profile
[root@zrclass01 local]
.........省略...........
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
2.2.6 使当前窗口生效
[root@zrclass01 local]
2.2.7 验证jdk环境
[root@zrclass01 local]
[root@zrclass01 local]
2.3. 完全分布式环境需求及安装
1. 三台机器的防火墙必须是关闭的
2. 确保三台机器的网络配置通常(NAT模式、静态IP、主机名的配置)
3. 确保/etc/hosts文件配置了IP和hosts的映射关系
4. 确保配置了三台机器的免密登录认证
5. 确保所有的机器时间同步
6. JDK和Hadoop的环境变量配置
2.3.1 关闭防火墙
[root@zrclass01 ~]
[root@zrclass01 ~]
[root@zrclass01 ~]
[root@zrclass01 ~]
[root@zrclass01 ~]
.........
SELINUX=disabled
.........
2.3.2 静态IP和主机名配置
--1. 配置静态IP(确保NAT模式)
[root@zrclass01 ~]
............
BOOTPROTO=static
............
ONBOOT=yes
IPADDR=192.168.111.101
PREFIX=24
GATEWAY=192.168.111.2
DNS1=114.114.114.114
DNS2=8.8.8.8
--2. 重启网络服务
[root@zrclass01 ~]
或者
[root@zrclass01 ~]
--3. 修改主机名(如果修改过,请略过这一步)
[root@localhost ~]
或者
[root@localhost ~]
zrclass01
2.3.3 配置/etc/hosts文件(先配置zrclass01)
[root@zrclass01 ~]
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.111.101 zrclass01
192.168.111.102 zrclass02
192.168.111.103 zrclass03
2.3.4 免密登录认证
-1. 使用rsa加密技术,生成公钥和私钥。一路回车即可
[root@zrclass01 ~]
[root@zrclass01 ~]
-2. 进入~/.ssh目录下,使用ssh-copy-id命令
[root@zrclass01 ~]
[root@zrclass01 .ssh]
-3. 进行验证
[hadoop@zrclass01 .ssh]
[hadoop@zrclass01 .ssh]
[hadoop@zrclass01 .ssh]
注意:三台机器提前安装好的情况下,需要同步公钥文件。如果使用克隆技术。那么使用同一套密钥对就方便多了。
2.3.5 时间同步
[root@zrclass01 ~]
[root@zrclass01 ~]
[root@zrclass01 ~]
restrict 192.168.111.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0
systemctl restart ntpd
同步zrclass01的时间,ntpdate -u zrclass01
*/1 * * * * /usr/sbin/ntpdate -u zrclass01
2.3.6 Hadoop安装与环境变量配置
[root@zrclass01 ~]
[root@zrclass01 ~]
[root@zrclass01 ~]
[root@zrclass01 local]
[root@zrclass01 local]
[hadoop@zrclass01 local]
.....省略...........
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
2.3.7 克隆zrclass02和zrclass03
修改克隆虚拟机的ip
vi /etc/sysconfig/network-scripts/ifcfg-ens32
systemctl restart network
修改zrclass02和zrclass03的hostname
设置zrclass02和zrclass03 同步zrclass01的时间
sudo crontab -e
*/1 * * * * /usr/sbin/ntpdate -u zrclass01
systemctl restart crond
2.4. Hadoop的配置文件
2.4.1. 概述
我们需要通过配置若干配置文件,来实现Hadoop集群的配置信息。需要配置的文件有:
hadoop-env.sh
yarn-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
在Hadoop安装完成后,会在$HADOOP_HOME/share路径下,有若干个*-default.xml文件,这些文件中记录了默认的配置信息。同时,在代码中,我们也可以设置Hadoop的配置信息。
这些位置配置的Hadoop,优先级为: 代码设置 > *-site.xml > *-default.xml
集群规划:
+--------------+---------------------+
| Node | Applications |
+--------------+---------------------+
| zrclass01 | NameNode |
| | DataNode |
| | ResourceManager |
| | NodeManagere |
+--------------+---------------------+
| zrclass02 | SecondaryNameNode |
| | DataNode |
| | NodeManager |
+--------------+---------------------+
| zrclass03 | DataNode |
| | NodeManager |
+--------------+---------------------+
2.4.2. core-site.xml
[root@zrclass01 ~]# cd $HADOOP_HOME/etc/hadoop/
[root@zrclass01 hadoop]# vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://zrclass01:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
2.4.3. hdfs-site.xml
[root@zrclass01 hadoop]# vi hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>zrclass02:50090</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>zrclass01:50070</value>
</property>
</configuration>
2.4.4. mapred-site.xml
[root@zrclass01 hadoop]# cp mapred-site.xml.template mapred-site.xml
[root@zrclass01 hadoop]# vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>zrclass01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>zrclass01:19888</value>
</property>
</configuration>
2.4.5 yarn-site.xml
[root@zrclass01 hadoop]# vi yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>zrclass01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>zrclass01:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>zrclass01:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>zrclass01:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>zrclass01:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>zrclass01:8088</value>
</property>
</configuration>
2.4.6 hadoop-env.sh
[root@zrclass01 hadoop]
.........
export JAVA_HOME=/usr/local/jdk
.........
2.4.7 yarn-env.sh
[root@zrclass01 hadoop]
.........
export JAVA_HOME=/usr/local/jdk
if [ "$JAVA_HOME" != "" ]; then
JAVA_HOME=$JAVA_HOME
fi
.........
2.4.8 slaves
此文件用于指定datanode守护进程所在的机器节点主机名
[root@zrclass01 hadoop]# vi slaves
zrclass01
zrclass02
zrclass03
2.4.9 分发到另外两台节点
[root@zrclass01 ~]
[root@zrclass02 local]
[root@zrclass02 local]
[root@zrclass01 ~]
[root@zrclass01 ~]
2.5 格式化与启动
2.5.1 格式化集群
**1)**在zrclass01机器上运行命令
[root@zrclass01 ~]# hdfs namenode -format
**2)**格式化的相关信息解读
--1. 生成一个集群唯一标识符:clusterid
--2. 生成一个块池唯一标识符:blockPoolId
--3. 生成namenode进程管理内容(fsimage)的存储路径:
默认配置文件属性hadoop.tmp.dir指定的路径下生成dfs/name目录
--4. 生成镜像文件fsimage,记录分布式文件系统根路径的元数据
--5. 其他信息都可以查看一下,比如块的副本数,集群的fsOwner等。
2.5.2 启动集群
1) 启动脚本和关闭脚本介绍
1. 启动脚本
-- start-dfs.sh :用于启动hdfs集群的脚本
-- start-yarn.sh :用于启动yarn守护进程
-- start-all.sh :用于启动hdfs和yarn
2. 关闭脚本
-- stop-dfs.sh :用于关闭hdfs集群的脚本
-- stop-yarn.sh :用于关闭yarn守护进程
-- stop-all.sh :用于关闭hdfs和yarn
3. 单个守护进程脚本
-- hadoop-daemons.sh :用于单独启动或关闭hdfs的某一个守护进程的脚本
-- hadoop-daemon.sh :用于单独启动或关闭hdfs的某一个守护进程的脚本
reg:
hadoop-daemon.sh [start|stop] [namenode|datanode|secondarynamenode]
-- yarn-daemons.sh :用于单独启动或关闭hdfs的某一个守护进程的脚本
-- yarn-daemon.sh :用于单独启动或关闭hdfs的某一个守护进程的脚本
reg:
yarn-daemon.sh [start|stop] [resourcemanager|nodemanager]
**2) ** 启动HDFS
使用start-dfs.sh,启动 hdfs 启动过程解析:
- 启动集群中的各个机器节点上的分布式文件系统的守护进程
一个namenode和resourcemanager以及secondarynamenode
多个datanode和nodemanager
- 在namenode守护进程管理内容的目录下生成edit日志文件
- 在每个datanode所在节点下生成${hadoop.tmp.dir}/dfs/data目录
注意!
如果哪台机器的相关守护进程没有开启,那么,就查看哪台机器上的守护进程对应的日志log文件,注意,启动脚本运行时提醒的日志后缀是*.out,而我们查看的是*.log文件。此文件的位置:${HADOOP_HOME}/logs/里
3) jps查看进程
--1. 在zrclass01上运行jps指令,会有如下进程
namenode
datanode
--2. 在zrclass02上运行jps指令,会有如下进程
secondarynamenode
datanode
--3. 在zrclass03上运行jps指令,会有如下进程
datanode
**4) **启动yarn
使用start-yarn.sh脚本
jps查看
--1. 在zrclass01上运行jps指令,会多出有如下进程
resoucemanager
nodemanager
--2. 在zrclass02上运行jps指令,会多出有如下进程
nodemanager
--3. 在zrclass03上运行jps指令,会多出有如下进程
nodemanager
5) webui查看
HDFS: http://192.168.10.101:50070
YARN: http://192.168.10.101:8088
|