Hadoop >

目次

概要

  1. HttpFSは、次世代HDFS Proxyを目指し一から書き直された、RestfulなAPIを提供するHDFSプロキシサーバです。最初の開発元はClouderaで Hoop プロジェクトとして開始されましたが、Apache Hadoop 0.23.xにHttpFSとしてコントリビュートされました。

HttpFS2.0aセットアップ

HttpFS >

目次

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

  1. Hoop

セットアップ

  1. Hadoop本体に含まれていますので、適当な場所に展開します。疑似分散の場合には、同一ホストですのでそのまま利用します。
    $ sudo tar xvzf hadoop-2.0.1-alpha.tar.gz -C /grid/usr
    $ cd /grid/usr
    $ sudo chown -R root:root hadoop-2.0.1-alpha/
    $ sudo ln -s hadoop-2.0.1-alpha httpfs
  2. 起動ユーザを(完全分散の場合にはLDAP等に)追加し、一部のディレクトリのオーナーを変更します。
    $ sudo adduser --shell /bin/sh --uid 10011 --disabled-password httpfs
    $ sudo usermod -G hadoop httpfs
    $ cd /grid/usr/hadoop
    $ sudo chown -R httpfs share/hadoop/httpfs
  3. 次にHttpFSサーバがHDFSアクセス時のKerberos認証に必要なユーザプリンシパル(httpfs@LOCALHOST)を追加します。一方ユーザがアクセスするためのSPNEGO/Kerberos用サービスプリンシパル(HTTP/localhost@LOCALHOST)は、疑似分散の場合にはすでに追加済でしょう。
    $ sudo kadmin.local
    Authenticating as principal root/admin@LOCALHOST with password.
    kadmin.local:  add_principal -randkey httpfs
    WARNING: no policy specified for httpfs@LOCALHOST; defaulting to no policy
    Principal "httpfs@LOCALHOST" created.
    kadmin.local:  ktadd -k /grid/etc/keytabs/localhost.keytab httpfs
    ...
  4. HDFSの設定ファイル(etc/hadoop/core-site.xml)に、Secure Impersonation の設定を追加します。以下の設定では、プロキシユーザ httpfs がlocalhostからアクセスした場合にのみ hadoopers グループに属する任意のユーザとして権限認可されます。編集後、HDFSを再起動し反映させます。
    1.     <property>
    2.         <name>hadoop.proxyuser.httpfs.hosts</name>
    3.         <value>localhost</value>
    4.         <!-- <value>${this.cluster.name}-pxy.${this.domain},pxy00.${this.domain},pxy01.${this.domain}</value> -->
    5.     </property>
    6.     <property>
    7.         <name>hadoop.proxyuser.httpfs.groups</name>
    8.         <value>hadoopers</value>
    9.     </property>
    1. あらかじめHttpFSを利用するユーザは、この場合では hadoopers グループに(完全分散の場合にはLDAP等に)追加しておきます。
      $ sudo addgroup --gid 10100 hadoopers
      $ sudo usermod -G hadoopers alice
  5. クラスタの設定を参照するため、etc/hadoop/core-site.xml と etc/hadoop/hdfs-site.xml をプロキシホストにコピーしておきます。
  6. 最後に、HttpFSの設定ファイルを適切に編集します。
    1. etc/hadoop/hoop-env.sh: 環境にあわせて以下の要領で編集します。疑似分散環境での例ですので、localhostを明示しています。
      1. #export JAVA_HOME=/usr/lib/jvm/java-6-sun
      2. export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
      3. #export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386
      4. #export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64
      5. export CATALINA_PID=/grid/vol/0/var/run/httpfs.pid
      6. export HTTPFS_LOG=/grid/vol/0/var/log/httpfs
      7. export HTTPFS_TEMP=/grid/vol/0/tmp/httpfs
      8. export HTTPFS_HTTP_HOSTNAME=localhost
    2. etc/hadoop/hoop-site.xml: HttpFS上での Secure Impersonation も可能ですが、ここでは割愛します。署名用のシークレットファイルを用意し、冗長化するホストに同じものを配備します。
      1. <configuration>
      2.     <!--
      3.     <property>
      4.         <name>this.cluster.name</name>
      5.         <value>pleiades</value>
      6.     </property>
      7.     <property>
      8.         <name>this.domain</name>
      9.         <value>grid.example.com</value>
      10.     </property>
      11.     -->
      12.     <property>
      13.         <name>kerberos.realm</name>
      14.         <value>LOCALHOST</value>
      15.         <!-- <value>GRID.EXAMPLE.COM</value> -->
      16.     </property>
      17.     <property>
      18.         <name>this.keytab.dir</name>
      19.         <value>/grid/etc/keytabs</value>
      20.     </property>
      21.  
      22.     <property>
      23.         <name>httpfs.authentication.signature.secret.file</name>
      24.         <value>${httpfs.config.dir}/httpfs-signature.secret</value>
      25.     </property>
      26.     <property>
      27.         <name>httpfs.authentication.type</name>
      28.         <value>kerberos</value>
      29.     </property>
      30.     <property>
      31.         <name>httpfs.authentication.kerberos.principal</name>
      32.         <value>HTTP/localhost@${kerberos.realm}</value>
      33.         <!-- <value>HTTP/${this.cluster.name}-pxy.${this.domain}@${kerberos.realm}</value> -->
      34.     </property>
      35.     <property>
      36.         <name>httpfs.authentication.kerberos.keytab</name>
      37.         <value>${this.keytab.dir}/localhost.keytab</value>
      38.         <!-- <value>${this.keytab.dir}/${this.cluster.name}-pxy.keytab</value> -->
      39.     </property>
      40.     <property>
      41.         <name>httpfs.hadoop.authentication.type</name>
      42.         <value>kerberos</value>
      43.     </property>
      44.     <property>
      45.         <name>httpfs.hadoop.authentication.kerberos.principal</name>
      46.         <value>httpfs@${kerberos.realm}</value>
      47.         <!-- <value>httpfs@${kerberos.realm}</value> -->
      48.     </property>
      49.     <property>
      50.         <name>httpfs.hadoop.authentication.kerberos.keytab</name>
      51.         <value>${this.keytab.dir}/localhost.keytab</value>
      52.         <!-- <value>${this.keytab.dir}/${this.cluster.name}-pxy.keytab</value> -->
      53.     </property>
      54. </configuration>
  7. HttpFSを起動させます。
    $ sudo -u httpfs sbin/httpfs.sh start

使用例

info.pngHoopでは独自のREST APIでしたが、HttpFSではWebHDFS互換のREST APIになっているようです。

  1. リスト
    $ sudo -u alice curl -i --negotiate -u : "http://localhost:14000?op=homedir"
    HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Accept-Ranges: bytes
    ETag: W/"674-1342632312000"
    Last-Modified: Wed, 18 Jul 2012 17:25:12 GMT
    Content-Type: text/html
    Content-Length: 674
    Date: Mon, 27 Aug 2012 20:36:49 GMT
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!--
      Licensed under the Apache License, Version 2.0 (the "License");
    ...
    -->
    <html>
    <body>
    <b>HttpFs service</b>, service base URL at /webhdfs/v1.
    </body>
    </html>
    
    $ sudo -u alice curl -i --negotiate -u : "http://localhost:14000/webhdfs/v1/user/alice?op=LISTSTATUS"
    HTTP/1.1 401 Unauthorized
    Server: Apache-Coyote/1.1
    WWW-Authenticate: Negotiate
    Set-Cookie: hadoop.auth=""; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
    Content-Type: text/html;charset=utf-8
    Content-Length: 979
    Date: Mon, 27 Aug 2012 20:27:41 GMT
    
    HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    WWW-Authenticate: Negotiate YGoGCSqGSIb3EgECAgIAb1swWaADAgEFoQMCAQ+iTTBLoAMCARKiRARCVmZ4Nz3flYZZsdlU8WA3cMd8kHGKxTDYVTDl
    9cpIguS90VDR49B5T1AaVgc9D2hMrvKQ3tLqxEz5oi0rcClNb96V
    Set-Cookie: hadoop.auth="u=alice&p=alice@LOCALHOST&t=kerberos&e=1346081261963&s=TaMvd3jONqm7aiDtLLViencmwRo=";
     Version=1; Path=/
    Content-Type: application/json
    Transfer-Encoding: chunked
    Date: Mon, 27 Aug 2012 20:27:43 GMT
    
    {"FileStatuses":{"FileStatus":[{"pathSuffix":".staging","type":"DIRECTORY","length":0,"owner":"alice","group":"alice",
    "permission":"700","accessTime":0,"modificationTime":1346031007360,"blockSize":0,"replication":0}] } }
  2. アップロード: ヘッダ(Content-Type: application/octet-stream)の付加が必要でした。
    $ sudo -u alice curl -i -L --negotiate -u : -H "Content-Type: application/octet-stream" -X PUT -T ./sample.txt \
    > "http://localhost:14000/webhdfs/
    HTTP/1.1 100 Continue
    
    HTTP/1.1 401 Unauthorized
    Server: Apache-Coyote/1.1
    WWW-Authenticate: Negotiate
    Set-Cookie: hadoop.auth=""; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
    Content-Type: text/html;charset=utf-8
    Content-Length: 979
    Date: Mon, 27 Aug 2012 20:53:06 GMT
    
    HTTP/1.1 100 Continue
    
    HTTP/1.1 307 Temporary Redirect
    Server: Apache-Coyote/1.1
    WWW-Authenticate: Negotiate YGoGCSqGSIb3EgECAgIAb1swWaADAgEFoQMCAQ+iTTBLoAMCARKiRARCMZrKs1s2QcD0y+ueEUy2cSNopvkLlxws2Hah
    Tq6kpbftTeExQCZjwL/jZOfS2EnbqUeFJcN9Doia8wcO8VcVoRhX
    Set-Cookie: hadoop.auth="u=alice&p=alice@LOCALHOST&t=kerberos&e=1346082786618&s=B1ndH4xI4U9WMk6QrBSUisWDFV8=";
     Version=1; Path=/
    Location: http://localhost:14000/webhdfs/v1/user/alice/sample.txt?op=CREATE&data=true
    Content-Type: application/json
    Content-Length: 0
    Date: Mon, 27 Aug 2012 20:53:06 GMT
    
    HTTP/1.1 100 Continue
    
    HTTP/1.1 401 Unauthorized
    Server: Apache-Coyote/1.1
    WWW-Authenticate: Negotiate
    Set-Cookie: hadoop.auth=""; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
    Content-Type: text/html;charset=utf-8
    Content-Length: 979
    Date: Mon, 27 Aug 2012 20:53:06 GMT
    
    HTTP/1.1 100 Continue
    
    HTTP/1.1 201 Created
    Server: Apache-Coyote/1.1
    WWW-Authenticate: Negotiate YGoGCSqGSIb3EgECAgIAb1swWaADAgEFoQMCAQ+iTTBLoAMCARKiRARCxvZeVrd5JwbhTc42LVDnw3rB8w9Xrm0LrM0d
    SL7tL77drlJ9j8lGjXwqvooo7Nd/jOyE4Ap5wm0yHz2MmM9oFA9D
    Set-Cookie: hadoop.auth="u=alice&p=alice@LOCALHOST&t=kerberos&e=1346082786638&s=4sBSbDOfy7qEeAFflqHxkA/Tn8w=";
     Version=1; Path=/
    Content-Type: application/json
    Content-Length: 0
    Date: Mon, 27 Aug 2012 20:53:07 GMT
  3. 読み出し
    $ sudo -u alice curl -i --negotiate -u : "http://localhost:14000/webhdfs/v1/user/alice/sample.txt?op=OPEN"
    HTTP/1.1 401 Unauthorized
    Server: Apache-Coyote/1.1
    WWW-Authenticate: Negotiate
    Set-Cookie: hadoop.auth=""; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
    Content-Type: text/html;charset=utf-8
    Content-Length: 979
    Date: Mon, 27 Aug 2012 20:58:43 GMT
    
    HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    WWW-Authenticate: Negotiate YGoGCSqGSIb3EgECAgIAb1swWaADAgEFoQMCAQ+iTTBLoAMCARKiRARC2ZGNliugt2t4UKVhahtYDYebNY/IP1vaRt9o
    +PjT1wx9KYudQxjoj+sdYSKac2VSjRTCtdIoFw5RUnJaGIuUu9/W
    Set-Cookie: hadoop.auth="u=alice&p=alice@LOCALHOST&t=kerberos&e=1346083123071&s=QhCo3ElQUqlHtmPWQfDMsV0Amto=";
     Version=1; Path=/
    Content-Type: application/octet-stream
    Content-Length: 15
    Date: Mon, 27 Aug 2012 20:58:43 GMT
    
    Hello WebHDFS!
  4. 削除
    $ sudo -u alice curl -i --negotiate -u : -X DELETE "http://localhost:14000/webhdfs/v1/user/alice/sample.txt?op=DELETE"
    HTTP/1.1 401 Unauthorized
    Server: Apache-Coyote/1.1
    WWW-Authenticate: Negotiate
    Set-Cookie: hadoop.auth=""; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
    Content-Type: text/html;charset=utf-8
    Content-Length: 979
    Date: Mon, 27 Aug 2012 21:01:43 GMT
    
    HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    WWW-Authenticate: Negotiate YGoGCSqGSIb3EgECAgIAb1swWaADAgEFoQMCAQ+iTTBLoAMCARKiRARCnKTogN6rD4dRi955qJ7HKnptzvo+ViF/9FuU
    +KVoEHX0ftbWBPrqNC2ywKEx7S4DSz1+BMx51hStbsAAN0HOb/Ug
    Set-Cookie: hadoop.auth="u=alice&p=alice@LOCALHOST&t=kerberos&e=1346083303730&s=LNVUBW1l0iPNA8+Qzstiy1mQ67A=";
     Version=1; Path=/
    Content-Type: application/json
    Transfer-Encoding: chunked
    Date: Mon, 27 Aug 2012 21:01:43 GMT
    
    {"boolean":true}
    
    $ sudo -u alice curl -i --negotiate -u : -X DELETE "http://localhost:14000/webhdfs/v1/user/alice/sample.txt?op=DELETE"
    HTTP/1.1 401 Unauthorized
    Server: Apache-Coyote/1.1
    WWW-Authenticate: Negotiate
    Set-Cookie: hadoop.auth=""; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
    Content-Type: text/html;charset=utf-8
    Content-Length: 979
    Date: Mon, 27 Aug 2012 21:02:26 GMT
    
    HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    WWW-Authenticate: Negotiate YGoGCSqGSIb3EgECAgIAb1swWaADAgEFoQMCAQ+iTTBLoAMCARKiRARCAwwIEAPCkn3wTbVj9u3T3HCB5YxkMIqar5+S
    f4+5XMXTCjK+/7C6lb4HdcNouApYBRWs2Ogq2J1a4grE4/6zcrAT
    Set-Cookie: hadoop.auth="u=alice&p=alice@LOCALHOST&t=kerberos&e=1346083346560&s=4owYrkaXy4VPMLKhVBMRF4HRQLA=";
     Version=1; Path=/
    Content-Type: application/json
    Transfer-Encoding: chunked
    Date: Mon, 27 Aug 2012 21:02:26 GMT
    
    {"boolean":false}

経路の暗号化(TLS/SSL)

  1. HttpFSはプロキシですので、それ以外のクラスタへの経路を遮断し、HttpFSまでの経路をセキュア(機密性)にすることにはセキュリティ上の有効性があります。
  2. HttpFSはすでにApache Tomcat上で動作していますので、Tomcat(Apache-Coyoteコネクタ)にTLS/SSLの設定を行うとよいでしょう。

リソース

  1. Hadoop HDFS over HTTP - Documentation Sets 2.0.0-alpha

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-08-26 (日) 00:41:40 (2180d)