文件系统存储插件
你可以注册一个存储插件,使用 Drill 用于连接本地的文件系统或是分布式文件系统,在 Hadoop 的 core-site.xml
,例如 S3 或 HDFS。另外, Apache Drill 包含一个存储插件名叫 dfs
,其指向本地的文件系统。
Drill 连接到一个文件系统
在 Drill 集群中,你通常不查询本地文件系统,替换为分布式文件系统。目前,你需要使用一个分布式文件系统时,连接多个 Drillbit 得到完整的,一致的查询结果,通过将文件复制到每个节点的分布式文件系统进行模拟,或使用 NFS,如 Amazon 的静态文件系统。
你配置连接属性到存储插件工作区间,让 Drill 连接分布式文件系统。例如,以下在客户端通过连接属性让 Drill 连接 HDFS 集群:
"connection": "hdfs://<IP Address>:<Port>/"
在集群的节点上查询 HDFS 上的文件,你可以简单改变连接,在 dfs
存储插件中,将 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 文件系统,你需要包含 IP 地址和端口号。
查询本地文件示例
以下示例展示一个文件类型的存储插件配置,在名叫 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
的工作区间,内容如下所示:
USE dfs.json_files;
SELECT * FROM `donuts.json` WHERE type='frosted'
如果 json_files
工作区间不存在,你查询需要包含 donuts.json
文件的全路径:
SELECT * FROM dfs.`/users/max/drill/json/donuts.json` WHERE type='frosted';