Cloudera Data Science Workbench (以下CDSW) 上で、PyArrowからHDFSに接続するための方法をまとめておく。
PyArrowからHDFSに接続するための基礎知識
PyArrowは libhdfs.so
を使ってHDFSに接続する。
そのため、このライブラリが正しくロードされるかどうかが重要となる。
PyArrowは、デフォルトでは $HADOOP_HOME/lib/native
以下を参照して libhdfs.so
を検索するが、存在しない場合は ARROW_LIBHDFS_DIR
以下を検索する。
インストール
以下のファイルを作成しておく。
pyarrow
セッション起動時に以下のコマンドを実行する。
!pip3 install -r requirements.txt
環境変数の設定
libhdfs.so
は、デフォルトでは /opt/cloudera/parcels/CDH-5.13.0-1.cdh5.13.0.p0.29/lib64
以下に存在するので、これを ARROW_LIBHDFS_DIR
に指定する。
Settings → Engine を選択すると、セッション起動時に読み込む環境変数を指定できるので、以下のように入力する。
変数 | 値 |
---|---|
ARROW_LIBHDFS_DIR | /opt/cloudera/parcels/CDH-5.13.0-1.cdh5.13.0.p0.29/lib64 |
Addするだけでなく、Saveしなければいけないことに注意。
また、セッションは再起動する必要がある。
Kerberosのチケットの場所の確認
!klist
を実行することで簡単に確認できる。
!klist
Ticket cache: FILE:/tmp/xxxxxx
接続する
import pyarrow as pa
fs = pa.hdfs.connect(host, port, user=user, kerb_ticket='tmp/xxxxxx')
これで、HDFSのデータをPyArrow上で取り扱えるようになる。