返回顶部
首页 > 资讯 > 数据库 >实战kudu集成impala
  • 451
分享到

实战kudu集成impala

实战kudu集成impala 2014-11-25 09:11:21 451人浏览 猪猪侠
摘要

推荐阅读: 论主数据的重要性(正确理解元数据、数据元) CDC+ETL实现数据集成方案 Java实现impala操作kudu 实战kudu集成impala impala基本介绍   impala是cloudera提供的一款高效率的

实战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整合

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

使用impala的shell控制台

  • 执行命令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创建新表时,它通常是内部表。

  • 使用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 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");

 

您可能感兴趣的文档:

--结束END--

本文标题: 实战kudu集成impala

本文链接: https://lsjlt.com/news/3806.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 实战kudu集成impala
    推荐阅读: 论主数据的重要性(正确理解元数据、数据元) CDC+ETL实现数据集成方案 Java实现impala操作kudu 实战kudu集成impala impala基本介绍   impala是cloudera提供的一款高效率的...
    99+
    2014-11-25
    实战kudu集成impala
  • 大数据实战中的Kudu、Flink和Mahout应用
    在大数据实战中,Kudu、Flink和Mahout都是常见的工具和框架。1. Kudu:Kudu是一个开源的列式存储系统,旨在提供快...
    99+
    2023-10-11
    大数据
  • SpringBoot集成GraphqlQuery实战示例
    目录概述场景模拟开发实战创建一个SpringBoot项目建立Java实体类编写Schema文件编写业务逻辑配置Graphql 端点测试安装插件查询小结概述 REST作为一种现代网络应...
    99+
    2024-04-02
  • spring cloud gateway集成hystrix实战篇
    spring cloud gateway集成hystrix 本文主要研究一下spring cloud gateway如何集成hystrix maven <dependenc...
    99+
    2024-04-02
  • Spring Boot集成Redis实战操作
    最近在使用Spring Boot,发现其功能真是强大,可以快速的集成很多的组件功能,非常方便:今天就来介绍下,如何集成Redis。定义Redis 是一个高性能的key-value数据库。它支持存储的value类型很多,包括string(字符...
    99+
    2023-06-02
  • 实战SpringBoot集成JWT实现token验证
    目录环境搭建1、新建一个SpringBoot项目Jwt-Demo,引入项目后面需要用到的jar包2、数据库结构3、配置文件application.properties4、Entity...
    99+
    2024-04-02
  • SpringBoot集成kafka全面实战记录
    本文是SpringBoot+Kafka的实战讲解,如果对kafka的架构原理还不了解的读者,建议先看一下《大白话kafka架构原理》、《秒懂kafka HA(高可用)》两篇文章。 一...
    99+
    2024-04-02
  • SpringBoot集成ActiveMQ的实战全过程
    目录前言JMS规范ActiveMQ介绍Spring Boot集成ActiveMQ创建项目并引入依赖配置文件队列模式实例订阅模式实例同时支持两种形式其他事项参考文章: 总结前言 在项目...
    99+
    2024-04-02
  • 微信登录集成指南:PHPCMS实战
    标题:微信登录集成指南:PHPCMS实战 在今天的互联网时代,社交化登录已经成为网站必备的功能之一。微信作为国内最流行的社交平台之一,其登录功能也被越来越多的网站所采用。本文将介绍如何...
    99+
    2024-04-02
  • springboot集成junit编写单元测试实战
    目录一:查看jar包版本号是否为junit4;二:实战应用:三:扩展在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆...
    99+
    2024-04-02
  • go-micro集成RabbitMQ实战和原理详解
    目录Broker的核心功能发布订阅go-micro集成RabbitMQ实战启动一个RabbitMQ编写收发函数编写主体代码go-micro集成RabbitMQ的处理流程填的几个坑不能...
    99+
    2024-04-02
  • Redis集群实战
                       Redis基础到集群实战笔记   &n...
    99+
    2024-04-02
  • 【Redis】集群NetCore实战
    介绍NetCore如何使用Redis集群 环境准备  Redis集群(Windows集群搭建) 启动Redis集群,给每个节点加上Title start "Redis - 6379" /min re...
    99+
    2017-02-19
    【Redis】集群NetCore实战
  • 3-2. SpringBoot项目集成【用户身份认证】实战 【实战核心篇】基于JWT生成和校验Token
    前言 书接上文 技术选型篇,我们做了【用户身份认证】的技术选型说明,对基于Session、Token、JWT的方案进行了详细的对比分析,详细说明了它们都是什么和各自的优缺点!这些是实战的基础,还没看过...
    99+
    2023-09-03
    spring boot java jwt token 用户身份认证 原力计划
  • 数据采集实战(一)-
    概述 最近在学习python的各种数据分析库,为了尝试各种库中各种分析算法的效果,陆陆续续爬取了一些真实的数据来。 顺便也练习练习爬虫,踩了不少坑,后续将采集的经验逐步分享出来,希望能给后来者一些参考,也希望能够得到先驱者的指点! 采集工...
    99+
    2017-02-11
    数据采集实战(一)-
  • 数据采集实战(二)-
    1. 概述 京粉(https://union.jd.com/)是京东联盟下的网站,通过分享其中的商品链接可以赚取佣金,类似淘客联盟。 采集京粉的商品,既可以练习 puppeteer的使用,平时想在京东购物时,也能用得上(采集看看...
    99+
    2015-01-09
    数据采集实战(二)-
  • 数据采集实战(三)-
    1. 概述 王者荣耀是一直都挺喜欢的一个手游,玩了好几年,最近一段开始喜欢看比赛,所以想着采集点数据看看各个战队或者选手的情况。 顺便也练习练习 puppeteer 的使用。 数据来源于:尚牛电竞 。 2. 采集流程 王者荣耀最近正在进行...
    99+
    2020-07-29
    数据采集实战(三)-
  • 数据采集实战(四)-
    1. 概述 前段时间在看一本很多人推荐的线性代数教材《线性代数应该这样学》第三版,这一版每个章节都有大量的习题。 官方网站上虽然按照章节提供了习题的答案,一来因为网站是国外的,访问不流畅,二来答案中还夹杂着广告,影响查看。 所以,想试着将...
    99+
    2019-04-29
    数据采集实战(四)-
  • 数据采集实战(五)-
    1. 概述 现在学校越来越重视孩子课外知识的掌握,给孩子挑选课外书一般都是参考学校或者家长之间的推荐。 有时,也会想看看在儿童阶段,目前到底流行的是些什么样的书。 ​ 于是,就简单写了这个小爬虫,采集了畅销童书的前20名。 要想采集更多的...
    99+
    2015-05-29
    数据采集实战(五)-
  • Python采集大学教务系统成绩单实战示例
    目录前言采集数据发送请求获取数据保存数据总结前言 采集教务系统成绩单是一个非常有意义的项目。在现代教育中,教务系统已经成为了学校管理和教学工作的重要组成部分。然而,由于各种原因,教务...
    99+
    2023-05-16
    Python采集教务系统成绩单 Python 采集成绩
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作