## hadoop生态圈
### 1、zookeeper
zookeeper是一个分布式协调服务组件,具有数据存储和通知机制两大特性
启动命令:安装路径下 bin/zkServer.sh start
#### 1.1、组成
1、集群由一个leader和多个follower组成
2、leader负责进行投票的发起和决议,更新系统状态
3、follower用于接受客户端请求并向客户端返回结果,并且在选举leader中参与投票
#### 1.2、特点
1、集群只要由半数以上节点存活就能正常服务
2、全局数据一致,每个follower都会同步leader的数据。客户端无论访问哪个节点数据都是一致的
3、来自同一个客户端的多个请求,会按照其请求顺序依次执行
4、数据更新原子性,一次数据更新要么成功要么失败
5、实时性、在一定时间范围内,全局数据一致的特性能够保证客户端读取到的是最新的数据
#### 1.3、zookeeper节点类型
zookeeper的数据是存放在节点上的默认每个节点能存放1M的数据
zookeeper有两种节点类型:
短暂(ephemeral):临时的、客户端和服务器端断开连接后,创建的节点自己删除
持久(persistent):永久的,客户端和服务器端断开连接后,创建的节点不删除
zookeeper的两种节点类型,有四种形式的目录节点:
持久化目录节点分为:持久化目录节点和持久化顺序编号目录节点两种形式
临时目录节点分为:临时目录节点和临时顺序编号目录节点两种形式
#### 1.4、作用
1、hbase依赖于zookeeper,zookeeper维护了hbase元数据表的存放位置
2、hbase、hadoop、spark等集群的高可用依赖于zookeeper的选举机制
### 2、hive数仓工具
#### 2.1、数据仓库
概念:数据仓库是一个面向主题的、集成的、随时间变化的、信息本身相对稳定的用于支持管理决策的数据集合。
数仓分层:
一般分为:源数据层 (ODS)、数据仓库层或数据集市(DW或DM)、数据应用层(APP、一般存放在数据库)
数据仓库层又可细分为:. 数据明细层(DWD)、数据中间层(DWM)、 数据服务层(DWS)
#### 2.2、hive
Hive是基于hadoop平台的数据仓库工具,他能将结构化的文件映射成一张表,并且提供类SQL的查询功能HQL。
HQL的底层原理是:将HQL语句转换成MapReduce程序在hadoop平台执行。
hive元数据服务启动方式:hive安装目录下:nohup ./bin/hive --service metastore &
hive远程链接服务: nohup bin/hive --service hiveserver2 &
#### 2.3、hive优缺点
优点:
1、采用类SQL语法,操作简单容易上手
2、避免了写大量的mapreduce程序,减少了开发人员学习成本,和开发成本
3、基于hadoop,可以处理分析海量数据
4、支持用户自定义HQL函数,进行自定义开发,用法灵活
5、存储能力强,理论上hadoop集群能有多大,hive的存储能力就有多强
缺点:
1、底层是mapreduce,计算延迟很大,只适合离线分析,不适合用于实时性要求较高的场景
2、底层是mapreduce,处理中间结果存放在磁盘中,不适合做迭代式计算
3、hive调优比较困难,只能粗粒度调优
4、HQL语句表达能力有限,不擅长做数据挖掘
#### 2.4、hive元数据信息维护
hive自带一个小型数据库,存放hive中表的元数据,但是,这个自带的数据库不支持并发访问,很不方便,所以一般hive的元数据信息维护在mysql数据库中
#### 2.5、hive数据安全
hive数据仓库可以加入external关键字创建外部表,好处是删除外部表时只删除表结构,源数据不会被删除,不会因为误删而丢失数据。
#### 2.6、hive表特色
hive表有分区表,分桶表,用于给海量数据划分界限,提高查询效率
HQL提供了开窗函数over()进行分区查询,特别方便
#### 2.7、hive优化
1、配置fetch抓取属性为more,对于只需要map就能处理的查询可以不适用mapreduce,直接读取文件
2、在数据量很小的情况下可以开启本地模式,在一台机器上处理所有数据减少任务等待
3、开启严格模式,可以防止用户执行那些影响不好的的查询。
### 3、HBase
hbase是一个分布式的面向列的数据库,是一个依赖于hdfs的非关系型数据库
启动方式:安装路径下:bin/start-hbase.sh
webui端口:16010
#### 3.1、特点
1、海量数据存储
2、列式存储
3、极易扩展
4、高并发
5、稀疏,某个列的数据可以为空,且不占用空间
#### 3.2、组件
zookeeper:做HMaster的高可用、维护元数据的位置信息、监控各个regionServer状态(发现异常通知HMster)
HDFS:hdfs为hbase提供底层数据存储服务,数据多副本高可靠
client:提供访问HBase的api
HMaster:主节点
1、监控regionServer
2、负责regionServer的故障转移
3、处理元数据的变更
4、处理region的分配或转移
5、负责数据的负均衡
6、将元数据的位置信息上传给zookeeper
regionServer:数据存储节点
1、负责实际存储HBase数据
2、处理分配给他的region
3、将数据写入hdfs
4、维护预写日志Hlog
5、处理region拆分(自动分片)
其他组件:
Hlog:HBase的预写日志,每个regionServer上都有一份,Hbase读写数据时,并不是直接写入,而是先把数据保存在预写日志中,然后再写入数据,可以防止数据丢失
Region:表的分片,Hbase表会根据rowKey切分成多个Region放在不同的regionServer上,一个regionServer上可以有多个不同的Region
Store:一个region中有多个Store,一个Store对应Hbase一个列族,一个store含有多个storeFile
Hfile:storeFile是以Hfile的形式存放在hdfs上的
#### 3.3、原理
读流程:
1、client先访问zookeeper,拿到元数据存放位置
2、client访问目标节点读取元数据信息
3、根据命名空间、表明、rowkey在元数据中找到目标region信息
4、根据region信息找到对应的regionserver
5、访问这个regionserver查找相应的region
6、先从memstore缓存中拿取数据,如果没有。则到blockCache块缓存(二级缓存)中读取
7、如果块缓存中还没有,再到storefile上读,读取的数据并不是直接返回客户端,而是先写入块缓存,再返回给客户端
写流程:
1、client访问zookeeper获取元数据表位置信息
2、根据rowkey在元数据表中查找其所属regionServer位置
3、client访问目标RegionServer,发送写请求
4、RegionServer将数据写入Hlog(防止数据丢失)
5、Regionserver将数据写入内存(memStoge),当memStoge大小到达阈值时会将内存中的数据写入磁盘,然后删除Hlog中的历史数据
6、回复客户端,数据写入成功
#### 3.4、调优
1、高可用:防止主节点单点故障
2、rowkey设计:唯一原则、散列原则(最大64K,推荐8-16字节)
可以在一定成都上防止数据倾斜
3、预分区提高hbase性能(一般可以用于解决热点问题)
4、内存优化
#### 3.5、HBase快的原因
1、二级缓存,将数据缓存到内存中,以便快速读写
2、布隆过滤器:可以快速的排除数据不在哪个区间