Apache Drill初探

摘要:
Apache Drill初始介绍Apache Drill是一个开源SQL查询引擎,对Hadoop和NoSQL具有低延迟。Apache Drill实现了谷歌的Dremel。那么谷歌的Dremel是什么?一些功能:实时分析和快速应用程序开发2.与现有SQL环境和Apache Hive兼容3.半结构化/嵌套数据结构安装https://drill.apache.org/download/下载最新版本的Drill07.0以在单机模式下运行。在drill安装目录中执行命令:bin/sqlline-uhdbc:drill:zk=local nadmin-padmin进入drillshell命令行交互模式:Enter!该节点从ZooKeeper获取整个集群的可用钻取单元列表。每个节点的查询片段执行计划根据其演练单元计划表执行。

                                    Apache Drill初探

  1. 介绍

Apache Drill是一个开源的,对于HadoopNoSQL低延迟的SQL查询引擎。

Apache Drill 实现了 Google's Dremel.那么什么是Google's Dremel?网络中一段描述:Dremel Google "交互式"数据分析系统。可以组建成规模上千的集群,处理PB级别的数据。MapReduce处理一个数据,需要分钟级的时间。作为MapReduce的发起人,Google开发了Dremel将处理时间缩短到秒级,作为MapReduce的有力补充。Dremel作为Google BigQueryreport引擎,获得了很大的成功。

一些特性:

  1. 实时分析及快速应用开发

    Apache Drill初探第1张

     2.兼容已有的 SQL 环境和 Apache Hive

Apache Drill初探第2张

3.半结构化/嵌套数据结构

Apache Drill初探第3张

  1. 安装
  2. https://drill.apache.org/download/下载最新版Drill 0.7.0
  3. 单机模式运行,drill 安装目录执行命令:

    bin/sqlline -u jdbc:drill:zk=local -n admin -p admin

    进入drill shell命令行交互模式:

    Apache Drill初探第4张

输入!tables查看系统默认的一些表

Apache Drill初探第5张

查询实例表:SELECT * FROM cp.`employee.json` LIMIT 20;

 

安装成功!输入!quit命令退出。

分布式安装运行:

drill-override-example.conf的内容复制到drill-override.conf

修改其中Zookeeper配置

Apache Drill初探第6张

bin目录执行drillbit.sh即可

三、架构原理

1.Drill查询架构

Apache Drill初探第7张

查询的流程常包括以下步骤:

  1. drill客户端发起查询,客户端可以是一个JDBCODBC、命令行界面或REST API。集群中任何drill单元可以接受来自客户端的查询,没有主从概念。
  2. drill单元对查询进行分析、优化,并针对快速高效执行生成一个最优的分布式执行计划。
  3. 收到请求的drill单元成为该查询的drill单元驱动节点。这个节点从ZooKeeper获取整个集群可用的一个drill单元列表。驱动节点确定合适的节点来执行各种查询计划片段到达最大化数据局部性。
  4. 各个节点查询片段执行计划按照它们的drill单元计划表执行。
  5. 各个节点完成它们的执行后返回结果数据给驱动节点。
  6. 驱动节点以流的形式将结果返回给客户端。

2.Drillbit核心模型

Apache Drill初探第8张

3. Drill 编译器

Apache Drill初探第9张

四、应用

1.Drill接口

Drill shell (SQLLine)见安装部分

Drill Web UI(安装目录命令行启动bin/sqlline -u jdbc:drill:zk=local -n admin -p admin)

http://127.0.0.1:8047/

Apache Drill初探第10张

进入查询窗口

Apache Drill初探第11张

数据源设置

Apache Drill初探第12张

③ODBC & JDBC,可以在第三方应用配置相关的驱动直接连接

Apache Drill初探第13张

也可以使用编程模式, JDBC编程接口

加载驱动org.apache.drill.jdbc.Driver;使用Connection URL: jdbc:drill:zk=xuansheng-pc

Apache Drill初探第14张

更多代码:

https://github.com/asinwang/drill-demo/blob/master/src/main/java/org/apache/drill/jdbc/JdbcDemo.java

C++ API(没有看见相关资料,貌似还在开发中)

⑤REST接口

import org.apache.http.client.fluent.Content;

import org.apache.http.client.fluent.Request;

import org.apache.http.entity.ContentType;

import com.alibaba.fastjson.JSON;

publicclass RestDemo {

    privatestaticfinal String HOST_NAME = "http://xuansheng-pc:8047/query.json";

    privatestatic String buildRequestBody(String queryType, String query) {

        RequestBody reques = new RequestBody(queryType, query);

        String json = JSON.toJSON(reques).toString();

        returnjson;

    }

    publicstaticvoid main(String[] args) throws Exception {

        String queryType = "SQL";

        String query = "SELECT * FROM cp.`employee.json` LIMIT 20";

        String buildRequestBody = buildRequestBody(queryType, query);

        System.out.println("buildRequestBody:" + buildRequestBody);

        Content returnContent = Request.Post(HOST_NAME).bodyString(buildRequestBody, ContentType.APPLICATION_JSON)

                .execute().returnContent();

        System.out.println(returnContent);

    }

}

class RequestBody {

    private String queryType;

    private String query;

    public RequestBody() {

    }

    public RequestBody(String queryType, String query) {

        super();

        this.queryType = queryType;

        this.query = query;

    }

    public String getQueryType() {

        returnqueryType;

    }

    publicvoid setQueryType(String queryType) {

        this.queryType = queryType;

    }

    public String getQuery() {

        returnquery;

    }

    publicvoid setQuery(String query) {

        this.query = query;

    }

}

  1. 连接HbaseHDFS

Apache Drill初探第15张

Apache Drill初探第16张

查询时使用对应的type作为命名空间即可

 

工程代码见:https://github.com/asinwang/drill-demo.git

相关资源

  1. http://drill.apache.org/
  2. https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/36632.pdf
  3. http://www.yankay.com/google-dremel-rationale/
  4. https://docs.google.com/document/d/1RF0v05l0lWy1OwSXxHuboqJNLRkS-YzshrEVmUSby5I/edit
  5. http://www.geekfan.net/13787/

免责声明:文章转载自《Apache Drill初探》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇苹果ios使用js的日期时间处理时的问题Zookeeper四字命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Apache POI Java读取100万行Excel性能优化:split vs indexOf+subString,谁性能好

使用Apache POI eventmodel实现一个Excel流式读取类,目标是100万行,每行46列,文件大小152MB的Excel文件能在20s读取并处理完。一开始实现的程序需要260s,离目标差太远了,使用jvisualvm分析各方法执行时间,结果如下: 可以看到,程序中的splitLine和getRowNum方法消耗了大量时间。这两个方法都特别...

XML的几种转换

1 package com.qbskj.project.util; 2 3 import java.io.ByteArrayOutputStream; 4 import java.util.ArrayList; 5 import java.util.HashMap; 6 import java.util.Iterator; 7...

将list分成等数量

import java.util.ArrayList; import java.util.List; public class CollectionGroupUtil { public static List groupListByQuantity(List list, int quantity) { if (list...

HBASE的预分区设计

hbase生成分区种子 1 package com.spdbccc.edm.storm.common; 2 3 import java.util.List; 4 5 import org.apache.commons.lang3.StringUtils; 6 import org.apache.hadoop.hbase.u...

HBase BulkLoad批量写入数据实战

1.概述 在进行数据传输中,批量加载数据到HBase集群有多种方式,比如通过HBase API进行批量写入数据、使用Sqoop工具批量导数到HBase集群、使用MapReduce批量导入等。这些方式,在导入数据的过程中,如果数据量过大,可能耗时会比较严重或者占用HBase集群资源较多(如磁盘IO、HBase Handler数等)。今天这篇博客笔者将为大家分...

Java中的ASCII、Unicode和UTF-8字符编码集

原文:@http://kxjhlele.iteye.com/blog/333211 首先讲一下几种字符的编码方式: 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示2...