


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Kudu Impala 介绍微店数据科学团队博客Kudu+Impala 介绍概述 Kudu 和 Impala 均是 Cloudera 贡献给Apache基金会的顶级项目。Kudu作为底层存储,在支持高并发低延迟kv查询的同时,还保持良好的Scan 性能,该特性使得其理论上能够同时兼顾OLTP类和OLAP类查询。 Impala 作为老牌的SQL 解析引擎,其面对即席查询(Ad-Hoc Query) 类请求的稳定性和速度在工业界得到过广泛的验证,Impala并没有自己的存储引擎,其负责解析SQL,并连接其底层的存储引擎。在发布之初Impala主要支持HDFS ,Kudu 发布之后, Impala
2、和 Kudu 更是做了深度集成。在众多大数据框架中, Impala 定位类似 Hive ,不过 Impala 更关注即席查询 SQL 的快速解析,对于执行时间过长的SQL ,仍旧是 Hive 更合适。对于 GroupBy 等 SQL 查询,Impala进行的是内存计算,因而 Impala 对机器配置要求较高,官方建议内存 128G 以上,此类问题Hive 底层对应的是传统的MapReduce 计算框架,虽然执行效率低,但是稳定性好,对机器配置要求也低。执行效率是Impala 的最大优势, 对于存储在 HDFS 中的数据,Impala 的解析速度本来就远快于Hive ,有了 Kudu 加成之后,
3、更是如虎添翼,部分查询执行速度差别可达百倍。值得注意的是,Kudu和Impala的英文原意是来自非洲的两个不同品种的羚羊,Cloudera这个公司非常喜欢用跑的快的动物来作为其产品的命名。相关背景OLTP 与OLAPOLTP(On-line Transaction Processing)面向的是高并发低延时的增删改查(INSERT, DELETE, UPDATE, SELECT,etc.)。OLAP(On-line Analytical Processing)面向的是 BI 分析型数据请求,其对延时有较高的容忍度,处理数据量相较OLTP 要大很多。传统意义上与 OLTP 对应的是 MySQL
4、等关系型数据库,与 OLAP 相对应的则是数据仓库。 OLTP 与OLAP 所面向的数据存储查询引擎是不同的,其处理的请求不一样,所需要的架构也大不相同。这个特点意味着数据需要储存在至少两个地方,需要定期或者实时的同步,同时还需要保持一致性,该特点对数据开发工程师造成了极大的困扰,浪费了同学们大量的时间在数据的同步和校验上。Kudu+Impala 的出现,虽然不能完美的解决这个问题,但不可否认,其缓解了这个矛盾。在此需要注意的是OLTP 并没有严格要求其事务处理满足ACID 四个条件。 事实上, OLTP是比 ACID 更早出现的概念。在本文中,OLTP 和 OLAP 的概念关注在数据量、并发
5、量、 延时要求等方面, 不关注事务。Kudu 来由 Kudu 最早是 Cloudera 公司开发,并与 2015 年 12月 3 日贡献给 Apache 基金会,2016 年 7 月 25 日正式宣布毕业,升级为 Apache 顶级项目。值得注意的是 Kudu 在开发之中得到了中国公司小米的大力支持,小米深度参与到了Kudu 的开发之中,拥有一位Kudu 的 Committer 。从 Kudu毕业时间可以看出,Kudu 还很年轻,有不少细节需要完善,也有一些重大特性待开发(如事务)。不过 Kudu+Impala 的组合正在得到越来越多公司的实践,目前也是 Cloudera 公司主推的新式大数据
6、解决方案。其他名词解释HDFS 是 Hadoop生态圈最基础的存储引擎,请注意HDFS 的设计主要为大文件存储,为高吞吐量的读取和写入服务,HDFS 不适合存储小文件,也不支持大量的随机读写。MapReduce 是分布式计算最基础的计算框架,通过把任务分解为多个Mapper 和Reducer,该计算框架可以很好地处理常见的大数据任务。 Hadoop 最早由 HDFS+MapReduce 构成,随着 Hadoop2.0 以及 3.0 的发布, Hadoop 正在被赋予更多的功能。 Hbase 启发于 Google 的 Bigtable 论文,项目最早开始于 Powerset 公司。 Hbase
7、建立在 HDFS 之上,拥有极高的随机读写性能,是典型的OLTP类请求处理引擎。与此同时,Hbase 也拥有不错的 Scan 性能,可以处理部分类型的OLAP类请求。Spark集迭代式计算、流式计算于一身的新一代计算引擎,相比MapReduce,Spark 提供了更丰富的分布式计算原语,可以更高效的完成分布式计算任务。Ad-Hoc Query 通常翻译为即席查询,是数据仓库中的一个重要概念。数据探索和分析应用中通常会任意拼凑临时SQL ,并且对查询速度有一定要求,该类查询统称为即席查询。列式存储相比于行式存储,列式存储把相同列的数据放在一起。因为相同列的数据重复度更高,所以在存储上可以提供更高
8、的压缩比。又因为大部分BI分析只读取部分列,相比行式存储,列式存储只需要扫描需要的列,读取的数据更少,因此可以提供更快速的查询。常见的列式存储协议有 Parquet 等。 Kudu 介绍 Kudu 是什么 Kudu 是围绕 Hadoop 生态圈建立存储引擎, Kudu 拥有和Hadoop 生态圈共同的设计理念,它运行在普通的服务器上、可分布式规模化部署、并且满足工业界的高可用要求。其设计理念为 fast analytics on fast data.。 Kudu 的大部分场景和Hbase 类似,其设计降低了随机读写性能,提高了扫描性能,在大部分场景下, Kudu 在拥有接近 Hbase 的随机
9、读写性能的同时,还有远超 Hbase 的扫描性能。区别于 Hbase 等存储引擎, Kudu 有如下优势:快速的 OLAP 类查询处理速度与MapReduce、Spark 等 Hadoop 生态圈常见系统高度兼容,其连接驱动由官方支持维护与Impala 深度集成,相比HDFS+Parquet+Impala 的传统架构, Kudu+Impala 在绝大多数场景下拥有更好的性能。强大而灵活的一致性模型,允许用户对每个请求单独定义一致性模型,甚至包括强序列一致性。能够同时支持OLTP 和 OLAP 请求,并且拥有良好的性能。 Kudu 集成在 ClouderaManager 之中,对运维友好。高可用
10、。采用 Raft Consensus 算法来作为master 失败后选举模型,即使选举失败,数据仍然是可读的。支持结构化的数据,纯粹的列式存储, 省空间的同时, 提供更高效的查询速度。Kudu的典型使用场景流式实时计算场景流式计算场景通常有持续不断地大量写入,与此同时这些数据还要支持近乎实时的读、写以及更新操作。 Kudu 的设计能够很好的处理此场景。时间序列存储引擎 (TSDB)Kudu 的 hash 分片设计能够很好地避免 TSDB 类请求的局部热点问题。同时高效的Scan 性能让 Kudu 能够比 Hbase 更好的支持查询操作。机器学习& 数据挖掘机器学习和数据挖掘的中间结果往
11、往需要高吞吐量的批量写入和读取,同时会有少量的随机读写操作。Kudu的设计可以很好地满足这些中间结果的存储需求。与历史遗产数据共存在工业界实际生产环境中,往往有大量的历史遗产数据。 Impala 可以同时支持HDFS 、Kudu 等多个底层存储引擎,这个特性使得在使用的Kudu 的同时,不必把所有的数据都迁移到Kudu 。Kudu 中的重要概念列式存储毫无疑问,Kudu 是一个纯粹的列式存储引擎,相比Hbase 只是按列存放数据, Kudu 的列式存储更接近于 Parquet,在支持更高效 Scan 操作的同时,还占用更小的存储空间。 列式存储有如此优势,主要因为两点: 1. 通常意义下的 O
12、LAP 查询只访问部分列数据,列存储引擎在这种情况下支持按需访问,而行存储引擎则必须检索一行中的所有数据。2. 数据按列放一起一般意义来讲会拥有更高的压缩比,这是因为列相同的数据往往拥有更高的相似性。TableKudu 中所有的数据均存储在Table 之中,每张表有其对应的表结构和主键,数据按主键有序存储。因为Kudu 设计为支持超大规模数据量,Table 之中的数据会被分割成为片段,称之为 Tablet。Tablet 一个 Tablet把相邻的数据放在一起,跟其他分布式存储服务类似,一个Tablet 会有多个副本放置在不同的服务器上面,在同一时刻,仅有一个 Tablet 作为 leader
13、存在,每个副本均可单独提供读操作,写操作则需要一致性同步写入。Tablet ServerTablet 服务顾名思义,对Tablet 的读写操作会通过该服务完成。对于一个给定的tablet,有一个作为leader,其他的作为follower ,leader选举和灾备原则遵循Raft一致性算法,该算法在后文中有介绍。需要注意的是一个Tablet服务所能承载的Tablet数量有限,这也要求的Kudu 表结构的设计需要合理的设置Partition 数量,太少会导致性能降低,太多会造成过多的Tablet,给 Tablet 服务造成压力。 Mastermaster 存储了其他服务的所有元信息,在同一时刻,
14、最多有一个master 作为 leader提供服务, leader 宕机之后会按照Raft 一致性算法进行重新选举。 master 会协调 client 传来的元信息读写操作。比如当创建一个新表的时候,client 发送请求给master,master 会转发请求给 catelog、 tablet 等服务。 master 本身并不存储数据,数据存储在一个 tablet 之中,并且会按照正常的 tablet 进行副本备份。 Tablet 服务会每秒钟跟 master 进行心跳连接。 Raft Consensus AlgorithmKudu 使用 Raft 一致性算法,该算法将节点分为 follo
15、wer 、candidate、leader 三种角色,当leader 节点宕机时, follower 会成为 candidate 并且通过多数选举原则成为一个新的leader,因为有多数选举原则,所以在任意时刻,最多有一个leader 角色。 leader 接收 client 上传的数据修改指令并且分发给follower ,当多数 follower 写入时, leader会认为写入成功并告知client 。Catalog TableCatelog 表存储了Kudu 的一些元数据,包括Tables 和 Tablets。Kudu 架构概览从下图可以看出有三台Master,其中一个是leader,另
16、外两个是 follower 。有四台Tablet server,n 个 tablets 及其副本均匀分布在这四台机器上。每个tablet 有一个 leader,两个follower 。每个表会按照分片的数量分成多个 tablet。 Impala 介绍 Impala 是什么 Impala 是建立在 Hadoop 生态圈的交互式 SQL 解析引擎,Impala 的 SQL 语法与 Hive 高度兼容,并且提供标准的 ODBC 和 JDBC 接口。Impala 本身不提供数据的存储服务,其底层数据可来自HDFS 、 Kudu 、 Hbase 甚至亚马逊 S3。Impapa 最早由 Cloudera
17、公司开发,于15 年12 月贡献给 Apache 基金会,目前其正式名字为ApacheImpala(incubating)Impala 本身并不是 Hive 的完全替代品, 对于一些大吞吐量长时间执行的请求, Hive 仍然是最稳定最佳的选择,哪怕是 SparkSQL,其稳定性也无法跟 Hive 媲美。稳定性方面 Impala 不如 Hive ,但是在执行效率方面, Impala 毫无疑问可以秒杀 Hive 。Impala 采用内存计算模型, 对于分布式 Shuffle ,可以尽可能的利用现代计算机的内存和CPU资源。同时, Impala 也有预处理和分析技术,表数据插入之后可以用 COMPU
18、TE STATS 指令来让 Impala 对行列数据深度分析。 Impala 的优势和 Hive 高度相似的 SQL 语法,无需太多学习成本超大数据规模 SQL 解析的能力,高效利用内存与 CPU 利用,快速返回 SQL 查询结果。集成多个底层数据源, HDFS 、 Kudu 、 Hbase 等数据皆可通过 Impala 共享,并且无需进行数据同步。 与 Hue 深度集成, 提供可视化的 SQL 操作以及 work flow 。提供标准 JDBC 和 ODBC 接口,方便下游业务方无缝接入。提供最多细化到列的权限管理,满足实际生产环境数据安全要求。Impala 和 Hive 的 SQL 兼容性
19、?Impala 高度兼容 Hive ,不过有部分Hive 的 SQL 特性在 Impala中并不支持,其中包括: Data 等类型不支持 XML 和 Json 函数不支持多个 DISTINCT 不支持, 完成多个 DISTINCT 需要如下操作 select v1.c1 result1, v2.c1 result2 from (selectcount(distinct col1) as c1 from t1) v1 cross join (selectcount(distinct col2) as c1 from t1) v2;Impala和 Hive的兼容不仅仅体现在语法上,在架构上 Imp
20、ala 和 Hive 也保持着相当程度上的兼容性, Impala 直接采用 Hive 的元数据库,对于公司而言,已经在 Hive 中的表结构无需迁移, Impala 可以直接使用。 Kudu+Impala 对我们意味着什么 Kudu+Impala 为实时数据仓库存储提供了良好的解决方案。这套架构在支持随机读写的同时还能保持良好的Scan 性能,同时其对Spark等流式计算框架有官方的客户端支持。这些特性意味着数据可以从 Spark 实时计算中实时的写入Kudu ,上层的Impala提供 BI 分析 SQL 查询,对于数据挖掘和算法等需求可以在Spark 迭代计算框架上直接操作Kudu 底层数据
21、。 Kudu 以及Impala 的不足 Kudu 主键的限制表创建后主键不可更改;一行对应的主键内容不可以被Update 操作修改。要修改一行的主键值,需要删除并新增一行新数据,并且该操作无法保持原子性;主键的类型不支持DOUBLE 、FLOAT 、BOOL ,并且主键必须是非空的(NOT NULL) ;自动生成的主键是不支持的;每行对应的主键存储单元(CELL) 最大为 16KB 。Kudu列的限制 MySQL 中的部分数据类型,如 DECIMAL, CHAR,VARCHAR, DATE, ARRAY等不支持;数据类型以及是否可为空等列属性不支持修改;一张表最多有300 列。 Kudu 表的
22、限制表的备份数必须为奇数,最大为7;备份数在设置后不可修改。 Kudu 单元( Cells)的限制单元对应的数据最大为 64KB ,并且是在压缩前。 Kudu 分片的限制分片只支持手动指定,自动分片不支持;分片设定不支持修改,修改分片设定需要”建新表 -导数据 -删老表”操作;丢掉多数备份的Tablets 需要手动修复。Kudu容量限制建议tablet servers 的最大数量为100;建议masters的最大数量为3;建议每个tabletserver 存储的数据最大为4T(此处存疑,为何会有4T 这么小的限制?);每个 tablet server 存储的 tablets 数量建议在1000
23、 以内;每个表分片后的tablets 存储在单个tablet server的最大数量为60。Kudu 其他使用限制Kudu 被设计为分析的用途,每行对应的数据太大可能会碰到一些问题;主键有索引,不支持二级索引(Secondary indexes);多行的事务操作不支持;关系型数据的一些功能,如外键,不支持;列和表的名字强制为UTF-8 编码,并且最大 256 字节;删除一列并不会马上释放空间,需要执行Compaction 操作,但是Compaction 操作不支持手动执行;删除表的操作会立刻释放空间。Impala 的稳定性 Impala 不适合超长时间的 SQL 请求; Impala 不支持高
24、并发读写操作, 即使 Kudu 是支持的; Impala和 Hive 有部分语法不兼容。 FAQImpala 支持高并发读写吗?不支持。虽然 Impala 设计为 BI- 即席查询平台,但是其单个SQL 执行代价较高,不支持低延时、高并发场景。Impala 能代替 Hive 吗?不能, Impala 设计为内存计算模型,其执行效率高,但是稳定性不如Hive ,对于长时间执行的SQL请求, Hive仍然是第一选择。Impala需要多少内存?类似于Spark,Impala 会把数据尽可能的放入内存之中进行计算,虽然内存不够时, Impala 会借助磁盘进行计算,但是毫无疑问,内存的大小决定了 Im
25、pala 的执行效率和稳定性。 Impala 官方建议内存要至少 128G 以上,并且把 80%内存分配给ImpalaImpala 有 Cache 吗? Impala 不会对表数据 Cache, Impala 仅仅会 Cache 一些表结构等元数据。虽然在实际情况下,同样的query 第二次跑可能会更快,但这不是Impala 的Cache,这是 Linux 系统或者底层存储的Cache。Impala 可以添加自定义函数吗?可以。Impala1.2 版本支持的UDFs,不过 Impala 的 UDF 添加要比 Hive 复杂一些。 Impala 为什么会这么快? Impala 为速度而生,其在执
26、行效率细节上做了很多优化。在大的方面,相比 Hive ,Impala 并没有采用 MapReduce作为计算模型, MapReduce 是个伟大的发明,解决了很多分布式计算问题,但是很遗憾,MapReduce 并不是为 SQL 而设计的。 SQL 在转换成 MapReduce 计算原语时,往往需要多层迭代,数据需要较多的落地次数,造成了极大地浪费。Impala 会尽可能的把数据缓存在内存中,这样数据不落地即可完成 SQL 查询,相比MapReduce 每一轮迭代都落地的设计,效率得到极大提升。 Impala 的常驻进程避免了MapReduce启动开销, MapReduce 任务的启动开销对于即
27、席查询是个灾难。Impala 专为 SQL 而设计,可以避免每次都把任务分解成Mapper 和 Reducer,减少了迭代的次数,避免了不必要的Shuffle 和 Sort。同时 Impala 现代化的计算框架,能够更好的利用现代的高性能服务器。Impala 利用 LLVM 生成动态执行的代码 Impala 会尽可能的利用硬件配置,包括SSE4.1 指令集去预取数据等等。Impala 会自己控制协调磁盘IO ,会精细的控制每个磁盘的吞吐,使得总体吞吐最大化。在代码效率层面上, Impala 采用 C+ 语言完成,并且追求语言细节,包括内联函数、内循环展开等提速技术在程序内存使用上,Impala 利用 C+ 的天然优势,内存占用比JVM 系语言小太多,在代码细节层面上也遵循着极少内存使用原则,这使得可以空余出更多的内存给数据缓存。Kudu 相比 Hbase 有何优势,为什么?Kudu 在某些特性上和Hbase 很相似,难免会放在一起比较。 然而 Kudu 和 Hbase 有如下两点本质不同。Kudu 的数据模型更像是传统的关系型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年计算机二级Web创新思维试题及答案
- 2025版高考生物一轮复习课时规范练39生态工程含解析苏教版
- 财务决策逻辑分析的试题及答案
- 巧姨手套合同协议书
- 广告招牌购买合同协议书
- 2024年中考生物生物圈中的绿色植物专题复习无答案
- 养土狗合同协议书模板下载
- 店面转让简易合同协议书
- 学习计算机ACCESS的试题及答案资源
- 通讯设备分期合同协议书
- 【正版授权】 ISO/IEC 19790:2025 EN Information security,cybersecurity and privacy protection - Security requirements for cryptographic modules
- 国家安全教育大学生读本课件高教2024年8月版课件-第七章坚持以军事、科技、文化、社会安全为保障
- 整套课件-证券投资学(第二版)赵锡军
- 2025年《教师专业成长与专业发展》培训心得(3篇)
- 2025年重庆市环卫集团有限公司招聘笔试参考题库含答案解析
- 植物的逆境生理-课件
- TSG 07-2019电梯安装修理维护质量保证手册程序文件制度文件表单一整套
- 高等院校国际交流管理制度
- 《兔子坡》小学生阅读分享课课件
- 2024-2025学年人教版初中物理九年级全一册《电与磁》单元测试卷(原卷版)
- 十八项医疗核心制度考试题与答案
评论
0/150
提交评论