閱識風雲是華為雲信息大咖,擅長將複雜信息多元化呈現,其出品的一張圖(雲圖說)、深入淺出的博文(雲小課)或短視頻(雲視廳)總有一款能讓您快速上手華為雲。更多精彩內容請單擊此處。 摘要:CarbonData是一種新型的Apache Hadoop本地文件格式,使用先進的列式存儲、索引、壓縮和編碼技術,以提 ...
閱識風雲是華為雲信息大咖,擅長將複雜信息多元化呈現,其出品的一張圖(雲圖說)、深入淺出的博文(雲小課)或短視頻(雲視廳)總有一款能讓您快速上手華為雲。更多精彩內容請單擊此處。
摘要:CarbonData是一種新型的Apache Hadoop本地文件格式,使用先進的列式存儲、索引、壓縮和編碼技術,以提高計算效率,有助於加速超過PB數量級的數據查詢,可用於更快的交互查詢。同時,CarbonData也是一種將數據源與Spark集成的高性能分析引擎。
本文分享自華為雲社區《【雲小課】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快速入門中的“創建集群”章節,例如購買一個MRS 3.1.0版本集群。
- 安裝Spark2x客戶端,可參考MRS用戶指南中的“安裝客戶端”章節,例如客戶端安裝目錄為:“/opt/client”。
- 對於安全模式的集群(開啟了Kerberos認證),在使用CarbonData時,需要創建一個具有訪問CarbonData許可權的用戶,可參考MRS用戶指南中的“創建用戶”章節,用戶組選擇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 ./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
好了,本期雲小課就介紹到這裡,快去體驗MapReduce(MRS)更多功能吧!猛戳這裡