微信搜索lxw1234bigdata | 邀请体验:数阅–数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

SQL for ElasticSearch–Crate.io安装配置和体验

ElasticSearch lxw1234@qq.com 26232℃ 5评论

关键字: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_HOME/bin
执行./crate -d 在后台启动Crate,之后可以在配置的path.logs目录下,看到以${ cluster.name }.log命名的日志。

使用Crate命令行

类似于其他数据库,Crate提供了一个命令行来供用户执行SQL查询。
cd $CRATE_HOME/bin
执行./crash进入命令行;

crate

在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命令加载数据:

crate

加载的速度还是非常快的。

SQL查询

可以从Crate官网上查看支持的SQL语法:https://crate.io/docs/reference/sql/dql.html

crate

crate

值得关注的是,Crate在做COUNT DISTINCT查询的时候,查出来的是真实去重后的数,没有误差,但查询响应时间要慢一些,有待研究。

Crate的监控界面

Crate提供了一个比较炫的监控界面,非常有用,Crate集群启动后,在浏览器输入:http://172.16.212.102:4200/admin/ 进入监控界面:

OverView页面:集群整体健康及负载状况。

crate

Tables页面:Crate中所有Table及Schema的情况。

crate

Cluster页面:Crate集群的节点列表及每个节点的健康状况。

crate

Crate的不足

目前只是简单安装试用了一下,发现了几点不足:

  1. 不支持子查询;
  2. 不支持诸如CASE WHEN、IF ELSE的逻辑判断语法,特别是在聚合函数中;
  3. 内置的ElasticSearch版本太低;
  4. 没有和其他大数据组件的整合。

但它的查询性能还是很不错的,关键是SQL方便啊。

您可以关注 lxw的大数据田地 ,或者 加入邮件列表 ,随时接收博客更新的通知邮件。

 

如果觉得本博客对您有帮助,请 赞助作者

转载请注明:lxw的大数据田地 » SQL for ElasticSearch–Crate.io安装配置和体验

喜欢 (13)
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(5)个小伙伴在吐槽
  1. 卧槽。crate基本上模仿了es,要是能做成Plugin方式支持es就好了。
    1232015-12-17 11:01 回复
  2. Apache Drill 恐怕是目前支持最多ANSI SQL的SQL-On-Hadoop的framework了. 不仅支持聚合函数,distinct, group by, having 语法,而且支持Crate不支持的子查询. 另外它能够查询flat file,CSV file,JSON 嵌套格式, 以及存储在Amazon S3, MongoDB, HBase Hive table 等地的数据.
    QW代码小农2015-12-24 09:14 回复
  3. Crate 怎么配置链接外部的es集群,而不是内置自带的?
    霜月2016-10-27 17:20 回复
  4. 没看出来 这和es什么关系
    喜上眉梢+2017-11-09 18:44 回复
  5. 生产中谁用谁傻逼!!!!
    呵呵2019-04-10 15:33 回复