記憶力が無い

プログラミングとランニングとカメラと何か

今更Anacondaを使ってみた

モチベーション

S3のファイルをHDFSに持っていく場合、これまでは

  1. aws s3 cp でS3からローカルにダウンロード
  2. 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 と機能的には似ており、依存するパッケージのバージョンを切り替えるのに使います。

コマンド等に関しては下のサイトを見ると良いと思います。

docs.conda.io

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 を使おうと頑張ってみましたが、プロキシにどうも対応してないっぽくて、撃沈しました。

issues.apache.org

誰かc++かける人、プルリク送ってください。

まとめ

Anaconda といいつつ、Conda しか使ってないわけですが、それだけでも使ってみる価値はあるかなーという感じです。

*1:例えば HadoopFileSystem を使う場合、Hadoop の jar を CLASSPATH に指定しておく必要があります

Copyright © 2017 ttk1