写点什么

云小课|MRS 基础原理之 CarbonData 入门

  • 2022-10-29
    中国香港
  • 本文字数:2469 字

    阅读完需:约 8 分钟

云小课|MRS基础原理之CarbonData入门

本文分享自华为云社区《【云小课】EI第40课 MRS基础原理之CarbonData入门》,作者:Hello EI。



CarbonData 是一种新型的 Apache Hadoop 本地文件格式,使用先进的列式存储、索引、压缩和编码技术,以提高计算效率,有助于加速超过 PB 数量级的数据查询,可用于更快的交互查询。同时,CarbonData 也是一种将数据源与 Spark 集成的高性能分析引擎。



使用 CarbonData 的目的是对大数据即席查询提供超快速响应。从根本上说,CarbonData 是一个 OLAP 引擎,采用类似于 RDBMS 中的表来存储数据。用户可将大量(10TB 以上)的数据导入以 CarbonData 格式创建的表中,CarbonData 将以压缩的多维索引列格式自动组织和存储数据。数据被加载到 CarbonData 后,就可以执行即席查询,CarbonData 将对数据查询提供秒级响应。



CarbonData 将数据源集成到 Spark 生态系统,用户可使用 Spark SQL 执行数据查询和分析。也可以使用 Spark 提供的第三方工具 JDBCServer 连接到 Spark SQL。


本文以从 CSV 文件加载数据到 CarbonData Table 为例介绍创建 CarbonData table、加载数据,以及查询数据的快速入门流程。


使用 CarbonData 需要安装 Spark2x 组件,并安装 Spark2x 的客户端。


  • MRS 集群的创建可参考创建集群,例如购买一个 MRS 3.1.0 版本集群。

  • 安装 Spark2x 客户端,可参考安装客户端,例如客户端安装目录为:“/opt/client”。

  • 对于安全模式的集群(开启了 Kerberos 认证),在使用 CarbonData 时,需要创建一个具有访问 CarbonData 权限的用户,可参考创建用户,用户组选择 hadoop 和 hive,主组选择 hadoop,例如创建人机用户“testuser”。

准备 CSV 文件


准备加载到 CarbonData Table 的 CSV 文件。


  1. 在本地准备 CSV 文件,文件名为:test.csv。13418592122,1001,MAC 地址,2017-10-23 15:32:30,2017-10-24 15:32:30,62.50,74.56 13418592123,1002,MAC 地址,2017-10-23 16:32:30,2017-10-24 16:32:30,17.80,76.28 13418592124,1003,MAC 地址,2017-10-23 17:32:30,2017-10-24 17:32:30,20.40,92.94 13418592125,1004,MAC 地址,2017-10-23 18:32:30,2017-10-24 18:32:30,73.84,8.58 13418592126,1005,MAC 地址,2017-10-23 19:32:30,2017-10-24 19:32:30,80.50,88.02 13418592127,1006,MAC 地址,2017-10-23 20:32:30,2017-10-24 20:32:30,65.77,71.24 13418592128,1007,MAC 地址,2017-10-23 21:32:30,2017-10-24 21:32:30,75.21,76.04 13418592129,1008,MAC 地址,2017-10-23 22:32:30,2017-10-24 22:32:30,63.30,94.40 13418592130,1009,MAC 地址,2017-10-23 23:32:30,2017-10-24 23:32:30,95.51,50.17 13418592131,1010,MAC 地址,2017-10-24 00:32:30,2017-10-25 00:32:30,39.62,99.13

  2. 将 CSV 文件导入客户端所在节点,例如“/opt”目录下。

  3. 进入客户端目录,上传 CSV 文件到 HDFS 的“/data”目录。cd /opt/client source ./bigdata_env source ./Spark2x/component_env kinit sparkuser hdfs dfs -put /opt/test.csv /data/

连接到 CarbonData


在对 CarbonData 进行任何一种操作之前,首先需要连接到 CarbonData。


  • 使用 Spark SQL 或 Spark shell 连接到 Spark 并执行 Spark SQL 命令。

  • 开启 JDBCServer 并使用 JDBC 客户端(例如,Spark Beeline)连接。cd /opt/client/Spark2x/spark/bin ./spark-beeline

创建 CarbonData Table


在 Spark Beeline 被连接到 JDBCServer 之后,需要创建一个 CarbonData table 用于加载数据和执行查询操作。


例如下面是创建一个简单的表的命令:


create table  x1 (imei string, deviceInformationId int, mac string, productdate timestamp, updatetime timestamp, gamePointId double, contractNumber double) STORED AS carbondata TBLPROPERTIES ('SORT_COLUMNS'='imei,mac');
复制代码


命令执行结果如下:


+---------+| Result  |+---------++---------+No rows selected (1.093 seconds)
复制代码

加载数据到 CarbonData Table


创建 CarbonData table 之后,可以从 CSV 文件加载数据到所创建的表中。


表的列名需要与 CSV 文件的列名匹配。


LOAD DATA inpath 'hdfs://hacluster/data/test.csv' into table x1 options('DELIMITER'=',', 'QUOTECHAR'='"','FILEHEADER'='imei, deviceinformationid,mac, productdate,updatetime, gamepointid,contractnumber');
复制代码


其中,“test.csv”为准备的 CSV 文件,“x1”为示例的表名。


命令执行结果如下:


+------------+|Segment ID  |+------------+|0           |+------------+No rows selected (3.039 seconds)
复制代码

在 CarbonData 中查询数据


创建 CarbonData table 并加载数据之后,可以执行所需的数据查询操作。以下为一些查询操作举例。

获取记录数


为了获取在 CarbonData table 中的记录数,可以运行以下命令。


select count(*) from x1;
复制代码

使用 Groupby 查询


为了获取不重复的 deviceinformationid 记录数,可以运行以下命令。


select deviceinformationid,count (distinct deviceinformationid) from x1 group by deviceinformationid;
复制代码

用 Filter 查询


为了获取特定 deviceinformationid 的记录,可以运行以下命令。


select * from x1 where deviceinformationid='1010';
复制代码


在执行数据查询操作后,如果查询结果中某一列的结果含有中文字等非英文字符,会导致查询结果中的列不能对齐,这是由于不同语言的字符在显示时所占的字宽不尽相同。

在 Spark-shell 上使用 CarbonData


创建 CarbonData table 并加载数据之后,可以执行所需的查询操作,例如 filters,groupby 等。


用户若需要在 Spark-shell 上使用 CarbonData,需通过如下方式创建 CarbonData Table,加载数据到 CarbonData Table 和在 CarbonData 中查询数据的操作。


spark.sql("CREATE TABLE x2(imei string, deviceInformationId int, mac string, productdate timestamp, updatetime timestamp, gamePointId double, contractNumber double) STORED AS carbondata")spark.sql("LOAD DATA inpath 'hdfs://hacluster/data/x1_without_header.csv' into table x2 options('DELIMITER'=',', 'QUOTECHAR'='\"','FILEHEADER'='imei, deviceinformationid,mac, productdate,updatetime, gamepointid,contractnumber')")spark.sql("SELECT * FROM x2").show()
复制代码


点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
云小课|MRS基础原理之CarbonData入门_大数据_华为云开发者联盟_InfoQ写作社区