超目科技完成近亿元A+轮融资,专注眼科疑难疾病治疗
06-17
Kudu 与 Impala 的集成 Impala 是 Cloudera 提供的高效 SQL 查询工具。它使用内存进行计算,以提供实时 SQL 查询。
Impala 强烈依赖 Hive 的 MetaStore。直接使用Hive的元数据意味着Impala元数据存储在Hive的MetaStore中,并且Impala兼容大部分Hive的SQL语法,并且具有实时、批量处理、多并发等优点。
Kudu 不支持标准 SQL 操作。 Kudu 可以与 Apache Impala 紧密集成。
Impala 天然兼容 kudu,允许开发者使用 Impala 的 SQL 语法从 Kudu 片中插入、查询、更新和删除数据。 Kudu和Impala的集成本质上是利用Hive表来操作Kudu,主要支持SQL操作。
1. Kudu和Impala集成配置首先安装Impala,然后安装Kudu。默认情况下,Impala 不依赖于 Kudu。
这里需要先在Impala中启用Kudu依赖支持,打开Impala->“配置”->“Kudu服务”:以上配置完成后,重启Impala即可。 2.内部表使用Impala创建新的Kudu表时,可以将该表创建为内部表或外部表。
内表由Impala管理,当你从Impala删除时,数据和表确实被删除了。当您使用 Impala 创建新表时,它通常是内部表。
使用impala创建内表时,必须首先列出主键列。主键默认不能为NULL。
例如:创建一个目录如下: 代码语言:javascript copy CREATE TABLE t_impala_kudu(id int,name string,age int,primary key (id))PARTITION BY HASH PARTITIONS 5STORED AS KUDUTBLPROPERTIES('kudu.master_address'=' cm1:,cm2 :') 在impala-shell中执行上述命令,可以看到impala中对应的表创建成功:登录Kudu页面,也可以看到Kudu中的表创建成功。内部表由 impala 管理。
创建表时,'kudu.master_address'指定Kudu集群。 ClouderaManager中,impala配置为支持Kudu,或者不需要指定;无法设置属性“kudu.table_name”来指定 Kudu 中的表名称。
表默认名称为“impala::xxx.xx”。当删除表时,impala 和 kudu 中对应的表也会被删除。
注意:Kudu 不支持 Impala 表创建关键字 PARTITIONED、LOCATION 和 ROW FORMAT。 3.外部表外部表(由CREATE EXTERNAL TABLE创建)不由Impala管理,删除该表不会从其源位置(此处为Kudu)丢弃该表。
相反,它仅删除 Impala 和 Kudu 之间的映射。这是 Kudu 提供的用于将现有表映射到 Impala 的语法。
使用Java api在Kudu中创建personInfo表。创建完成后,可以通过Kudu WebUI找到在Impala中创建Kudu表的对应语句: 在Impala中执行创建Impala外部表的语句,可以在Impala中创建表 名称与表名不一致Kudu 中的表。
在 Impala-shell 中执行以下创建外观语句,将 personInfo 映射到 Impala: 代码语言:javascript 复制 CREATE EXTERNAL TABLE `t_kudu_map` STORED AS KUDUTBLPROPERTIES('kudu.table_name' = 'personInfo' ,'kudu.master_addresses' = 'cm1: ,cm2:') 执行完成后,可以查看Impala中的表,如下: 以上是Impala中创建的外部表。外部表映射Kudu中的表。
当删除Impala中的表时 t_kudu_map 该表时,Impala中该表被删除,但是Kudu中的personInfo表不会被删除。建议在生产环境中使用外部表。
4、Impala SQL操作Kudu在Impala中创建内表t_test并存储在Kudu中: 代码语言:javascript copy CREATE TABLE t_test(id int, name string,age int ,primary key (id))PARTITION BY HASH PARTITIONS 5STORED AS KUDUTBLPROPERTIES ('kudu.master_address'='cm1:,cm2:') 向表中插入数据代码语言:javascript copy #插入一条数据[cm3:0]default>insert into t_test(id,name,age)values? ?(1,"zhangsan",18)#查询数据[cm3:0] 默认> select * from t_test;+----+--------- -+-----+|编号 |名称 |年龄 |+----+----------+-----+| 1 |张三| 18 |+---- +----------+-----+#插入多条数据[cm3:0] default> insert into t_test(id,name,age)values? ?(2,"lisi",19) ,(3,"王五",20);#查询结果[cm3:0] default> select * from t_test;+----+------- ---+-----+ |编号 |名称 |年龄 |+----+----------+-----+| 2 |丽丝 | 19 || 1 |张三| 18 || 3 | 王五| 20 |+----+----------+-----+ 上表也可以使用Java api查询Kudu中的数据。DML-批量向表中插入数据代码语言:javascript copy #在Impala中创建另一个表t_test2表,与表t_test结构相同 CREATE TABLE t_test2(id int, name string,age int, Primary key(id)) PARTITION BY HASH PARTITIONS 5STORED AS KUDUTBLPROPERTIES('kudu.master_address'='cm1:,cm2:')#将以下数据插入表t_test2 [cm3:0] default> insert into t_test2 (id,name,age)values??(10 ," maliu",),(20,"tianqi",);#批量插入数据到表t_test [cm3:0] default> insert into t_test select * from t_test2;#查询表t_test中的数据: +--- - +----------+-----+|编号 |名称 |年龄 |+----+----------+-----+| 10 | 10马六| || 2 |丽丝 | 19 || 20 |天七| || 3 | 王五| 20 || 1 |张三| 18 |+----+----------+- ----+DML-更新数据代码语言: javascript copy #将表t_test中id为1的年龄更新为[cm3:0]默认>更新t_test设置年龄=其中id=1; #查询t_test中id为1的数据更新结果[cm3:0] default> select * from t_test where id = 1;+----+----------+-----+|编号 |名称 |年龄 | +----+----------+-----+| 1 |张三| |+----+----------+---- -+DML 删除数据删除代码语言:javascript copy #删除表[cm3:0]中id为20的数据default>delete from t_test where id = 20; #查询t_test表[cm3:0]中的结果 default> select * from t_test; +----+----------+-----+|编号 |名称 |年龄 |+----+----------+--- --+| 2 |丽丝 | 19 || 1 |张三| || 3 | 王五| 20 || 10 | 10马六| |+----+----------+--- --+DDL-Table rename 代码语言: javascript copy #Rename table t_test to t_test1[cm3:0] default> alter table t_test rename to t_test1;#查看impala中的表信息 [cm3:0] default> showtables;+---------------+|姓名|+--------------+| t_impala_kudu || t_test1 || t_test2 |+- --------------+DDL-修改Impala映射的底层Kudu表代码语言: javascript copy #在Impala中创建外部表t_kudu_map,并映射Kudu表 personInfoCREATE EXTERNAL TABLE `t_kudu_map` STORED AS KUDUTBLPROPERTIES(' kudu.table_name' = 'personInfo','kudu.master_addresses' = 'cm1:,cm2:')#使用Kudu中的Java api创建表personInfo2,结构与表人员信息#修改Impala的外表面t_kudu_map的底层映射的personInfo到personInfo1表[cm3:0] default> alter table t_kudu_map set TBLPROPERTIES('kudu.table_name'='personInfo1');注意:使用“show create table t_kudu_map”查看表t_kudu_map的创建语句,发现底层映射的Kudu表已经变成了personInfo1。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-17
06-17
06-18
06-17
06-17
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用