您现在的位置是:首页 >技术交流 >Hadoop相关网站首页技术交流
Hadoop相关
1. 大数据相关导论
1.1 什么是数据, 什么是大数据?
一切皆数据.
大数据指的是数据的体量比较大, 数据单位从小到大有: 字节(byte), kb, mb, gb, tb, pb, eb, zb, yb, bb, nb, db # 注意: GB,TB,PB
# 2020年全球数据总量: 44ZB
# 原因分析(离线数据, 历史数据), 现状分析(实时数据, 流式数据), 预测性分型(根据数据预测未来的趋势)
1.2 什么是数据分析, 步骤是什么?
概述:
就是从海量的数据中提取出来有价值的信息, 实现数据的商业化, 价值化, 给企业的决策者提供数据支持 或者 可行性分析报告.
步骤:
1. 明确数据分析的目的和思路.
# 5W2H分析法, PEST分析法
2. 数据采集.
# 自己编写代码, 采集工具(Sqoop, Flume)
3. 数据预处理.
# ETL开发工程师
4. 数据分析.
# Hadoop开发工程师, 数据开发(分析)工程师, Spark开发工程师, Flink开发工程师, 实时开发工程师.
5. 数据展示.
# 自己写UI(前端工程师, 后台工程师), 第三方软件(FineBI等)
6. 撰写报告.
1.3 大数据解决了什么问题?
海量数据的存储(HDFS, HBase) 和 海量数据的计算(MapReduce, Tez, Spark, Flink)
1.4 大数据的特点是什么?
大多值快信. # 简称: 5V
1.5 数据的种类有哪些?
结构化数据:
例如: MySQL中的表数据.
半结构化数据:
例如: html, json字符串
非结构化数据:
例如: 图片, 音频, 视频等.
1.6 大数据的应用场景是什么?
各行各业.
2. Zookeeper介绍
概述: # Zookeeper的底层是Java实现的.
它是大数据分布式协调服务框架, 主要是帮助我们管理大数据集群的, 也被称之为: 动物园管理员.
例如: 选举机制, 主备切换等.
除此之外, 它还是1个小型的文件存储系统, 采用Znode节点的形式来存储数据, 每个节点存储数据的上限是 不超过1MB。
特点:
全局数据一致性. # 客户端无论连接哪台机器, 得到的结果都是一样的.
可靠性.
顺序性. # 全局有序(A在B前) 和 偏序(B在A后)
数据更新原子性. # 过半原则.
实时性.
框架(角色介绍):
Leader:
Follower:
ObServer:
ZK集群启动和关闭:
cd /export/server/zookeeper/bin/
zkServer.sh start|stop|status
ZK的客户端连接:
方式1: 命令方式.
cd /export/server/zookeeper/bin
./zkCli.sh
方式2: 图形化界面.
双击 startZk.bat文件即可.
Znode节点划分:
永久节点, 临时节点, 永久有序节点, 临时有序节点.
Zookeeper的Shell操作:
help # 查看Zookeeper的所有Shell命令.
ls path [watch] # 查看Znode节点的信息(子节点等), 简单信息
ls2 path [watch] # 查看Znode节点的信息(子节点等), 详细信息
create [-s] [-e] path data acl # 创建Znode节点, -s:有序节点, -e: 临时节点, 什么都不写, 默认是永久节点.
delete path [version] # 删除节点, 前提是: 该节点不能有子节点.
rmr path # 删除节点, 无论是否有子节点. remove -r
get path [watch] # 查看节点的内容(信息)
set path data [version] # 修改节点的存储内容信息.
history # 查看历史命令
redo cmdno # 根据命令编号, 重新执行该命令.
quit # 退出Zookeeper客户端.
3. Hadoop相关
概述:
广义上:
指的是Hadoop生态圈, 即: 和Hadoop相关的所有周边产品(技术), 包括但不局限于: 存储, 采集, 分析, 计算, 挖掘, 可视化等...
狭义上:
指的就是Apache提供的一款软件, 由 HDFS(存), MapReduce(计算), Yarn(资源调度)三部分组成.
HDFS: Hadoop Distributed FileSystem, hadoop的分布式存储文件系统, 实现海量数据存储的.
MapReduce: 分布式计算框架, 采用分而治之思想实现.
Yarn: 统一资源管理和任务调度器, 主要是用于任务调度 及 分配资源的.
Hadoop集群搭建:
如何下载官方的原版Hadoop(编译前):
https://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/
# 扩展, 我们常用的Apache的软件都在这里: https://archive.apache.org/dist/
为什么要手动为官方提供的Hadoop进行编译, 什么是编译?
编译: # 因为Hadoop底层是用Java写的, 所以这个编译指的是Java语言的编译.
源代码文件(*.java) => 字节码文件(*.class) => 打成 *.jar包 # 把源码最终打成jar包,可以直接运行的那种.
为什么要手动为官方提供的Hadoop进行编译?
因为Hadoop官方提供的版本是兼容"大环境"的, 但是不一定兼容本地环境, 例如: Snappy协议, C端口等默认都不支持.
怎么编译?
# 详见文档 Hadoop3.3.0Linux编译安装.md, 但是不推荐你做, 99.99%会失败.
Hadoop集群搭建规划, 即: 3台虚拟机上, 最终装什么:
# HDFS集群 Yarn集群
node1: namenode, datanode ResourceManager, nodemanager
node2: SecondaryNameNode, datanode nodemanager
node3: datanode nodemanager
具体的搭建动作:
1. 上传, 解压.
上传到: /export/software
解压到: /export/server
2. 修改配置文件. # 6个.
# 配置文件路径: /export/server/hadoop-3.3.0/etc/hadoop
hadoop-env.sh # Hadoop的基础服务
core-site.xml # 核心配置, 适用于: HDFS, Yarn, MapReduce
hdfs-site.xml # hdfs的配置
mapred-site.xml # mapreduce的配置
yarn-site.xml # yarn的配置
works # 配置从节点信息的.
3. 配置path环境变量. # 记得 source刷新.
4. 分发给node2, node3 # 记得去node2, node3也配置path并刷新.
5. 初始化hadoop集群. # 注意: 只能初始化一次, 如果重复做, 会出现元数据丢失的问题, 相当于: 删除了图书馆所有图书的位置信息.
hadoop namenode -format # 只在node1上做一次就行了.
启动:
单个启动:
HDFS集群:
#hadoop2.x版本命令
hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode#hadoop3.x版本命令
hdfs --daemon start|stop namenode|datanode|secondarynamenode
Yarn集群:
#hadoop2.x版本命令
yarn-daemon.sh start|stop resourcemanager|nodemanager#hadoop3.x版本命令
yarn --daemon start|stop resourcemanager|nodemanager
逐集群启动:
start-dfs.sh
start-yarn.sh
一键启动: # 学习中, 用的最多.
start-all.sh
stop-all.sh
关于HDFS和Yarn的 WebUI地址:
HDFS: node1:9870 # 注意: hadoop3.X的端口是9870, Hadoop2.X及其以前是 50070
Yarn: node1:8088 # 记录执行过的计算任务信息的, 只记录: 本次Hadoop集群启动后的信息。
Hadoop集群初体验:
HDFS(大数据分布式存储框架): # 体验一下上传文件.
hadoop fs -mkdir -p hdfs的目录地址 # 在HDFS上创建目录
hadoop fs -put Linux的文件路径 hdfs的文件路径(必须是绝对路径) # hadoop fs 更通用, 能操作任意的文件系统.
hdfs dfs -put Linux的文件路径 hdfs的文件路径(必须是绝对路径) # hdfs dfs 主要是操作 HDFS文件系统的.
hadoop fs -cat HDFS文件路径 # 查看文件内容.
Yarn(统一资源管理和任务调度器), MapReduce(大数据分布式计算框架):
# 用MR来实现计算圆周率, 该MR计算任务交由Yarn做调度, 底层用的是: 蒙特卡洛算法.
# MR是代码级别的, 即: 通过Python, Java, Scala都可以编写MR任务, 但是这些语言我们一个都没学呢, 怎么办呢?
# Hadoop自带有1个测试包, 供初学者进行测试, 在 /export/server/hadoop-3.3.0/share/hadoop/mapreduce
# 2表示线程数, 1000表示投点数(越多, 数字越精准), 这个是MR计算圆周率, 底层用的是 蒙特卡洛算法.
hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 2 1000
MR程序的历史服务:
# 修改 mapred-site.xml, 如果是word拷贝要修改, 如果是typora拷贝不用修改(已经改过了)
# 开启历史服务
mr-jobhistory-daemon.sh start historyserver # 旧命令
mapred --daemon start historyserver # 新命令
# WebUI地址
node1:19888
垃圾桶机制:
# 目前我们从HDFS上删除文件, 是直接删除的, 不走垃圾桶(类似于windows回收站), 这样做比较危险, 我们可以配置下垃圾桶.
# 实现删除的时候, 自动放到垃圾桶中, 并设置默认保存7天.
# 修改 core-site.xml文件, 然后分发给 node2, node3
# 再次删除则会默认进垃圾桶, 如果要跳过垃圾桶, 直接删除, 命令如下:
hadoop fs -rm -skipTrash /hg/aa/绕口令.txt
4. HDFS相关
HDFS的shell操作:
格式:
hadoop fs 命令名 参数1 参数2 # 更通用, 适用于不同的文件系统.
hdfs dfs 命令名 参数1 参数2 # 主要是针对HDFS来讲的.
常用的命令:
ls # 查看目录信息, 只查看本级.
lsr # 推荐使用 ls -R, 同上, 只不过包括目录的子级.
mkdir # 创建目录
touch # 创建文件
put # 上传文件
get # 下载文件
getmerge # 合并下载
mv # 剪切, 适合 HDFS 和 HDFS文件的操作.
cp # 拷贝, 适合 HDFS 和 HDFS文件的操作.
cat # 查看文件内容.
rmr # -rm -r, 删除
chown # 改变拥有者, owner
chgrp # 改变属组, group
chmod # 更改权限
copyToLocal # 从HDFS拷贝到本地, 适用于代码级操作, 效果等价于: get
copyFromLocal # 从本地拷贝到HDFS, 适用于代码级操作, 类似于put
movetoLocal # 剪切, 暂不支持这个命令, 还在研发中.
moveFromLocal # 剪切
setrep # 设置副本数
help # 查看帮助
appendToFile # 是HDFS众多命令中 唯一一个可以修改HDFS文件内容的指令, 是把某个文件中的数据 追加到 HDFS文件中.
HDFS相关原理
1. namenode的作用. # 副本机制, 心跳机制, 负载均衡.
2. datanode的作用.
3. namenode是如何管理元数据的.
4. SecondaryNameNode是如何辅助namenode管理元数据的.
5. HDFS的写数据的流程. # 10步
6. HDFS的读数据的流程. # 5步
HDFS的适用场景:
1. 一次写入, 多次读取.
2. 大量的大文件.
3. 对数据的时效性要求相对较低的.
HDFS的不适用场景:
1. 频繁修改的.
2. 大量的小文件.
3. 对数据的时效性要求相对较高的.
归档(archive):
# 问题: 如果HDFS需要存储大量的小文件, 此时就会有大量的元数据信息需要维护,这样做非常消耗namenode资源, 如何解决呢?
# 答案: 采用 归档 解决.
# 归档解释: 相当于把多个小文件放到一个归档包中, 类似于压缩包, 但是只有压, 没有缩. 多个小文件 => 1个归档包 *.har
# 归档相关的Shell命令
# 1. 如何创建归档包
格式:
hadoop archive -archiveName 归档包名.har -p 被归档的目录 归档包存档的路径(路径存不存在均可)
示例:
hadoop archive -archiveName test.har -p /hg/aa/ /outputdir
# 2. 如何查看归档包中的内容.
hadoop fs -ls /outputdir/test.har # 这种方式只能看归档后的内容, 看不到归档前的文件信息. hdfs://node1:8020
hadoop fs -ls har:/outputdir/test.har # 查看具体的被归档的文件信息, har表示hadoop的压缩包 har://hdfs-node1:8020
hadoop fs -cat har:/outputdir/test.har/1.txt
# 3. 如何从归档包中提取被归档的文件.
hadoop fs -cp har:/outputdir/test.har/1.txt /hg/aa # 提取1个文件
hadoop fs -cp har:/outputdir/test.har/* /hg/aa # 提取多个文件
# 4. 如何删除归档包.
hadoop fs -rmr /outputdir/test.har
# 原理: 底层是MR程序来执行 归档操作的.
如何查看元数据:
hdfs oev -i edits_0000000000000000081-0000000000000000089 -o edits.xml # input(输入) output(输出)
hdfs oiv -i fsimage_0000000000000000115 -p XML -o fsimage.xml
namenode是如何管理元数据的:
# Edits文件(编辑日志文件), FsImage文件(镜像日志文件)
SecondaryNameNode是如何辅助namenode管理元数据的:
# 最要是对 Edits文件 和 FSImage文件做合并.
安全模式:
解释:
1. 安全模式下只能读, 不能写(增改删都不行)
2. 启动Hadoop集群的时候,会强制进入到安全模式,先进行自检, 没有问题后, 会自动退出安全模式.
3. 当集群出问题的时候(例如: 只有3台机器, 但是却需要5个副本), 也会强制进入到安全模式.
# 解决方案: 删除有问题的Block块, 然后手动退出安全模式.
涉及到的命令:
hdfs dfsadmin -safemode enter # 进入安全模式
hdfs dfsadmin -safemode leave # 离开安全模式
hdfs dfsadmin -safemode get # 查看安全模式状态
5. MR相关
概述:它体现的是分而治之思想, 即: 把大问题拆分成若干个小问题, 小问题解决了, 则对应的大问题也就解决了.
设计理念:
1. 如何处理大规模数据: 分而治之.
2. 提供抽象模型: Map(负责 分) 和 Reduce(负责 合)
3. 统一架构, 隐藏系统层操作.
6. Yarn相关
概述:Yarn属于Hadoop集群的1个组件, 是通用的 资源管理 和 任务调度平台, 主要是用于 分配资源 以及 (计算)任务的调度的.
# 细节: Yarn是用来做(计算)任务调度的, 至于是什么计算任务, Yarn根本不关心, 只要能符合Yarn规范即可.
# 即: MR任务, Spark任务, Flink任务等都可以通过 Yarn来调度.
1. 什么是资源?
CPU, 内存, 磁盘等都是资源.
2. ResourceManager(主节点)作用是什么?
# 管理整个Yarn集群的资源, 对外提供统一的访问接口, 负责任务的接收.
3. nodemanager(从节点)作用是什么?
# 管理本机的资源, 负责执行Yarn分配过来的 具体的计算任务.
4. 怎么理解 通用?
# Yarn是用来做(计算)任务调度的, 至于是什么计算任务, Yarn根本不关心, 只要能符合Yarn规范即可.
# 即: MR任务, Spark任务, Flink任务等都可以通过 Yarn来调度.
5. 怎么理解 任务调度(平台)?
就是当系统繁忙的时候, 如果有多个计算任务同时请求执行, 谁先执行, 谁后执行.
# 权重, 优先级, 调度策略(算法)的问题.
架构:
物理级别: ResourceManager(主节点), nodemanager(从节点)
代码级别: AppMaster(进程), 各种计算任务(例如: MR任务, Spark任务, Flink任务)
调度策略:
先进先出(FIFO): # 单车道.
# 已经舍弃了, 现在基本不用.
容量调度(Capacity): # 多车道.
最早是雅虎搞出来的, 我们用的 Apache Hadoop(社区版) 用的就是它.
公平调度(Fair): # 潮汐车道.
最早是FaceBook(Meta)搞出来的, 商业版Hadoop(Cloudera Hadoop, CDH) 用的就是它.
Yarn执行计算任务(例如: MR程序)的原理.
# 8步
7. 数据仓库:
1. 概述:
背景:
互联网时代, 各个公司都积累了大量的(业务)数据, 这些数据都是公司运行这么多年积累下来的真实的数据,
从这些数据中提取出有效的价值信息, 可以帮助企业更好的做决策和发展, 那么如何从这些数据中分析出有效
的价值信息呢? 于是, 就有了 数据仓库的 概念.
概述:
指的是存储数据的仓库, 既不会生产数据, 也不消耗数据, 仅仅是存储数据, 以便将来做 数据分析用.
数据仓库也叫Data WareHouse, 简称: DW, DWH, 数仓是面向 分析 而生的.
实际开发中, 数据的作用有两个:
1. 操作性记录的保存. # 业务数据, 例如: 下单.
2. 分析性决策的支持. # 分析数据
总结: 基于业务数据开展数据分析, 基于分析结果给决策提供数据支持, 可以在业务数据库中做分析, 但是没有必要.
2. 特点
面向主题.
集成性.
非易失性. # 数仓主要分析的是离线数据, 这些数据一般是 不会变化的.
时变性. # 随着时间的推移, 业务, 数据格式等都有可能发生变化, 我们的数仓(数据平台)也要相应的做一些调整
3. 数据库 和 数据仓库的区别
数据库: # OLTP, Online Transaction Processing, 联机事务处理
主要是面向业务的, 存储业务系统的各种数据, 且大多数操作都是增, 删, 改, 查.
对数据的时效性, 安全性, 完整性, 并发数等都有较高的要求, 且处理的数据相对 较少.
且处理的一般都是 在线(实时)数据.
# 面向业务, 增删改查, 时效性要求高, 处理数据量低, 实时数据.
数据仓库: # OLAP, Online Analytical Processing, 联机分析处理.
主要是面向主题的, 存储的是各种用于分析的数据源, 且大多数操作都是 查询.
对数据的时效性要求相对不高, 主要关注 数据量.
且处理的一般都是 离线(历史)数据.
# 面向主题, 查询, 时效性要求相对较低, 处理数据量相对较大, 离线数据.
结语:小编能力有限欢迎大家多多指教