LoginSignup
2
1

More than 5 years have passed since last update.

hadoop-clientまわりのソースコードリーディング

Posted at

目的

hdfs dfs -ls / を実行した時にどのようなコードが実行されるかコードを追ってみた。

hdfsコマンド

hdfsコマンドは hadoop-hdfs モジュールで管理されている。

dfs

dfs を指定すると、org.apache.hadoop.fs.FsShell が呼び出される。mainメソッドがエントリポイント。

CommandFactory

実行するサブコマンドが決まると、CommandFactoryからそれに対応する実行クラスを取得することができる。

Ls

サブコマンドが ls の場合は、org.apache.hadoop.fs.shell.Ls#run が呼び出される。

Commadn, FsCommand

Ls等のサブコマンドのクラスはFsCommandクラスを、FsCommandクラスはCommandクラスを継承している。Ls#runを呼び出すと、Command#runが起動して、processRawArguments → processArguments → processArgument → processPathArgument → processPaths → processPath と呼び出していく。サブコマンドのクラスは適宜これらのメソッドをオーバーライドする。

PathData

processRawArguments を呼び出す際に、expandArgument を呼び出して引数(文字列)をPathDataに変換する。

この時に、指定されたパスのURLスキームを参照し、適切なFileSystem を取得して、そのパスの情報をPathDataに保存する。

結果出力

LsのprocessPathArgument → processPaths → processPath と遷移し、Ls#processPathでパスの情報を出力して終了。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1