内容大纲:
1. Hadoop架构详解
大数据概述
大数据发展史 //谷歌的3驾马车
Hadoop的分类 //Apache社区版, Cloudera商业版(CDH版)
应用场景
特点
Hadoop的架构图
//Hadoop1.X(HDFS + MapReduce), Hadoop2.x(Hdfs + MapReduce + Yarn), Hadoop3.X的架构和 2.X的架构一样, 只不过性能做了提升.
2. Hadoop环境搭建
//Hadoop3.3.0, 编译后的, 支持(Snappy + BZip压缩协议), 还有一些C的接口.
3. Hadoop初体验
//HDFS: 玩一下
//MapReduce: 玩一下
4. 垃圾桶机制Trash
5. Hdfs详解
分布式存储系统图解
HDFS的适用 和 不适用场景
HDFS的常用Shell命令 //重点
6. HDFS原理
//心跳机制, 负载均衡, 副本机制
//3个副本是如何存储的?
//HDFS的读写流程.
//HDFS是如何管理元数据的?
//SecondaryNameNode是如何辅助namenode管理元数据的?
*********************************************** 以下是具体内容 ***********************************************
-
Hadoop的特点
//扩容能力, 成本低, 高效率, 可靠性, 通用性(如果你能解释清楚, 面试的时候可以说, 否则不要讲)
//通用性解释: Hadoop高效的区分开了 业务 和 技术, 业务占比大概20%, 技术占比80%, 也就是说: 对于程序员来讲, 只要能把业务逻辑梳理清楚了,
//剩下的技术都是那一套, 所以有: 天下数仓是一家的说法. -
Hadoop的国内外应用
国外:
雅虎, FaceBook(Meta), IBM...
国内:
百度, 腾讯...
总结:
各行各业. -
Hadoop的发行版
//Linux发行版 = Linux内核(托瓦兹团队维护) + 系统库 + 系统软件, 常用的: RedHat, Ubantu, CentOS, 中标麒麟.随着互联网的发展, 很多公司基于Hadoop的内核也都加入了一些自己的类库, 软件等, 逐步发展, 就形成了目前我们的Hadoop体系.
//总结: 早期应用比较多的Hadoop版本有4个, Apache版, Cloudera公司的(CDH版), HotonWorks公司的, MapR
//目前, 企业用的较多的就2个版本: Apache版(社区版, 免费的), CDH版(商业版, 收费的)Apache版: //Apache开源组织推的, 免费的, 也叫: 社区版, 兼容性相对较差一点. 免费的, 有些时候可能存在软件的兼容性, 及不向下兼容的情况. //我们用Apache3.3.0 这个版本的. CDH版: //商业版 是Cloudera公司推出的, 在环境搭建, 使用及软件的兼容性方面, 做的非常好. Doug Cutting(卡大爷)目前就就职于这家公司, 职位: 副总裁. HortonWorks: //商业版 这个公司最早是雅虎团队的副总裁带着雅虎最早搞Hadoop的技术团队集体跳槽, 成立的公司. 2018年, 该公司已经被CDH收购, 收购了60%的股份, 大概在53亿美金.
-
hadoop1.X的架构图(了解)
Hadoop1.X = HDFS + MapReduce, 具体参考: 图片. -
Hadoop2.X的架构图(单节点)
Hadoop2.X = HDFS + MapReduce + Yarn -
Hadoop2.X的架构图(HA模式)
//HDFS的高可用, 详见图解. -
Hadoop集群的编译
//我们用的不是直接从官网上下载下来的Hadoop, 因为它不支持一些高效的压缩协议, 例如: Snappy, BZip, 也不支持C系列的端口.
//实际开发中, 我们一般会对从官网下载下来的Hadoop先编译, 然后再使用.Hadoop(编译前)下载地址:
https://archive.apache.org/dist/hadoop/core/hadoop-3.3.0/
//具体编译动作, 详见: Hadoop3.3.0Linux编译安装.md 笔记, 建议: 你直接用我编译好的Hadoop安装包安装即可, 不要自己尝试编译, 99.99%会失败.总结:
直接用我给大家编译好的版本安装即可, 即: hadoop-3.3.0-Centos7-64-with-snappy.tar.gz -
Hadoop的集群规划
//HDFS集群 和 Yarn集群 物理上常在一起, 但是逻辑上是分离的.
集群规划如下:
HDFS集群 Yarn集群
node1: namenode(主节点), datanode(从节点) ResourceManager(主节点), nodemanager(从节点)
node2: SecondaryNameNode(辅助节点), datanode(从节点) nodemanager(从节点)
node3: datanode(从节点) nodemanager(从节点) -
Hadoop的安装
-
上传 安装包(编译后的) 到 /export/software目录下.
-
解压上述的压缩包到 /export/server目录下.
-
修改配置文件. //3类6个.
//路径: hadoop-3.3.0/etc/hadoop/配置文件.
//分类: 1. hadoop-env.sh 2. core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml 3.works -
配置Path环境变量.
-
远程分发给 node2, node3
-
配置Path环境变量. //node2, node3
-
刷新环境变量. //三台机器都要做, source /etc/profile
-
启动.
//细节1: 第一次启动, 必须先初始化下你的HDFS集群, 在node1中执行 hdfs namenode -format
//细节2: 实际开发中, 我们一般是用 start-all.sh 的方式来启动Hadoop集群的.
//细节3: 如果你是用Notepad++连接Hadoop, 然后修改配置文件, 记得先把文件的编码格式换成 UTF-8.
-
-
Hadoop的启动
核心细节:
第一次启动的时候, 需要初始化一下 namenode, 注意: 这个动作只要做一次就行了, 否则会出多主或者无主的情况, 即: namenode 和 datanode匹配不上.
即: 我们只要在node1中做一次即可.
hdfs namenode -format如果实在是不小心把上述的命令重复执行, 只要把 /export/data下的 hadoop-3.3.0 文件夹整体删掉, 然后重新执行一次上述的命令即可.
Hadoop的启动方式:
1. 启动Hadoop之前, 先启动ZK集群, 由它来帮我们管理Hadoop集群.
/export/onekey/startZK.sh2. Hadoop集群的启动方式1: 逐个启动. //看看就行了, 一般不用的. HDFS集群: hdfs --daemon start namenode //只在node1中执行即可 hdfs --daemon start secondarynamenode //只在node2中执行即可 hdfs --daemon start datanode //node1, node2, node3, 三台机器都要执行. Yarn集群: yarn --daemon start resourcemanager //只在node1中执行即可 yarn --daemon start nodemanager //node1, node2, node3, 三台机器都要执行. 3. Hadoop集群的启动方式2: 逐集群启动. //单独启动/关闭 HDFS集群 或者 Yarn集群. start-dfs.sh start-yarn.sh 4. Hadoop集群的启动方式3: 脚本一键启动. //直接开启或者关闭Hadoop环境, 推荐, 实际开发用. start-all.sh stop-all.sh //上述的和Hadoop相关的所有命令, 你可以在任意的路径下执行, 因为我们已经在Path环境变量(vim /etc/profile)中配置过Hadoop了.
-
使用Linux的时候遇到的一些问题
问题1:
Linux虚拟机IP好好的, 突然变成127.0.0.1了, 如何解决?
答案:
这是因为 NetworkManager(网卡管理者做的事儿), 我们要把它禁用掉, 即: 执行一下如下的命令即可.
systemctl stop NetworkManager //关闭
systemctl disable NetworkManager //禁用
systemctl restart network //重启网卡.
ifconfig //查看ip, 成功显示问题2:
虚拟机的路径放的不对, 想换个路径咋整, 注意, 是node1, node2, node3这些机器, 不是VMware软件.
答案:
关闭虚拟机, 然后把虚拟机所在的文件夹整体拷贝到你要移动到的路径下, 然后选择虚拟机中的 *.vmx, 重新挂载到VMware中即可.问题3:
某个进程如果想把它关闭, 但是脚本啥的关不了怎么办?
答案:
kill -9 pid值 //强制杀死当前进程.问题4:
如果遇到问题了, 如何查看日志信息.
答案:
Hadoop的日志信息都在 /export/server/hadoop-3.3.0/logs文件夹下, hadoop-root-节点名-node1.itcast.cn.log问题5:
配置path环境变量后, 没生效?
答案:
配置完毕要通过 source /etc/profile 方式刷新下才可以生效.问题6:
编辑文件的时候, 如果我的路径写错了, 进去了怎么办?
//例如: vim /etc/profile 写成了 vim /etc/proabc
答案:
直接 :q 或者 :q! 退出即可. -
Hadoop集群的初体验之HDFS集群的初体验: //大数据分布式存储架构.
Web页面: node1:9870 //Hadoop3.X HDFS的端口号是9870, Hadoop2.X及其以前是: 50070需求1: 在HDFS中创建1个文件夹. hadoop fs -命令名 参数 //这个是Hadoop1.X出来的, Hadoop2.X也支持, 针对于Hadoop支持的所有文件系统, 更广泛. hdfs dfs -命令名 参数 //这个是Hadoop2.X 出来的写法, 主要是针对于 hdfs文件系统的, 有点局限. //总结: 目前来看写hadoop fs 和 hdfs dfs没有区别, 推荐使用 hadoop fs, 因为更通用. hadoop fs -mkdir -p /aa/bb //后边写的是 HDFS的路径. hdfs dfs -mkdir -p /cc/dd //后边写的是 HDFS的路径. 需求2: 往上述的文件夹下上传1个文件. Linux => HDFS: hadoop fs -put Linux文件的路径 HDFS文件的路径 Window => HDFS: 方式1: 先从 windows => Linux, 再从 Linux => HDFS中 方式2: 直接通过 页面(node1:9870)自带的功能, 拖拽上传即可. 需求3: 删除刚才的文件夹. hadoop fs -rm HDFS路径.
-
Hadoop集群的初体验之Yarn集群的初体验: //资源调度器.
就是在Yarn上跑一个 Hadoop自带的 MR程序的脚本即可, 脚本所在路径为:
cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce/测试包.具体步骤:
1. 进入到本机的Hadoop提供的 初体验脚本的位置.
cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce/测试包.
2. 通过Yarn命令, 执行上述的脚本即可.
格式:
yarn -jar 测试包的位置 pi 2 10
解释:
yarn -jar 说明执行的Yarn程序.
测试包的位置 就是Hadoop自带的数据的位置.
pi 圆周率
数字1: MapTask的个数, 实际开发中 1个MapTask任务 = 1个Block块.
数字2: 投点数, 数据越多, 相对越精准, 具体可以参考 蒙特卡洛算法.3. 参考命令如下: cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce ll //查看当前目录下有谁. yarn jar hadoop-mapreduce-examples-3.3.0.jar pi 2 10
-
Hadoop的历史任务
目前遇到的问题是:
我们执行过的MR程序, 可以在Yarn的Web页面中进行查看, 即: node1:8088, 但是当集群重新启动后, 这里的数据就丢失了,
即: node1:8088只记录 本次启动Hadoop集群后, 执行过的任务, 那么历史任务应该去哪里看呢?
这个时候就需要用到: JobHistory 服务了.JobHistory的搭建步骤:
//使用这个服务, 需要我们单独修改一些配置, 但是这个配置信息我们刚才搭建Hadoop集群的时候
//已经改过了, 所以大家直接用就好了.1. 修改 mapred-site.xml 文件 vim mapred-site.xml <property> <name>mapreduce.jobhistory.address</name> <value>node1:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node1:19888</value> </property> 2. scp 拷贝给node2, node3 3. 重新启动hadoop集群. stop-all.sh //一键关闭 start-all.sh //一键开启.
开启MR历史任务:
1. 开启.
mapred --daemon start historyserver //新的命令格式, hadoop3.X的写法.mr-jobhistory-daemon.sh start historyserver //旧版的命令格式, Hadoop3.X以前的写法. 2. 通过 node1:19888 页面进行查看.
-
Hadoop的垃圾桶机制
解释:
默认是没有开启的, 即: 如果我们删除数据(文件), 则数据(文件)直接就没了, 相当于永久删除.
如果开启了垃圾桶机制, 当我们删除文件的时候, 如果不加 -skipTrash 这个选项, 则默认会将该文件移动到 HDFS的垃圾桶中(类似于windows的回收站)垃圾桶机制需要我们单独部署下, 步骤如下:
1. 修改 core-site.xml文件内容. //这个是我们没有做的, 需要单独做一下.
//在core-site.xml中开启垃圾桶机制, 指定保存在垃圾桶的时间。单位分钟, 1440分钟 = 1天
fs.trash.interval
1440
2. scp远程分发给node2, node3 3. 重新启动hadoop集群. stop-all.sh //一键关闭 start-all.sh //一键开启.