中文文档:https://drill.smartloli.org/ 缺省的,不建议看中文文档
核心模块:
执行过程图:
执行过程描述:
- RPC endpoint: (接受查询SQL)终端客户机,建议用户直接通过zk来管理Drill分布式
- SQL parser:(SQL转化成逻辑操作符语法)用的是Apache Calcite的SQL解析,用于优化语句中SQL操作符的顺序,应用自定义规则将特定的SQL操作符转换成特定的逻辑操作符语法
- Logical plan:(逻辑操作符语法转换成逻辑计划)逻辑计划,逻辑操作符语法转换成逻辑计划,逻辑计划是描述生成查询结果所需的工作,并定义要应用哪些数据源和操作
- Optimizer:(逻辑计划转换成最优的物理查询计划)优化器,用于应用各种类型的规则将操作符和函数重新排列到一个最佳计划中,优化器将逻辑计划转换为描述如何执行查询的物理计划
- 物理计划转换为多个阶段,称为主要阶段和次要阶段。这些片段创建一个多级执行树,重写查询并对配置的数据源并行执 行,将结果发送回客户机或应用程序。
- 主要片段实际上不执行任何查询任务,每个主要片段被划分为一个或多个次要片段(在下一节中讨论),这些小片段实际执行完成查询所需的操作,并将结果返回给客户机。您还可以查看查询概要文件中的主要片段,这在Drill Web UI中是可见的,也可以直接通过plan命令查看主要片段明细。例如,要执行两个文件的哈希聚合,Drill可以创建一个包含两个主要阶段(主要片段)的计划,其中第一个阶段用于扫描两个文件,第二个阶段用于聚合数据。
- 次要片段每个主要的片段被并行化为次要的片段。次要片段是在线程中运行的逻辑工作单元。Drill中的逻辑工作单元也称为片。Drill创建的执行计划由较小的片段组成。Drill为每个小片段分配一个minorfragmentd。一个主要的片段分解成尽可能多的次要片段,以便在集群上同时有效地运行。次要片段数量可以在Web UI中查询查看,修改一些配置选项,以更改较小片段的行为,比如最大片数。
Storage plugin interface:元数据存储
*Query Execution:
安装与使用
1、安装JDK 8 +版本
2、设置JAVA_HOME和PATH环境变量
3、安装zookeeper 下载zookeeper-3.3.4,下载地址https://archive.apache.org/dist/zookeeper/,
解压D:\zookeeper-3.3.4,
复制D:\zookeeper-3.3.4\conf\zoo_sample.cfg为zoo.cfg,
新建D:\zookeeper-3.3.4\data文件夹,
设置zoo.cfg里的dataDir=D:\zookeeper-3.3.4\data
4、启动zookeeper,直接运行D:\zookeeper-3.3.4\bin\zkServer.cmd
5、下载Apache Drill:apache-drill-1.16.0.zip
6、解压到D盘:D:\apache-drill-1.16.0
7、CMD管理员进入D:\apache-drill-1.16.0\bin
8、启动Apache Drill:sqlline.bat -u "jdbc:drill:zk=local"或者drill-embedded.bat
(Supported in Drill 1.16 and later.)
启动出现错误WARNING: All illegal access operations will be denied in a future release
Error: Failure in starting embedded Drillbit: org.apache.drill.common.exceptions
.DrillRuntimeException: Error during udf area creation [/C:/Users/Administrator/
drill/udf/registry] on file system [file:///] (state=,code=0)
解决办法:CMD运行如下命令:
mkdir "%userprofile%\drill"
mkdir "%userprofile%\drill\udf"
mkdir "%userprofile%\drill\udf\registry"
mkdir "%userprofile%\drill\udf\tmp"
mkdir "%userprofile%\drill\udf\staging"
takeown /R /F "%userprofile%\drill"
ok 再次启动:sqlline.bat -u "jdbc:drill:zk=local"或者drill-embedded.bat
(Supported in Drill 1.16 and later.)
9、校验输入:!tables查询所有的系统默认表
您可以运行一个测试查询来验证,例如:
apache drill>use cp;
+------+--------------------------------+
| ok | summary |
+------+--------------------------------+
| true | Default schema changed to [cp] |
+------+--------------------------------+
//Query the employee.json file in the classpath.
apache drill (cp)>SELECT * FROM cp.`employee.json` LIMIT 1;
+-------------+--------------+------------+-----------+-------------+----------------+----------+---------------+------------+-----------------------+---------+---------------+-----------------+----------------+--------+-------------------+
| employee_id | full_name | first_name | last_name | position_id | position_title | store_id | department_id | birth_date | hire_date | salary | supervisor_id | education_level | marital_status | gender | management_role |
+-------------+--------------+------------+-----------+-------------+----------------+----------+---------------+------------+-----------------------+---------+---------------+-----------------+----------------+--------+-------------------+
| 1 | Sheri Nowmer | Sheri | Nowmer | 1 | President | 0 | 1 | 1961-08-26 | 1994-12-01 00:00:00.0 | 80000.0 | 0 | Graduate Degree | S | F | Senior Management |
+-------------+--------------+------------+-----------+-------------+----------------+----------+---------------+------------+-----------------------+---------+---------------+-----------------+----------------+--------+-------------------+
10、访问Drill Web UI:http://localhost:8047/
11、设置登录帐号密码
见https://blog.youkuaiyun.com/fwx02/article/details/101059736
12、添加mongDB模块的支持
13、添加MySQL模块的支持
官方说明文档:http://drill.apache.org/docs/using-the-jdbc-driver/
在目录D:\apache-drill-1.16.0\jars\jdbc-driver加入com.mysql.jdbc.Driver对应的jar
14、退出
!quit
15、linux安装Apache Drill
和windows安装一样,只是启动的时候用bin/drillbit.sh start不要用官网的bin/drill-embedded,用官网的bin/drill-embedded会报错:
[kduser@mdw apache-drill-1.16.0]$ bin/drill-embedded Exception in thread "main" java.io.IOError: java.lang.UnsupportedOperationException at org.jline.utils.Curses.tputs(Curses.java:62) at org.jline.utils.Curses.tputs(Curses.java:45) at org.jline.keymap.KeyMap.key(KeyMap.java:243) at org.jline.reader.impl.LineReaderImpl.key(LineReaderImpl.java:5666) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) at org.jline.reader.impl.LineReaderImpl.bindKeys(LineReaderImpl.java:5674) at org.jline.reader.impl.LineReaderImpl.emacs(LineReaderImpl.java:5387) at org.jline.reader.impl.LineReaderImpl.defaultKeyMaps(LineReaderImpl.java:5363) at org.jline.reader.impl.LineReaderImpl.<init>(LineReaderImpl.java:266) at org.jline.reader.LineReaderBuilder.build(LineReaderBuilder.java:115) at sqlline.SqlLine.getConsoleReader(SqlLine.java:626) at sqlline.SqlLine.begin(SqlLine.java:527) at sqlline.SqlLine.start(SqlLine.java:270) at sqlline.SqlLine.main(SqlLine.java:201) Caused by: java.lang.UnsupportedOperationException at org.jline.utils.Curses.doTputs(Curses.java:78) at org.jline.utils.Curses.tputs(Curses.java:60) ... 21 more
如果启动报错,检查配置
drill-override.conf
drill.exec: {
cluster-id: "drillbits1",
zk.connect: "localhost:2181"
}
设置内存大小
drill-env.sh
export DRILL_MAX_DIRECT_MEMORY="2G"
export DRILL_HEAP="1G"
16、MongoDB安装配置
16.1、rpm包安装(建议不要选rpm包,下面介绍TGZ包的安装步骤)下载:https://www.mongodb.com/download-center/community?jmp=nav
rpm包:mongodb-org-server-4.2.0-1.el6.x86_64.rpm
rpm -ivh mongodb-org-server-4.2.0-1.el6.x86_64.rpm
修改/etc/mongod.conf的dbPath systemLog path,注释掉bindIp:127.0.0.1 #xxx
mkdir dbPath 和 systemLog path
启动service mongod start
停止service mongod stop
重启service mongod restart
如果出现pid已经存在的错误删除了重新启动就ok
卸载
yum erase $(rpm -qa | grep mongodb-org)
rm -r /var/log/mongodb
rm -r /var/lib/mongo
16.2、TGZ包安装:
1、sudo vi /etc/profile
插入下列内容:
export MONGODB_HOME=/apps/db/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
立即生效
source /etc/profile
2、创建
sudo mkdir /apps/db/mongodb/data
sudo chmod -R 777 /apps/db/mongodb/data
sudo touch /apps/db/mongodb/data/logs/mongodb.log
3、配置
sudo touch /apps/db/mongodb/mongodb.conf
sudo vim /apps/db/mongodb/mongodb.conf
#数据存放地址
dbpath=/apps/db/mongodb/data
#log存放地址
logpath=/apps/db/mongodb/data/logs/mongodb.log
#端口号
port=27017
#以守护程序运行,即后台运行
fork=true
nohttpinterface=true
4、启动
cd /apps/db/mongodb/bin
./mongod -f mongodb.conf
5、测试连接 curl localhost:27017
6、MongoDB客户端安装和用户密码权限控制,建议安装studio-3t
见https://blog.youkuaiyun.com/fwx02/article/details/100930150