实战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的架构以及查询计划

  • Impalad

    • 基本是每个DataNode上都会启动一个Impalad进程,Impalad主要扮演两个角色:

      • Coordinator:

        • 负责接收客户端发来的查询,解析查询,构建查询计划
        • 把查询子任务分发给很多Executor,收集Executor返回的结果,组合后返回给客户端
        • 对于客户端发送来的DDL,提交给Catalogd处理
      • Executor:
        • 执行查询子任务,将子任务结果返回给Coordinator
  • Catalogd
    • 整个集群只有一个Catalogd,负责所有元数据的更新和获取
  • StateStored
    • 整个集群只有一个Statestored,作为集群的订阅中心,负责集群不同组件的信息同步
    • 跟踪集群中的Impalad的健康状态及位置信息,由statestored进程表示,它通过创建多个线程来处理Impalad的注册订阅和与各Impalad保持心跳连接,各Impalad都会缓存一份State Store中的信息,当State Store离线后(Impalad发现State Store处于离线时,会进入recovery模式,反复注册,当State Store重新加入集群后,自动恢复正常,更新缓存数据)因为Impalad有State Store的缓存仍然可以工作,但会因为有些Impalad失效了,而已缓存数据无法更新,导致把执行计划分配给了失效的Impalad,导致查询失败。

使用impala操作kudu整合

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

2、使用impala的shell控制台

  • 执行命令impala-shell

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

创建kudu表

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

  • 使用impala创建内部表:

    CREATE TABLE my_first_table
    (
    id BIGINT,
    name STRING,
    PRIMARY KEY(id)
    )
    PARTITION BY HASH PARTITIONS 16
    STORED AS KUDU
    TBLPROPERTIES (
    ‘kudu.master_addresses‘ = ‘node1:7051,node2:7051,node3:7051‘,
    ‘kudu.table_name‘ = ‘my_first_table‘
    );

    在 CREATETABLE 语句中,必须首先列出构成主键的列。

  • 此时创建的表是内部表,从impala删除表的时候,在底层存储的kudu也会删除表。
  • drop table if exists my_first_table;

外部表

外部表(创建者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<ColumnSchema> columns = new LinkedList<ColumnSchema>();

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<String> parcols = new LinkedList<String>();

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‘);

原文地址:https://www.cnblogs.com/Javame/p/12222662.html

时间: 2024-08-30 14:35:29

实战kudu集成impala的相关文章

实战SpringBoot集成JWT实现token验证

作者:意识流丶 www.jianshu.com/p/e88d3f8151db JWT官网:https://jwt.io/ JWT(Java版)的github地址:https://github.com/jwtk/jjwt 什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).定义了一种简洁的,自包含的方法用于通信双方之间以JSON对象的形式安全的传递信息.因为数字签名的存在,这些信息是可信的,JWT可以使用

机器学习day12 机器学习实战adaboost集成方法与重新进行疝马病的预测

今天终于完成了分类器的学习,SVM基本不怎么会,很是头疼,先放一下吧,有机会问问大神讲解一下.接下来的几天进行监督学习回归部分的学习,先看看adaboost的理解. 我们再决定一个重要的事情时,往往不是听取一个人的意见,听取大家的意见,然后投票表决最终结果.这一个特点也可以应用于机器学习的算法中来,每一个人都是弱的分类器,若是指一个人的力量很小,很多人汇集在一起就构成了强分类器.好比政府的投票系统. 有一个有趣的现象,若每个人都有51%的几率选择正确,则汇集很多人的投票信息之后选择正确的人比选择

Android实战——轻松集成百度自动更新SDK,只需3步

轻松集成百度自动更新SDK,只需3步 集成百度自动更新SDK前提: 1.需要上线作品进行测试,本人用自己上线的作品进行了测试. 2.需要上线的作品defaultConfig中的versionCode大于手机端的versionCode,本人上线的作品versionCode为2,测试机为1. 本人作品:一款免下载,免安装,即点即用的应用收纳集,应用袋:http://shouji.baidu.com/software/9529251.html 步骤一:在百度开发者平台选择下载百度自动更新SDK,htt

[原创]kudu vs parquet, impala vs spark Benchmark

测试环境 节点: 2 台主节点,6台计算节点 机器配置: 16个物理核 128G内存 12*3T磁盘 操作系统: redhat 7.2 版本: CDH 5.7.1-1.cdh5.7.1.p0.11 impala_kudu 2.7.0-1.cdh5.9.0.p0.23 kudu 0.9.1-1.kudu0.9.1.p0.32 spark 2.0.0 对照组: Spark on Parquet Impala on Parquet Impala on Kudu 测试数据.语句.场景 TPC-DS,是用

在CDH5.14.2 中启用kudu的配置与验证

在CDH5.14.2 中启用kudu的配置 标签(空格分隔): 大数据平台构建 一: 系统平台介绍 二: 安装kudu的集成 一: 系统平台介绍 1.1. 关于kudu的介绍 Kudu是Cloudera开源的新型列式存储系统,是Apache Hadoop生态圈的新成员之一(incubating),专门为了对快速变化的数据进行快速的分析,填补了以往Hadoop存储层的空缺. Hadoop生态系统有很多组件,每一个组件有不同的功能.在现实场景中,用户往往需要同时部署很多Hadoop工具来解决同一个问

CDH impala安装

环境 CDH版本:5.12.1 添加impala parcel 1.菜单“主机”-->Parcel-->配置-->远程 Parcel 存储库 URL,点击添加按钮,添加一个URL,https://archive.cloudera.com/beta/impala-kudu/parcels/latest/ (因为后续要和kudu集成,所以使用这个url) 2.将IMPALA_KUDU分配并激活. 添加impala服务 1.在集群中添加impala服务 2.选择一组依赖关系(包括kudu) 3

0030-如何在CDH中安装Kudu&amp;Spark2&amp;Kafka

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看. 1.概述 在CDH的默认安装包中,是不包含Kafka,Kudu和Spark2的,需要单独下载特定的Parcel包才能安装相应服务.本文档主要描述在离线环境下,在CentOS6.5操作系统上基于CDH5.12.1集群,使用Cloudera Manager通过Parcel包方式安装Kudu.Spark2和Kafka的过程. 内容概括 Kudu安装 Spark2安装 Kafka安装 服务验证 测试环境 操作系统版本:CentOS6.5 C

列式存储数据库-kudu

一.kudu概念 Apache Kudu是由Cloudera开源的存储引擎,可以同时提供低延迟的随机读写和高效的数据分析能力.Kudu支持水平扩展,使用Raft协议进行一致性保证,并且与Cloudera Impala和Apache Spark等当前流行的大数据查询和分析工具结合紧密. 这是一个为块数据的快分析而生的存储架构 二.kudu架构Master:master节点负责整个集群的元数据管理和服务协调.它承担着以下功能:作为catalog manager,master节点管理着集群中所有tab

最新短视频网站实战教程 node.js+ES+Koa2基础到精通项目实战课程

下载地址:百度网盘下载 node.js+ES+Koa2项目实战课,课程目录很多,只展示了主要章节课程目录第1章 2018 年的编程姿势1-0 课前必看.mp41-1 koa2导学.mp41-2 安装跟进最新 node.js 版本.mp41-3 毫不犹豫的使用promise.mp41-4 使用babel 编译es7 async function.mp4 第2章 必会 ES6-7 语法特性与规范2-0 课前必读.mp42-1 生成器函数.mp42-2 co 库执行 promise 和 generat