Hadoop >

目次

概要

  1. WebHDFSは、ver. 0.20.205.0 と 1.0.0 で導入されたHDFSの通信ステップをそのままにHadoopネイティブプロトコルをRestfulなAPIに取り替えたHDFSインタフェイスです。HDFSプロキシではありません。
  2. クライアントはHDFSを構成するすべてのノードと通信できる必要があります。HTTPは運用上ファイアウォールを越えやすいプロトコルではありますが、クラスタを構成するノード数が非常に多いことを考慮するとクライアントはネットワークトポロジー的にクラスタのごく近いロケーションに位置する必要があるかもしれません。
  3. クライアントは、操作ごとに異なるすべての通信ステップを理解しその例外捕捉に責任を負う必要があります。hadoop fs コマンドがユーザには見えないように行っていた部分です。
  4. hadoop fs が使用できる環境であれば、WebHDFSを利用する積極的な理由はないかもしれません。敢えて考えれば、何らかのログストリームを全ノードのWebHDFS宛に並列でAPPENDする場合の実装に優位性があるかもしれません。(セキュリティを別にして)おそらく特定用途のスケールアウト実装に役立つでしょう。

WebHDFS1.0セットアップ

WebHDFS >

目次

他のバージョンのセットアップ

  1. WebHDFS2.0a

セットアップ手順

  1. WebHDFSはHDFS組み込みですので、設定ファイル(hdfs-site.xml)を以下の要領で編集します。note.png完全分散モードではNameNodeDataNodeのサービスプリンシパルがそれぞれ異なりますが、設定キーが一つしか用意されていないようです。ノードごとに同名のシンボリックリンク(HTTP.keytab)を用意するのがベターでしょう。
    1.     <property>
    2.         <name>dfs.webhdfs.enabled</name>
    3.         <value>true</value>
    4.     </property>
    5.     <property>
    6.         <name>dfs.web.authentication.kerberos.principal</name>
    7.         <value>HTTP/localhost@${this.realm}</value>
    8.         <!-- <value>HTTP/_HOST@${this.realm}</value> -->
    9.     </property>
    10.     <property>
    11.         <name>dfs.web.authentication.kerberos.keytab</name>
    12.         <value>${this.keytab.dir}/localhost.keytab</value>
    13.         <!-- <value>${this.keytab.dir}/HTTP.keytab</value> -->
    14.     </property>

使用例

  1. リスト
    $ sudo -u alice kinit
    $ sudo -u alice hadoop fs -ls /user/alice
    12/07/28 10:40:19 INFO util.NativeCodeLoader: Loaded the native-hadoop library
    12/07/28 10:40:19 INFO security.JniBasedUnixGroupsMapping: Using JniBasedUnixGroupsMapping for Group resolution
                    No encryption was performed by peer.
    Found 1 items
    drwx------   - alice alice          0 2012-06-14 17:28 /user/alice/.staging
    
    $ sudo -u alice curl -i --negotiate -u : "http://localhost:50070/webhdfs/v1/user/alice?op=LISTSTATUS"
    HTTP/1.1 401 Unauthorized
    Content-Type: text/html; charset=utf-8
    WWW-Authenticate: Negotiate
    Content-Length: 0
    Server: Jetty(6.1.26)
    
    HTTP/1.1 200 OK
    Content-Type: application/json
    Expires: Thu, 01-Jan-1970 00:00:00 GMT
    Set-Cookie: hadoop.auth="u=alice&p=alice@LOCALHOST&t=kerberos&e=1343475661420&s=sAO6vfSLiJurSCjslWV/0xSvYRU=";Path=/
    Content-Length: 221
    Server: Jetty(6.1.26)
    
    {"FileStatuses":{"FileStatus":[
    {"accessTime":0,"blockSize":0,"group":"alice","length":0,"modificationTime":1339662539679,"owner":"alice",
    "pathSuffix":".staging","permission":"700","replication":0,"type":"DIRECTORY"}
    ] } }
  2. アップロード
    $ cat sample.txt
    Hello WebHDFS!
    $ sudo -u alice curl -i -L --negotiate -u : -X PUT -T sample.txt \
    > "http://localhost:50070/webhdfs/v1/user/alice/sample.txt?op=CREATE"
    HTTP/1.1 100 Continue
    
    HTTP/1.1 401 Unauthorized
    Content-Type: text/html; charset=utf-8
    WWW-Authenticate: Negotiate
    Content-Length: 0
    Server: Jetty(6.1.26)
    
    HTTP/1.1 100 Continue
    
    HTTP/1.1 307 TEMPORARY_REDIRECT
    Content-Type: application/octet-stream
    Expires: Thu, 01-Jan-1970 00:00:00 GMT
    Set-Cookie: hadoop.auth="u=alice&p=alice@LOCALHOST&t=kerberos&e=1343475797021&s=99AdItPC+KSdn31nyv/Yl+WOhmI=";Path=/
    Location: http://deb01.grid.example.com:1006/webhdfs/v1/user/alice/sample.txt?op=CREATE&delegation=HgAFYWxpY2UFYWxpY2UAi
    gE4y0B7IYoBOO9M_yEDBBRGEXeU3Tx06prk8W_XnjFV_pTOkxJXRUJIREZTIGRlbGVnYXRpb24NMC4wLjAuMDo1MDA3MA&overwrite=false
    Content-Length: 0
    Server: Jetty(6.1.26)
    
    HTTP/1.1 100 Continue
    
    HTTP/1.1 201 Created
    Content-Type: application/octet-stream
    Location: webhdfs://0.0.0.0:50470/user/alice/sample.txt
    Content-Length: 0
    Server: Jetty(6.1.26)
  3. 読み出し
    $ sudo -u alice curl -i -L --negotiate -u : "http://localhost:50070/webhdfs/v1/user/alice/sample.txt?op=OPEN"
    HTTP/1.1 401 Unauthorized
    Content-Type: text/html; charset=utf-8
    WWW-Authenticate: Negotiate
    Content-Length: 0
    Server: Jetty(6.1.26)
    
    HTTP/1.1 307 TEMPORARY_REDIRECT
    Content-Type: application/octet-stream
    Expires: Thu, 01-Jan-1970 00:00:00 GMT
    Set-Cookie: hadoop.auth="u=alice&p=alice@LOCALHOST&t=kerberos&e=1343475896813&s=Aum1Yr7tYyCD/5zUyTcGcXhPkwA=";Path=/
    Location: http://deb01.grid.example.com:1006/webhdfs/v1/user/alice/sample.txt?op=OPEN&delegation=HgAFYWxpY2UFYWxpY2UAigE
    4y0IBBooBOO9OhQYEBBReiQb136TGT_lVOXGzqalVHu9mjhJXRUJIREZTIGRlbGVnYXRpb24NMC4wLjAuMDo1MDA3MA&offset=0
    Content-Length: 0
    Server: Jetty(6.1.26)
    
    HTTP/1.1 200 OK
    Content-Type: application/octet-stream
    Content-Length: 15
    Server: Jetty(6.1.26)
    
    Hello WebHDFS!
  4. 削除
    $ sudo -u alice curl -i --negotiate -u : -X DELETE "http://localhost:50070/webhdfs/v1/user/alice/sample.txt?op=DELETE"
    HTTP/1.1 401 Unauthorized
    Content-Type: text/html; charset=utf-8
    WWW-Authenticate: Negotiate
    Content-Length: 0
    Server: Jetty(6.1.26)
    
    HTTP/1.1 200 OK
    Content-Type: application/json
    Expires: Thu, 01-Jan-1970 00:00:00 GMT
    Set-Cookie: hadoop.auth="u=alice&p=alice@LOCALHOST&t=kerberos&e=1343476054705&s=U24F6rddNp3lQD3dtqqFtsPFLeo=";Path=/
    Transfer-Encoding: chunked
    Server: Jetty(6.1.26)
    
    {"boolean":true}
    $ sudo -u alice curl -i --negotiate -u : -X DELETE "http://localhost:50070/webhdfs/v1/user/alice/sample.txt?op=DELETE"
    HTTP/1.1 401 Unauthorized
    Content-Type: text/html; charset=utf-8
    WWW-Authenticate: Negotiate
    Content-Length: 0
    Server: Jetty(6.1.26)
    
    HTTP/1.1 200 OK
    Content-Type: application/json
    Expires: Thu, 01-Jan-1970 00:00:00 GMT
    Set-Cookie: hadoop.auth="u=alice&p=alice@LOCALHOST&t=kerberos&e=1343476059260&s=AeUfLFk8PGYEPVD0sPiOrh8mlFQ=";Path=/
    Transfer-Encoding: chunked
    Server: Jetty(6.1.26)
    
    {"boolean":false}

経路の暗号化(TLS/SSL)

  • HTTPSに対応することは技術的に容易ですが、同じ通信経路を使用するHadoopネイティブプロトコルが(パフォーマンスなどの理由で)暗号化をサポートしていない以上、WebHDFSでのみ経路を暗号化してもセキュリティ上の有効性はありません。クラスタまでの機密性を確保したい場合には、まずクラスタ全体をネットワーク的に防御し、そのエッジにHoopなどでHDFSプロキシサーバを構築して、そこまでの経路を暗号化(HTTPS)すべきでしょう。

リソース

  1. WebHDFS REST API

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-08-25 (土) 11:24:49 (2220d)