从零开始使用CarbonData
MRS 3.x之前版本参考本章节,MRS 3.x及后续版本请参考使用CarbonData(MRS 3.x及之后版本)。
本章节介绍使用Spark CarbonData的基本流程,所有任务场景基于spark-beeline环境。CarbonData快速入门包含以下任务:
- 连接到Spark
- 创建CarbonData表
- 加载数据到CarbonData表
- 在CarbonData中查询数据
前提条件
已安装客户端,具体参见使用MRS客户端。
操作步骤
- 连接到Spark CarbonData。
- 根据业务情况,准备好客户端,使用root用户登录安装客户端的节点。
例如在Master2节点更新客户端,则在该节点登录客户端,具体参见使用MRS客户端。
- 切换用户与配置环境变量。
source /opt/client/bigdata_env
- 启用Kerberos认证的集群,执行以下命令认证用户身份。未启用Kerberos认证集群无需执行。
用户需要加入用户组hadoop、hive,主组hadoop。
- 执行以下命令,连接到Spark运行环境:
- 根据业务情况,准备好客户端,使用root用户登录安装客户端的节点。
- 执行命令创建CarbonData表。
CarbonData表可用于加载数据和执行查询操作,例如执行以下命令创建CarbonData表:
CREATE TABLE x1 (imei string, deviceInformationId int, mac string, productdate timestamp, updatetime timestamp, gamePointId double, contractNumber double)
STORED BY 'org.apache.carbondata.format'
TBLPROPERTIES ('DICTIONARY_EXCLUDE'='mac','DICTIONARY_INCLUDE'='deviceInformationId');
命令执行结果如下:
+---------+--+ | result | +---------+--+ +---------+--+ No rows selected (1.551 seconds)
- 从CSV文件加载数据到CarbonData表。
根据所要求的参数运行命令从CSV文件加载数据,且仅支持CSV文件。LOAD命令中配置的CSV列名,需要和CarbonData表列名相同,顺序也要对应。CSV文件中的数据的列数,以及数据格式需要和CarbonData表匹配。
文件需要保存在HDFS中。用户可以将文件上传到OBS,并在MRS管理控制台“文件管理”将文件从OBS导入HDFS,具体请参考导入导出数据。
如果集群启用了Kerberos认证,则需要在工作环境准备CSV文件,然后可以使用开源HDFS命令,参考5将文件从工作环境导入HDFS,并设置Spark组件用户在HDFS中对文件有读取和执行的权限。
例如,HDFS的“tmp”目录有一个文件“data.csv”,内容如下:
x123,111,dd,2017-04-20 08:51:27,2017-04-20 07:56:51,2222,33333
执行导入命令:
LOAD DATA inpath 'hdfs://hacluster/tmp/data.csv' into table x1 options('DELIMITER'=',','QUOTECHAR'='"','FILEHEADER'='imei, deviceinformationid,mac,productdate,updatetime,gamepointid,contractnumber');
命令执行结果如下:
+---------+--+ | Result | +---------+--+ +---------+--+ No rows selected (3.039 seconds)
- 在CarbonData中查询数据。
- 获取记录数
为了获取在CarbonData table中的记录数,可以执行以下命令。
select count(*) from x1;
- 使用Groupby查询
为了获取不重复的“deviceinformationid”记录数,可以执行以下命令。
select deviceinformationid,count (distinct deviceinformationid) from x1 group by deviceinformationid;
- 使用条件查询
为了获取特定deviceinformationid的记录,可以执行以下命令。
select * from x1 where deviceinformationid='111';
在执行数据查询操作后,如果查询结果中某一列的结果含有中文字等其他非英文字符,会导致查询结果中的列不能对齐,这是由于不同语言的字符在显示时所占的字宽不尽相同。
- 获取记录数
- 执行以下命令退出Spark运行环境。
!quit