云博投注


云博投注这个大姐头,开放又性感和美丽心菱对郝仁澈娇说。云博投注男:这啥狗?腿儿也太短了吧。 女:哦,柯基犬。男:磕鸡犬。。。也是,这腿儿那么短,走路的时候是容易把JJ给磕着碰着啊!云博投注 办公室里一女同事刚上完厕所回来,  顺便摸了摸旁边一男同事的头,夸他今天发型不错。  男同事怒道,不要用你刚上过厕所的手摸我的头!  女同事沉默2秒,冷冷的说:  “你以为我上厕所需要和你一样用手拿着吗?”云博投注

    看到前面有台解石机,就走了过去先把这几块解了卖钱。云博投注路:我可以告诉你我不会再你离开我之前离开你的,睡吧,晚安。
云博投注看“是谁”这两个字,哼一句歌词。@捧腹网   自动唱出“在耳边,说,爱我永不变”的,是普通青年;  唱出“在敲打我窗”的,是文艺青年;  唱出“送你来到我身边”的,是二逼青年;  唱出“在唱歌,温暖了寂寞”的,是二逼中的战斗机。。云博投注走,咱们上岸。云博投注到时候恐怕就要换你被绑了吧。云博投注一只老母鸡加一只老公鸡猜三个字:“2只鸡”;一只老母鸡加一只老公鸡猜5个字:“还是2只鸡”;一只老母鸡加一只老公鸡猜7个字:“笨蛋,就是2只鸡”云博投注这个默默无名的百年公司居然抢在魅影前面收购了港龙的股权?这太不可思议了。云博投注如果火拼起来,咱们中弹还真太冤枉了!云博投注庄家的牌面是张老Q,牌官抬起头向神情各异的众赌客说了一句英文,然后再向易飞和那个中国女孩说了一句生硬的中文:要不要买保险?云博投注都说碰到老太太碰瓷的,和她一起倒地是个不错的办法。 你们可拉倒吧,现在老太太赖上我了,说我和他睡过了。非要我负全责。。。。。。云博投注客人:来碗热面。 服务员:一碗热面。 客人:换碗冷面。 服务员:一碗冷面。 客人吃完冷面就要走。服务员让他给钱。 客人:给什么钱? 服务员:吃冷面没给钱。 客人:冷面不是拿热面换的么? 服务员:那热面你也没给钱啊? 客人:热面我他妈的也没吃啊!

皇冠足球比分

大发论坛时时彩平台尊龙娱乐是黑网吗海天国际娱乐城注册送钱凯发娱乐乐宝娱乐城真人赌钱亚美国际娱乐城 金龙国际 www.am8.com 亚洲城娱乐 老k国际娱乐城 666k8.com 金威国际娱乐城 名人国际娱乐城 ag娱乐平台 V博娱乐城 利来国际官网网站地图注册送68元体验金网站地图阳朔县国语学校网站地图百家讲坛易中天品三国网站地图利高娱乐博彩网站地图择久乐娱乐场网站地图布加迪赌城网站地图http://tinyurl.com/pg4hwjk网站地图澳门银河官网网站地图凯旋门赌场网站地图通宝娱乐官方下载网站地图百家乐技论坛网站地图http://tinyurl.com/o2lksqc网站地图博彩网威博娱乐城网站地图尊龙国际注册送钱e8889.com网站地图乐橙app网站地图华夏娱乐城网站地图澳门赌场下注网站地图合法赌场官网网站地图缅甸小勐拉小姐网站地图大发8网站地图新2网址hg.0088.com备用hg622.com网站地图澳门赌场夜总会网站地图ag88网站地图君怡娱乐城网站地图足球网上投注注册送钱e8889.com网站地图博马娱乐城线上赌博网站地图

Hadoop-Drill深度剖析

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

5.结束语

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

posted @ 2015-11-28 14:20 哥不是小萝莉 阅读(...) 评论(...) 编辑 收藏