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などのコンパイル関連サードパーティソフトウェアをダウンロードする必要があります.
    # 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の拡張を書きます.
    リファレンスドキュメント
  • 公式マニュアル