Hadoop之HDFS
学习一个框架,主要关注这个框架是什么、干什么、原理、怎么用、实地使用场景中可能存在的问题、原因及优化。
一.Hadoop学习要点
Hadoop 体系是我们学习大数据框架的基石,尤其是 MapReduce、HDFS、Yarn 三驾马车基本垫定了整个数据方向的发展道路。也是后面我们学习其他框架的基础,关于 Hadoop 本身我们主要应该掌握:
- HDFS架构理解(基础)
- HDFS源码/工作原理(高级)
- MapReduce架构理解(基础)
- MapReduce源码/原理/Shuffle原理(高级)
- MapReduce二次排序(编程,必选)
- YARN架构理解(基础)
- YARN源码/工作原理(高级)
其主要是三方面内容:
1)HDFS
- 十分熟悉 HDFS 的架构图和读写流程
- 十分熟悉 HDFS 的配置
- 熟悉 DataNode 和 NameNode 的作用
- NameNode 的 HA 搭建和配置,Fsimage 和 Edit Journal 的作用的场景
- HDFS 操作文件的常用命令
- HDFS 的安全模式
2)MapReduce
- 掌握 MapReduce 的工作原理
- 能用 MapReduce 手写代码实现简单的 WordCount 或者 TopN 算法
- 掌握 MapReduce Combiner 和 Partitioner的作用
- 熟悉 Hadoop 集群的搭建过程,并且能解决常见的错误
- 熟悉 Hadoop 集群的扩容过程和常见的坑
- 如何解决 MapReduce 的数据倾斜
- Shuffle 原理和减少 Shuffle 的方法
3)Yarn
- Yarn 的产生背景和架构
- Yarn 中的角色划分和各自的作用
- Yarn 的配置和常用的资源调度策略
- Yarn 进行一次任务资源调度的过程
二.Hadoop基础概述
关于大数据
什么是大数据?多大算是大数据?其有什么特点?
大数据(BigData) :指无法在一定时间范围内用常规软件工具进行捕捉、管理
和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程
优化能力的海量、高增长率和多样化的信息资产。
按顺序给出数据存储单位: bit.、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。
大数据的特点:4V
- volume 大量
- velocity 高速
- variety 多样
- value 低价值密度
关于Hadoop
Hadoop三大发行版本:Apache、Cloudera、Hortonworks。
- Apache版本最原始(最基础)的版本,对于入门学习最好(手动挡)。
- Cloudera内部集成了很多大数据框架。对应产品CDH(自动挡)。
- Hortonworks文档较好。对应产品HDP。
Hadoop的优势:4高
- 1)高可靠性:多个数据副本
- 2)高扩展性:节点方便扩展
- 3)高效性:MapReduce思想下的并行工作,加快任务处理速度
- 4)高容错性:能自动将失败任务重新分配
Hadoop官方网站:http://hadoop.apache.org/
Hadoop组成
- 1)Hadoop HDFS:一个高可靠、高吞吐量的分布式文件系统。
- 2)Hadoop MapReduce:一个分布式的离线并行计算框架。
- 3)Hadoop YARN:作业调度与集群资源管理的框架。
- 4)Hadoop Common:支持其他模块的工具模块。
Hadoop2.x 之后,将之前的MapReduce部分分为MapReduce与YARN两个部分,其目的是为了解耦。
解耦的一个好处就是可以实现MapReduce的可插拔,从而更加方便地替换计算框架。
MapReduce将计算过程分为两个阶段:Map和Reduce
- 1)Map阶段并行处理输入数据
- 2)Reduce阶段对Map结果进行汇总
YARN架构: - 1)ResourceManager(rm):处理客户端请求、启动/监控ApplicationMaster、监控NodeManager、资源分配与调度;
- 2)NodeManager(nm):单个节点上的资源管理、处理来自ResourceManager的命令、处理来自ApplicationMaster的命令;
- 3)ApplicationMaster:数据切分、为应用程序申请资源,并分配给内部任务、任务监控与容错。
- 4)Container:对任务运行环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。
三.Hadoop实践操作*
1. 运行环境搭建
Hadoop的运行环境安装主要包括三大部分:基础的集群操作系统的准备、具体的运行环境安装——包括JDK和Hadoop两个部分。
1)虚拟机环境准备
①单台最小安装的虚拟机:内存4G,硬盘50G,并安装必要环境:
sudo yum install -y epel-release
sudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git
如果有需要,修改YUM源为国内镜像
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
③修改主机名
sudo hostnamectl --static set-hostname hadoop101
④配置主机名称映射,打开/etc/hosts
sudo vim /etc/hosts
⑤修改windows的hosts文件
- 路径:C:\Windows\System32\drivers\etc
⑥关闭虚拟机防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
⑦创建新用户,并重启
sudo useradd zxy
sudo passwd zxy
reboot
⑧配置atguigu用户具有root权限
visudo
修改/etc/sudoers文件,找到下面一行(91行),在root下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
atguigu ALL=(ALL) ALL
⑨在/opt目录下创建下创建module、software文件夹;并修改module、software文件夹的所有者
sudo mkdir module
sudo mkdir software
sudo mkdir /opt/module /opt/software
sudo chown zxy:zxy /opt/module /opt/software
⑩关机照快照,再克隆两台虚拟机
- 修改其IP,主机名
2)安装JDK
①卸载现有JDK
rpm -qa | grep -i java | xargs -n1 sudo rpm -e –nodeps
- grep -i 或 --ignore-case : 忽略字符大小写的差别
- xargs是给命令传递参数的一个过滤器:
- -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的
②将JDK导入到opt目录下面的software文件夹下
③解压JDK到/opt/module目录下
tar -zxvf /opt/software/jdk-8u212-linux-x64.tar.gz -C /opt/module/
④配置JDK环境变量
- 新建/etc/profile.d/my_env.sh文件:一般用户对该文件夹只有只读权限,所以需要sudo
sudo vim /etc/profile.d/my_env.sh
- 在my_env.sh文件中添加如下内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
- 保存后退出
- 重启xshell窗口,让环境变量生效,或者运行命令
source /etc/profile.d/my_env.sh
⑤测试JDK是否安装成功
java -version
如果能看到版本信息,则Java正常安装;否则试着重启。
3)安装Hadoop
Hadoop下载地址:
- https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3
①进入到Hadoop安装包的路径下,解压安装文件到/opt/module下面
[zxy@hadoop101 ~]$ cd /opt/software/
[zxy@hadoop101 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
[zxy@hadoop101 software]$ ls /opt/module/
hadoop-3.1.3
②添加Hadoop环境变量,并执行source命令
[zxy@hadoop101 hadoop-3.1.3]$ sudo vim /etc/profile.d/my_env.sh
在profile文件末尾添加JDK路径:(shift+g)
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
③测试是否安装成功
[zxy@hadoop101 hadoop-3.1.3]$ source /etc/profile.d/my_env.sh
[zxy@hadoop101 hadoop-3.1.3]$ hadoop version
Hadoop 3.1.3
Hadoop目录结构
[zxy@hadoop102 hadoop-3.1.3]$ ll
总用量 180
drwxr-xr-x. 2 zxy zxy 236 4月 2 15:50 bin
drwxrwxr-x. 4 zxy zxy 30 3月 23 10:16 data
drwxr-xr-x. 3 zxy zxy 20 9月 12 2019 etc
drwxr-xr-x. 2 zxy zxy 106 9月 12 2019 include
drwxr-xr-x. 3 zxy zxy 20 9月 12 2019 lib
drwxr-xr-x. 4 zxy zxy 288 9月 12 2019 libexec
-rw-rw-r--. 1 zxy zxy 147145 9月 4 2019 LICENSE.txt
drwxrwxr-x. 3 zxy zxy 4096 4月 2 15:46 logs
-rw-rw-r--. 1 zxy zxy 21867 9月 4 2019 NOTICE.txt
-rw-rw-r--. 1 zxy zxy 1366 9月 4 2019 README.txt
drwxr-xr-x. 3 zxy zxy 4096 9月 12 2019 sbin
drwxr-xr-x. 4 zxy zxy 31 9月 12 2019 share
- 1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本
- 2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
- 3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
- 4)sbin目录:存放启动或停止Hadoop相关服务的脚本
- 5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
2.Hadoop运行模式
Hadoop运行模式:
- 1)本地模式(默认模式):不需要启用单独进程,直接可以运行,测试和开发时使用。
- 2)伪分布式模式:等同于完全分布式,只有一个节点。
- 3)完全分布式模式:多个节点一起运行
3.完全分布式部署Hadoop集群
完全分布式模式配置流程:
- 1)准备3台