Apache DrillでS3にアクセスする設定をREST APIで行ってみる

Apache Drillを取り上げているブログ記事などを見るとストレージの設定はWebコンソールから行う方法が紹介されていることが多いのですが、環境構築の自動化などを考えると設定などはコマンドラインで済ませたいところです。DrillはREST APIも備えており、これを使用して設定を行うことができるようです。

たとえばS3用にアクセスする設定を行うならDrillを起動した状態でこんな感じのリクエストを投げます。

$ curl -H 'Content-Type: application/json' -XPOST http://localhost:8047/storage/s3.json -d'{
  "name": "s3",
  "config": {
    "type": "file",
    "enabled": true,
    "connection": "s3a://my-backet-name",
    "config": null,
    "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": ","
      },
      "tsv": {
        "type": "text",
        "extensions": [
          "tsv"
        ],
        "delimiter": "\t"
      },
      "parquet": {
        "type": "parquet"
      },
      "json": {
        "type": "json",
        "extensions": [
          "json"
        ]
      },
      "avro": {
        "type": "avro"
      },
      "sequencefile": {
        "type": "sequencefile",
        "extensions": [
          "seq"
        ]
      },
      "csvh": {
        "type": "text",
        "extensions": [
          "csvh"
        ],
        "extractHeader": true,
        "delimiter": ","
      }
    }
  }
}'

なお、アクセスキーの設定はDrillのインストールディレクトリ配下にあるconf/core-site.xmlで別途行う必要があります。また、IAMロールでアクセス権を設定する場合は以下のようにconf/core-site.xmlの該当箇所をコメントアウトする必要があります。

<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>

SQLを実行してみます。

0: jdbc:drill:zk=local> select count(*) from s3.`request_log/*`;
+---------+
| EXPR$0  |
+---------+
| 26      |
+---------+
1 row selected (4.487 seconds)

とりあえずS3に置いておいたファイルを雑に検索できるのは便利ですね。LTSV用のストレージプラグインが欲しいなぁ…。