モチベーション
S3のファイルをHDFSに持っていく場合、これまでは
aws s3 cp
でS3からローカルにダウンロードhdfs dfs -put
でローカルからHDFSにアップロード
の手順をやっていました。
単純なスクリプトならこれで十分なのですが、ある程度複雑になってくると、 bashがつらくなってきます。
そのため、Pythonだけで完結できないかと調べ、 pyarrow を使ってみることにしました。
pyarrowには次の3つの FileSystem の実装が含まれます。
- LocalFileSystem
- HadoopFileSystem
- S3FileSystem
HadoopFileSystem と S3FileSystem が使えるので、S3のファイルを直接HDFSに突っ込めそうです...
しかし、pip install
で入れた場合、S3FileSystem は現状使えないため、
conda-forge 経由でインストールする必要があります。
# cibda-forge経由でpyarrowをインストールする conda install -c conda-forge pyarrow
ということで、必要に駆られて今更ながら Anaconda を触ることになりました。
Condaとは
Conda は Anaconda に付属する、Pythonのパッケージのインストールや、実行環境の切り替えを行うためのツールです。 venv と機能的には似ており、依存するパッケージのバージョンを切り替えるのに使います。
コマンド等に関しては下のサイトを見ると良いと思います。
Condaを使うことのメリット
異なるPythonのバージョンを使うことが出来る
通常は yum install
等で入れたPythonをサーバーのユーザ全体で共有することになりますが、
Condaを使うと環境ごとに異なるPythonのバージョンを使うことが出来ます。
# tama_py38という名前でpython3.8の環境を構築 conda create --name tama_py38 python=3.8
Pythonのバージョンアップが捗りそうです。
既存の環境をコピーする
コマンド1つで、既存の環境をコピーして新しい環境を作ることが出来ます。
# tama_py38をtama_py38_copyという名前で複製 conda create --name tama_py38_copy --clone tama_py38
環境構築が捗りそうです。
condaを使っても解決できない問題
外部のライブラリが必要な場合*1、conda を使っても環境を完全に切り替えることは出来ません。 Dockerを使うなり、別のやり方を考えましょう。
オチ
Anaconda を導入してまで、S3FileSystem を使おうと頑張ってみましたが、プロキシにどうも対応してないっぽくて、撃沈しました。
誰かc++かける人、プルリク送ってください。
(2022-10-31 追記) いつの間にかプロキシに対応してました。あざます。
まとめ
Anaconda といいつつ、Conda しか使ってないわけですが、それだけでも使ってみる価値はあるかなーという感じです。
*1:例えば HadoopFileSystem を使う場合、Hadoop の jar を CLASSPATH に指定しておく必要があります