跟着官方文档看,外加查到的一些资料
官方文档戳这里,中文版戳这里(安装方法完全可以按照tutorial,很详细,开启服务记住这一句就ok:bin/drill-embedded)
FYI:本文和大部分介绍drill的文字一样无聊,,可能drill都是这么点东西,而且是同一版翻译
Running in embedded mode
安装完可以通过http://localhost:8047/ 访问,也可以:
- cd (path)/drill
- bin/sqlline -u jdbc:drill:zk=local
- Run a query (below).
如果想修改配置,进入drill下conf文件夹,drill-env.sh中可以添加配置信息
简介
- Apache Drill是一个低延迟的分布式海量数据(涵盖结构化、半结构化以及嵌套数据)交互式查询引擎。分布式、无模式(schema-free)
- 是Google Dremel的开源实现,本质是一个分布式的mpp(大规模并行处理)查询层,支持SQL及一些用于NoSQL和Hadoop数据存储系统上的语言
- 更快查询海量数据,通过对PB字节(2的50次方字节)数据的快速扫描完成相关分析
- Drill 提供即插即用,在现有的 Hive 和 HBase中可以随时整合部署。
- 是MR交互式查询能力不足的补充
- 数据模型,嵌套
- 列式存储
- 结合了web搜索和并行DBMS技术
注:Hive (Hive就是在Hadoop上架了一层SQL接口,可以将SQL翻译成MapReduce去Hadoop上执行,这样就使得数据开发和分析人员很方便的使用SQL来完成海量数据的统计和分析,而不必使用编程语言开发MapReduce那么麻烦。)
有一套笔记讲Hive,戳这里
Drill 核心服务是 Drillbit,
Drillbit运行在集群的每个数据节点上时,可以最大化执行查询,不需要网络或是节点之间移动数据
接口
- Drill Shell
- Drill Web Console
- ODBC/JDBC
- C++ API
动态发现Schema
处理过程中会发现schema,
灵活的数据模型
允许数据属性嵌套,从架构角度看,Drill提供了灵活的柱状数据模型
无集中式元数据
不依赖单个的Hive仓库,可以查询多个Hive仓库,将数据结果整合
查询执行
提交一个Drill查询,客户端或应用程序会按照查询格式发一个SQL语句到Drillbit,Drillbit是一个执行入口,运行计划并执行查询
Drillbit街道查询请求后会变成Foreman来带动整个查询,先解析SQL,然后转变成Drill可以识别的SQL
logical plan 描述生成查询结果所需要的工作,并定义数据源和操作,由逻辑运算符的集合构成。
流程Major Fragments
- a concept that represents a phase of the query execution
- A phase can consist of one or multiple operations that Drill must perform to execute the query.
- Drill assigns each major fragment a MajorFragmentID
- Drill uses an exchange operator to separate major fragments. An exchange is a change in data location and/or parallelization of the physical plan. An exchange is composed of a sender and a receiver to allow data to move between nodes.
Minor Fragments
- Each major fragment is parallelized into minor fragments.
- A minor fragment is a logical unit of work that runs inside a thread. A logical unit of work in Drill is also referred to as a slice.
-
The execution plan that Drill creates is composed of minor fragments. Drill assigns each minor fragment a MinorFragmentID.
Paste_Image.png
如果是嵌套数组,the third value of the second inner array).
select group[1][2] -
一个复杂的SQL语句
SELECT * FROM (SELECT t.trans_id,
t.trans_info.prod_id[0] AS prod_id,
t.trans_info.purch_flag AS purchased
FROM `clicks/clicks.json` t) sq
WHERE sq.prod_id BETWEEN 700 AND 750 AND
sq.purchased = 'true'
ORDER BY sq.prod_id;
REST API
get/post,文档在这里,有个jsonapi相关的文档,写的很好,而且也有代码,是我当时看的时候的参考资料
待续。。
网友评论