Impala json解析udfプラグインのインストール
2509 ワード
背景
ImpalaはHiveと同様に、よく使われるデータウェアハウスコンポーネントの1つです.Hiveに詳しい人はきっと知っています.Hiveは公式にgetを提供しています.json_object関数はjson文字列を処理するのに用いられるが,Impala公式では同様の方法は提供されていないが,第三者が類似のudf拡張を実現し,コンパイルインストールを行うだけで,Impalaでjson文字列を処理できるようになった.
環境の紹介 cdh 5.10.1 centos 6.8 impala 2.7.0
ステップ
1、サードパーティ製ソフトウェアのダウンロードインストール
Impalaはc++で記述されているため、Impalaのudfをインストールする場合はコンパイルが必要になるため、gccなどのコンパイル関連サードパーティソフトウェアをダウンロードする必要があります.
2、Impala UDF SDKのインストール
rpmをダウンロードし、installを行います.ここでは、最新版のSDKをインストールすることはできません.最新版のSDKにはバグがあるので、古い版のSDKをダウンロードする必要があります.具体的な議論はここを参照してください.
3、udfコードのダウンロード
サードパーティが実装するjson解析udfコードは、次のとおりです.https://github.com/nazgul33/impala-get-json-object-udf.ダウンロード方法はたくさんありますが、cloneやzip圧縮パッケージを直接ダウンロードすることができます.ダウンロードして解凍します.
4、コンパイル
先ほどのディレクトリに入り、次のようにコンパイルします.
5、アップロードhdfsへ拡張
Impalaは拡張をロードするときにデフォルトでhdfsから読み出すので、コンパイルしたudf拡張をhdfsにアップロードする必要があります.
6、拡張機能の使用
impala-shellに入り、udf関数を作成し、次の操作を試みます.
私たちの拡張はすでに有効になっていることがわかります!
その他
もちろんImpalaはHiveの関数を直接自分のudfとしてインポートすることもサポートしていますが、Hiveはjavaで記述されているので、性能的にはc++ほど速くはありません.できれば、なるべくc++でImpalaの拡張を書きます.
リファレンスドキュメント公式マニュアル
ImpalaはHiveと同様に、よく使われるデータウェアハウスコンポーネントの1つです.Hiveに詳しい人はきっと知っています.Hiveは公式にgetを提供しています.json_object関数はjson文字列を処理するのに用いられるが,Impala公式では同様の方法は提供されていないが,第三者が類似のudf拡張を実現し,コンパイルインストールを行うだけで,Impalaでjson文字列を処理できるようになった.
環境の紹介
ステップ
1、サードパーティ製ソフトウェアのダウンロードインストール
Impalaはc++で記述されているため、Impalaのudfをインストールする場合はコンパイルが必要になるため、gccなどのコンパイル関連サードパーティソフトウェアをダウンロードする必要があります.
# sudo yum install -y gcc-c++ cmake boost-devel
2、Impala UDF SDKのインストール
rpmをダウンロードし、installを行います.ここでは、最新版のSDKをインストールすることはできません.最新版のSDKにはバグがあるので、古い版のSDKをダウンロードする必要があります.具体的な議論はここを参照してください.
# wget https://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/5.10.1/RPMS/x86_64/impala-udf-devel-2.7.0+cdh5.10.1+0-1.cdh5.10.1.p0.8.el6.x86_64.rpm
# rpm -ivh impala-udf-devel-2.7.0+cdh5.10.1+0-1.cdh5.10.1.p0.8.el6.x86_64.rpm
3、udfコードのダウンロード
サードパーティが実装するjson解析udfコードは、次のとおりです.https://github.com/nazgul33/impala-get-json-object-udf.ダウンロード方法はたくさんありますが、cloneやzip圧縮パッケージを直接ダウンロードすることができます.ダウンロードして解凍します.
# wget https://codeload.github.com/nazgul33/impala-get-json-object-udf/zip/master
# unzip impala-get-json-object-udf-master.zip
4、コンパイル
先ほどのディレクトリに入り、次のようにコンパイルします.
# cd impala-get-json-object-udf-master
# cmake .
# make
5、アップロードhdfsへ拡張
Impalaは拡張をロードするときにデフォルトでhdfsから読み出すので、コンパイルしたudf拡張をhdfsにアップロードする必要があります.
# hdfs dfs -mkdir /user/udf
# hdfs dfs -put build/libjsonUdf.so /user/udf
6、拡張機能の使用
impala-shellに入り、udf関数を作成し、次の操作を試みます.
impala-shell> use test_db;
impala-shell> CREATE FUNCTION json_get_object (string, string) RETURNS string location '/user/udf/libjsonUdf.so' symbol='JsonGetObject';
impala-shell> SELECT json_get_object('{"name":"steven"}', '$.name');
+----------------------------------------------------------------+
| user_activities.json_get_object('{"name":"steven"}', '$.name') |
+----------------------------------------------------------------+
| steven |
+----------------------------------------------------------------+
私たちの拡張はすでに有効になっていることがわかります!
その他
もちろんImpalaはHiveの関数を直接自分のudfとしてインポートすることもサポートしていますが、Hiveはjavaで記述されているので、性能的にはc++ほど速くはありません.できれば、なるべくc++でImpalaの拡張を書きます.
リファレンスドキュメント