-
为什么要使用Hive
传统数据仓库的不足:
• 无法满足快速增长的海量数据存储需求
• 无法有效处理不同类型的数据
• 计算和处理能力不足 -
Hive的介绍
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。本质是将HQL转化成MapReduce程序。
Hive是一个构建于Hadoop顶层的数据仓库工具,主要用于对存储在 Hadoop 文件中的数据集进行数据整理、特殊查询和分析处理。Hive在某种程度上可以看作是用户编程接口,本身不存储和处理数据,依赖HDFS存储数据,依赖MapReduce处理数据。 -
Hive的三种运行模式(理论)
• Local模式.此模式连接到一个In-Memory的数据库Derby,一般用于UnitTest.
• 单用户模式.通过网络连接到一个数据库中,是最常使用到的模式.
• 多用户模式:远程服务器模式,用于非java客户端访问元数据库(metastore),在服务器端启动metaStoreServer,客户端利用thrift协议通过metaStoreServer访问元数据库 -
Hive的架构图
Hive的组成部分:
• Metastore:元数据的存储;元数据(数据库和表结构,列);mysql中
• 一个文件:除了文件内容以外的叫做元数据;(放到了namenode上)
• Cli:client:客户端;hive的黑窗口
• Jdbc:连接的
• Webgui:
• 用户接口主要有三个:Cli,Client和WebGUI,其中最常用的是cli,cli启动的时候会同时启动一个hive副本。Client是hive客户端,用户连接到hiveServer,在启动client模式的时候,需要指出hiveServer所在的节点,并且在该节点启动hiveServer。WUI是通过浏览器也能访问Hive。Hive将元数据(数据库,表)存储在数据库表(真实的数据库mysql)中,如mysql、derby、hive中元数据包含表的名字,表的列和分区及其属性、表的属性(是否为外部表等),表的数据所在的目录等。数据库(Mysql)中并不存储Hive的记录。
• 解释器、编译器、优化器完成sql查询语句从词法分析,语法分析,编译,优化以及查询计划的生成。生成的查询计划存储在hdfs中,并在随后有mapreduce调用执行。
• Hive数据存储在hdfs中,大部分数据查询、计算由mapreduce完成(包含*的查询,比如select * from tbl不会生成mapreduce任务)
• 元数据(hive中看到的库,表)存储到真实的数据库(mysql);记录存储到了hdfs上;;经常使用的mysql:表,记录,库都存储到文件系统中(NTFS)
• hive的客户端连接服务器走的是thrift协议;=== http == = https;传输的内容大小比较小。 -
文件格式
• Avro Files
• ORC Files
• Parquet
• Compressed Data Storage
• LZO Compression -
数据类型
• 基本数据类型
TINYINT, SMALLINT, INT/INTEGER, BIGINT
DECIMAL 、BOOLEAN、FLOAT、DOUBLE、STRING、TIMESTAMP
• 集合数据类型
ARRAY、MAP、STRUCT、UNION -
数据类型:hive和mysql的区别
| Mysql | Hive |
|---|---|
| tinyint,int,bigint,mediumint,numeric | Numeric,tinyint |
| double,decimal | decima |
| varchar,text,char | string |
| date,time,datetime,timestamp | date,timestamp |
| float | |
| json | arrays,maps,structs(类),union |
| 图片 | boolean,binary |
-
事务理论
事务的四个特征【原子性:Atomicityn 一致性:Consistencyn 隔离性:Isolationn 持久性:Durability】
… … … -
数据仓库-名词介绍
• DSS(decision-support system)决策支持系统
• ODS(Operational Data Store)操作数据源
• DW(data warehourse)数据仓库
• DM(Data Market) 数据集市
• Dws(data warehouse service )服务数据层
• Dwd(data warehouse detail) 细节数据层
• Dwb(data warehouse base)基础数据层
• OLAP(On-Line Analysis Processing) 联机分析处理
• OLTP(On-Line Transaction Processing)联机事务处理
• 事实表(fact)
• 维表(dimension) -
什么是数据仓库
数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。 -
数据仓库和数据库的区别
| 数据仓库 | 数据库 |
|---|---|
| 数据范围:存储历史的,完整的,反应历史变化的(只能添加和查询,不建议修改;区块链) | 当前状态的数据 |
| 数据变化:可添加的,无删除的,无变更的,反应变化的 | 支持频繁的增,删,改,查操作 |
| 应用场景:面向分析,支持战略决策 | 面向业务交易流程 |
| 设计理论:违范式,适应冗余 | 遵照范围(第一,二,三范式),避免冗余 |
| 处理量:不频繁,大批量,高吞吐,有延迟(时间长) | 频繁,高批次,高并发,低延迟 |
-
四种常见的建模理论
ER实体建模、维度建模、dataVault模型、anchor模型 -
为什么要使用flume
• 大数据的数据来源
数据仓库:Hive(数据仓库)–>mysql(数据库);数据库的记录存储的是最近的记录,之前的数据要先备份到数据仓库,然后要清理掉(mysql)
日志:日志是分散的;进行大数据运算和统计需要把分散的日志合并到一个地方(hdfs)
• Flume(水槽):采集工具,将大数据分散的数据源(数据库,日志)统一采集到一个地方(hdfs) -
介绍一下flume
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。
Flume是一种分布式、可靠可用的服务,用于有效地收集、聚合和移动大量日志数据。它具有基于流数据流的简单灵活的体系结构。它具有健壮性和容错性,具有可调可靠性机制和多种故障转移和恢复机制。它使用了一个简单的可扩展数据模型,允许在线分析应用程序。 -
为什么要使用sqoop
打通本地和大数据的道路,两种方式(手动//自动):
手动把数据库里面的数据上传到hdfs中(全量数据:一次导入//增量数据:从导入数据那刻起,后续不断新增数据)+ 文本文件大小;
Sqoop:自动把数据库里面的数据上传到hdfs中 -
介绍一下sqoop
将关系数据库(oracle、mysql、postgresql等)数据与hadoop数据进行转换的工具。
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中 -
为什么要使用hbase
•Hadoop可以很好地解决大规模数据的离线批量处理问题,但是,受限于Hadoop MapReduce编程框架的高延迟数据处理机制,使得Hadoop无法满足大规模数据实时处理应用的需求
•HDFS面向批量访问模式,不是随机访问模式
•传统的通用关系型数据库无法应对在数据规模剧增时导致的系统扩展性和性能问题(分库分表也不能很好解决)
•传统关系数据库在数据结构变化时一般需要停机维护;空列浪费存储空间。
•因此,业界出现了一类面向半结构化数据存储和处理的高可扩展、低写入/查询延迟的系统,例如,键值数据库、文档数据库和列族数据库(如BigTable和HBase等)
•HBase已经成功应用于互联网服务领域和传统行业的众多在线式数据分析处理系统中 -
介绍一下hbase
•HBase是一个高可靠、高性能、面向列、可伸缩、实时读写的分布式数据库,是谷歌BigTable的开源实现,主要用来存储非结构化和半结构化的松散数据
•利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务
•HBase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列元素组成的数据表
•HBase的核心包括三部分:Rowkey、 列族、时间戳 -
hadoop生态圈
-
hbase详细介绍
-
hbase数据模型
【概述】
• HBase是一个稀疏、多维度、排序的映射表,这张表的索引是行键、列族、列限定符和时间戳
• 每个值是一个未经解释的字符串,没有数据类型
• 用户在表中存储数据,每一行都有一个可排序的行键和任意多的列
• 表在水平方向由一个或者多个列族组成,一个列族中可以包含任意多个列,同一个列族里面的数据存储在一起
• 列族支持动态扩展,可以很轻松地添加一个列族或列,无需预先定义列的数量以及类型,所有列均以字符串形式存储,用户需要自行进行数据类型转换
• HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留(这是和HDFS只允许追加不允许修改的特性相关的)
【相关概念】
• 表:HBase采用表来组织数据,表由行和列组成,列划分为若干个列族
• 行:每个HBase表都由若干行组成,每个行由行键(row key)来标识
• 列族:一个HBase表被分组成许多“列族”(Column Family)的集合,它是基本的访问控制单元
• 列限定符:列族里的数据通过列限定符(或列)来定位
• 单元格:在HBase表中,通过行、列族和列限定符确定一个“单元格”(cell),单元格中存储的数据没有数据类型,总被视为字节数组byte[]
• 时间戳:每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引
• HBase中需要根据行键、列族、列限定符和时间戳来确定一个单元格,因此,可以视为一个“四维坐标”,即[行键, 列族, 列限定符, 时间戳] -
架构图
【Client】
包含访问HBase的接口并维护cache来加快对HBase的访问Zookeeper;保证任何时候,集群中只有一个master;存贮所有Region的寻址入口;实时监控Region server的上线和下线信息;并实时通知Masterl 存储HBase的schema和table元数据;
【Master = = namenoden】
为Region server分配region;负责Region server的负载均衡;发现失效的Region server并重新分配其他的region ;
管理用户对table的增删改操作;
【RegionServer == datanoden】
Region server维护region,处理对这些region的IO请求;Region server负责切分在运行过程中变得过大的region;
【Region】
HBase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据;每个表一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region(裂变);
当table中的行不断增多,就会有越来越多的region。这样一张完整的表被保存在多个Regionserver 上。
【Memstore 与 storefilen 】
一个region由多个store组成,一个store对应一个CF(列族);store包括位于内存中的memstore和位于磁盘的storefile写操作。
memstore:
当memstore中的数据达到某个阈值,hregionserver会启动flushcache进程写入storefile,每次写入形成单独的一个storefile(强制写到文件上;flush 表名);
当storefile文件的数量增长到一定阈值后,系统会进行合并(minor、major compaction),在合并过程中会进行版本合并和删除工作(majar),形成更大的storefilen ;
当一个region所有storefile的大小和数量超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡;
客户端检索数据,先在memstore找,找不到再找storefile;
【HRegion】
HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的 HRegion server上。
HRegion由一个或者多个Store组成,每个store保存一个columns family。每个Strore又由一个memStore和0至多个StoreFile组成。如图:StoreFile以HFile格式保存在HDFS上。 -
为什么要使用kafka
如何采集和运营管理、分析海量数据是大数据处理中一个至关重要的组成环节,这就需要相应的基础设施对其提供支持。针对这个需求,当前业界已有很多开源的消息系统应运而生,而Kafka就是当前流行的一款非常优秀的消息系统。
缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。 -
介绍一下kafka
Kafka是分布式发布-订阅消息系统,它最初是由LinkedIn公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。 -
kafka详细介绍
-
Api
Kafka有五个核心API:
生产者API:允许应用程序将记录流发布到一个或多个Kafka主题。
消费者API:允许应用程序订阅一个或多个主题并处理向其生成的记录流。
流API:允许应用程序充当流处理器,从一个或多个主题消耗输入流,并产生输出流到一个或多个输出主题,从而有效地将输入流转换为输出流。
连接器API:允许构建和运行可重用的生产者或使用者,将Kafka主题连接到现有的应用程序或数据系统。例如,连接到关系数据库的连接器可能捕获对表的每一项更改。
AdminApi:管理员的API -
Azbaban介绍
Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的key:value对的方式,通过配置中的dependencies 来设置依赖关系。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。 -
Azbaban优点
• 兼容任何版本的hadoop
• 易于使用的Web用户界面
• 简单的工作流的上传
• 方便设置任务之间的关系
• 调度工作流
• 模块化和可插拔的插件机制
• 认证/授权(权限的工作)
• 能够杀死并重新启动工作流
• 有关失败和成功的电子邮件提醒