Hadoop - 实时查询Drill

https://github.com/smartloli/apache-drill-cn

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上的文件格式如下图所示:

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

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

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

"csv": {

  "type":"text",

  "extensions": [

    "csv2"  ],

  "skipFirstLine":true,

  "delimiter":","},

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

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

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

  这该如何去修改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类型

BIGINTBIGINT

BOOLEANBOOLEAN

VARCHARCHAR

DATEDATE

DECIMAL*DECIMAL

FLOATFLOAT

DOUBLEDOUBLE

INTEGERINT,TINYINT,SMALLINT

INTERVALN/A

TIMEN/A

N/ATIMESPAMP  (unix的系统时间)

TIMESPAMPTIMESPAMP  (JDBC时间格式:yyyy-mm-dd hh:mm:ss)

NoneSTRING

VARCHARVARCHAR

VARBINARYBINARY

  另外,在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":"2181"  },

  "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即可。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    Joyyx阅读 8,319评论 0 16
  • Zookeeper用于集群主备切换。 YARN让集群具备更好的扩展性。 Spark没有存储能力。 Spark的Ma...
    Yobhel阅读 7,236评论 0 34
  • Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和H...
    时待吾阅读 2,462评论 0 8
  • 说明:不少读者反馈,想使用开源组件搭建Hadoop平台,然后再部署Kylin,但是遇到各种问题。这里我为读者部署一...
    大诗兄_zl阅读 2,047评论 0 2
  • 在我广阔的人生中, 一切都是完美、完整和完全的。 我相信有一种比我强大得多的力量, 每天、每时、每刻从我身体流过。...
    Janeliqin阅读 80评论 0 0