Drill:文件系统插件

你可以配置一个存储插件,来让Drill连接到一个本地文件系统,或是在Hadoop的core-site.xml里注册过的分布式文件系统,像是S3或是HDFS。默认情况下,Drill都提供了一个叫dfs的插件配置,指向了您的本地文件系统。

连接Drill到一个文件系统

在一个Drill集群中,您一般不会查询一个本地文件系统,而是将文件放在分布式文件系统中。当前阶段,您连接到多个Drill终端时,为了得到一致的,完整的查询结果,通常都需要一个分布式的文件系统 ,这个可能是通过将文件拷贝到所有的节点来模拟,或是使用NFS,也或者是使用Amazon的弹性云系统。

您 要在插件的工作空间中配置connection 属性,这样Drill才能连接到分布式文件系统;例如,下面的配置可以让Drill从一个客户端连接到HDFS集群:

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

在集群中,要从一台机器查询HDFS上的文件,你只需要简单地将dfs插件中的connection属性中的”file:///”改成”hdfs://”就行了。

要修改dfs插件的配置来指向不同的本地或分布式文件系统,像下面这样使用connection属性就好了

  • 本地文件系统的例子:
{
    "type": "file",
    "enabled": true,
    "connection": "file:///",
    "workspaces": {
      "root": {
        "location": "/user/max/donuts",
        "writable": false,
        "defaultInputFormat": null
       }
    },
    "formats" : {
      "json" : {
        "type" : "json"
      }
    }
  }

分布式文件系统的例子:

{
    "type" : "file",
    "enabled" : true,
    "connection" : "hdfs://10.10.30.156:8020/",
    "workspaces" : {
      "root" : {
        "location" : "/user/root/drill",
        "writable" : true,
        "defaultInputFormat" : null
      }
    },
    "formats" : {
      "json" : {
        "type" : "json"
      }
    }
  }

要连接到Hadoop的文件系统,你要将name node的IP和端口写在配置中。

甜甜圈例子

下面的例子展示了一个file类型的插件,还带有一个叫json_files的工作空间。这个配置将Drill指向到了本机的/users/max/drill/json/目录(dfs)。

{
  "type" : "file",
  "enabled" : true,
  "connection" : "file:///",
  "workspaces" : {
    "json_files" : {
      "location" : "/users/max/drill/json/",
      "writable" : false,
      "defaultInputFormat" : json
   } 
},

配置里的”connection”选项是”file:///”,将Drill连接到了本地的文件系统 。

要查询示例的json_files工作空间里的文件,你可以使用USE指令来告诉Drill使用json_files工作空间,这个工作空间是指定在dfs插件里的。

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

如果json_files 工作空间不存在,查询就需要像下面这样指定完整的路径:

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注