WebHDFSの検証
ファイルの作成
ファイルのアクセスは2回に分けて行う必要があります。
作成するファイルの中身はこんな感じです。
$ cat sample.txt 1 aaa 2 bbb 3 ccc
まず、1回目。
- PUTメソッドを利用します
- 操作名は
op=create
。 - 上書きする
overwrite=true
。 - ユーザーはここではhadoopを起動させているユーザーを指定しました。
user.name=rsogo
$ curl -i -X PUT "http://localhost:50070/webhdfs/v1/hoge?op=create&overwrite=true&user.name=rsogo" HTTP/1.1 307 TEMPORARY_REDIRECT Cache-Control: no-cache Expires: Tue, 20 Sep 2016 09:59:29 GMT Date: Tue, 20 Sep 2016 09:59:29 GMT Pragma: no-cache Expires: Tue, 20 Sep 2016 09:59:29 GMT Date: Tue, 20 Sep 2016 09:59:29 GMT Pragma: no-cache Content-Type: application/octet-stream Set-Cookie: hadoop.auth="u=rsogo&p=rsogo&t=simple&e=1474401569719&s=BASKS30rCxMmFD2EbnvPj3Km04A="; Path=/; Expires=?, 20-9-2016 19:59:29 GMT; HttpOnly Location: http://192.168.10.2:50075/webhdfs/v1/hoge?op=CREATE&user.name=rsogo&namenoderpcaddress=localhost:9000&overwrite=true Content-Length: 0 Server: Jetty(6.1.26)
ここでLocationにリダイレクト先のURIが返ってきます。 Hadoopはデータが分散して配置されるのでデータが配置されている場所が返ってきます。
2回目。
リダイレクトされたURL宛に-T
で送るファイルを指定して、リクエストを送ります。
$ curl -i -X PUT "http://192.168.10.2:50075/webhdfs/v1/hoge?op=CREATE&user.name=rsogo&namenoderpcaddress=localhost:9000&overwrite=true" -T sample.txt HTTP/1.1 100 Continue HTTP/1.1 201 Created Location: hdfs://localhost:9000/hoge Content-Length: 0 Connection: close
201 Createdが返ってくればOK。
ファイルの状態確認
$ curl -i "http://localhost:50070/webhdfs/v1/hoge?op=LISTSTATUS" HTTP/1.1 200 OK Cache-Control: no-cache Expires: Tue, 20 Sep 2016 10:08:06 GMT Date: Tue, 20 Sep 2016 10:08:06 GMT Pragma: no-cache Expires: Tue, 20 Sep 2016 10:08:06 GMT Date: Tue, 20 Sep 2016 10:08:06 GMT Pragma: no-cache Content-Type: application/json Transfer-Encoding: chunked Server: Jetty(6.1.26) {"FileStatuses":{"FileStatus":[ {"accessTime":1474365590688,"blockSize":134217728,"childrenNum":0,"fileId":16409,"group":"supergroup","length":19,"modificationTime":1474365591427,"owner":"rsogo","pathSuffix":"","permission":"755","replication":1,"storagePolicy":0,"type":"FILE"} ]}}
ownerはファイル生成の時に指定したユーザーになってますね。 "owner":"rsogo"
ファイルの読み込み
これもCreate同様、2回に別けて行う必要があります。
1回目。Namenodeに向かって下記のコマンドを投げると、リダイレクトを指示されます。
- GETメソッドを利用します
- 操作名は
op=OPEN
。
$ curl -i "http://localhost:50070/webhdfs/v1/hoge?op=OPEN" HTTP/1.1 307 TEMPORARY_REDIRECT Cache-Control: no-cache Expires: Tue, 20 Sep 2016 10:09:39 GMT Date: Tue, 20 Sep 2016 10:09:39 GMT Pragma: no-cache Expires: Tue, 20 Sep 2016 10:09:39 GMT Date: Tue, 20 Sep 2016 10:09:39 GMT Pragma: no-cache Content-Type: application/octet-stream Location: http://192.168.10.2:50075/webhdfs/v1/hoge?op=OPEN&namenoderpcaddress=localhost:9000&offset=0 Content-Length: 0 Server: Jetty(6.1.26)
2回目、支持されたURIにアクセスすることで、Body部に先程作成したファイルの内容が返ってきます。
- GETメソッドを利用します
$ curl -i "http://192.168.10.2:50075/webhdfs/v1/hoge?op=OPEN&namenoderpcaddress=localhost:9000&offset=0" HTTP/1.1 200 OK Access-Control-Allow-Methods: GET Access-Control-Allow-Origin: * Content-Type: application/octet-stream Connection: close Content-Length: 19 1 aaa 2 bbb 3 ccc
検証中、自宅のルーターが不安定でIPアドレスが途中で変わってしまうという事象が発生した。 この時、
参考にさせていただいたサイト
WebHDFS APIメモ(Hishidama's Hadoop WebHDFS REST API Memo)