S3 存储插件
Drill 工作的数据存储在云端。通过一些简单的步骤,你可以配置 S3 存储插件到 Drill,关闭之前正在运行的查询。
连接 Drill 到 S3
启用的版本是 1.3.0,Drill 有能力去查询存储在 Amazon 的 S3 云端上的文件,配置其存储插件,并使用 S3 的依赖库。这是很重要的,因为 S3 增加了支持 5G 的文件。
这里有两个简单的步骤,如下所示:
- 提供你的 AWS 证书。
- 配置 S3 存储插件到 S3 bucket。
AWS 证书
启用 Drill 的 S3 支持,在你的 Drill 安装目录中,编辑 conf/core-site.xml
文件,替换 ENTER_YOUR_ACESSKEY 和 ENTER_YOUR_SECRETKEY 为你的 AWS 证书。
<configuration>
<property>
<name>fs.s3a.access.key</name>
<value>ENTER_YOUR_ACCESSKEY</value>
</property>
<property>
<name>fs.s3a.secret.key</name>
<value>ENTER_YOUR_SECRETKEY</value>
</property>
</configuration>
配置 S3 存储插件
启用 S3 存储插件,然后增加以下步骤:
- 在浏览器中输入
http://<your_drill_host>:8047
,然后进入到 “Storage” 栏。 - 复制 “dfs” 插件。点击 “dfs” 插件的 “Update” 按钮,复制出现的 JSON 文本。
- 创建一个新的存储插件,并粘贴刚刚复制的 “dfs” 文本。
- 替换 “file:///” 为你的 “s3a://your.bucketname”。
- 你的新存储插件,可以取名为 “s3-<bucketname>”
你现在应该能够通过 S3a 库,使用存储在 S3 上的数据了。
示例 S3 存储插件
{
"type": "file",
"enabled": true,
"connection": "s3a://apache.drill.cloud.bigdata/",
"workspaces": {
"root": {
"location": "/",
"writable": false,
"defaultInputFormat": null
},
"tmp": {
"location": "/tmp",
"writable": true,
"defaultInputFormat": null
}
},
"formats": {
"psv": {
"type": "text",
"extensions": [
"tbl"
],
"delimiter": "|"
},
"csv": {
"type": "text",
"extensions": [
"csv"
],
"delimiter": ","
},
....
}
}
在 S3 上查询 Parquet 格式文件
Drill 使用 Hadoop 文件系统读取 S3 输入的文件,这里使用了 Apache 的 HttpClient。HttpClient 有一个默认的四个同时请求的限制,并提出了后续的 S3 请求在队列中。Drill 查询大数据列或一个 Select * 查询,在 Parquet 格式文件请求失败,S3 会抛出 ConnectionPoolTimeoutException 异常。
幸运的是,在 Hadoop 2.7.1 中实现了 S3a 的该部分功能,HttpClient 的请求的限制参数的提取,通过配置能够避免 ConnectionPoolTimeoutException。下面是如何去设置相关参数到 conf/core-site.xml 文件中:
<configuration>
...
<property>
<name>fs.s3a.connection.maximum</name>
<value>100</value>
</property>
</configuration>