开发者学堂课程【NoSQL 数据库 Kudu 教程:Kudu 整合 impala-shell 操作】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/723/detail/12911
Kudu 整合 impala-shell 操作
内容介绍:
一、 impala 配置修改
二、 创建 kudu 表
三、 使用 impala 对 kudu 进行 DML 操作
四、 更改表属性
Impala 是一款类似于 hive 的软件,能够对结构化数据进行映射,对 sql 进行开展分析。kudu 恰好是一个大数据存储引擎,存储数据,类似于表结构。就可以用 impala 映射成为 kudu 中的一个表,针对表开展数据分析。
一、 impala 配置修改
在每一个服务器的 impala 的配置文件中添加如下配置。
vim /etc/default /impala
在 IMPALA_SERVER_ARGS 下添加:
-kudu_master_hosts=node-1:7051, node-2:7051, node-3 :7051
事实上这一项也不需要,它是一个可选项。Kudu,impala 装好之后不需要集成,直接指定它的 master 地址在哪里就可以了。
二、 创建 kudu 表
Kudu 表分为内部表和外部表。内部表指的是 impala 当中的数据连同 kudu 中的表都要受 impala 管理。当删除表之后,连同 impala 管理一起被删除。外部表指的是,之前 kudu 当中有了一个表,可以直接建立一个表把他映射上。
1. 内部表
内部表由 Impala 管理,当您从 Impala 中删除时,数据和表确实被删除。当您使用 Impala 创建新表时,它通常是内部表。
使用 impala 创建内部表:
CREATE TABLE my_first_table
(
id BIGINT,
name STRING,
PRIMARY KEY(id)
)
PARTITION BY HASH PARTITIONS 16
STORED AS KUDU
TBL.PROPERTIES(
'kudu.master_addresses'='nodel:7051,node2:7051,node3:7051',
'kudu.table_name
’= 'my_first_table'
);
在 CREATE TABLE 语句中,必须首先列出构成主键的列,必须放在所有字段的后面。根据 HASH 分区分为16个。STORED AS KUDU 表示数据存储在 kudu 当中。
在 node-3下输入 impala-shell,在输入show databases,创建一个新的 database,输入 create database kudu_test。Use kudu_test 后输入 show tables。按照上面的方法创建好之后,就可以看到。
与此同时,数据也保存在 kudu 中,kudu 也帮我们创建了一个表。
2. 外部表
外部表(创建者 CREATE EXTERNAL TABLE )不受 lmpala 管理,并且删除此表不会将表从其源位置(此处为 Kudu )丢弃。相反,它只会去除 Impala 和 Kudu 之间的映射。这是 Kudu 提供的用于将现有表映射到 lmpala 的语法。
Kudu 中任何一个表都写好了创建外部表的 sql 语句。
CREATE EXTERNAL TABLE "student` STORED AS KUDu
TBLPROPERTIES(
'kudu.table_name'= 'student',
'kudu.master_addresses'='node-1:7051,node-2:7051,node-3:7051')
重点在数据删除。当删除一个内部表的时候,impala 中肯定没有了,kudu 中的表也被删除了。删除外部表的时候,impala 中没有了,但是 kudu 中还在。
三、 使用 impala 对 kudu 进行 DML 操作
1.将数据插入 Kudu 表
impala 允许使用标准 SQL 语句将数据插入 Kudu。
1) 插入单个值
创建表
CREATE TABLE my_first_table(
id BIGINT
,
name STRING
,
PRIMARY KEY(id))
ARTITION BY HASH PARTITIONS 16
STORED AS KUDU
TBLPROPERTIES(
'kudu.table_name ' = 'person1' ,
'kudu.master_addresses' = 'node-1:7051,node-2:7051,node-3:7051');
2) 此示例插入单个行,插入一个数字
INSERT INTO my_first_table VALUES (50,"zhangsan");
3) 查看数据
select * from my_first_table
4) 使用单个语句插入三行
INSERT INTO my_first_table VALUE(1
,"john"),(2,"jane"),(3,"jim");
5) 批量插入 Batch lnsert
从 lmpala 和 Kudu 的角度来看,通常表现最好的方法通常是使用 Impala 中的 SELECT FROM 语句导入数据。示例:
INSERT INTO my_first_table
SELECT * FROM temp1;
2.更新数据
示例:
UPDATE my_first_table SET name="xiaowang" where id =1 ;
3.删除数据
示例:
delete from my_first_table where id =2;
四、 更改表属性
开发人员可以通过更改表的属性来更改 Impala 与给定 Kudu 表相关的元数据。这些属性包括表名,Kudu 主地址列表,以及表是否由 lmpala(内部)或外部管理。
1.Rename an lmpala Mapping Table(重命名 Impala 映射表)
ALTER TABLE PERSON RENAME To person_temp;
把 person 改成 person_temp。
2.Rename the underlying Kudu table for an internal table(重新命名内部表的基础 Kudu 表)
1) 创建内部表∶
CREATE TABLE kudu_student(
companyId INT
,
workId INT
,
Name STRING,
Gender STRING
,
IPhoto STRING,
PRIMARY KEY(companyId))
PARTITION BY HASH PARTITIONS 16
STORED AS KUDU
TBLPROPERTIES (
'kudu.master_addresses' = 'node1:7051,node2:7051,node3:7051'
,
'kudu.tab1e_name' = 'student1'
);
2)如果表是内部表,则可以通过更改 kudu.table_name 属性重命名底层的 Kudu 表
ALTER TABLE kudu_student
SET TBLPROPERTIES( 'kudu.table_name' = 'new_student ');
设置一个新的属性。外面的表名没有 kudu_student。
在 kudu 中刷新,就变成 new_student
3.Remapping an external table to a different Kudu table(将外部表重新映射到不同的 Kudu 表)
如果用户在使用过程中发现其他应用程序重新命名了 kudu 表,那么此时的外部表需要重新映射到kudu上
创建一个外部表︰
CREATE EXTERNALTABLE external_table
STORED AS KUDU
TBLPROPERTIES (
'kudu.master_addresses' = 'node1:7051,node2:7051,node3:7051'
,
'kudu.table_name' = ' person '
);
重新映射外部表,指向不同的 kudu 表:
ALTERTABLE externa1_table
SET TBLPROPERTIES( 'kudu.table_name' = 'hashTable '
上面的操作是∶将 external_table 映射的 PERSON 表重新指向 hashTable 表。
4.Change the Kudu Master Address(更改 Kudu Master 地址)
如果 kudu master 地址发生变化:
ALTER TABLE my_tab1e
SET TBLPROPERTIES('kudu.master_addresses' = 'kudu-new-master.example.com:7051');
5.Change an Internally-Managed Table to External(将内部管理的表更改为外部)
ALTER TABLE my_table SET TBLPROPERTIES("EXTERNAL' = 'TRUE ');
这个时候 person_temp 就从内部表变成外部表了。