Impalaのmetadataの更新

hadoop
この記事は約3分で読めます。

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経由での実行については,以下にサンプルを公開してくれている方がいるので参考にさせていただいた。

GitHub - onefoursix/Cloudera-Impala-JDBC-Example: A Maven-based example of using Cloudera Impala's JDBC driver
A Maven-based example of using Cloudera Impala's JDBC driver - onefoursix/Cloudera-Impala-JDBC-Example

参考

プログラミング Hive

プログラミング Hive

  • 作者: Edward Capriolo,Dean Wampler,Jason Rutherglen,佐藤直生,嶋内翔,Sky株式会社玉川竜司
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2013/06/15
  • メディア: 大型本
  • この商品を含むブログ (3件) を見る

コメント

タイトルとURLをコピーしました