fluentdでHDFSへ書き込んだログをImpalaですぐに実行したい。
Impala1.2.Xで,Impalad,Catalogd + StateStoreの構成で試験的に稼働させている。CatalogdとStateStoreの役割については,いつも参考にさせていただいているKernel023さんの参考リンクに詳しく説明されている。Catalogdサービスを動かしていればImpala経由で実行したDDLによる変更は,クラスタ内の他のImpaladにも反映されるようだ。なお,HueのImpala Query UIから『METASTOREカタログの更新』を実行するとInvalid method name: 'ResetCatalog' (code THRIFTAPPLICATION): None
とエラーになる。クエリでinvalidate metadataと
実行することは問題ない。
現在,fluendからHDFSへ書き込んだ時間単位のログ(flush_intervalは数分置き)は,EXTERNAL TABLE
でHiveで読めるようにしている。また,時間単位のログはDailyでHiveのDBディレクトリ直下に圧縮して保存している。いずれも,Hive経由で処理しているので,時間単位とDailyでの更新をImpalaへ別途通知する必要がある。
Impalaに更新を通知するのにどうすればよいものかと思っていたが,結局以下のようにして現状対応することとした。
- 時間単位のログについては,定期に1時間単位などで
refresh <table>
を実行。invalidate metadata
だと時間がかかるので,テーブル指定で変更のあるテーブルのみに適用する。 - 最新の時間単位のログをImpalaクエリで処理する場合は,実行するクエリに
refresh <table>
を加える。 - Dailyでログを圧縮した際には,
invalidate metadata
を実行。
とりあえずはこれでしばらく様子を見てみる。
メインの開発環境がJavaなので,いつもの慣れたAPIでJDBC経由でクエリを実行したいと思っていたところ,Impalaの実行にはimpala-shell,ODBC,JDBC,Beeswax(Thrift),Impala Query UIのインターフェースがあるようだった。JDBC経由での実行については,以下にサンプルを公開してくれている方がいるので参考にさせていただいた。
参考
- http://linux.wwing.net/WordPress/?p=855
- http://www.cloudera.com/content/cloudera-content/cloudera-docs/Impala/latest/Installing-and-Using-Impala/ciiu_concepts.html
- 作者: Edward Capriolo,Dean Wampler,Jason Rutherglen,佐藤直生,嶋内翔,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/06/15
- メディア: 大型本
- この商品を含むブログ (3件) を見る
コメント