客快物流大数据项目(七十五):使用impala创建kudu表

Posted Lansonli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了客快物流大数据项目(七十五):使用impala创建kudu表相关的知识,希望对你有一定的参考价值。

文章目录

使用impala创建kudu表

一、impala操作kudu前的准备

二、创建kudu内部表

三、​​​​​​​创建kudu外部表


使用impala创建kudu表

一、impala操作kudu前的准备

  • 需要先启动hdfs、hive、kudu、impala
  • 使用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;

使用Impala创建新的Kudu表时,可以将该表创建为内部表或外部表。

二、​​​​​​​创建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.num_tablet_replicas' = '1'
);

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

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

三、​​​​​​​创建kudu外部表

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

使用java创建一个kudu表:

import org.apache.kudu.ColumnSchema;
import org.apache.kudu.Schema;
import org.apache.kudu.Type;
import org.apache.kudu.client.CreateTableOptions;
import org.apache.kudu.client.KuduClient;
import org.apache.kudu.client.KuduException;

import java.util.LinkedList;
import java.util.List;

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 = "node2";
        // 创建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')

 


  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

以上是关于客快物流大数据项目(七十五):使用impala创建kudu表的主要内容,如果未能解决你的问题,请参考以下文章

客快物流大数据项目(七十):Impala入门介绍

客快物流大数据项目(七十二):Impala sql 语法

客快物流大数据项目(七十三):Impala数据导入方式

客快物流大数据项目(七十六):使用Impala对kudu进行DML操作

客快物流大数据项目(七十九):Impala映射kudu表

客快物流大数据项目(七十一):impala-shell命令参数