HADOOP生态系统
其中:
Zookeeper:分布式协作服务组件,管理Hadoop相关组件
Flume:日志收集工具
Sqoop:关系型数据库ETL工具【ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。】
Mahout:数据挖掘插件,里面有可供调用的算法包(MapReduce编写的),可以直接调用
Hive:数据仓库(将类SQL翻译为MapRedue)
Pig:将脚本语言翻译为MapReduce,其使用的是自己的语言Pig Latin。
Hbase:实时、分布式、高纬数据库(按列存储的非关系型数据库),其依赖于HDFS。
Hbase
一、Hbase简介:
1、Hbase(Hadoop Database)是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库。
解释:
高可靠性:HDFS保证数据高可靠性;Zookeeper保证服务高可靠性。
高性能:上亿数据是Hbase的初级数据量,而这对于关系型数据库来说已经心有余而力不足了。
面向列:与关系型数据库面向行的数据不同,Hbase数据是面向列的。
可伸缩:集群可大可小。
实时读写:Hbase响应是ms级别的
2、利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务。
3、主要用来存储非结构化和半结构化的松散数据(列存 NoSQL 数据库)。
二、Hbase数据模型展示
上图中在关系型数据库看来是一张表,但是在Hbase看来是一行数据。其中有几个重要的概念:
ROW KEY、Column Family列族、Timestamp时间戳。
举例说明:
假设我们要存储一个用户信息,其包含如下信息【姓名、性别、爱好(多个)、地址(多个)】。
在关系型数据库中:我们需要建三张表【用户表(id、姓名);爱好表(id、用户id、爱好);地址表(id、用户id、地址)】。
但是在非关系型数据库中:我们只需要一个记录既可以完成。如下图所示。
ROW KEY | Timestamp时间戳 | Column Family列族(cf1) |
1 | 23325441255484 | cf1:name=小明 |
23325442355484 | cf1:爱好=LOL | |
23325441255676 | cf1:爱好=发呆 | |
23325441255676 | cf1:爱好=打篮球 | |
23325441255676 | cf1:地址=中国 陕西 西安 | |
23325441256587 | cf1:地址=中国 北京 | |
2 | 23325441256589 | cf1:name=小红 |
23325441252023 | cf1:爱好=小明 | |
23325441252025 | cf1:爱好=小王 | |
23325441259514 | cf1:地址=中国 陕西 咸阳 |
其中ROW_KEY决定一条数据。列族中可以以固定格式存储任意数据。时间戳是针对列族中每一个单元格的。
三、Hbase数据模型概念
1、ROW KEY
– 决定一行数据
– 按照字典顺序排序的。
– Row key只能存储64k的字节数据
2、Column Family列族 & qualifier列
– HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。如 create ‘test’, ‘course’;
– 列名以列族作为前缀,每个“列族”都可以有多个列成员(column);如course:math, course:english, 新的列族成员(列)可以随后按需、动态加入;
– 权限控制、存储以及调优都是在列族层面进行的;
– HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。
3、Timestamp时间戳
– 在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。
– 时间戳的类型是 64位整型。
– 时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。
– 时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。
4、Cell单元格
– 由行和列的坐标交叉决定;
– 单元格是有版本的;
– 单元格的内容是未解析的字节数组;
• 由 {row key, column( =<family> +<qualifier>), version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。
5、HLog(WAL log)
– HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和region名字,同时还包括 sequence number timestamp,timestamp是”写入时间”,sequence number的起始值为0,或者是最近一次存入文件系统中sequence number。
– HLog SequeceFile的Value是HBase的KeyValue对象,即对应HFile中的KeyValue。