Kudu1.1.0 、 Kudu1.2.0 Kudu1.3.0的版本信息异同比较
不多说,直接上干货!
Kudu1.1.0
新特性
- python API升级,具备JAVA C++client一样的功能(从0.3版本直接升级到1.1),主要的点如下:
1.1. 改进了Parial Row的语义
1.2. 增加了range partition支持
1.3. 提供了 scan api
1.4. 增强predicate支持
1.5. 支持所有kudu的类型,包括datetime.datetime转化成UNIXTIME_MICROS
1.6. 支持修改表(alter)
1.7. scanner可以读取快照数据
1.8. 支持scanner副本选择
1.9. python
1.10. 一些bug的修复 - 为了优化过滤,增加了IN LIST predicate pushdown的支持(即匹配一列中一个集合的数据,predicate push down类似于hbase的协处理器coprocessors),有些过滤在后台执行。spark、mr和impala query的此项功能还没有完成。
为了便于查错,Java client增加了client-side请求追踪。原先只有最终的错误日志,没有导致最终错误其他日志信息。
优化和改进
- kudu发布了spark2.0(编译于scala2.11)的JAR。
- 通过配置java client可以从最近的副本读取数据,而不是原先的从leader副本读取数据。不过默认还是后者,可以通过设置scanner builder replicaSelection参数来调整。
- Tablet server采用一种新策略来维护write-ahead log(WAL)。原先使用log_min_segments_to_retain=2的策略,这种策略会过于频繁flush内存数据,限制了写入的性能。新策略引入了一个新的参数log_target_replay_size_mb,它决定了flush内存数据的阀值,而且这个参数值已经经过实验验证,用户不需要去修改它。这个新策略在某些写入用例下,提升了相对2x倍的写入性能。
- kudu Raft consensus algorithm 算法加入了一个新的阶段pre-election,它可以在高负荷的情况下,更稳定的进行leader选举,特别在一个tabletserver含有大量的tablet的情况下。
- 提升了在tabletserver含有大量的tombstoned tablet时,tabletserver的启动的速度。
工具
- kudu tablet leader_step_down,step down一个leader tablet。
- kudu remote_replica copy拷贝tablet从一个running tabletserver。
- kudu local_replica delet删除tablet。
- kudu test loadgen
兼容性
- 1.1的client可以连接到1.0的kudu服务。
- 1.0的client可以无限制的连接到1.1kudu服务。
- 滚动升级从1.0到1.1是可能的,但是没有完整的测试。建议安装关闭所有节点,更新版本,启动更新的节点的步骤来升级。
参考
https://github.com/cloudera/kudu/blob/master/docs/prior_release_notes.adoc
个人github https://github.com/qiulp/doc/edit/master/kudu/kudu1.1.0.md
Kudu1.2.0
新特性
- kudu clients和servers可以编辑用户的数据,例如log信息,java的异常信息和状态信息。但用户的元数据是不可编辑的,例如表名,字段名,分区边界。默认是可编辑的,但可以通过设置log_redact_user_data=false关闭。
kudu一致性保证的能力大幅度提升了:
每个副本都会track它们的 safe timestamp,这个时间戳是最大时间戳,在这个时间戳上读是可重复的。SCAN_AT_SNAPSHOT模式的scan,要不等待本副本的snapshot safe后再查,要不路由到一个safe的副本查。如此保证数据scan是可重复的。
Kudu会保留以往所有历史数据,无论是插入,还是删除,还是相同key插入一条新的数据。以往版本的kudu不会保留历史数据在这种情况下。如此tablet server可以得到历史某一时间段点的准确的快照,即便是重新插入的情形。
kudu client会自动记住它们最近成功读取或者写入操作的时间戳。在使用READ_AT_SNAPSHOT模式,且没有指定时间戳的情况下,scan会自动指定一个比最近写入时间戳大的时间戳。写入同样会传播timestamp,确认一系列的有因果关系的操作,能被指定有序的时间戳。总的来说,这个改变,可以保证数据的读写一致性,同样保证了在其他clients上的快照查询能等到一致的结果。
- kuduserver自动限制了log文件数量,默认是10个,通过参数max_log_files设置。
优化和改进
- java和c++client的日志将会变得更平和,不在记录正常操作的日志,而记录error日志。
- c++client提供一个KuduSession::SetErrorBufferSpace API,通过它可以限制同步操作异常的buffer大小。
- java client可以获取tablet地址信息1000个一个批次(原先是10)。如此可以提升spark或者impala查询具有大量tablets的表性能。
- kudu master表元数据信息的锁竞争大幅度缓解。如此提升了在大集群环境下寻址(tablet)的高并发度。
- tablet server端的高并发写的锁竞争同样被缓解了。
- 写日志的锁竞争也被缓解。
修复的bug
- KUDU-1508,ext4file的文件系统损坏。
- KUDU-1399,实现LRU cache解决长时间运行的kudu机器openfiles不够的问题。默认kudu会使用ulimit的一半的量。
省略
兼容性
- 1.2.0与历史版本兼容
- 1.2client可以了解1.0server,只是有些没有的功能不可用。
- 1.0cleint可以连接1.2,没有任何限制。
- 滚动升级从1.0到1.1是可能的,但是没有完整的测试。建议安装关闭所有节点,更新版本,启动更新的节点的步骤来升级。
不可兼容变化
- 副本因子最大值改成7,并且副本不能是偶数。
- 不提供GROUP_VARINT无损压缩算法。
约束性
- 列数,建议不超过300列,建议列数越少越好。
- cell大小,不能大于64KB,不然写入时client有error信息。
- 有效标识符,表名列名严格要求是UTF-8,且不能超过256个字符。
引用
https://github.com/cloudera/kudu/blob/master/docs/release_notes.adoc
我的github https://github.com/qiulp/doc/blob/master/kudu/kudu1.2.0.md
Kudu1.3.0
新特性
增加了kerberos安全认证,可以通过kerberos tickets或者keytabs文件认证。此新特性是个可选项,推荐在部署环境中增加安全机制。
增加了Transport Layer Security(TLS)网络安全传输协议,kudu将会对任意client和server间的信息通信进行加密。默认加密是开启的,无论client或者server端都可以决定是否启用加密。
增加了粗粒度服务级别的授权。细粒度的授权,例如表级别、字段级别,暂不支持。
增加了清理过期历史版本数据(超过保留时间)的后台任务。减少磁盘空间的使用,特别是有频繁更新的数据。
便于诊断错误,集成了Google Breakpad,它产生的reports可以在配置的日志文件夹中看到。
优化
修改了数据目录和数据文件的权限,可以通过–umask配置。升级之后文件权限会更加严格。
Web UI 去除了一些用户的敏感信息,例如查询时的predicate values。
默认kudu对配置的磁盘预留1%空间,当磁盘空闲空间不足1%时,为避免完全写满磁盘,会停止写入数据。
数字列(int float double)默认编码BIT_SHUFFLE,binary string类型的变成DICT_ENCODING。此类编码存储机制类似于parquet。
WAL使用LZ4压缩,提升写入性能和稳定性。
Delta file使用LZ4压缩,可以提高读和写,特别是频繁更新的可压缩数据。
Kudu API在查询时支持IS NULL 和 IS NOT NULL(KuduPredicate.newIsNotNullPredicate)的pridicate,spark datasource集成可以利用这些新的predicate。
C++ 和 Java client “in partitions”的查询有优化。
Java client的异常信息被截断成最大的32KB。
兼容性
Kudu 1.3 可连接kudu1.0 server,调用新特性时会报错。
kudu 1.1 可连接kudu1.3 server,但当集群配置了安全认证,将会报错。
从1.2滚动升级到1.3没有被充分验证。建议使用者关闭整个集群,升级版本,然后重启新版本,通过这种方式来升级。
升级后,如果1.3版本设置了安全认证(authentication or encryption set to “required”),老版本的client将不能连接服务。
升级后,如果1.3版本没有设置安全认证(set to “optional” or “disabled”),老版本的client还能继续连接server。
不可兼容变化
因为存储格式变化,1.3版本将不能降级到老版本。
为了在配置了安全的集群上跑mr或者spark任务,需要提供认证凭证。
引用
https://github.com/cloudera/kudu/blob/master/docs/release_notes.adoc
个人github https://github.com/qiulp/doc/edit/master/kudu/kudu1.3.0.md
Kudu1.1.0 、 Kudu1.2.0 Kudu1.3.0的版本信息异同比较的更多相关文章
- Linux下Oracle 10.2.0.1升级到10.2.0.4总结
最近部署测试环境时,将测试环境ORACLE数据库从10.2.0.1升级到了10.2.0.4,顺便整理记录一下升级过程. 实验环境: 操作系统:Oracle Linux Server release 5 ...
- win10安装oracle 11g 报错 要求的结果: 5.0,5.1,5.2,6.0 6.1 之一 实际结果: 6.2
Windows10下安装Oracle11G.10G,都会提示如下信息 正在检查操作系统要求... 要求的结果: 5.0,5.1,5.2,6.0 之一 实际结果: 6.1 检查完成.此次检查的总体结果为 ...
- win10 用cmake 3.5.2 和 vs 2015 update1 编译 GPU版本(cuda 8.0, cudnn v5 for cuda 8.0)
win10 用cmake 3.5.2 和 vs 2015 update1 编译 GPU版本(cuda 8.0, cudnn v5 for cuda 8.0) 用vs 2015打开 编译Release ...
- CMS .NET 程序框架 从2.0/3.5升级到4.0 版本后 需要调整的地方
问题一: document.forms1.action 不可使用 需要修改程 document.forms[0] .NET 程序框架 从2.0/3.5升级到4.0 版本后,document.forms ...
- Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0的区别
Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0的区别 时间 2012-12-19 20:30:12 CSDN博客原文 http://blog.cs ...
- (转载) .NET2.0程序集无法在.net 4.0 中运行的解决方案
首先在MSDN上看到 4.0 的更新日志中有如下这条: .NET Framework 4 不能自动使用自己的公共语言运行时版本来运行由 .NET Framework 早期版本生成的应用程序. 若要使用 ...
- CentOS7.0分布式安装HADOOP 2.6.0笔记-转载的
三台虚拟机,IP地址通过路由器静态DHCP分配 (这样就无需设置host了). 三台机器信息如下 - 1. hadoop-a: 192.168.0.20 #master 2. ha ...
- 你好,C++(17)0.1*10不等于1.0——4.1.4 关系操作符4.1.5 逻辑操作符
4.1.4 关系操作符 在C++中,除了需要用算术操作符对数据进行加减乘除的算术操作之外,我们有时候还需要对数据之间的关系进行操作,也就是对两个数据进行大小比较,得出它们之间的大小关系.在现实世界中 ...
- 及格率 不谢 cast(cast (sum(case when res>=60 then 1 else 0 end)*100/(count(1)*1.0) as float) as nvarchar)+'%' '及格率'
--18.查询各科成绩最高分.最低分和平均分:--以如下形式显示:-- 课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率--及格为>=60,中等为:70-80,优良 ...
随机推荐
- 小小c#算法题 - 9 - 基数排序 (Radix Sort)
基数排序和前几篇博客中写到的排序方法完全不同.前面几种排序方法主要是通过关键字间的比较和移动记录这两种操作来实现排序的,而实现基数排序不需要进行记录项间的比较.而是把关键字按一定规则分布在不同的区域, ...
- Java50道经典习题-程序31 数组逆序
题目:将一个数组逆序输出.分析:用第一个与最后一个交换. public class Prog31 { public static void main(String[] args) { //遍历原始数组 ...
- android studio中配置X5 webview时的一个坑
在接入X5的第二步中,需要配置so文件,这里说一下遇到的坑 1. 需要把demo下载回来,不然你找不到so文件,找到so文件后放到自己相对应的目录下边,自己里面那个目录也没有,所以和文件夹一起复制过去 ...
- models说明
class UserType(models.Model): caption = models.CharField(max_length=32) class User(models.Model): na ...
- 使用Google浏览器开发者工具学习HTTP请求记录
GET请求 1.Google浏览器开发者工具截图图示 2.General Request URL :为请求链接 Status Code :为HTTP响应状态码 3.ResponseHeaders :响 ...
- [SinGuLaRiTy] NOIP 膜你赛-Day 2
[SinGuLaRiTy-1031] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 对于所有题目: Time Limit: 1s | Mem ...
- Nginx+ISS+Redis实现完美负载均衡
前篇文章讲到nginx是使网站采用分布式,对用户的请求采用分布式,分配到不同的服务器上,然后进行同一站点的访问,保证了访问的高效,使用率高,生命期长. 说到ISS,这里重点介绍tomcat,Tomca ...
- Liunx基础优化配置
1: 为系统添加操作用户,并授予sudo权限 [root@localhost ~]# groupadd cai [root@localhost ~]# useradd cai -g cai [roo ...
- 小B的询问 莫队分块
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...
- PHP删除目录下的空目录
function rm_empty_dir($path){ if(is_dir($path) && ($handle = opendir($path))!==false){ ...