一、Hadoop原理
1.核心:HDFS(存储)、MapReduce(分析) 解决大量数据存储与处理的问题
离线分析:hive
实现查询:hbase
BI分析 :Mahout
2.版本 1.0 mapreduce还进行资源调度
2.0 mapreduce = yarn(资源调度)+mapreduce(进行计算运行在yarn上),
HDfs: nn ,ha
2.1.2 yarn还支持strom、spark 、。。
选择考虑因素:是否开源、是否稳定、是否有强大的社区支持、是否有实践经验
商业化与apache:商业版易用性高、。。。
3.项目结构
底层核心:HDFS(存储数据)
YARN(资源调度)、Mapreduce(磁盘计算)、Tez(yarn后进行有向无环图)、Spark(内存计算)
Hive(数据仓库-将sql转换为mapreduce)、pig(类似sql,轻量级)、
Oozie(工作流管理工具)
zookeeper(集群管理、、)
Hbase(分布式数据库)
Flume(实时数据收集)
sqoop(把关系数据导入导出hive、hbase、hdfs)
Ambari(安装部署工具)
4. 安装linux 和 Hadoop 虚拟机(ubantu qiling 版本适合中国人)-->
5. Hadoop部署使用:
HDFS: NameNode(总一对多管理,保存元数据)
DataNode(分) 节点组成
MapReduce: jobTracker(总一对多管理)
TaskTracker(分)
硬件规格:
冷备份、热备份:
网络拓扑:
集群测试;
6.HDFS:
目标:
实现兼容廉价硬件设备
实现流数据读写
支持大数据集
支持简单的文件模型
支持跨平台
局限性:
不适合时效性
无法高效存储大量小文件
不支持多用户修改
块(比普通的文件系统大):
支持大规模数据存储
降低分布式节点的寻址开销
简化系统设置
适合数据备份
块不是越大越好受mapreduce影响
名称节点(namenode)(存储元数据:
文件是什么,
被分多少块,
是怎么映射的,
是在那个服务器的)==数据目录
Fsimage:保存系统文件树(信息来自与datanode的交换更新,shell--->FsImage)----> 新元数据---->新FsImage + 创建空EditLog
Editlog:记录对数据进行的诸如创建、删除、重命名等操作(shell--->EditLog(随着更新会愈来愈大))
第二名称节点:定期将名称节点的EditLog和Fsimage备份重新合并 --->名称节点---> 新的
数据节点(datanode)
存储数据
HDFS体系:
HDFS ---> 主节点 ---> 数据节点
---> 数据节点
通信协议:Tcp/IP 名称节点,RPC远程 数据节点
局限性:命名空间限制
性能瓶颈
隔离问题
可用性()2.0解决
存储原理:冗余数据保存
副本放置原理:组内第一副本就近,
读取原理:通过API
出错解决原理:
节点出错
主节点:备份
数据节点:使用新的节点
数据出错:校验码
读数据过程:Hadoop
--->
FileSystem (
open(FSDataInputStream ---> DFSinputStream)
--->read --->close)
---> Http/FTP/DistributeFileSystem
数据节点 <----
二、HBase原理
1,Hbase(分布式数据库)
1. Hbase是Big Table的开源实现
支持Pb级别的数据,高可靠,高性能,面向列,可伸缩,
可以很好存储非结构和半结构化的松散数据
允许水平扩展(多台设备)
Hbase的底层技术HDFS(存储),Hadoop Mapreduce(处理) ,zookeeper(资源调用)
2. Hbase存储为bytes
3. Hbase不需要多表连接
4. 列存储
5. hbase只支持对行列索引
6. 更新不会删除旧版本
7. 提供了java api ,shell命令, thrift gateway, pig, rest gateway, hive sql
2, Hbase 的数据模型
列限定符
支持动态扩展
保留旧的版本(因为hbase再hdfs上的原因)
很多数据冗余
每个值都是未经解释的字符
单元格:具体存储数据的地方
时间戳:数据更新后新的版本数据会被时间戳标记
Hbase定位数据:行键,列族,列限定符,时间戳
3, Hbase实现原理
库函数
master服务器
分区信息维护管理
维护region服务器列表
整个集群region工作状态
负责分配reguion
负责负载均衡
region服务器
维护管理region
客户端到region取数据
region在足够大的时候会进行拆分,一个region的大小取决于服务器大小
同一个region只能在一个region服务器
region定位:hbase设计了三层结构寻址定位(
1.构建元数据表服务器id和region id(.META) --放到内存里的
2.root表不会分裂,元数据表的元数据信息
3.zookeeper文件)
客户端访问数据:zookeeper文件-----> root 表------> .META.表
4,Hbase运行机制
系统架构:hbase借助hdfs进行存储
客户端:访问hbase接口加快访问速度
zookeeper:管理hbase集群
master主服务器:负责表,region管理工作,负责region负载均衡、分裂合并
region服务器:负责具体用户数据,一个服务器了多个region 共用一个Hlog日志
用户写: 缓存--------->region服务器
|
memstoer-----为了保证数据安全与可恢复性
|
写日志-------Hlog
先写到Hlog之后才写缓存返回到客户端
用户读: 先找缓存
缓存--------->region服务器
|
memstoer
|
磁盘的storefile------->相关数据
缓存刷新:系统会周期性将缓存的内容刷新到磁盘
Hlog原理:写入日志---写入缓存----写入磁盘,
出问题由zookeeper监控报告给master
三、Hive原理
数据仓库--支持企业管理经营管理,相对稳定
分为-数据源(外部数据,OLTP)、
数据存储管理(ETL)、
分析与挖掘(OLAP)、
应用;
sql--->mapreduce: 连接:map逻辑将表编辑键值对(表标记,值)
--->shuffle ,选出要连接的表标记
--->reduce ,进行连接
group by 实现:
原始表:a|1|
b|2|
map将表组合变成键值对的键,数量为值 (key(a,1)value(1)) (key(b,2)value(1))
---->shuffle,分区排序 <b,2> | 1
---->reduce ,对相同key合并 b|2|1
工作原理:sql————>hive (hive驱动编译器转换为查询块)
————>查询块变成逻辑查询计划
—————>重写查询计划 xml文件
——————>使用xml文件驱动mapreduce模块
四、impala:
允许sql 借鉴于谷歌的cloudera
提供了hive的功能,实时交互速度是hive的3倍
元数据来源hive,数据来源HDFS,Hbase
采用了直接使用分布式查询引擎直接与HDFS、Hbase
系统架构:
Impala和hive等统一部署在Hadoop平台上的
Impalad:负责协调客户端提交的查询的执行与HDFS的数据节点在一个节点上
不同节点都分配了Impalad,
state store: 进程,负责收集Impalad的资源调度情况
查询执行过程: