pythonでHDFSを操作するのに、hdfsパッケージが使用できます。以下の様にpipでインストールできます。
pip install hdfs
また、Dockerでhdfsパッケージを使用できるコンテナを作成するには、以下のDockerfileを使用します。
DokcerfileFROM ubuntu:16.04
RUN locale-gen ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
RUN apt-get update \
&& apt-get -y install python-pip \
&& pip install hdfs
CMD "/bin/bash"
・コンテナのビルドdocker build -t ub1604hdfs .
・コンテナに入る場合(変更は破棄される)docker run -v `pwd`/dat:/dat --add-host hdfsserver:192.168.1.10 --rm -it ub1604hdfs
Ambariを使用している場合、 接続先は HDFS > Configs > Advanced > Advanced hdfs-site と辿って、dfs.namenode.http-addressを確認します
ファイルの列挙は以下のコードのようにlistメソッドを使用します。from hdfs import InsecureClient
url = "http://hdfsserver:50070"
client = InsecureClient(url, user="hdfs")
for filename in client.list("/"):
print(filename)
ローカルファイルをHDFSにアップロードするには、以下のコードのようにuploadメソッドを使用します。
from hdfs import InsecureClient
url = "http://hdfsserver:50070"
client = InsecureClient(url, user="hdfs")
hdfs_path = "/tmp"
local_path = "./test.txt"
client.upload(hdfs_path, local_path)
HDFS上のファイルを読み込むには、以下のコードのようにreadメソッドを使用します。
from hdfs import InsecureClient
url = "http://hdfsserver:50070"
client = InsecureClient(url, user="hdfs")
hdfs_path = "/tmp/test.txt"
with client.read(hdfs_path) as reader:
print(reader.read())
HDFSのファイルをローカルにダウンロードするには、downloadメソッドを使用します。
from hdfs import InsecureClient
url = "http://hdfsserver:50070"
client = InsecureClient(url, user="hdfs")
hdfs_path = "/tmp/test.txt"
local_path = "/dat/download.txt"
client.download(hdfs_path, local_path)
HDFS上のファイルを削除するには、deleteメソッドを使用できます。
from hdfs import InsecureClient
url = "http://hdfsserver:50070"
client = InsecureClient(url, user="hdfs")
hdfs_path = "/tmp/test.txt"
client.delete(hdfs_path, recursive=True)