第四章 YARN
Hadoop上的集群管理系统,但是足够通用,也可以支持其他的分布式计算模式,如Spark
4.1 剖析YARN的应用运行机制
资源管理器 ResourceManager
节点管理器 NodeManager: 运行在集群所有节点上,启动和监控容器
YARN并不会为应用各部分通信提供任何手段
YARN可以在运行的任意时刻提出资源申请。
*资源请求中的本地限制
4.2 YARN与MR1相比
MR1 指Hadoop1及之前版本的MR
MR1 中的jobtracker和tasktracker
jobtracker = 资源管理器,application master,时间轴服务器(YARN设计上,对jobtracker的功能进行了拆分)
slot(静态) = 容器container(资源精细化管理)
4.3 YARN中的调度
三种调度器:
1、FIFO调度器
2、容量调度器
3、公平调度器
延迟调度,没太搞懂
第12章 关于Avro
一个独立于编程语言的数据序列化系统
精确定义了统一的二进制格式(所有实现必须支持)
第13章 关于Parquet
一种可以有效存储嵌套数据的列式存储格式(类似的还有ORC)
文件格式:Header + Block(s) + Footer
- Header:4字节的MagicNum,用来识别Parquet文件格式
- Block:文件块Block-RowGrouop-Column Chunk-Page
- 一个Column Chunk中存储了一列的若干页数据
- 比如一个chunk有2w条记录,分散在5个page中
- 一个page中有4k条记录
- 还可以按照page来压缩(多种压缩编码方式,如Snappy, gzip等)
Footer:元数据+元数据长度(4B)+MagicNum(4B)
第17章 关于Hive
17.1 安装Hive
元数据存储在metastore数据库
hive -f “filepath”
hive -e “command”17.3 运行Hive
17.3.2 Hive服务
hive对外提供的服务cli
- hiveserver2 10000端口,对外提供thrift服务
jdbc:hive2://host:port/dbname 通过这种方式来之JDBC URI - beeline
- metastore 9083端口
17.3.3 metastore
包括两部分,服务和后台数据库(deby或MySQL)
meta的三种配置方式:
1 Embedded metastore deby
2 Local metastore mysql
3 Remote metastore mysql
这两个配置,都是使用的metastore来连接Hive
1、设置metastore数据库的地址
javax.jdo.option.ConnectionURL = jdbc:mysql://master66:3306/hivedb?useSSL=false
2、设置metastore服务的地址
hive.metastore.uris = thrift://10.3.70.116:9083
17.4 Hive与传统数据库相比
写时模式:查询性能好
读时模式:数据加载很快
** Hive的数据加载操作仅仅是文件复制或移动
17.6.3 存储格式
存储格式包括行格式和文件格式
SerDe(Serializer-Deserializer)定义行格式
##Hive不支持更新、事务和索引的特性???
Hive索引:紧凑索引 位图索引
Apache phoenix 基于HBase的SQL
第20章 关于HBase
20.2概念
20.2.1 数据模型的旋风之旅
面向列的分布式数据库,不支持SQL
在廉价硬件构成的集群上管理超大规模的稀疏表
更准确的说法:面向列族的存储器。调优和存储都是在列族这个层次上进行的
列族必须作为表模式定义的一部分预先给出,但是列族成员可以在之后随时加入
列族成员最好有相同的访问模式和大小特征
单元格有版本,行是排序的。
- 区域,由行的子集组成,(将表水平划分)
- 加锁,对行的更新都是原子的,加锁模型能够保持简单
20.2.2 实现
Master + RegionServer
HBase依赖于ZooKeeper(负责管理 hbase:base
目录表和Master的位置)
- 运行中的HBase:
hbase中有一个特殊目录表 hbase:meta
维护当前集群中所有区域的列表、状态、和位置(其记录以区域名为键)
客户端如何连接到特定的RegionServer?
- 连上zk
- 找到
hbase:meta
表的位置- 查找这个表,得知特定RegionServer的位置
- 直接跟特定的regionserver交互
- 客户端还会保留对habse:meta的缓存
到达Region的写操作—>commit log —>进入内存中的memstore—>flush入文件系统
读操作:查看区域的memstore—>若没有再检查flush files
20.3安装
20.6 HBase和RDBMS的比较
- HBase:分布式面向列的数据存储系统,在HDFS上提供随机读写功能。属于NoSQL
- 水平分区并且可以在大量节点上自动复制
- 行和列是顺序存储的,没有真正的索引。索引不会膨胀,而且插入性能和表的大小无关
- 需要ZooKeeper的支持
- 实时大数据的实时分析
- RDBMS:
- 模式固定,面向行的数据库,ACID。
- 强调事务的强一致性,参照完整性以及SQL语言的复杂查询支持
- 随着规模扩大,想要在数据规模和并发读写这两个方面中的任何一个上进行大规模向上扩展,都会损失很多RDBMS的性能
https://www.cnblogs.com/justinzhang/p/4273470.html HIVE和HBASE区别
- Hive:数据仓库,使用HQL语言,最终被转化为Map/Reduce任务
不能进行交互查询,不适合实时查询。不支持更新操作
适合对海量全量数据进行批量的挖掘、分析等操作
- 综上,hbase是数据库、hive是数据仓库,而这有很大的区别、也有很多类似的地方比如都属于hadoop生态圈、存储都基于hdfs等。
一般来说用hive作为海量结构化全量数据的存储、运算、挖掘、分析;hbase用来作为海量半结构化数据的存储、检索;
这二者可以很好协同工作,hive上计算完的结果放在hbase中供检索,也可以将hbase里面的结构化数据和hive相结合,实现对hbase的sql操作等等。
第21章 ZooKeeper
这一章讲的比较细,涉及详细实现
部分失败—分布式应用的固有特征
ZK的两种运行模式
独立模式
复制模式
一个zk集群中一般含有奇数台机器
znode
zookeeper 是非常简单的,确保znode树的每一个修改都会被复制到集合体中超过半数的机器中
zab协议(领导者选举+原子广播)