文件系统存储插件

你可以注册一个存储插件,使用 Drill 用于连接本地的文件系统或是分布式文件系统,在 Hadoop 的 core-site.xml,例如 S3 或 HDFS。另外, Apache Drill 包含一个存储插件名叫 dfs,其指向本地的文件系统。

Drill 连接到一个文件系统

在 Drill 集群中,你通常不查询本地文件系统,替换为分布式文件系统。目前,你需要使用一个分布式文件系统时,连接多个 Drillbit 得到完整的,一致的查询结果,通过将文件复制到每个节点的分布式文件系统进行模拟,或使用 NFS,如 Amazon 的静态文件系统。

你配置连接属性到存储插件工作区间,让 Drill 连接分布式文件系统。例如,以下在客户端通过连接属性让 Drill 连接 HDFS 集群:

  1. "connection": "hdfs://<IP Address>:<Port>/"

在集群的节点上查询 HDFS 上的文件,你可以简单改变连接,在 dfs 存储插件中,将 file:/// 改为 hdfs:///

为了改变 dfs 存储插件配置,指向不同的本地或分布式文件系统,使用 connection 属性:

  • 本地文件系统示例:
    1. {
    2. "type": "file",
    3. "enabled": true,
    4. "connection": "file:///",
    5. "workspaces": {
    6. "root": {
    7. "location": "/user/max/donuts",
    8. "writable": false,
    9. "defaultInputFormat": null
    10. }
    11. },
    12. "formats" : {
    13. "json" : {
    14. "type" : "json"
    15. }
    16. }
    17. }
  • 分布式文件系统示例:
    1. {
    2. "type" : "file",
    3. "enabled" : true,
    4. "connection" : "hdfs://10.10.30.156:8020/",
    5. "workspaces" : {
    6. "root" : {
    7. "location" : "/user/root/drill",
    8. "writable" : true,
    9. "defaultInputFormat" : null
    10. }
    11. },
    12. "formats" : {
    13. "json" : {
    14. "type" : "json"
    15. }
    16. }
    17. }

为了连接 Hadoop 文件系统,你需要包含 IP 地址和端口号。

查询本地文件示例

以下示例展示一个文件类型的存储插件配置,在名叫 json_files 的工作区间中。配置指向 Drill 的 /users/max/drill/json/ 目录在本地文件系统中(dfs)。

  1. {
  2. "type" : "file",
  3. "enabled" : true,
  4. "connection" : "file:///",
  5. "workspaces" : {
  6. "json_files" : {
  7. "location" : "/users/max/drill/json/",
  8. "writable" : false,
  9. "defaultInputFormat" : json
  10. }
  11. },

connection 参数是配置 "file:///",连接 Drill 到本地文件系统。

查询文件在示例工作区间 json_files,你可以使用 USE 命令告诉 Drill 使用 json_files 的工作区间,内容如下所示:

  1. USE dfs.json_files;
  2. SELECT * FROM `donuts.json` WHERE type='frosted'

如果 json_files 工作区间不存在,你查询需要包含 donuts.json 文件的全路径:

  1. SELECT * FROM dfs.`/users/max/drill/json/donuts.json` WHERE type='frosted';