Skip to content
司马顿的博客
司马顿的博客

司马顿的博客

使用Drill的HDFS存储插件

Posted on 2022年4月6日 By 司马顿

Drill默认装载了一个dfs插件,它的connection配置是本地文件系统, 所以就是访问本地文件的。

我在web UI上,把dfs的配置copy了一份,再创建一个HDFS的配置。它们的内容基本差不多,只是connection那里稍有不同。我的HDFS存储插件配置如下:

{
  "type": "file",
  "connection": "hdfs://localhost:9000",
  "workspaces": {
    "tmp": {
      "location": "/tmp/test",
      "writable": true,
      "defaultInputFormat": null,
      "allowAccessOutsideWorkspace": false
    }
  },
  "formats": {
    "parquet": {
      "type": "parquet"
    },
    "json": {
      "type": "json",
      "extensions": [
        "json"
      ]
    },
    "csvh": {
      "type": "text",
      "extensions": [
        "csvh"
      ],
      "extractHeader": true
    },
    "avro": {
      "type": "avro",
      "extensions": [
        "avro"
      ]
    },
    "csv": {
      "type": "text",
      "extensions": [
        "csv"
      ]
    }
  },
  "enabled": true
}

基本上,只要把connection那里,改成指向HDFS文件系统即可。workspace里的路径,改成HDFS上的路径。支持的文件类型,默认有很多,我这里只启用了parquet, json, csv, csvh, avro这几种。

这里注意下csv与csvh的区别。顾名思义,csvh就是带了一个header的csv。由于在csvh配置里,启用了解析header,所以Drill读取csvh结尾的文件后,会自动按照header的定义来拆分列。

默认的csv没有配置解析header,它把所有列都读到一个数组里,显然不方便。当然,你也可以在csv的配置里加上那一行:”extractHeader”: true。加上后,csv也可以按照列来进行拆分了。

现在我上传一个csvh文件到HDFS文件系统里:

$ hdfs dfs -put people.csvh /tmp/test

然后在drill shell里,切换到这个路径,就可以执行select查询了。

apache drill (hdfs.tmp)> use hdfs.tmp;
+------+--------------------------------------+
|  ok  |               summary                |
+------+--------------------------------------+
| true | Default schema changed to [hdfs.tmp] |
+------+--------------------------------------+
1 row selected (0.09 seconds)

apache drill (hdfs.tmp)> select name,sex,born,zip,salary from `people.csvh` limit 5;
+---------------+--------+------------+-------+---------+
|     name      |  sex   |    born    |  zip  | salary  |
+---------------+--------+------------+-------+---------+
| Kaylee L.Z.   | Female | 1990-10-17 | 25345 | 11532.0 |
| Nylah R.R.    | Female | 1983-9-12  | 87888 | 24868.0 |
| Marcos T.K.   | Male   | 1988-10-7  | 37129 | 8709.0  |
| Louis L.I.    | Male   | 1996-5-23  | 54428 | 7516.0  |
| Emmanuel D.C. | Male   | 1994-11-21 | 95107 | 22373.0 |
+---------------+--------+------------+-------+---------+
5 rows selected (0.2 seconds)

我在HDFS存储插件配置里,设置了HDFS路径可以写入,所以还可以往HDFS里创建数据表:

apache drill (hdfs.tmp)> create table tt2 as select * from `people.csvh` limit 100;
+----------+---------------------------+
| Fragment | Number of records written |
+----------+---------------------------+
| 0_0      | 100                       |
+----------+---------------------------+
1 row selected (0.239 seconds)

以及查询新创建的表:

apache drill (hdfs.tmp)> select count(*) as dd from tt2;
+-----+
| dd  |
+-----+
| 100 |
+-----+
1 row selected (0.168 seconds)

但这个新创建的表,不知为何没有出现在show tables命令里,这有待查实。

apache drill (hdfs.tmp)> show tables;
+--------------+------------+
| TABLE_SCHEMA | TABLE_NAME |
+--------------+------------+
No rows selected (0.149 seconds)

总体上,hdfs存储插件,与默认的的dfs存储插件,使用方式上是差不多的。它们都是基于文件的,可以解析不同的文件格式。访问文件的方式都一样,只是存储路径不同而已。

Print this entry

博客 Apache Drill技术

文章导航

Previous post
Next post

Archives

  • 2022 年 9 月 (2)
  • 2022 年 8 月 (2)
  • 2022 年 7 月 (2)
  • 2022 年 6 月 (1)
  • 2022 年 5 月 (4)
  • 2022 年 4 月 (18)
  • 2022 年 3 月 (13)
  • 2022 年 2 月 (6)
  • 2022 年 1 月 (8)
  • 2021 年 12 月 (14)
  • 2021 年 11 月 (7)
  • 2021 年 10 月 (19)
  • 2021 年 9 月 (25)
  • 2021 年 8 月 (45)
  • 2021 年 7 月 (33)
  • 2021 年 6 月 (10)
  • 2021 年 3 月 (2)
  • 2021 年 2 月 (8)
  • 2021 年 1 月 (8)
  • 2020 年 12 月 (20)
  • 2020 年 11 月 (11)
  • 2020 年 10 月 (14)
  • 2020 年 9 月 (33)
  • 2020 年 8 月 (17)
  • 2020 年 7 月 (21)
  • 2020 年 6 月 (20)
  • 2020 年 5 月 (10)
  • 2020 年 4 月 (17)
  • 2020 年 3 月 (18)
  • 2020 年 2 月 (11)
  • 2020 年 1 月 (7)
  • 2019 年 12 月 (13)
  • 2019 年 11 月 (14)
  • 2019 年 10 月 (8)
  • 2019 年 9 月 (9)
  • 2019 年 8 月 (13)
  • 2019 年 7 月 (12)
  • 2019 年 6 月 (20)
  • 2019 年 5 月 (18)
  • 2019 年 4 月 (18)
  • 2019 年 3 月 (11)
  • 2019 年 2 月 (12)
  • 2019 年 1 月 (15)
  • 2018 年 12 月 (15)
  • 2018 年 11 月 (13)
  • 2018 年 10 月 (13)
  • 2018 年 9 月 (21)
  • 2018 年 8 月 (29)
  • 2018 年 7 月 (23)
  • 2018 年 6 月 (21)
  • 2018 年 5 月 (5)

标签

AI (24) Apache Drill (11) 加拿大 (21) 宇宙与人生 (19) 情感 (281) 技术 (75) 抑郁症 (68) 新冠病毒 (13) 汽车 (30) 生活 (333) 职场 (25) 行业观点 (60) 读书文艺 (48)
©2025 司马顿的博客 | WordPress Theme by SuperbThemes