以下是根据自己的总结和梳理,建议入过门大数据的人看.写的很片面,没有图片,我仅仅想把握学的东西梳理下.
Hadoop篇
数据仓库
数据仓库,简写DW,是为企业级所有级别的决策制定过程,提供所有类型数据支持的战略集合.是单个数据存储,处于分析性报告和决策支持的而创建.
HDFS原理
客户端将数据上传到DateNode,然后通过硬盘(数据节点)的水平复制功能,达到冗余度的要求.而主节点NameNode管理维护HDFS,接受客户端的请求和维护文件的元信息(fsimage)和日志(edits),SecondaryNameNode进行日志信息合并.SNN不是NN热备,没有关系
HDFS写数据流程
- 向NameNode请求上传文件
- NameNode相应可以上传文件
- 请求上传第一个block,请返回DataNode
- 返回DataNode节点,
- 客户端和DataNode奖励block通道,且响应成功
最后数据传输
HDFS读数据的过程
- 客户端那个NameNode 请求下载文件
- NameNode返回目标中的元数据
- 客户端请求DataNode读取数据
- 客户端与DataNode之间传输数据
- 然后客户端请求DataNode读取数据
最后DataNode传输数据
NamNode工作机制
- NamNode加载吧编辑日志和镜像文件到内存
- 客户端向NameNode请求元数据的增删改查
- 记录日志,更新滚动日志
内存数据的增删改查
DataNode工作机制
DataNode启动后向NameNode注册
- 当注册成功后,没周期上报所有块信息
- 心跳没3秒一次,心跳返回结果带有NameNode给DataNode的命令
- 超狗30分钟没有收到DataNode的星跳则认为该节点不可用
MapReduce程序运行图
- 开始有待处理的文本
- 客户端submit()前获取带处理的数据信息,然后根据参数配置,形成一个任务分配规则
- 客户端提交切片信息,计算map task的数量
- 然后开始读取数据,map阶段开始逻辑运算
- 输出到reduce以Key value的形式
- 按照分区排序写入reduce
- 所有map tas任务完成后,启动相应reduce task.并告知reduce task处理数据范围
- reduce获取数据,并进行运算
- 输出结构到HDFS
MapReduce的处理过程
首先由客户端Client,提交MapReduce任务Job
然后JobTracker协调整个job的运行,其中一个Java进程,其main class为JobTracker
TaskTracker:运行此job的task,处理input split,其为一个Java进程,其main class为TaskTracker
最后写入到HDFS:hadoop分布式文件系统,用于在各个进程间共享Job相关的文件
MapReduce原理
MapReduce的过程首先是由客户端提交一个任务开始的,提交任务主要通过JobClient.runJob(JobConf)静态函数实现的
读取数据文件内容,对内容解析成键值对,每个键值对调用一次map函数,编写映射函数处理逻辑,建输入的键值对输出新的键值对
将新的键值对进行分区,排序,分组
对多个Map的输出,按不同分区通过网络将copy到不同的reduce节点
对多个map的输出进行排序,合并,编写reduce函数处理逻辑,将接收到的数据转化成新的键值对
最后将reduce节点输出的数据保存到HDFS上
MR任务在Yarn调度的工程
由客户端的jar包提交任务请求到DFSClent.java,然后创建任务ID,在将任务文件保存到HDFS,获取到元信息,在提交任务(ID,数据元信息,任务元信息)到Yarn的ResourceManager(作用:接受客户端请求,分配资源和任务),然后ResourceManager对任务进行初始化:资源,分配资源和任务,最根据元信息到HDFS上获取数据和任务
HDFS的启动过程
第一步:读取fsimage文件,
第二步:读取edits日志
第三步:保存检查点
第四步:HDFS进入安全模式—->作用:检查数据块的副本率(冗余)
HDFS底层原理
底层原理采用的是:RPC和动态代理
RPC:
Remote Procedure Call,远程过程调用,也就是说,调用过程代码并不是在调用本地运行,而是实现调用者与被调用者二地之间的连接与通信
什么事shuffle?
当有一个数据块传过来是,首先会切片,然后送到map处理,输出数据到环形缓存区(内存:100M;超过80%时写成一个文件),然后在输出多个分区文件(可能排好序),在进行合并,形成更大的文件(可能更大的文件),当有多个大的文件,会进行Combiner合并更大的文件,在输出到对应的Reduce,最后输出.
HBase篇
什么事HBase
HBase的原型是Google的BigTable论文,从基因上讲,HBase已经是Hadoop生态系统化不可或缺的一部分 .HBase是一个分布式的,面向列的开源数据库,其字Hadoop之上提供了类型BigTable的能力,其特点海量存储,列式存储,极易扩展,高并发,稀疏
HBase的架构
HBase主要有Client, Zookeeper, Master, RegionServer, HDFS等几个组建而成.
Client包含了访问的HBase的接口,另外Client还维护了对应的cache来加速HBase的访问
Base通过Zookeeper来做master的高可用,RegionServer的监控,元数据的入口以及集群配置的维护等工作
Master主要是做一些管理操作;如region的分配,手动管理操作下发等等,一般数据的读写操作并不需要经过Master集群,所以Master一般不需要很高的配置即可
RegionServer :管理master为其分配Region
处理来自客户端请求
负责与底层HDFS交互,存储数据到HDFS
负责Region变大以后拆分
负责Storefile的合并工作
HDFS为Hbase提供最终的底层数据存储服务,同时为Hbase提供高可用(Hlog存储在HDFS)的支持,具体功能概括如下:
提供元数据和表数据的底层分布式存储服务
数据多副本,保证的高可靠和高可用性
HBase 原理
HBase中 ROO表和META表
HBase的所有HRegion元数据被保存在.META,随着HRegion的增多,.META.表中的数据也会增大,并分裂成多个新的HRegion。会把元数据保存到-ROOT-表中. -ROOT-表永远不会被分割,-ROOT-只有一个 region,.META.可以有多个 regoin
-ROOT-表永远不会被分割,它只有一个HRegion,这样可以保证最多只需要三次跳转就可以定位任意一个HRegion。为了加快访问速度,.META.表的所有HRegion全部保存在内存中。客户端会将查询过的位置信息缓存起来,且缓存不会主动失效。如果客户端根据缓存信息还访问不到数据,则询问相关.META.表的Region服务器,试图获取数据的位置,如果还是失败,则询问-ROOT-表相关的.META.表在哪里。最后,如果前面的信息全部失效,则通过ZooKeeper重新定位HRegion的信息。所以如果客户端上的缓存全部是失效,则需要进行6次网络来回,才能定位到正确的HRegion。
Client 访问用户数据之前需要首先访问 zookeeper,然后访问-ROOT-表,接着访
问.META.表,最后才能找到用户数据的位置去访问。
HBase的读写操作流程
写操作:
步骤1:Client通过Zookeeper的调度,向HRegionServer发出写数据请求,在HRegion中写数据。
步骤2:数据被写入HRegion的MemStore,直到MemStore达到预设阈值。
步骤3:MemStore中的数据被Flush成一个StoreFile。
步骤4:随着StoreFile文件的不断增多,当其数量增长到一定阈值后,触发Compact合并操作,将多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除。
步骤5:StoreFiles通过不断的Compact合并