CarbonData连接器

    • 该元数据仅用于表和列模式验证。carbondata元数据与数据文件存储在一起,通过Hive Metastore Service (HMS)访问。
    • 一种称为HiveQL/SparkSQL的查询语言。这种查询语言在分布式计算框架(如MapReduce或Spark)上执行。

    openLooKeng只使用前两个组件:数据和元数据。它不使用HiveQL/SparkSQL或Hive的任何部分执行环境。

    说明: openLooKeng支持CarbonData 2.0.1。

    配置

    Carbondata连接器支持Apache Hadoop 2.x及以上版本。

    用以下内容创建,以将carbondata连接器挂载为carbondata目录,将example.net:9083替换为Hive元存储 Thrift服务的正确主机和端口:

    对于基本设置,openLooKeng自动配置HDFS客户端,不需要任何配置文件。在某些情况下,例如使用联邦HDFS或NameNode高可用性时,需要指定额外的HDFS客户端选项,以便访问HDFS集群。要指定选项,添加hive.config.resources属性来引用HDFS配置文件:

    1. hive.config.resources=/etc/hadoop/conf/core-site.xml,/etc/hadoop/conf/hdfs-site.xml,/etc/hadoop/conf/yarn-site.xml,/etc/hadoop/conf/mapred-site.xml

    如果设置需要,只指定附加的配置文件。同时建议减少配置文件,使其具有所需的最小属性集,因为附加属性可能导致问题。

    所有openLooKeng节点上必须存在配置文件。如果用户正在引用现有的Hadoop配置文件,请确保将其复制到任何没有运行Hadoop的openLooKeng节点。

    HDFS用户名和权限

    在对CarbonData表执行任何CREATE TABLECREATE TABLE AS语句之前,openLooKeng应该能够访问Hive和HDFS。Hive的仓库目录由hive-site.xml中的配置变量hive.metastore.warehouse.dir指定,默认值为/user/hive/warehouse

    在不使用带HDFS的Kerberos时,openLooKeng会使用openLooKeng进程的操作系统用户来访问HDFS。例如,如果openLooKeng作为nobody运行,则openLooKeng将作为nobody访问HDFS。可以通过在openLooKeng 中设置HADOOP_USER_NAME系统属性来覆盖此用户名,用适当的用户名替换hdfs_user

    1. -DHADOOP_USER_NAME=hdfs_user

    hive用户通常可行,因为Hive通常随hive用户启动,并且该用户可以访问Hive仓库。

    无论何时修改openLooKeng访问HDFS的用户时,请移除HDFS上的/tmp/openlookeng-*/tmp/presto-*/tmp/hetu-*,因为新用户可能无法访问现有的临时目录。

    访问Kerberos身份验证保护的Hadoop集群

    HDFS和Hive元存储都支持Kerberos身份验证。但是,目前还不支持通过票据缓存进行Kerberos身份验证。

    Hive Thrift元存储配置属性说明

    CarbonData连接器在写入数据时,总是收集基本的统计信息(numFilesnumRowsrawDataSizetotalSize),默认还会收集列级统计信息:

    自动清理

    对Carbon表的清空操作完成后,将存在未使用的基础/陈旧文件夹和文件(例如:段文件夹、.segment和.lock文件),这些文件夹和文件都留在HDFS中。所以Carbondata自动清理功能是用来自动清理这些文件。段文件夹和.segment文件在进行插入、更新、删除和清空操作时,在清空操作完成60分钟后删除(.lock文件在48小时后删除)。

    CarbonData连接器支持查询和操作CarbonData表和模式(数据库)。大部分操作可以使用openLooKeng,而一些不常用的操作则需要直接使用Spark::Carbondata。

    创建新表orders

    1. CREATE TABLE orders (
    2. orderkey bigint,
    3. orderstatus varchar,
    4. totalprice double,
    5. orderdate varchar
    6. );

    支持的属性

    在指定位置创建新表orders

    1. orderkey bigint,
    2. orderstatus varchar,
    3. totalprice double,
    4. orderdate varchar
    5. )
    6. WITH ( location = '/store/path' );

    说明:

    • 如果路径不是完全限定域名,则会存储在默认文件系统中。

    Create Table as Select

    基于SELECT语句的输出创建新表

    1. CREATE TABLE delivered_orders
    2. AS SELECT * FROM orders WHERE orderstatus = 'Delivered';

    Insert

    将额外的行加载到orders表中:

    1. VALUES (BIGINT '101', 'Ready', 1000.25, '2020-06-08');

    通过覆盖现有行将额外的行加载到orders表中:

    1. INSERT OVERWRITE orders
    2. VALUES (BIGINT '101', 'Delivered', 1040.25, '2020-06-26');

    将额外的行与来自其他表的值加载到orders表中;

    1. INSERT INTO orders
    2. SELECT * FROM delivered_orders;

    更新表orders的所有行:

    1. UPDATE orders SET orderstatus = 'Ready';
    1. UPDATE orders SET orderstatus = 'Delivered'
    2. WHERE totalprice >1000 AND totalprice < 2000;

    Delete

    删除表orders中所有行:

    使用过滤条件的表orders

    1. DELETE FROM orders WHERE orderstatus = 'Not Available';

    Drop Table

    删除已存在的表。

    1. DROP TABLE orders;

    清空操作在Carbondata中转换为compaction。在Carbondata中有两种清空操作,MajorMinor

    VACUUM与Carbondata compaction的对应关系如下:

    • VACUUM TABLE table_name FULL转换为Major compaction,根据累积大小限制压缩段。

    • VACUUM TABLE table_name转换为Minor compaction,根据计数限制压缩段。

    以下操作会触发对名称为carbondata_table的表进行Minor Vacuum,将多个段合并到单个段:

    1. VACUUM TABLE carbondata_table;
    VACUUM FULL

    Major Vacuum根据段的大小合并段。只要被合并的所有段的总大小不超过某个值,这些段就会被压缩到一个新段。

    1. VACUUM TABLE carbondata_table FULL;
    支持AND WAIT

    可以使用以下命令以同步方式执行Minor Vacuum和Major Vacuum操作:

    1. VACUUM TABLE carbondata_table (FULL) AND WAIT;

    这还将显示表中正在压缩的行数。

    Carbondata连接器限制

    CarbonData连接器暂不支持如下操作:

    • 不支持CREATE TABLEsort_bybucketed_bypartitioned_by表属性。
    • 不支持物化视图。
    • 不支持数组、列表和映射等复杂数据类型。
    • 不支持更改表使用。
    • 分区表不支持和insert操作。