这篇文档主要是以前我学习Hadoop期间做的思维导图自动生成的Markdown,因为当时还在初学阶段,内容都比较基础,具体思维导图在最下面
Hadoop
Linux
环境部署
-
VMware安装 CentOS安装 -
网络环境配置
- BOOTPROTO、ONBOOT、IPADDR、NETWMASK、GATEWAY、DNS
- 测试:ping外网、ping主机、主机ping虚拟机
常用命令
-
三个最常用
-
文件/文件夹操作
-
文件处理命令
-
文件查看命令
- cat,head,tail,less,more,vim/vi,echo
-
文件查找命令
- find,which,whereis,grep(搭配管道使用)
-
文件解压/打包命令
- gzip(-d/gunzip),bzip2,zip,lz,tar(zxvf)
-
其他命令
- help,info,man date,du,df,ps,netstat,free
vi/vim(重点)
-
一般模式
- a,A,i,I,o,O,x,nx,dd,ndd,dG,D,yy/Y,nyy/nY,p,P,gg,G,nG,r,R,u,ctrl+r
-
底行命令模式
- :set nu,:set nonu,:n,:/string,:?string,:%s/lod/new/g,
:n1,n2s/lod/new/g,:wq,:w>>a.txt,shift+zz -
插入模式
用户与权限管理(重点)
-
用户
- 创建 useradd,删除userdel,修改usermod,密码修改 passwd
-
用户组
- 创建 groupadd,删除groupdel,修改groupmod,gpasswd -a/-d 附加组或从组中删除, groups
-
权限管理
软件管理
- 二进制安装(tar),rpm(ivh/u/e/qa)安装,yum在线安装,源码安装
scp
- scp file 远程用户名@远程服务器IP:目录
免密登录(重点)
- ssh-keygen -t rsa --> ssh-copy-id 主机名
- 实现流程原理(7步)
定时任务(* * * * *),时间同步ntpdate
shell脚本(重点)
HDFS
hdfs概念
hdfs安装
-
单节点
-
本地模式 -
伪分布式模式
- 是分布式的一种特殊情况,相关守护进程运行在一个节点上,程序之间都是独立的(各自独占一个JVM)
-
多节点
-
完全分布式
- 相关守护进程运行在不同节点上,namenode选择性能较好的一个节点,secondarynamenode不与namenode在同一台节点上
hdfs块设计思想(重点)
-
hdfs中块的设计优势
-
- 对于较大的文件,不需要担心一个磁盘是否可以存储,hdfs会将切分成块并存储在不同节点上
-
- 更易于进行数据的备份和容错,只要将每个块复制到少数几个物理几点上即可,一个节点故障,可以直接从其他节点读取块数据。
-
- 容易进行负载均衡,不会因为单个文件过大而使某些节点负载过高
-
- 在文件的并行传输中,因为hdfs中块的大小是固定的,所有不会因为单个文件过大而造成网络瓶颈
-
hdfs的块大小多少合适
- 文件的读写主要分为寻址和传输两个过程,一般认为寻址时间占整个时间的百分之一最优秀,而一般的磁盘寻址时间平均是10ms,所以块的大小选择为磁盘1s能传输的大小较为合适,而普通磁盘的传输速度为100m/s,因此块大小就选择为128m
hdfs体系结构
-
主从结构 master/slaves
-
NameNode的作用
- 管理hdfs的命名空间,在内存中维护数据块的存储信息,并以fsimage和edit进行持久化
- 实施副本冗余策略
- 处理客户端的访问请求
-
DataNode的作用
- 真正负责数据存储的进程
- 执行数据块的读写操作
- 心跳机制 3秒一次,超过10分30秒(5 * 2 + 10 * 3)没有进行心跳则被认为宕机
-
SecondaryNamenode
- 帮助NameNode定期合并fsimage个edit文件
-
Clint接口
- 提供API,与NameNode交互获取文件存储位置,与DataNode交互读写文件
hdfs其他工作机制
- 开机流程(fsimage和edit的合并),安全模式(最小副本冗余策略)
- 检查点机制
- 机架感知(2.8.2前后区别)之前是前两个在一起,之后是后两个在一起,节点动态上下线
读写流程(重中之重)
API
Zookeeper
概念与特点
- 是一个分布式集群,一个leader,多个follower
- 正常服务的节点数必须过半
- 每个几点上的数据都完全相同
数据模型
- 类unix/linux的树形目录结构
- 每一个节点(znode)上都可以存储数据,最大为1M,每一个znode还可以存储子znode的名称,相当于文件存储系统中的目录
应用场景(重点)
- 集群管理节点的管理(HA)
- 服务节点的动态上下线
- 分布式队列
- 分布式锁
选举机制(重点)
-
开机过程中的选举
- 同时开机,权重最大的成为leader
- 依次开机,第一个过半的节点成为leader
-
权重
MapReduce
概念与核心设计思想(重点)
-
移动计算而非移动数据,分而治之,再归并处理 -
分为Map阶段和Reduce阶段
- 原始数据 --><k1,v1>—>map函数—><k2,v2>
- <k2,list>—>reduce函数—><k3,v3>
入门案例: wordcount编程思想
分片机制(重点)
MapTask执行流程(重点)
ReduceTask执行流程(重点)
Shuffle流程(重中之重)
- map端shuffle
- reduce端shuffle
分区器
- 默认为hashPartitioner,使用key.hashCode%numReduceTask
- 可以自定义分区,必须从0开始并连续,reduceTask数又分区数决定
经典案例
- topN,自定义输入输出guize,MapJoin,ReduceJoin
Yarn
-
是分布式计算框架的资源调度框架
-
yarn的job提交流程(重中之重)
企业级优化
Hive
概念
- hive是一个数仓工具,可以将hdfs上具有结构化的文件映射成一张表(映射关系时元数据),然后使用类sql语言,进行数据的管理(读或写),底层使用mapreduce引擎,或者时spark、tez引擎
优缺点
-
优点
- 学习成本低,拓展性好,适合离线分析,良好的容错性,提供统一的元数据管理
-
缺点
- hive的HQL表达能力有限(迭代算法无法表达,数据挖掘方面)
- hive效率比较低,调优计较困难
hive体系结构(重点)
-
接口层
-
元数据
-
驱动器Drivver
- SQLParser,Compiler,Optimizer,Executer
-
hadoop
hive工作原理(重点)
hive的安装
-
内嵌模式
- 使用derby作为原数据库,只支持单session,并且不能切换目录
-
本地模式
- hive客户端会内置开启一个metastore服务项(hive客户端与服务项在同一节点上)
-
远程模式
- hive客户端的连接服务需要单独手动开启,比如metastore服务项,hiveserver2服务项
表类型
hive的库操作和表操作(HQL)
hive的常用字句(重点)
-
map-join
- left semi join(和exists的原理一样)
分区表
- 将数据文件分散到不同的目录下存储(粒度较粗),提高查询速度,分区字段时表外字段
分桶表
函数
-
内置函数
-
日期函数
- unix_timestamp(),from_nuixtime,datediff(),months_between(),last_day(),next_day(),date_add(),add_months(),date_format()
-
数值函数
-
字符串函数
- lower(),upper(),length(),concat(),concat_ws(),substr(),split()
-
窗口函数
-
聚合函数 over()
-
window字句
- PRECEDING 往前,FOLLOWING 往后,CURRENT ROW 当前行,UNBOUNDED 起点,UNBOUNDED PRECEDING 表示从前面的起点,UNBOUNDED FOLLOWING 表示到后面的终点
-
排名函数
- row_number(),rank(),dense_rank()
-
序列函数
- lag(),lead(),ntile(),last_value(),first_value()
-
其他函数
- nvl(),isnull(),case when then else end, if(p1,p2,p3),coalesce(col1,…)反回第一个不为空的值
-
自定义函数
serde类型
- lazySimpleSerde
- csv,tsv
- jsonserde
- 正则表达式regexp
视图,索引,优化
HBase
概述
HBase的体系结构
- Client,Zookeeper,HMaster,HRegionServer,Hlog,Hregion, Store,Memstore,HStoreFile,HFile
- 组件之间的关系
HBase的安装
HBase Shell
-
NameSpace操作
- list_namespace,list_namespace_tables,describe_namespace,alter_namespace,drop_namespace
-
Table的DDL操作
- create,describe(desc),list,alter(修改表,追加列族,删除列族),disable tablename–>drop tablename
-
Table的CRUD操作
- put(增,改),scan,get,delete,exists,disable,enable,count(统计行数),truncate
HBase API
- Namespace DDL
- Table DDL
- Table CRUD
- HBase 过滤器
HBase的工作机制
-
存储机制 -
Region的管理
-
寻址机制
- 第 1 步:Client 请求 ZooKeeper 获取.META.所在的 RegionServer 的地址。
第 2 步:Client 请求.META.所在的RegionServer 获取访问数据所在的 RegionServer 地址,Client会将这张表的region信息和.META.的相关信息 cache 下来,以便下一次快速访问。 第 3 步:Client 请求数据所在的 RegionServer,获取所需要的数据。 -
读写流程
-
读流程
- 客户端先向zookeeper请求获取meta表所在regionserver的地址
- 再到对应的regionserver中查看meta表,找到需要写数据的region和所在的regionserver,并把这个表的region信息和meta表的位置缓存到客户端的cache中,以便加速下一次访问速度
- 再与需要读操作的regionserver进行通信
- 到blockcache中先读取,再到memstore和storefile中读取。
- 将需要读取的数据的所有版本merge到内存中,找到最新的一个版本
- 拿到最终的数据后将数据信息缓存到blockcache中
- 将结果返回给客户端
-
写流程
- 客户端先向zookeeper请求获取meta表所在regionserver的地址
- 再到对应的regionserver中查看meta表,找到需要写数据的region和所在的regionserver,并把这个表的region信息和meta表的位置缓存到客户端的cache中,以便加速下一次访问速度
- 再与需要写操作的regionserver进行通信
- 将数据按顺序追加到hlog(WAL)中
- 把数据写入到对应store的memstore中
- 向客户端返回确认信号
- 当memstore达到flush条件后,将memstore中的数据刷写成hfile文件
HBase与其他框架的整合
布隆过滤器
rowkey设计原则
HBase企业级优化
这里是具体的思维导图
|