S3 存储插件

Drill 工作的数据存储在云端。通过一些简单的步骤,你可以配置 S3 存储插件到 Drill,关闭之前正在运行的查询。

连接 Drill 到 S3

启用的版本是 1.3.0,Drill 有能力去查询存储在 Amazon 的 S3 云端上的文件,配置其存储插件,并使用 S3 的依赖库。这是很重要的,因为 S3 增加了支持 5G 的文件。

这里有两个简单的步骤,如下所示:

  1. 提供你的 AWS 证书。
  2. 配置 S3 存储插件到 S3 bucket。

AWS 证书

启用 Drill 的 S3 支持,在你的 Drill 安装目录中,编辑 conf/core-site.xml 文件,替换 ENTER_YOUR_ACESSKEY 和 ENTER_YOUR_SECRETKEY 为你的 AWS 证书。

  1. <configuration>
  2. <property>
  3. <name>fs.s3a.access.key</name>
  4. <value>ENTER_YOUR_ACCESSKEY</value>
  5. </property>
  6. <property>
  7. <name>fs.s3a.secret.key</name>
  8. <value>ENTER_YOUR_SECRETKEY</value>
  9. </property>
  10. </configuration>

配置 S3 存储插件

启用 S3 存储插件,然后增加以下步骤:

  1. 在浏览器中输入 http://<your_drill_host>:8047,然后进入到 “Storage” 栏。
  2. 复制 “dfs” 插件。点击 “dfs” 插件的 “Update” 按钮,复制出现的 JSON 文本。
  3. 创建一个新的存储插件,并粘贴刚刚复制的 “dfs” 文本。
  4. 替换 “file:///” 为你的 “s3a://your.bucketname”。
  5. 你的新存储插件,可以取名为 “s3-<bucketname>”

你现在应该能够通过 S3a 库,使用存储在 S3 上的数据了。

示例 S3 存储插件

  1. {
  2. "type": "file",
  3. "enabled": true,
  4. "connection": "s3a://apache.drill.cloud.bigdata/",
  5. "workspaces": {
  6. "root": {
  7. "location": "/",
  8. "writable": false,
  9. "defaultInputFormat": null
  10. },
  11. "tmp": {
  12. "location": "/tmp",
  13. "writable": true,
  14. "defaultInputFormat": null
  15. }
  16. },
  17. "formats": {
  18. "psv": {
  19. "type": "text",
  20. "extensions": [
  21. "tbl"
  22. ],
  23. "delimiter": "|"
  24. },
  25. "csv": {
  26. "type": "text",
  27. "extensions": [
  28. "csv"
  29. ],
  30. "delimiter": ","
  31. },
  32. ....
  33. }
  34. }

在 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 文件中:

  1. <configuration>
  2. ...
  3. <property>
  4. <name>fs.s3a.connection.maximum</name>
  5. <value>100</value>
  6. </property>
  7. </configuration>