文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

实战kudu集成impala

2014-11-25 09:12

关注

实战kudu集成impala

推荐阅读:

论主数据的重要性(正确理解元数据、数据元)

CDC+ETL实现数据集成方案

Java实现impala操作kudu

实战kudu集成impala

impala基本介绍

  impala是cloudera提供的一款高效率的sql查询工具,提供实时的查询效果,官方测试性能比hive快10到100倍,其sql查询比sparkSQL还要更加快速,号称是当前大数据领域最快的查询sql工具,

  impala是参照谷歌的新三篇论文(Caffeine--网络搜索引擎、Pregel--分布式图计算、Dremel--交互式分析工具)当中的Dremel实现而来,其中旧三篇论文分别是(BigTable,GFS,MapReduce)分别对应我们即将学的HBase和已经学过的HDFS以及MapReduce。

  impala是基于hive并使用内存进行计算,兼顾数据仓库,具有实时,批处理,多并发等优点

  Kudu与Apache Impala (孵化)紧密集成,impala天然就支持兼容kudu,允许开发人员使用Impala的SQL语法从Kudu的tablets 插入,查询,更新和删除数据;

 impala的架构以及查询计划

 

 

使用impala操作kudu整合

需要先启动hdfs、hive、kudu、impala

使用impala的shell控制台

(1):使用该impala-shell命令启动Impala Shell 。默认情况下,impala-shell 尝试连接到localhost端口21000 上的Impala守护程序。要连接到其他主机,请使用该-i 选项。要自动连接到特定的Impala数据库,请使用该-d 选项。例如,如果您的所有Kudu表都位于数据库中的Impala中impala_kudu,则-d impala_kudu可以使用此数据库。
(2):要退出Impala Shell,请使用以下命令: quit;

创建kudu表

内部表由Impala管理,当您从Impala中删除时,数据和表确实被删除。当您使用Impala创建新表时,它通常是内部表。

外部表

外部表(创建者CREATE EXTERNAL TABLE)不受Impala管理,并且删除此表不会将表从其源位置(此处为Kudu)丢弃。相反,它只会去除Impala和Kudu之间的映射。这是Kudu提供的用于将现有表映射到Impala的语法。

使用java创建一个kudu表:

public class CreateTable {

private static ColumnSchema newColumn(String name, Type type, boolean iskey) {

ColumnSchema.ColumnSchemaBuilder column = new

ColumnSchema.ColumnSchemaBuilder(name, type);

column.key(iskey);

return column.build();

}

public static void main(String[] args) throws KuduException {

// master地址

final String masteraddr = "node1,node2,node3";

// 创建kudu的数据库链接

KuduClient client = new

KuduClient.KuduClientBuilder(masteraddr).defaultSocketReadTimeoutMs(6000).build();

 

// 设置表的schema

List columns = new LinkedList();

columns.add(newColumn("CompanyId", Type.INT32, true));

columns.add(newColumn("WorkId", Type.INT32, false));

columns.add(newColumn("Name", Type.STRING, false));

columns.add(newColumn("Gender", Type.STRING, false));

columns.add(newColumn("Photo", Type.STRING, false));

Schema schema = new Schema(columns);

//创建表时提供的所有选项

CreateTableOptions options = new CreateTableOptions();

 

// 设置表的replica备份和分区规则

List parcols = new LinkedList();

 

parcols.add("CompanyId");

//设置表的备份数

options.setNumReplicas(1);

//设置range分区

options.setRangePartitionColumns(parcols);

 

//设置hash分区和数量

options.addHashPartitions(parcols, 3);

try {

client.createTable("person", schema, options);

} catch (KuduException e) {

e.printStackTrace();

}

client.close();

}

}

在kudu的页面上可以观察到如下信息:

 

 在impala的命令行查看表:

 

 

当前在impala中并没有person这个表

使用impala创建外部表 , 将kudu的表映射到impala上:

在impala-shell执行

CREATE EXTERNAL TABLE `person` STORED AS KUDU
TBLPROPERTIES(
"kudu.table_name" = "person",
"kudu.master_addresses" = "node1:7051,node2:7051,node3:7051")

 

 

使用impala对kudu进行DML操作

将数据插入 Kudu 表

impala 允许使用标准 SQL 语句将数据插入 Kudu 

插入单个值

创建表

CREATE TABLE my_first_table
(
id BIGINT,
name STRING,
PRIMARY KEY(id)
)
PARTITION BY HASH PARTITIONS 16
STORED AS KUDU;

此示例插入单个行

INSERT INTO my_first_table VALUES (50, "zhangsan");

查看数据

select * from my_first_table

 

 使用单个语句插入三行

INSERT INTO my_first_table VALUES (1, "john"), (2, "jane"), (3, "jim");

 

 批量插入Batch Insert

从 Impala 和 Kudu 的角度来看,通常表现最好的方法通常是使用 Impala 中的 SELECT FROM 语句导入数据
INSERT INTO my_first_table
SELECT * FROM temp1;

更新数据

UPDATE my_first_table SET name="xiaowang" where id =1 ;

删除数据

delete from my_first_table where id =2;

 

 

更改表属性

开发人员可以通过更改表的属性来更改 Impala 与给定 Kudu 表相关的元数据。这些属性包括表名, Kudu 主地址列表,以及表是否由 Impala (内部)或外部管理。

Rename an Impala Mapping Table ( 重命名 Impala 映射表 )

ALTER TABLE PERSON RENAME TO person_temp;

Rename the underlying Kudu table for an internal table ( 重新命名内部表的基础 Kudu 表 )

创建内部表:

CREATE TABLE kudu_student
(
CompanyId INT,
WorkId INT,
Name STRING,
Gender STRING,
Photo STRING,
PRIMARY KEY(CompanyId)
)
PARTITION BY HASH PARTITIONS 16
STORED AS KUDU
TBLPROPERTIES (
"kudu.master_addresses" = "node1:7051,node2:7051,node3:7051",
"kudu.table_name" = "student"
);

如果表是内部表,则可以通过更改 kudu.table_name 属性重命名底层的 Kudu 表

ALTER TABLE kudu_student SET TBLPROPERTIES("kudu.table_name" = "new_student");

 

 

Remapping an external table to a different Kudu table ( 将外部表重新映射到不同的 Kudu 表 )

如果用户在使用过程中发现其他应用程序重新命名了kudu表,那么此时的外部表需要重新映射到kudu上

创建一个外部表:

CREATE EXTERNAL TABLE external_table
STORED AS KUDU
TBLPROPERTIES (
"kudu.master_addresses" = "node1:7051,node2:7051,node3:7051",
"kudu.table_name" = "person"
);

重新映射外部表,指向不同的kudu表:

ALTER TABLE external_table
SET TBLPROPERTIES("kudu.table_name" = "hashTable")

上面的操作是:将external_table映射的PERSON表重新指向hashTable表

Change the Kudu Master Address ( 更改 Kudu Master 地址 )

ALTER TABLE my_table

SET TBLPROPERTIES("kudu.master_addresses" = "kudu-new-master.example.com:7051");

Change an Internally-Managed Table to External ( 将内部管理的表更改为外部 )

ALTER TABLE my_table SET TBLPROPERTIES("EXTERNAL" = "TRUE");

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯