kudu使用方法

1.1 kudu使用方法

(1)可通过Java client、C++ client、Python client操作kudu表,但要构建client并编写应用程序;

(2)可通过kudu-spark包集成kudu与spark,并编写spark应用程序来操作kudu表;

(3)可通过impala的shell对kudu表进行交互式的操作,因为impala2.8及以上的版本已经集成了对kudu的操作。下面主要讲述基于impala的使用方法。

1.2 基本要求

安装2.8及以上版本的impala,并安装hive,使用其metastore服务来存储impala的元数据。此处Hadoop、hive、impala的安装过程省略。

1.3 impala和kudu的相关配置

       因为impala已经集成对kudu的操作,因此impala与kudu不需要做任何参数的配置,但为了方便,在impala的配置文件/etc/default/impala中给字段IMPALA_SERVER_ARGS增加参数-kudu_master_hosts= slave217:7051,如图:

kudu使用方法_第1张图片

       最后通过impala-shell进入交互式命令行。

1.4 创建外部表

假设已经通过Java client等其他方式在kudu中创建了某个表,要想对该表进行操作,需要在impala中创建外部表,将其映射到impala当中,例如:

CREATE EXTERNAL TABLE my_mapping_table

        STOREDAS KUDU

          TBLPROPERTIES(

               'kudu.table_name' = 'my_kudu_table');

1.5创建内部表

       假设要通过impala创建一个新的kudu表,需要在impala中创建一个内部表,例如:

          CREATE TABLE  testinkudu(…………)

          partition  by hash  partitions  8

          STORED AS  KUDU [AS SELECT * FROM OTHER_TABLE];

注:创建内部表时,类似partition by ………stored as kudu的分区声明语句是必须的。无论是 通过client创建的kudu表还是通过impala创建的表,都可以在master节点的UI界面的tables选项中查看,如下图:

kudu使用方法_第2张图片

1.6创建kudu表的partition声明

kudu表基于其partition方法被拆分成多个分区,每个分区就是一个tablet,一张kudu表所属的所有tablets均匀分布并存储在tablet servers的磁盘上。因此在创建kudu表的时候需要声明该表的partition方法,同时要指定primary key作为partition的依据。Kudu中的分区方法主要有两种:partition by hash和partition by range。

基于hash的分区方法的基本原理是:基于primary key的hash值将每个row划分到相应的tablet当中,分区的个数即tablet的个数必须在创建表语句中指定,建表语句示例如下:

create table testinkudu(

name string,

age int,

primary key(name))

       partitionby hash(name) partitions 8

       stored askudu;

       可以在UI界面中查看该表的分区仿方式以及每个tablet分片的相关信息,如下图所示:

kudu使用方法_第3张图片

       注:如果未指定基于某个字段的hash值进行分区,默认以主键的hash值进行分区。

基于range的分区方法的基本原理是:基于指定主键的取值范围将每个row划分到相应的tablet当中,用于range分区的主键以及各个取值范围都必须在建表语句中声明,建表语句示例如下:

                     create table testinkudu2(

classes int,

namestring,

ageint,

primarykey(classes,name))

                     partition by range(classes)(

                            partition value = 1,

                            partition value = 2,

                            partition value =3,

partitionvalue =4)

                     stored as kudu;

       注:表testinkudu2有班级、姓名、年龄三个字段,表中的每个row将会根据其所在的班级划分成四个分区,每个分区就代表一个班级。

kudu使用方法_第4张图片

       kudu表还可以采用基于hash和基于range相结合的分区方式,使用方法与上述类似,此处不再详述。

1.7 Insert语句

       kudu表支持3种insert语句:

1.     insertinto testinkudu values(‘a’, 12);

2.     insertinto testinkudu values(‘a’, 12),(‘b’, 13),(‘c’, 14);

3.     insertinto testinkudu select * from other_table;

1.8 update语句

       kudu表的update操作不能更改主键的值,其他与标准sql语法相同。

1.9 upsert 语句

       对于upsert into testinkudu values(‘a’, 12);如果指定的values中的主键在testinkudu中已经存在,则执行update语义,反之,执行insert语义。

1.10 delete语句

       与标准sql语法相同。

你可能感兴趣的:(kudu使用方法)