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 |
[root@zrclass01 ~]# rpm -qa | grep jdk # 如果有,请卸载 [root@zrclass01 ~]# rpm -e xxxxxxxx --nodeps # 将查询到的内置jdk强制卸载2.2.2 上传jdk1.8
将jdk-8u221-linux-x64.tar.gz上传到/root目录中2.2.3 解压jdk到/usr/local/下
[root@zrclass01 ~]# tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local2.2.4 更名jdk
[root@zrclass01 ~]# cd /usr/local [root@zrclass01 local]# mv jdk1.8.0_221/ jdk2.2.5 配置Jdk的环境变量:/etc/profile
[root@zrclass01 local]# vi /etc/profile .........省略........... #jdk environment export JAVA_HOME=/usr/local/jdk export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH2.2.6 使当前窗口生效
[root@zrclass01 local]# source /etc/profile2.2.7 验证jdk环境
[root@zrclass01 local]# java -version [root@zrclass01 local]# javac2.3. 完全分布式环境需求及安装
1. 三台机器的防火墙必须是关闭的 2. 确保三台机器的网络配置通常(NAT模式、静态IP、主机名的配置) 3. 确保/etc/hosts文件配置了IP和hosts的映射关系 4. 确保配置了三台机器的免密登录认证 5. 确保所有的机器时间同步 6. JDK和Hadoop的环境变量配置2.3.1 关闭防火墙
[root@zrclass01 ~]# systemctl stop firewalld [root@zrclass01 ~]# systemctl disable firewalld [root@zrclass01 ~]# systemctl stop NetworkManager [root@zrclass01 ~]# systemctl disable NetworkManager #最好也把selinux关闭掉,这是linux系统的一个安全机制,进入文件中将SELINUX设置为disabled [root@zrclass01 ~]# vi /etc/selinux/config ......... SELINUX=disabled .........2.3.2 静态IP和主机名配置
--1. 配置静态IP(确保NAT模式) [root@zrclass01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 ............ BOOTPROTO=static # 将dhcp改为static ............ ONBOOT=yes # 将no改为yes IPADDR=192.168.111.101 # 添加IPADDR属性和ip地址 PREFIX=24 # 添加NETMASK=255.255.255.0或者PREFIX=24 GATEWAY=192.168.111.2 # 添加网关GATEWAY DNS1=114.114.114.114 # 添加DNS1和备份DNS DNS2=8.8.8.8 --2. 重启网络服务 [root@zrclass01 ~]# systemctl restart network 或者 [root@zrclass01 ~]# service network restart --3. 修改主机名(如果修改过,请略过这一步) [root@localhost ~]# hostnamectl set-hostname zrclass02 或者 [root@localhost ~]# vi /etc/hostname zrclass012.3.3 配置/etc/hosts文件(先配置zrclass01)
[root@zrclass01 ~]# vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.111.101 zrclass01 #添加本机的静态IP和本机的主机名之间的映射关系 192.168.111.102 zrclass02 192.168.111.103 zrclass032.3.4 免密登录认证
-1. 使用rsa加密技术,生成公钥和私钥。一路回车即可 [root@zrclass01 ~]# cd ~ [root@zrclass01 ~]# ssh-keygen -t rsa -2. 进入~/.ssh目录下,使用ssh-copy-id命令 [root@zrclass01 ~]# cd ~/.ssh [root@zrclass01 .ssh]# ssh-copy-id root@zrclass01 -3. 进行验证 [hadoop@zrclass01 .ssh]# ssh zrclass01 #下面的第一次执行时输入yes后,不提示输入密码就对了 [hadoop@zrclass01 .ssh]# ssh localhost [hadoop@zrclass01 .ssh]# ssh 0.0.0.0 注意:三台机器提前安装好的情况下,需要同步公钥文件。如果使用克隆技术。那么使用同一套密钥对就方便多了。2.3.5 时间同步
# 1 选择集群中的某一台机器作为时间服务器,例如zrclass01
# 2 保证这台服务器安装了ntp.x86_64。 yum install ntp -y
# 3 保证ntpd 服务运行......
[root@zrclass01 ~]# sudo service ntpd start
# 开机自启动:
[root@zrclass01 ~]# chkconfig ntpd on
# 4 配置相应文件:
[root@zrclass01 ~]# vi /etc/ntp.conf
# Hosts on local network are less restricted.
# restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# 添加集群中的网络段位
restrict 192.168.111.0 mask 255.255.255.0 nomodify notrap
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# server 0.centos.pool.ntp.org iburst 注释掉
# server 1.centos.pool.ntp.org iburst 注释掉
# server 2.centos.pool.ntp.org iburst 注释掉
# server 3.centos.pool.ntp.org iburst 注释掉
server 127.127.1.0 #master作为服务器
systemctl restart ntpd
# 5 其他机器要保证安装ntpdate.x86_64 yum install ntpdate -y
同步zrclass01的时间,ntpdate -u zrclass01
# 6 其他机器要使用root定义定时器 zrclass02和zrclass03 sudo crontab -e
*/1 * * * * /usr/sbin/ntpdate -u zrclass01
2.3.6 Hadoop安装与环境变量配置
# 1. 上传和解压两个软件包 [root@zrclass01 ~]# tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local/ [root@zrclass01 ~]# tar -zxvf hadoop-2.7.6.tar.gz -C /usr/local/ # 2. 进入local里,给两个软件更名 [root@zrclass01 ~]# cd /usr/local/ [root@zrclass01 local]# mv 1.8.0_221/ jdk [root@zrclass01 local]# mv hadoop-2.7.6/ hadoop # 3. 配置环境变量 [hadoop@zrclass01 local]# vi /etc/profile .....省略........... #java environment export JAVA_HOME=/usr/local/jdk export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH #hadoop environment export HADOOP_HOME=/usr/local/hadoop export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH2.3.7 克隆zrclass02和zrclass03
修改克隆虚拟机的ip
vi /etc/sysconfig/network-scripts/ifcfg-ens32 # 将zrclass02,zrclass03 ip分别改为192.168.111.102和192.168.111.103 systemctl restart network
修改zrclass02和zrclass03的hostname
设置zrclass02和zrclass03 同步zrclass01的时间
sudo crontab -e */1 * * * * /usr/sbin/ntpdate -u zrclass01 systemctl restart crond2.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.xml2.4.3. hdfs-site.xmlfs.defaultFS hdfs://zrclass01:8020 hadoop.tmp.dir /usr/local/hadoop/tmp
[root@zrclass01 hadoop]# vi hdfs-site.xml2.4.4. mapred-site.xmldfs.namenode.name.dir file://${hadoop.tmp.dir}/dfs/name dfs.datanode.data.dir file://${hadoop.tmp.dir}/dfs/data dfs.replication 3 dfs.blocksize 134217728 dfs.namenode.secondary.http-address zrclass02:50090 dfs.namenode.http-address zrclass01:50070
[root@zrclass01 hadoop]# cp mapred-site.xml.template mapred-site.xml [root@zrclass01 hadoop]# vi mapred-site.xml2.4.5 yarn-site.xmlmapreduce.framework.name yarn mapreduce.jobhistory.address zrclass01:10020 mapreduce.jobhistory.webapp.address zrclass01:19888
[root@zrclass01 hadoop]# vi yarn-site.xml2.4.6 hadoop-env.shyarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname zrclass01 yarn.nodemanager.aux-services.mapreduce_shuffle.class org.apache.hadoop.mapred.ShuffleHandler yarn.resourcemanager.address zrclass01:8032 yarn.resourcemanager.scheduler.address zrclass01:8030 yarn.resourcemanager.resource-tracker.address zrclass01:8031 yarn.resourcemanager.admin.address zrclass01:8033 yarn.resourcemanager.webapp.address zrclass01:8088
[root@zrclass01 hadoop]# vi hadoop-env.sh ......... # The java implementation to use. export JAVA_HOME=/usr/local/jdk .........2.4.7 yarn-env.sh
[root@zrclass01 hadoop]# vi yarn-env.sh ......... # some Java parameters export JAVA_HOME=/usr/local/jdk if [ "$JAVA_HOME" != "" ]; then #echo "run java in $JAVA_HOME" JAVA_HOME=$JAVA_HOME fi .........2.4.8 slaves
此文件用于指定datanode守护进程所在的机器节点主机名
[root@zrclass01 hadoop]# vi slaves zrclass01 zrclass02 zrclass032.4.9 分发到另外两台节点
# 同步Hadoop到另外两台节点 [root@zrclass01 ~]# cd /usr/local [root@zrclass02 local]# scp -r hadoop zrclass02:$PWD [root@zrclass02 local]# scp -r hadoop zrclass03:$PWD # 同步profile到另外两台节点 [root@zrclass01 ~]# scp /etc/profile zrclass02:/etc [root@zrclass01 ~]# scp /etc/profile zrclass03:/etc # 检查slave节点上的jdk是否已安装 # 检查是否同步了/etc/hosts文件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



