關鍵字:elastichsearch、crate.io、sql
之前介紹過ElasticSearch,它部署簡單,搜索聚合功能強大,而且和其他大數據框架整合起來使用,有一點比較不方便,就是查詢都需要通過JSON作爲請求Body來提交查詢,請求響應也是JSON,作爲習慣使用SQL的我,迫不及待的試用了一下Crate(crate.io),它是在ElasticSearch之上封裝了SQL接口,用戶可以通過SQL語句來完成搜索和統計,支持的SQL語法還蠻多的,很想MySQL。
本文記錄一下Crate的安裝配置(兩個節點的Crate集羣)和簡單使用。
下載和安裝Crate
可以從https://cdn.crate.io/downloads/releases/nightly/下載crate的最新版本。
下載後解壓到指定目錄即可。
配置Crate
Crate的配置和ElasticSearch非常類似,以兩個節點的Crate集羣爲例。
cd $CRATE_HOME/conf
編輯crate.yml,修改以下參數:
- cluster.name: lxw1234_crate
- node.name: crate_node_17
- index.number_of_replicas: 2
- path.conf: /home/liuxiaowen/crate-0.54.0/config
- path.data: /home/liuxiaowen/crate-0.54.0/data
- path.work: /home/liuxiaowen/crate-0.54.0/tmp
- path.logs: /home/liuxiaowen/crate-0.54.0/logs
- path.plugins: /home/liuxiaowen/crate-0.54.0/plugins
- network.bind_host: 172.16.212.17
- network.publish_host: 172.16.212.17
- network.host: 172.16.212.17
- gateway.recover_after_nodes: 2
- discovery.zen.minimum_master_nodes: 2
- gateway.expected_nodes: 2
- discovery.zen.ping.timeout: 10s
- discovery.zen.fd.ping_interval: 10s
編輯$CRATE_HOME/bin/crate.in.sh,配置節點使用的內存,根據機器自身內存而定,最大內存一般不要超過物理內存的50%;
CRATE_MIN_MEM=8g
CRATE_MAX_MEM=16g
配置JAVA_HOME,我這裏使用了jdk1.8.0_65
啓動Crate
在兩個節點上,
cd
使用Crate命令行
類似於其他數據庫,Crate提供了一個命令行來供用戶執行SQL查詢。
cd $CRATE_HOME/bin
執行./crash進入命令行;
在Crate命令行使用\c 172.16.212.17:4200連接到Crate;
創建表
在Crate命令行使用下面的SQL語句創建表:
- CREATE TABLE sitelog (
- cookieid STRING,
- siteid STRING,
- visit_id STRING,
- pv LONG,
- is_return_cookie INTEGER,
- is_bounce_visit INTEGER,
- visit_stay_times INTEGER,
- visit_view_page_cnt INTEGER,
- region STRING,
- city STRING
- );
- cr> show tables;
- +------------+
- | table_name |
- +------------+
- | sitelog |
- +------------+
- SHOW 1 row in set (0.019 sec)
- cr>
從外部批量加載數據
crate提供了一個COPY命令,用於從外部文本文件加載數據到表中,但只支持JSON格式的文本,比如:
- [liuxiaowen@dev sitelog]$ head sitelog_000005_0_9.json
- {"cookieid" : "DE9C68B401DBE5566A9676","siteid" : "633","visit_id" : "805cdab5-8361-4134-9bbe-7c54771d4dc8","pv" : 1,
- "is_return_cookie" : 0,"is_bounce_visit" : 1,"visit_stay_times" : 0,"visit_view_page_cnt" : 1,"region" : "江蘇","city" : "徐州"}
- {"cookieid" : "DE9C68B40422A9566A68F2","siteid" : "633","visit_id" : "7f844323-e0c0-48b4-bc1b-69055ac3c308","pv" : 1,
- "is_return_cookie" : 0,"is_bounce_visit" : 1,"visit_stay_times" : 0,"visit_view_page_cnt" : 1,"region" : "江蘇","city" : "徐州"}
- {"cookieid" : "DE9C68B4066B7F566A6F36","siteid" : "633","visit_id" : "045c3a13-41bf-45c4-93ce-7725a00ada5f","pv" : 1,
- "is_return_cookie" : 0,"is_bounce_visit" : 1,"visit_stay_times" : 0,"visit_view_page_cnt" : 1,"region" : "江蘇","city" : "徐州"}
JSON對象中的k需要和表的字段名稱相同。
在Crate命令行使用COPY命令加載數據:
加載的速度還是非常快的。
SQL查詢
可以從Crate官網上查看支持的SQL語法:https://crate.io/docs/reference/sql/dql.html
值得關注的是,Crate在做COUNT DISTINCT查詢的時候,查出來的是真實去重後的數,沒有誤差,但查詢響應時間要慢一些,有待研究。
Crate的監控界面
Crate提供了一個比較炫的監控界面,非常有用,Crate集羣啓動後,在瀏覽器輸入:http://172.16.212.102:4200/admin/ 進入監控界面:
OverView頁面:集羣整體健康及負載狀況。
Tables頁面:Crate中所有Table及Schema的情況。
Cluster頁面:Crate集羣的節點列表及每個節點的健康狀況。
Crate的不足
目前只是簡單安裝試用了一下,發現了幾點不足:
- 不支持子查詢;
- 不支持諸如CASE WHEN、IF ELSE的邏輯判斷語法,特別是在聚合函數中;
- 內置的ElasticSearch版本太低;
- 沒有和其他大數據組件的整合。
但它的查詢性能還是很不錯的,關鍵是SQL方便啊。
您可以關注 lxw的大數據田地 ,或者 加入郵件列表 ,隨時接收博客更新的通知郵件。
如果覺得本博客對您有幫助,請 贊助作者 。
轉載請註明:lxw的大數據田地 » SQL for ElasticSearch–Crate.io安裝配置和體驗
</article>