1.概述

  在《Hadoop - 实时查询Drill》一文当中,笔者给大家介绍如何去处理实时查询这样的业务场景,也是简略的提了一下如何去实时查询HDFS,然起相关细节并未说明。今天给大家细说一下相关细节,其中包含:HDFS,Hive以及HBase等内容。

2.数据源和文件格式

  在使用Drill去做实时查询,由于其只是一个中间件,其适配的存储介质是有限制的,目前官方支持以下存储介质:

  • FS
  • HDFS
  • HBase
  • Hive
  • RDBMS
  • MongoDB
  • MapR-DB
  • S3

  这里笔者主要给大家介绍HDFS,Hive,HBase这三种介质。另外,Drill支持以下输入格式的数据源:

  • Avro
  • CSV
  • TSV
  • PSV
  • Parquet
  • MapR-DB*
  • Hadoop Sequence Files

2.1 文本类型文件(CSV,TSV,PSV)

  下面笔者给大家介绍文本类型的相关细节,文本类型的使用,有其固定的使用方法,通用配置如下:

"formats": {
"csv": {
"type": "text",
"extensions": [
"txt"
],
"delimiter": "\t"
},
"tsv": {
"type": "text",
"extensions": [
"tsv"
],
"delimiter": "\t"
},
"parquet": {
"type": "parquet"
}
}

  这里以CSV为例子来说明:

  • "csv":表示固定的文本格式
  • "type":制定文件的类型,这里指定为文本类型
  • "extensions":扩展名为csv
  • "delimiter":文本内容,每行的分隔符为一个tab占位符

  上面的配置,这里我们也可以进行拓展,比如我们的HDFS上的文件格式如下图所示:

  我们要达到以下查询结果,内容如下所示:

: jdbc:drill:zk=local> SELECT * FROM hdfs.`/tmp/csv_with_header.csv2`;
+------------------------+
| columns |
+------------------------+
| ["hello","","",""] |
| ["hello","","",""] |
| ["hello","","",""] |
| ["hello","","",""] |
| ["hello","","",""] |
| ["hello","","",""] |
| ["hello","","",""] |
+------------------------+

  那么,我们可以对其做以下配置,内容如下所示:

"csv": {
"type": "text",
"extensions": [
"csv2"
],
"skipFirstLine": true,
"delimiter": ","
},

  这里skipFirstLine这个属性表示忽略一行结果。

  另外,同样用到上面的数据源,我们要实现以下查询结果,内容如下所示:

: jdbc:drill:zk=local> SELECT * FROM hdfs.`/tmp/csv_with_header.csv2`;
+-------+------+------+------+
| name | num1 | num2 | num3 |
+-------+------+------+------+
| hello | | | |
| hello | | | |
| hello | | | |
| hello | | | |
| hello | | | |
| hello | | | |
| hello | | | |
+-------+------+------+------+

  这该如何去修改CSV的属性,我们添加以下内容即可:

"csv": {
"type": "text",
"extensions": [
"csv2"
],
"skipFirstLine": false,
"extractHeader": true,
"delimiter": ","
},

  从单词的意义上可以很直接的读懂属性所要表达的意思,这里就不多做赘述了。由于篇幅问题,这里就不一一列举了。

  其他格式文件与此类似,填写指定文件格式,文件类型,扩展名,文本分隔符即可,其他扩展属性可按需添加。

3.Plugins

3.1 HDFS

  集成HDFS的Plugins,添加内容如下所示:

{
"type": "file",
"enabled": true,
"connection": "hdfs://hdfs.company.com:9000/",
"workspaces": {
"root": {
"location": "/opt/drill",
"writable": true,
"defaultInputFormat": null
}
},
"formats": {
"csv": {
"type": "text",
"extensions": [
"txt"
],
"delimiter": "\t"
},
"tsv": {
"type": "text",
"extensions": [
"tsv"
],
"delimiter": "\t"
},
"parquet": {
"type": "parquet"
}
}
}

  PS:连接HDFS地址注意要正确。

3.2 Hive

  集成Hive的Plugins,添加内容如下所示:

{
"type": "hive",
"enabled": true,
"configProps": {
"hive.metastore.uris": "thrift://hdfs.company.com:9083",
"fs.default.name": "hdfs://hdfs.company.com/",
"hive.metastore.sasl.enabled": "false"
}
}

  PS:这里需要指定Hive的metastore的thrift地址,同时也需要指定hdfs的地址。另外,我们需要启动metastore的thrift服务,命令如下所示:

hive --service metastore

  这里需要注意的是,Drill当前不支持写操作到Hive表,在将Hive表结构中的数据类型做查询映射时,支持以下类型:

支持的SQL类型 Hive类型
BIGINT BIGINT
BOOLEAN BOOLEAN
VARCHAR CHAR
DATE DATE
DECIMAL* DECIMAL
FLOAT FLOAT
DOUBLE DOUBLE
INTEGER INT,TINYINT,SMALLINT
INTERVAL N/A
TIME N/A
N/A TIMESPAMP  (unix的系统时间)
TIMESPAMP TIMESPAMP  (JDBC时间格式:yyyy-mm-dd hh:mm:ss)
None STRING
VARCHAR VARCHAR
VARBINARY BINARY

  另外,在Drill中,不支持以下Hive类型:

  • LIST
  • MAP
  • STRUCT
  • TIMESTAMP(Unix Epoch format)
  • UNION

3.3 HBase

  集成HBase的Plugins,添加内容如下所示:

{
"type": "hbase",
"config": {
"hbase.zookeeper.quorum": "hbase-zk01,hbase-zk02,hbase-zk03",
"hbase.zookeeper.property.clientPort": ""
},
"size.calculator.enabled": false,
"enabled": true
}

  PS:在使用ZooKeeper集群连接信息时,需要注意的是,Drill在解析HBase的Plugins时,会解析其HBase集群上的ZK集群信息,如:在HBase集群中的ZK信息配置使用的时域名,这里在配置其HBase的Plugins的ZK连接信息也需使用对应的域名,若是直接填写IP,解析会失败。保证解析的一致性。

4.总结

  另外,在使用JDBC或ODBC去操作Drill的时候,连接信息的使用是需要注意的,直接按照官方给出的连接方式硬套是有问题的,这里我们修改以下连接信息。连接分2种情况,一种指定其Drill的IP和PORT,第二种,使用ZK的连接方式,如jdbc:drill:zk=dn1,dn2,dn3:2181即可。

5.结束语

  这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

Hadoop-Drill深度剖析的更多相关文章

  1. hadoop(一):深度剖析hdfs原理

    在配置hbase集群将 hdfs 挂接到其它镜像盘时,有不少困惑的地方,结合以前的资料再次学习;  大数据底层技术的三大基石起源于Google在2006年之前的三篇论文GFS.Map-Reduce. ...

  2. planning深度剖析

    planning深度剖析 结合find命令过滤目录及文件名后缀: find /home/hadoop/nisj/automationDemand/ -type f -name '*.py'|xargs ...

  3. 深度剖析HBase负载均衡和性能指标

    深度剖析HBase负载均衡和性能指标 在分布式系统中,负载均衡是一个非常重要的功能,HBase通过Region的数量实现负载均衡,即通过hbase.master.loadbalancer.class实 ...

  4. 《AngularJS深度剖析与最佳实践》简介

    由于年末将至,前阵子一直忙于工作的事务,不得已暂停了微信订阅号的更新,我将会在后续的时间里尽快的继续为大家推送更多的博文.毕竟一个人的力量微薄,精力有限,希望大家能理解,仍然能一如既往的关注和支持sh ...

  5. ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程

    从<ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求>我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但 ...

  6. Objective-C类成员变量深度剖析

    目录 Non Fragile ivars 为什么Non Fragile ivars很关键 如何寻址类成员变量 真正的“如何寻址类成员变量” Non Fragile ivars布局调整 为什么Objec ...

  7. 大众点评开源分布式监控平台 CAT 深度剖析

    一.CAT介绍 CAT系统原型和理念来源于eBay的CAL的系统,CAT系统第一代设计者吴其敏在eBay工作长达十几年,对CAL系统有深刻的理解.CAT不仅增强了CAL系统核心模型,还添加了更丰富的报 ...

  8. 深度剖析WordPress主题结构(转)

    利用强大的技术,可以把基于wordpress的网站做成各种各样的形式,这除了要求wordpress主题开发人员精通html,PHP,JS,CSS等技术,还需要开发者掌握WordPress主题的框架. ...

  9. LCD深度剖析

    LCD 深度剖析 来源:http://blog.csdn.net/hardy_2009/article/details/6922900 http://blog.csdn.net/jaylondon/a ...

随机推荐

  1. iBoxDB for .NET v1.5发布, 移动NoSQL数据库

    iBoxDB for .NET是一个无须安装配置就可以运行的数据库. 拥有非常高效的性能同时能提供事务支持. 可嵌入到应用程序中也可以使用TCP与应用程序进行远程数据交互 使用易用的操作接口,不需要阅 ...

  2. mssql的日期函数,如何取得当前年月日,当前时间,当前月份,当前天数,一年中第几天?

    mssql函数DATENAME 语法 DATENAME ( datepart , date ) 参数 datepart 是返回的 date 的一部分.下表列出了所有有效的 datepart 参数.用户 ...

  3. Dynamic CRM 2013学习笔记(十五)报表设计:报表入门、开发工具及注意事项

    本文是关于CRM 2013报表开发入门介绍,包括开发工具的使用,以及不同于普通Reporting service的相关注意事项. 一.CRM报表简介 报表有两种,SQL-based报表和Fetch-b ...

  4. NoSQL学习一:MongoDB下载与安装

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型.M ...

  5. 六天玩转javascript:javascript变量与表达式(1)

    说明 本系列属于进阶系列,语常用语法等不在本系列介绍范围之内. 在我刚开始做一个程序员并开发项目的时候,我总是喜欢使用开发语言的各种特性,每次m$发布新版C#的时候我总是会把开发者预览版下好,亲自体验 ...

  6. win7 64系统安装oracle客户端使用PL/SQL Developer工具

    1)安装Oracle 11g 64位,我用的版本下载地址: http://www.oracle.com/technetwork/database/enterprise-edition/download ...

  7. [Hyper-V]在Windows 8.1 操作系统中启用Hyper-V功能

    描述: 如何在Windows 8.1 操作中启用Hyper-V功能 实现步骤: 1,安装Hyper-V 1 打开Control Panel,点击Progress 2 点击Turn Windows fe ...

  8. 学习WPF——WPF布局——了解布局容器

    WPF布局工作内部原理 WPF渲染布局时主要执行了两个工作:测量和排列 测量阶段,容器遍历所有子元素,并询问子元素所期望的尺寸 排列阶段,容器在合适的位置放置子元素,并设置元素的最终尺寸 这是一个递归 ...

  9. 深入理解c++构造函数, 复制构造函数和赋值函数重载(operator=)

    注 以下代码编译及运行环境均为 Xcode 6.4, LLVM 6.1 with GNU++11 support, Mac OS X 10.10.2 调用时机 看例子 // // main.cpp / ...

  10. OpenWrt资料汇总

    上周末折腾了一下OpenWrt,打算把Facebook的网络模拟工具部署到上面,最终以失败告终.上github看,发现已经有人给作者提了issue,作者表示部署在OpenWrt上会很有用,但确实在Op ...