1、Hadoop概述
1.1、Hadoop优点
- 高可靠性:Hadoop底层维护多个数据副本,即使Hadoop某个计算元素或存储出现故障也不会导致数据的流失。
- 高扩展性:在集群分配任务数据,可方便地扩展节点。
- 高效性:在MapReduce的思想下,Hadoop是并行工作的,加快任务处理速度
- 高容错性:能够自动将失败的任务重新分配
1.2、Hadoop3.x组成
- Hadoop3.x组成和2.x没有区别,内置组件分别有MapReduce(计算),Yarn(资源调度),HDFS(数据存储),Common(辅助工具)四种
1.3、HDFS架构概述
HDFS(Hadoop Distributed File System),是一个分布式文件系统
内置三种组件,NameNode,DataNode,SecondaryNameNode
- NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等
- DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和
- SecondaryNameNode(2nn):每隔一段时间对NameNode元数据备份
1.3、YARN架构概述
YARN(Yet Another Resource Negotiator),是Hadoop的资源管理器
内置四种组件,ResourceManager(RM),NodeManager(NM),ApplicationMaster(AM),Container
- ResourceManager:集群的领导者
- NodeManager:单个节点的领导者
- ApplicationMaster:单个任务运行的老大
- Container:容器,相当一台独立的服务器,里面封装了任务运行所需要的资源
- 客户端可以有多个,集群上可以运行多个ApplicationMaster,每个NodeManager上可以有多个Container
1.4、MapReduce架构概述
MapReduce将计算过程分为两个阶段:Map和Reduce
- Map阶段并行处理输入数据
- Reduce阶段对Map结果进行汇总
1.5、HDFS、YARN、MapReduce三者关系
- client向集群提交一个任务
- client提交完任务后,YARN中的ResourceManager寻找节点,开启一个Container,然后把任务放到Container中,任务叫AppMstr,AppMstr向ResourceManager申请任务开启所需资源。ResourceManager寻找那些节点有资源,AppMstr开启MapTask,每一个MapTask独立运行,最终把结果汇总写入HDFS上
2、Hadoop运行环境搭建
2.1、修改虚拟机IP地址
- 修改网络IP地址为静态地址,避免变化,方便节点服务器间的相互通信
vim /etc/sysconfig/network-scripts/ifcfg-ens33
- 修改下列值
TYPE="Ethernet" #网络类型(通常是Ethemet)
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" #IP的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="e83804c1-3257-4584-81bb-660665ac22f6" #随机id
DEVICE="ens33" #接口名(设备,网卡)
ONBOOT="yes" #系统启动的时候网络接口是否有效(yes/no)
#IP地址
IPADDR=192.168.10.100
#网关
GATEWAY=192.168.10.2
#域名解析器
DNS1=192.168.10.2
- 修改完成后保存退出,并重启网络服务
systemctl restart network
- 重启完成后ifconfig查询当前IP是否修改成功
- 保证Linux系统ifcfg-ens33文件中IP地址、虚拟网络编辑器地址和Windows系统VM8网络IP地址相同
2.2、配置虚拟机
- 修改主机名称
vim /etc/hostname
hadoop100
- 配置linux克隆主机名称映射hosts文件,打开/etc/hosts并添加节点的ip及主机名,然后重启
vim /etc/hosts
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
#重启
reboot
- 修改windows的主机映射文件(hosts文件)
#进入C:\Windows\System32\drivers\etc路径
#打开hosts文件并添加如下内容,然后保存
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
- 测试hadoop100虚拟机是否可以链接网络
ping www.baidu.com
- 安装epel-release
Extra Packages for Enterprise Linux是为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux。相当于是一个软件仓库,大多数rpm包在官方 repository 中是找不到的
#安装epel-release
yum install -y epel-release
#工具包集合
yum install -y net-tools
#vim:编辑器
yum install -y vim
#关闭防火墙
systemctl stop firewalld
#关闭防火墙开机自启
systemctl disable firewalld.service
- 创建hadoop用户,并修改hadoop用户的密码
#在root用户下
useradd hadoop
passwd hadoop
- 配置hadoop用户具有root权限,方便后期加sudo执行root权限的命令
#在root用户下
vim /etc/sudoers
#在%wheel下一行添加
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
#这行
hadoop ALL=(ALL) NOPASSWD:ALL
#hadoop这一行不要直接放到root行下面,因为所有用户都属于wheel组,你先配置了hadoop具有免密功能,但是程序执行到%wheel行时,该功能又被覆盖回需要密码。所以hadoop要放到%wheel这行下面。
- 在/opt目录下创建文件夹,并修改所属主和所属组
mkdir /opt/module
mkdir /opt/software
#修改module、software文件夹的所有者和所属组均为hadoop用户
chown hadoop:hadoop /opt/module
chown hadoop:hadoop /opt/software
#查看module、software文件夹的所有者和所属组
cd /opt/
ll
- 卸载虚拟机自带的JDK
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
reboot
2.3、安装jdk,hadoop
- 进入hadoop用户
ls /opt/software/
- 用XShell传输工具将JDK,Hadoop导入到opt目录下面的software文件夹下面
- 在Linux系统下的opt目录中查看软件包是否导入成功
[hadoop@hadoop100 ~]$ ls /opt/software/
- 解压JDK,Hadoop到/opt/module目录下
[hadoop@hadoop100 software]$ tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
[hadoop@hadoop100 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
- 配置JDK,Hadoop环境变量
sudo vim /etc/profile.d/my_env.sh
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
#注意安装路径路径一定要对
#保存后更新下环境变量
source /etc/profile
- 测试JDK,Hadoop是否安装成功
java -version
hadoop version
#如果出现版本号则安装成功
- 用hadoop100为模板,克隆两份,并修改IP地址和主机名
#修改主机名
vim /etc/hostname
#hadoop101
#hadoop102
#修改IP地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
#仅修改IP_ADDR
#IPADDR=192.168.10.101
#IPADDR=192.168.10.102
- hadoop重要目录
#(1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本
#(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
#(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
#(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
#(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
#进入Hadoop文件,ll看一下用户组是否属于hadoop,如果不是请重新反汇root用户执行用户组变更
3、hadoop运行模式
Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。
- 本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。
- 伪分布式模式:也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。
- 完全分布式模式:多台服务器组成分布式环境。生产环境使用。
3.1、本地运行模式(官方WordCount)
- 创建在hadoop-3.1.3文件下面创建一个wcinput文件夹
[hadoop@hadoop100 hadoop-3.1.3]$ mkdir wcinput
- 在wcinput文件下创建一个word.txt文件
[hadoop@hadoop100 hadoop-3.1.3]$ cd wcinput
- 编辑word.txt文件
[hadoop@hadoop100 wcinput]$ vim word.txt
#在文件中输入如下内容
hadoop yarn
hadoop mapreduce
hadoop
hadoop
#保存退出
- 回到Hadoop目录/opt/module/hadoop-3.1.3
- 执行程序
[hadoop@hadoop100 hadoop-3.1.3]$ cat wcoutput/part-r-00000
- 查看结果
hadoop 2
hadoop 2
mapreduce 1
yarn 1