WebHDFS REST API

ドキュメント表記規則

等幅フォント コマンド、HTTPリクエストとレスポンス、コードブロックに使用されます。
<等幅フォント> ユーザーが入力した値。
[等幅フォント] オプションの値。値が指定されていない場合、デフォルト値が使用されます。
イタリック体 重要なフレーズと単語。

はじめに

HTTP REST APIは、HDFSの完全なFileSystem/FileContextインターフェースをサポートしています。操作と対応するFileSystem/FileContextメソッドは、次のセクションに示されています。セクションHTTPクエリパラメータ辞書は、デフォルト値や有効値などのパラメータの詳細を指定しています。

操作

FileSystem URIとHTTP URL

WebHDFSのFileSystemスキームは“webhdfs://”です。WebHDFS FileSystem URIは以下のフォーマットになります。

  webhdfs://<HOST>:<HTTP_PORT>/<PATH>

上記のWebHDFS URIは、以下のHDFS URIに対応します。

  hdfs://<HOST>:<RPC_PORT>/<PATH>

REST APIでは、プレフィックス“/webhdfs/v1”がパスに挿入され、クエリが最後に追加されます。そのため、対応するHTTP URLは以下のフォーマットになります。

  http://<HOST>:<HTTP_PORT>/webhdfs/v1/<PATH>?op=...

注記 WebHDFSがSSLで保護されている場合、スキームは“swebhdfs://”になります。

  swebhdfs://<HOST>:<HTTP_PORT>/<PATH>

参照:SWebHDFSのSSL設定

HDFS設定オプション

以下は、WebHDFSのHDFS設定オプションです。

プロパティ名 説明
dfs.web.authentication.kerberos.principal HTTPエンドポイントでHadoop-Authが使用するHTTP Kerberosプリンシパル。Kerberos HTTP SPNEGO仕様に従って、HTTP Kerberosプリンシパルは「HTTP/」で始まる必要があります。「*」の値は、キータブにあるすべてのHTTPプリンシパルを使用します。
dfs.web.authentication.kerberos.keytab HTTPエンドポイントでHadoop-Authが使用するHTTP Kerberosプリンシパルの資格情報を含むKerberosキータブファイル。
dfs.webhdfs.socket.connect-timeout 接続確立に失敗するまでの待機時間。時間の長さで指定します(数値に単位記号を付加、例:2mは2分)。デフォルトは60秒です。
dfs.webhdfs.socket.read-timeout データの到着を待つ時間。デフォルトは60秒です。

認証

セキュリティがオフの場合、認証済みユーザーはuser.nameクエリパラメータで指定されたユーザー名です。user.nameパラメータが設定されていない場合、サーバーは認証済みユーザーをデフォルトのWebユーザー(存在する場合)に設定するか、エラー応答を返します。

セキュリティがオンの場合、認証はHadoop委任トークンまたはKerberos SPNEGOによって実行されます。トークンがdelegationクエリパラメータに設定されている場合、認証済みユーザーはトークンにエンコードされたユーザーです。delegationパラメータが設定されていない場合、ユーザーはKerberos SPNEGOによって認証されます。

以下は、curlコマンドツールを使用した例です。

  1. セキュリティがオフの場合の認証

    curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?[user.name=<USER>&]op=..."
    
  2. セキュリティがオンの場合のKerberos SPNEGOを使用した認証

    curl -i --negotiate -u : "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=..."
    
  3. セキュリティがオンの場合のHadoop委任トークンを使用した認証

    curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?delegation=<TOKEN>&op=..."
    

参照:Hadoop HTTP Webコンソールの認証

さらに、WebHDFSはクライアント側でOAuth2をサポートしています。NameNodeとDataNodeは現在、OAuth2を使用するクライアントをサポートしていませんが、WebHDFS RESTインターフェースを実装する他のバックエンドはサポートしている可能性があります。

WebHDFSは、デフォルトで2種類のOAuth2コード付与(ユーザーが提供する更新トークンとアクセストークン、またはユーザーが提供する資格情報)をサポートしており、OAuth2 RFCに従って、他のOAuth2認証またはカスタム認証を実装するためのプラグ可能なメカニズムを提供しています。提供されているコード付与メカニズムのいずれかを使用する場合、WebHDFSクライアントは必要に応じてアクセストークンを更新します。

OAuth2は、Kerberos SPNEGOで実行されていないクライアントに対してのみ有効にする必要があります。

OAuth2コード付与メカニズム 説明 コード付与を実装するdfs.webhdfs.oauth2.access.token.providerの値
認可コード付与 ユーザーは、WebHDFSリクエストの認証と置換アクセストークンの取得に使用される初期アクセストークンと更新トークンを提供します。 org.apache.hadoop.hdfs.web.oauth2.ConfRefreshTokenBasedAccessTokenProvider
クライアント資格情報付与 ユーザーは、アクセストークンの取得に使用される資格情報を提供し、そのアクセストークンはWebHDFSリクエストの認証に使用されます。 org.apache.hadoop.hdfs.web.oauth2.ConfCredentialBasedAccessTokenProvider

以下のプロパティはOAuth2認証を制御します。

OAuth2関連プロパティ 説明
dfs.webhdfs.oauth2.enabled OAuth2認証の有効/無効を切り替えるブール値
dfs.webhdfs.oauth2.access.token.provider org.apache.hadoop.hdfs.web.oauth.AccessTokenProviderの実装のクラス名。上記のようにコードに2つが提供されています。または、ユーザーが提供した実装を指定することもできます。この設定キーのデフォルト値はConfCredentialBasedAccessTokenProvider実装です。
dfs.webhdfs.oauth2.client.id 資格情報または更新トークンを使用してアクセストークンを取得するために使用されるクライアントID
dfs.webhdfs.oauth2.refresh.url 資格情報または更新トークンを使用してベアラートークンを取得するためにポストするURL
dfs.webhdfs.oauth2.access.token (ConfRefreshTokenBasedAccessTokenProviderを使用する場合に必要)認証に使用する初期アクセストークン
dfs.webhdfs.oauth2.refresh.token (ConfRefreshTokenBasedAccessTokenProviderを使用する場合に必要)新しいアクセストークンを取得するために使用する初期更新トークン
dfs.webhdfs.oauth2.refresh.token.expires.ms.since.epoch (ConfRefreshTokenBasedAccessTokenProviderを使用する場合に必要)1970年1月1日からのミリ秒単位で測定したアクセストークンの有効期限。注記:これはOAuthプロバイダーが提供するものとは異なる値であり、インターフェースで説明されているように変更されてクライアントアプリケーションに適したものになっています。
dfs.webhdfs.oauth2.credential (ConfCredentialBasedAccessTokenProviderを使用する場合に必要)。初期および後続のアクセストークンを取得するために使用される資格情報。

SWebHDFSのSSL設定

SWebHDFS FileSystem(つまり、swebhdfsプロトコルを使用)を使用するには、クライアント側にSSL設定ファイルを指定する必要があります。これには3つのパラメータを指定する必要があります。

SSLプロパティ 説明
ssl.client.truststore.location NameNodeの証明書を含む信頼ストアファイルのローカルファイルシステムの場所。
ssl.client.truststore.type (オプション)信頼ストアファイルのフォーマット。
ssl.client.truststore.password (オプション)信頼ストアファイルのパスワード。

以下の例はSSL設定ファイル(ssl-client.xml)です。

<configuration>
  <property>
    <name>ssl.client.truststore.location</name>
    <value>/work/keystore.jks</value>
    <description>Truststore to be used by clients. Must be specified.</description>
  </property>

  <property>
    <name>ssl.client.truststore.password</name>
    <value>changeme</value>
    <description>Optional. Default value is "".</description>
  </property>

  <property>
    <name>ssl.client.truststore.type</name>
    <value>jks</value>
    <description>Optional. Default value is "jks".</description>
  </property>
</configuration>

SSL設定ファイルはクライアントプログラムのクラスパスに存在する必要があり、ファイル名はcore-site.xmlで指定する必要があります。

<property>
  <name>hadoop.ssl.client.conf</name>
  <value>ssl-client.xml</value>
  <description>
    Resource file from which ssl client keystore information will be extracted.
    This file is looked up in the classpath, typically it should be in Hadoop
    conf/ directory. Default value is "ssl-client.xml".
  </description>
</property>

プロキシユーザー

プロキシユーザー機能が有効になっている場合、プロキシユーザー*P*は、別のユーザー*U*に代わってリクエストを送信できます。委任トークンが認証で提示されない限り、*U*のユーザー名はdoasクエリパラメータで指定する必要があります。そのような場合、ユーザー*P*と*U*の両方の情報が委任トークンにエンコードされている必要があります。

  1. セキュリティがオフの場合のプロキシリクエスト

    curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?[user.name=<USER>&]doas=<USER>&op=..."
    
  2. セキュリティがオンの場合のKerberos SPNEGOを使用したプロキシリクエスト

    curl -i --negotiate -u : "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?doas=<USER>&op=..."
    
  3. セキュリティがオンの場合のHadoop委任トークンを使用したプロキシリクエスト

    curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?delegation=<TOKEN>&op=..."
    

クロスサイトリクエストフォージェリ(CSRF)防止

WebHDFSは、クロスサイトリクエストフォージェリ(CSRF)防止のためのオプションで構成可能なメカニズムをサポートしています。有効にすると、NameNodeまたはDataNodeへのWebHDFS HTTPリクエストには、カスタムHTTPヘッダーを含める必要があります。設定プロパティにより、保護する特定のHTTPメソッドとHTTPヘッダーの名前を調整できます。ヘッダーに送信される値は関係ありません。その名前のヘッダーが存在するだけで十分です。

CSRF防止を有効にすると、WebHdfsFileSystemクラスも必要なヘッダーを送信するように設定されます。これにより、webhdfs: URIで使用する場合でも、hdfs dfshadoop distcpなどのCLIコマンドが引き続き正しく機能します。

CSRF防止を有効にすると、NameNode Web UIも必要なヘッダーを送信するように設定されます。CSRF防止を有効にしてNameNodeを再起動した後、NameNode Web UIの既存のユーザーはブラウザを更新してページを再読み込みし、新しい設定を確認する必要があります。

以下のプロパティはCSRF防止を制御します。

プロパティ 説明 デフォルト値
dfs.webhdfs.rest-csrf.enabled true の場合、WebHDFS のサイト間リクエスト偽造 (CSRF) 対策を有効にします。WebHDFS クライアントもこのプロパティを使用して、HTTP リクエストにカスタム CSRF 対策ヘッダーを送信する必要があるかどうかを判断します。 false
dfs.webhdfs.rest-csrf.custom-header dfs.webhdfs.rest-csrf.enabled を true に設定して WebHDFS のサイト間リクエスト偽造 (CSRF) 対策を有効にした場合に、HTTP リクエストが送信する必要があるカスタムヘッダーの名前です。WebHDFS クライアントもこのプロパティを使用して、カスタム CSRF 対策ヘッダーを送信する必要があるかどうかを判断します。 X-XSRF-HEADER
dfs.webhdfs.rest-csrf.methods-to-ignore dfs.webhdfs.rest-csrf.enabled を true に設定して WebHDFS のサイト間リクエスト偽造 (CSRF) 対策を有効にした場合に、HTTP リクエストでカスタムヘッダーを含める必要がない HTTP メソッドのカンマ区切りのリストです。WebHDFS クライアントもこのプロパティを使用して、カスタム CSRF 対策ヘッダーを送信する必要があるかどうかを判断します。 GET,OPTIONS,HEAD,TRACE
dfs.webhdfs.rest-csrf.browser-useragents-regex dfs.webhdfs.reset-csrf.enabled を true に設定して WebHDFS のサイト間リクエスト偽造 (CSRF) 対策を有効にした場合に、HTTP リクエストの User-Agent ヘッダーと照合するために使用される正規表現のカンマ区切りのリストです。着信 User-Agent がこれらの正規表現のいずれかと一致する場合、リクエストはブラウザーによって送信されたと見なされ、CSRF 対策が適用されます。リクエストの User-Agent がこれらの正規表現のいずれとも一致しない場合、スクリプトによる自動化など、ブラウザー以外のものによって送信されたと見なされます。この場合、CSRF は潜在的な攻撃ベクトルではないため、対策は適用されません。これにより、CSRF 対策ヘッダーを送信するように更新されていない既存の自動化との下位互換性が実現されます。 ^Mozilla.*,^Opera.*
dfs.datanode.httpserver.filter.handlers Datanode WebHDFS I/O パスに挿入する Netty サーブレットスタイルのフィルターハンドラーのカンマ区切りのリスト org.apache.hadoop.hdfs.server.datanode.web.RestCsrfPreventionFilterHandler

以下は、-H オプションを使用してリクエストにカスタムヘッダーを含める curl コマンドの例です。

    curl -i -L -X PUT -H 'X-XSRF-HEADER: ""' 'http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=CREATE'

WebHDFS リトライポリシー

WebHDFS は、タイムアウトする可能性のある大規模ファイルのレジリエントコピー、またはコピー中にフェイルオーバーする可能性のある HA クラスタ間のファイルコピーのために、オプションで構成可能なリトライポリシーをサポートしています。

以下のプロパティは、WebHDFS のリトライとフェイルオーバーポリシーを制御します。

プロパティ 説明 デフォルト値
dfs.http.client.retry.policy.enabled “true” の場合、WebHDFS クライアントのリトライポリシーを有効にします。“false” の場合、リトライポリシーは無効になります。 false
dfs.http.client.retry.policy.spec WebHDFS クライアントの複数の線形ランダムリトライのポリシーを指定します。たとえば、リトライ回数とスリープ時間 (n0, t0)、(n1, t1)、… のペアが与えられると、最初の n0 回のリトライは平均 t0 ミリ秒スリープし、次の n1 回のリトライは平均 t1 ミリ秒スリープします。 10000,6,60000,10
dfs.http.client.failover.max.attempts ネットワーク例外が発生した場合の WebHDFS クライアントのフェイルオーバー試行の最大数を指定します。 15
dfs.http.client.retry.max.attempts WebHDFS クライアントのリトライ試行の最大数を指定します。リトライ試行数とフェイルオーバー試行数の差がリトライ試行数の最大数よりも大きい場合、それ以上リトライされません。 10
dfs.http.client.failover.sleep.base.millis WebHDFS クライアントのリトライまたはフェイルオーバー間の指数関数的に増加するスリープ時間を計算する際の、ミリ秒単位の基本時間量を指定します。 500
dfs.http.client.failover.sleep.max.millis WebHDFS クライアントのリトライまたはフェイルオーバー間のスリープ時間のミリ秒単位の上限を指定します。 15000

WebHDFS リクエストフィルタリング

WebHDFS プロトコルにおけるデータの方向性を制御し、安全でないネットワークからのデータの書き込みのみを許可することができます。有効にするには、dfs.datanode.httpserver.filter.handlersorg.apache.hadoop.hdfs.server.datanode.web.HostRestrictingAuthorizationFilterHandler が含まれていることを確認する必要があります。HostRestrictingAuthorizationFilter の設定は、以下のプロパティで制御されます。

プロパティ 説明 デフォルト値
dfs.datanode.httpserver.filter.handlers Datanode WebHDFS I/O パスに挿入する Netty サーブレットスタイルのフィルターハンドラーのカンマ区切りのリスト org.apache.hadoop.hdfs.server.datanode.web.RestCsrfPreventionFilterHandler
dfs.web.authentication.host.allow.rules ユーザーがファイルを読み取ることを許可するルール。形式は *user*,*network/bits*,*path glob* 改行または `|`区切りです。すべての *users* または *network/bits* には `*` を使用します。 何もなし - デフォルトでは、WebHDFS を介して誰も読み取れません。

ファイルとディレクトリの操作

ファイルの作成と書き込み

  • ステップ1:リダイレクトを自動的に追跡せず、ファイルデータを送信せずに HTTP PUT リクエストを送信します。

    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=CREATE
                        [&overwrite=<true |false>][&blocksize=<LONG>][&replication=<SHORT>]
                        [&permission=<OCTAL>][&buffersize=<INT>][&noredirect=<true|false>]"
    

    通常、リクエストはファイルデータが書き込まれるデータノードにリダイレクトされます。

    HTTP/1.1 307 TEMPORARY_REDIRECT
    Location: http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=CREATE...
    Content-Length: 0
    

    ただし、自動的にリダイレクトされないようにするには、noredirect フラグを設定できます。

    HTTP/1.1 200 OK
    Content-Type: application/json
    {"Location":"http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=CREATE..."}
    
  • ステップ2:Location ヘッダーの URL(または noredirect を指定した場合の返された応答)を使用して、書き込むファイルデータを含む別の HTTP PUT リクエストを送信します。

    curl -i -X PUT -T <LOCAL_FILE> "http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=CREATE..."
    

    クライアントは、コンテンツ長がゼロの 201 Created 応答と、Location ヘッダーにファイルの WebHDFS URI を受け取ります。

    HTTP/1.1 201 Created
    Location: webhdfs://<HOST>:<PORT>/<PATH>
    Content-Length: 0
    

    アクセス許可が指定されていない場合、新しく作成されたファイルにはデフォルトの 644 アクセス許可が割り当てられます。サーバー側では umask モードは適用されません(そのため、NameNode 側で設定された「fs.permissions.umask-mode」値の設定は無効になります)。

注記:2 ステップでの作成/追加を行う理由は、クライアントがリダイレクトの前にデータを送信するのを防ぐためです。この問題は、HTTP/1.1 の「Expect: 100-continue」ヘッダーで解決されています。 RFC 2616、セクション 8.2.3 を参照してください。残念ながら、「Expect: 100-continue」を正しく実装していないソフトウェアライブラリのバグ(例:Jetty 6 HTTP サーバーと Java 6 HTTP クライアント)があります。2 ステップでの作成/追加は、ソフトウェアライブラリのバグに対する一時的な回避策です。

こちらも参照してください:overwriteblocksizereplicationpermissionbuffersizeFileSystem.create

ファイルへの追加

  • ステップ1:リダイレクトを自動的に追跡せず、ファイルデータを送信せずに HTTP POST リクエストを送信します。
    curl -i -X POST "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=APPEND[&buffersize=<INT>][&noredirect=<true|false>]"
    

    通常、リクエストはファイルデータを追加するデータノードにリダイレクトされます。

    HTTP/1.1 307 TEMPORARY_REDIRECT
    Location: http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=APPEND...
    Content-Length: 0
    

ただし、自動的にリダイレクトされないようにするには、noredirect フラグを設定できます。

    HTTP/1.1 200 OK
    Content-Type: application/json
    {"Location":"http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=APPEND..."}
  • ステップ2:Location ヘッダーの URL(または noredirect を指定した場合の返された応答)を使用して、追加するファイルデータを含む別の HTTP POST リクエストを送信します。
    curl -i -X POST -T <LOCAL_FILE> "http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=APPEND..."
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

この操作が 2 ステップで必要となる理由については、前のセクションの注記を参照してください。

こちらも参照してください:buffersizeFileSystem.append

ファイルの連結

  • HTTP POST リクエストを送信します。
    curl -i -X POST "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=CONCAT&sources=<PATHS>"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

こちらも参照してください:sourcesFileSystem.concat

ファイルのオープンと読み取り

  • リダイレクトを自動的に追跡する HTTP GET リクエストを送信します。
    curl -i -L "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=OPEN
                        [&offset=<LONG>][&length=<LONG>][&buffersize=<INT>][&noredirect=<true|false>]"
    

    通常、リクエストはファイルデータを読み取ることができるデータノードにリダイレクトされます。

    HTTP/1.1 307 TEMPORARY_REDIRECT
    Location: http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=OPEN...
    Content-Length: 0
    

    ただし、自動的にリダイレクトされないようにするには、noredirect フラグを設定できます。

    HTTP/1.1 200 OK
    Content-Type: application/json
    {"Location":"http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=OPEN..."}
    

    クライアントはデータノードへのリダイレクトに従い、ファイルデータを受け取ります。

    HTTP/1.1 200 OK
    Content-Type: application/octet-stream
    Content-Length: 22
    
    Hello, webhdfs user!
    

こちらも参照してください:offsetlengthbuffersizeFileSystem.open

ディレクトリの作成

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=MKDIRS[&permission=<OCTAL>]"
    

    クライアントは、boolean JSON オブジェクト を含む応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {"boolean": true}
    

    アクセス許可が指定されていない場合、新しく作成されたディレクトリにはデフォルトで 755 アクセス許可が設定されます。サーバー側では umask モードは適用されません(そのため、NameNode 側で設定された「fs.permissions.umask-mode」値の設定は無効になります)。

こちらも参照してください:permissionFileSystem.mkdirs

シンボリックリンクの作成

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=CREATESYMLINK
                                  &destination=<PATH>[&createParent=<true |false>]"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

こちらも参照してください:destinationcreateParentFileSystem.createSymlink

ファイル/ディレクトリの名前変更

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "<HOST>:<PORT>/webhdfs/v1/<PATH>?op=RENAME&destination=<PATH>"
    

    クライアントは、boolean JSON オブジェクト を含む応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {"boolean": true}
    

こちらも参照してください:destinationFileSystem.rename

ファイル/ディレクトリの削除

  • HTTP DELETE リクエストを送信します。
    curl -i -X DELETE "http://<host>:<port>/webhdfs/v1/<path>?op=DELETE
                                  [&recursive=<true |false>]"
    

    クライアントは、boolean JSON オブジェクト を含む応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {"boolean": true}
    

こちらも参照してください:recursiveFileSystem.delete

ファイルの切り詰め

  • HTTP POST リクエストを送信します。
    curl -i -X POST "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=TRUNCATE&newlength=<LONG>"
    

    クライアントは、boolean JSON オブジェクト を含む応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {"boolean": true}
    

こちらも参照してください:newlengthFileSystem.truncate

ファイル/ディレクトリの状態

  • HTTP GET リクエストを送信します。
    curl -i  "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETFILESTATUS"
    

    クライアントは、FileStatus JSON オブジェクト を含む応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {
      "FileStatus":
      {
        "accessTime"      : 0,
        "blockSize"       : 0,
        "group"           : "supergroup",
        "length"          : 0,             //in bytes, zero for directories
        "modificationTime": 1320173277227,
        "owner"           : "webuser",
        "pathSuffix"      : "",
        "permission"      : "777",
        "replication"     : 0,
        "snapshotEnabled" : true
        "type"            : "DIRECTORY"    //enum {FILE, DIRECTORY, SYMLINK}
      }
    }
    

こちらも参照してください:FileSystem.getFileStatus

ディレクトリのリスト表示

  • HTTP GET リクエストを送信します。
    curl -i  "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=LISTSTATUS"
    

    クライアントは、FileStatuses JSON オブジェクト を含む応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Content-Length: 427
    
    {
      "FileStatuses":
      {
        "FileStatus":
        [
          {
            "accessTime"      : 1320171722771,
            "blockSize"       : 33554432,
            "childrenNum"     : 0,
            "fileId"          : 16388,
            "group"           : "supergroup",
            "length"          : 24930,
            "modificationTime": 1320171722771,
            "owner"           : "webuser",
            "pathSuffix"      : "a.patch",
            "permission"      : "644",
            "replication"     : 1,
            "storagePolicy"   : 0,
            "type"            : "FILE"
          },
          {
            "accessTime"      : 0,
            "blockSize"       : 0,
            "childrenNum"     : 0,
            "fileId"          : 16389,
            "group"           : "supergroup",
            "length"          : 0,
            "modificationTime": 1320895981256,
            "owner"           : "username",
            "pathSuffix"      : "bar",
            "permission"      : "711",
            "replication"     : 0,
            "snapshotEnabled" : true
            "type"            : "DIRECTORY"
          },
          ...
        ]
      }
    }
    

こちらも参照してください:FileSystem.listStatus

ファイルのリスト表示

  • HTTP GET リクエストを送信します。
    curl -i  "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=LISTSTATUS"
    

    クライアントは、FileStatuses JSON オブジェクト を含む応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Content-Length: 427
    
    {
      "FileStatuses":
      {
        "FileStatus":
        [
          {
            "accessTime"      : 1320171722771,
            "blockSize"       : 33554432,
            "childrenNum"     : 0,
            "fileId"          : 16390,
            "group"           : "supergroup",
            "length"          : 1366,
            "modificationTime": 1501770633062,
            "owner"           : "webuser",
            "pathSuffix"      : "",
            "permission"      : "644",
            "replication"     : 1,
            "storagePolicy"   : 0,
            "type"            : "FILE"
          }
        ]
      }
    }
    

こちらも参照してください:FileSystem.listStatus

ディレクトリの反復的なリスト表示

  • HTTP GET リクエストを送信します。
    curl -i  "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=LISTSTATUS_BATCH&startAfter=<CHILD>"
    

    クライアントは、FileStatuses JSON オブジェクト と反復情報を含む DirectoryListing JSON オブジェクト を含む応答を受け取ります。

    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Expires: Thu, 08 Sep 2016 03:40:38 GMT
    Date: Thu, 08 Sep 2016 03:40:38 GMT
    Pragma: no-cache
    Expires: Thu, 08 Sep 2016 03:40:38 GMT
    Date: Thu, 08 Sep 2016 03:40:38 GMT
    Pragma: no-cache
    Content-Type: application/json
    X-FRAME-OPTIONS: SAMEORIGIN
    Transfer-Encoding: chunked
    Server: Jetty(6.1.26)
    
    {
        "DirectoryListing": {
            "partialListing": {
                "FileStatuses": {
                    "FileStatus": [
                        {
                            "accessTime": 0,
                            "blockSize": 0,
                            "childrenNum": 0,
                            "fileId": 16387,
                            "group": "supergroup",
                            "length": 0,
                            "modificationTime": 1473305882563,
                            "owner": "andrew",
                            "pathSuffix": "bardir",
                            "permission": "755",
                            "replication": 0,
                            "storagePolicy": 0,
                            "type": "DIRECTORY"
                        },
                        {
                            "accessTime": 1473305896945,
                            "blockSize": 1024,
                            "childrenNum": 0,
                            "fileId": 16388,
                            "group": "supergroup",
                            "length": 0,
                            "modificationTime": 1473305896965,
                            "owner": "andrew",
                            "pathSuffix": "bazfile",
                            "permission": "644",
                            "replication": 3,
                            "storagePolicy": 0,
                            "type": "FILE"
                        }
                    ]
                }
            },
            "remainingEntries": 2
        }
    }
    

remainingEntries がゼロ以外の場合、ディレクトリに追加のエントリがあります。次のバッチをクエリするには、startAfter パラメーターを現在のバッチで返された最後のアイテムの pathSuffix に設定します。例:

    curl -i  "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=LISTSTATUS_BATCH&startAfter=bazfile"

これにより、ディレクトリエントリの次のバッチが返されます。

    HTTP/1.1 200 OK
    Cache-Control: no-cache
    Expires: Thu, 08 Sep 2016 03:43:20 GMT
    Date: Thu, 08 Sep 2016 03:43:20 GMT
    Pragma: no-cache
    Expires: Thu, 08 Sep 2016 03:43:20 GMT
    Date: Thu, 08 Sep 2016 03:43:20 GMT
    Pragma: no-cache
    Content-Type: application/json
    X-FRAME-OPTIONS: SAMEORIGIN
    Transfer-Encoding: chunked
    Server: Jetty(6.1.26)

    {
        "DirectoryListing": {
            "partialListing": {
                "FileStatuses": {
                    "FileStatus": [
                        {
                            "accessTime": 0,
                            "blockSize": 0,
                            "childrenNum": 0,
                            "fileId": 16386,
                            "group": "supergroup",
                            "length": 0,
                            "modificationTime": 1473305878951,
                            "owner": "andrew",
                            "pathSuffix": "foodir",
                            "permission": "755",
                            "replication": 0,
                            "storagePolicy": 0,
                            "type": "DIRECTORY"
                        },
                        {
                            "accessTime": 1473305902864,
                            "blockSize": 1024,
                            "childrenNum": 0,
                            "fileId": 16389,
                            "group": "supergroup",
                            "length": 0,
                            "modificationTime": 1473305902878,
                            "owner": "andrew",
                            "pathSuffix": "quxfile",
                            "permission": "644",
                            "replication": 3,
                            "storagePolicy": 0,
                            "type": "FILE"
                        }
                    ]
                }
            },
            "remainingEntries": 0
        }
    }

バッチサイズは、NameNode の dfs.ls.limit オプションで制御されます。

こちらも参照してください:FileSystem.listStatusIterator

その他のファイルシステム操作

ディレクトリのコンテンツサマリーの取得

  • HTTP GET リクエストを送信します。
    curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETCONTENTSUMMARY"
    

    クライアントは、ContentSummary JSON オブジェクト を含む応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {
      "ContentSummary":
      {
        "directoryCount": 2,
        "ecPolicy"      : "RS-6-3-1024k",
        "fileCount"     : 1,
        "length"        : 24930,
        "quota"         : -1,
        "spaceConsumed" : 24930,
        "spaceQuota"    : -1,
        "typeQuota":
        {
          "ARCHIVE":
          {
            "consumed": 500,
            "quota": 10000
          },
          "DISK":
          {
            "consumed": 500,
            "quota": 10000
          },
          "SSD":
          {
            "consumed": 500,
            "quota": 10000
          }
        }
      }
    }
    

こちらも参照してください:FileSystem.getContentSummary

ディレクトリのクォータ使用量の取得

  • HTTP GET リクエストを送信します。
    curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETQUOTAUSAGE"
    

    クライアントは、QuotaUsage JSON オブジェクト を含む応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {
      "QuotaUsage":
      {
        "fileAndDirectoryCount": 1,
        "quota"         : 100,
        "spaceConsumed" : 24930,
        "spaceQuota"    : 100000,
        "typeQuota":
        {
          "ARCHIVE":
          {
            "consumed": 500,
            "quota": 10000
          },
          "DISK":
          {
            "consumed": 500,
            "quota": 10000
          },
          "SSD":
          {
            "consumed": 500,
            "quota": 10000
          }
        }
      }
    }
    

こちらも参照してください:FileSystem.getQuotaUsage

クォータの設定

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETQUOTA
                                  &namespacequota=<QUOTA>[&storagespacequota=<QUOTA>]"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

こちらも参照してください:FileSystem.setQuota

ストレージタイプによるクォータの設定

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETQUOTABYSTORAGETYPE
                                  &storagetype=<STORAGETYPE>&storagespacequota=<QUOTA>"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

こちらも参照してください:FileSystem.setQuotaByStorageType

ファイルチェックサムの取得

  • HTTP GET リクエストを送信します。
    curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETFILECHECKSUM"
    

    通常、リクエストはデータノードにリダイレクトされます。

    HTTP/1.1 307 TEMPORARY_REDIRECT
    Location: http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=GETFILECHECKSUM...
    Content-Length: 0
    

    ただし、自動的にリダイレクトされないようにするには、noredirect フラグを設定できます。

    HTTP/1.1 200 OK
    Content-Type: application/json
    {"Location":"http://<DATANODE>:<PORT>/webhdfs/v1/<PATH>?op=GETFILECHECKSUM..."}
    

    クライアントはデータノードへのリダイレクトに従い、FileChecksum JSON オブジェクト を受け取ります。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {
      "FileChecksum":
      {
        "algorithm": "MD5-of-1MD5-of-512CRC32",
        "bytes"    : "eadb10de24aa315748930df6e185c0d ...",
        "length"   : 28
      }
    }
    

こちらも参照してください:FileSystem.getFileChecksum

ホームディレクトリの取得

  • HTTP GET リクエストを送信します。
    curl -i "http://<HOST>:<PORT>/webhdfs/v1/?op=GETHOMEDIRECTORY"
    

    クライアントは、Path JSON オブジェクト を含む応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {"Path": "/user/username"}
    

こちらも参照してください:FileSystem.getHomeDirectory

ゴミ箱ルートの取得

  • HTTP GET リクエストを送信します。
    curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETTRASHROOT"
    

    クライアントは、Path JSON オブジェクト を含む応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {"Path": "/user/username/.Trash"}
    

    パスが暗号化ゾーンパスであり、ユーザーにパスのアクセス許可がある場合、クライアントは次のような応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {"Path": "/PATH/.Trash/username"}
    

こちらも参照してください:FileSystem.getTrashRoot

暗号化ゾーンでのゴミ箱ルートの詳細については、透過的暗号化ガイド を参照してください。

アクセス許可の設定

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETPERMISSION
                                  [&permission=<OCTAL>]"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: permissionFileSystem.setPermission

所有者の設定

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETOWNER
                                  [&owner=<USER>][&group=<GROUP>]"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: ownergroupFileSystem.setOwner

レプリケーション係数の設定

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETREPLICATION
                                  [&replication=<SHORT>]"
    

    クライアントは、boolean JSON オブジェクト を含む応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {"boolean": true}
    

参照: replicationFileSystem.setReplication

アクセス時間または変更時間の設定

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETTIMES
                                  [&modificationtime=<TIME>][&accesstime=<TIME>]"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: modificationtimeaccesstimeFileSystem.setTimes

ACLエントリの変更

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=MODIFYACLENTRIES
                                  &aclspec=<ACLSPEC>"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: FileSystem.modifyAclEntries

ACLエントリの削除

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=REMOVEACLENTRIES
                                  &aclspec=<ACLSPEC>"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: FileSystem.removeAclEntries

デフォルトACLの削除

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=REMOVEDEFAULTACL"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: FileSystem.removeDefaultAcl

ACLの削除

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=REMOVEACL"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: FileSystem.removeAcl

ACLの設定

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETACL
                                  &aclspec=<ACLSPEC>"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: FileSystem.setAcl

ACLステータスの取得

  • HTTP GET リクエストを送信します。
    curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETACLSTATUS"
    

    AclStatus JSONオブジェクトを含むレスポンスがクライアントに返されます。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {
        "AclStatus": {
            "entries": [
                "user:carla:rw-", 
                "group::r-x"
            ], 
            "group": "supergroup", 
            "owner": "hadoop", 
            "permission":"775",
            "stickyBit": false
        }
    }
    

参照: FileSystem.getAclStatus

アクセスの確認

  • HTTP GET リクエストを送信します。
    curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=CHECKACCESS
                                  &fsaction=<FSACTION>
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: FileSystem.access

ストレージポリシー操作

すべてのストレージポリシーの取得

  • HTTP GET リクエストを送信します。
    curl -i "http://<HOST>:<PORT>/webhdfs/v1?op=GETALLSTORAGEPOLICY"
    

    BlockStoragePolicies JSONオブジェクトを含むレスポンスがクライアントに返されます。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {
        "BlockStoragePolicies": {
            "BlockStoragePolicy": [
               {
                   "copyOnCreateFile": false,
                   "creationFallbacks": [],
                   "id": 2,
                   "name": "COLD",
                   "replicationFallbacks": [],
                   "storageTypes": ["ARCHIVE"]
               },
               {
                   "copyOnCreateFile": false,
                   "creationFallbacks": ["DISK","ARCHIVE"],
                   "id": 5,
                   "name": "WARM",
                   "replicationFallbacks": ["DISK","ARCHIVE"],
                   "storageTypes": ["DISK","ARCHIVE"]
               },
               {
                   "copyOnCreateFile": false,
                   "creationFallbacks": [],
                   "id": 7,
                   "name": "HOT",
                   "replicationFallbacks": ["ARCHIVE"],
                   "storageTypes": ["DISK"]
               },
               {
                   "copyOnCreateFile": false,
                   "creationFallbacks": ["SSD","DISK"],
                   "id": 10,"name": "ONE_SSD",
                   "replicationFallbacks": ["SSD","DISK"],
                   "storageTypes": ["SSD","DISK"]
               },
               {
                   "copyOnCreateFile": false,
                   "creationFallbacks": ["DISK"],
                   "id": 12,
                   "name": "ALL_SSD",
                   "replicationFallbacks": ["DISK"],
                   "storageTypes": ["SSD"]
               },
               {
                   "copyOnCreateFile": true,
                   "creationFallbacks": ["DISK"],
                   "id": 15,
                   "name": "LAZY_PERSIST",
                   "replicationFallbacks": ["DISK"],
                   "storageTypes": ["RAM_DISK","DISK"]
               }
           ]
       }
    }
    

参照: FileSystem.getAllStoragePolicies

ストレージポリシーの設定

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETSTORAGEPOLICY
                                  &storagepolicy=<policy>"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: FileSystem.setStoragePolicy

ストレージポリシーの解除

  • HTTP POTリクエストを送信します。
    curl -i -X POST "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=UNSETSTORAGEPOLICY"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: FileSystem.unsetStoragePolicy

ストレージポリシーの取得

  • HTTP GET リクエストを送信します。
    curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETSTORAGEPOLICY"
    

    BlockStoragePolicy JSONオブジェクトを含むレスポンスがクライアントに返されます。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {
        "BlockStoragePolicy": {
            "copyOnCreateFile": false,
           "creationFallbacks": [],
            "id":7,
            "name":"HOT",
            "replicationFallbacks":["ARCHIVE"],
            "storageTypes":["DISK"]
        }
    }
    

参照: FileSystem.getStoragePolicy

ストレージポリシーの充足

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SATISFYSTORAGEPOLICY"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: ArchivalStorage.satisfyStoragePolicy

ファイルブロック位置の取得

  • HTTP GET リクエストを送信します。
    curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETFILEBLOCKLOCATIONS
    

    BlockLocations JSONオブジェクトを含むレスポンスがクライアントに返されます。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {
      "BlockLocations" :
      {
        "BlockLocation":
        [
          {
            "cachedHosts" : [],
            "corrupt" : false,
            "hosts" : ["host"],
            "length" : 134217728,                             // length of this block
            "names" : ["host:ip"],
            "offset" : 0,                                     // offset of the block in the file
            "storageTypes" : ["DISK"],                        // enum {RAM_DISK, SSD, DISK, ARCHIVE}
            "topologyPaths" : ["/default-rack/hostname:ip"]
          }, {
            "cachedHosts" : [],
            "corrupt" : false,
            "hosts" : ["host"],
            "length" : 62599364,
            "names" : ["host:ip"],
            "offset" : 134217728,
            "storageTypes" : ["DISK"],
            "topologyPaths" : ["/default-rack/hostname:ip"]
          },
          ...
        ]
      }
    }
    

参照: offsetlengthFileSystem.getFileBlockLocations

拡張属性(XAttrs)操作

XAttrの設定

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETXATTR
                                  &xattr.name=<XATTRNAME>&xattr.value=<XATTRVALUE>
                                  &flag=<FLAG>"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: FileSystem.setXAttr

XAttrの削除

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=REMOVEXATTR
                                  &xattr.name=<XATTRNAME>"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: FileSystem.removeXAttr

XAttrの取得

  • HTTP GET リクエストを送信します。
    curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETXATTRS
                                  &xattr.name=<XATTRNAME>&encoding=<ENCODING>"
    

    XAttrs JSONオブジェクトを含むレスポンスがクライアントに返されます。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {
        "XAttrs": [
            {
                "name":"XATTRNAME",
                "value":"XATTRVALUE"
            }
        ]
    }
    

参照: FileSystem.getXAttr

複数のXAttrsの取得

  • HTTP GET リクエストを送信します。
    curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETXATTRS
                                  &xattr.name=<XATTRNAME1>&xattr.name=<XATTRNAME2>
                                  &encoding=<ENCODING>"
    

    XAttrs JSONオブジェクトを含むレスポンスがクライアントに返されます。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {
        "XAttrs": [
            {
                "name":"XATTRNAME1",
                "value":"XATTRVALUE1"
            },
            {
                "name":"XATTRNAME2",
                "value":"XATTRVALUE2"
            }
        ]
    }
    

参照: FileSystem.getXAttrs

すべてのXAttrsの取得

  • HTTP GET リクエストを送信します。
    curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETXATTRS
                                  &encoding=<ENCODING>"
    

    XAttrs JSONオブジェクトを含むレスポンスがクライアントに返されます。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {
        "XAttrs": [
            {
                "name":"XATTRNAME1",
                "value":"XATTRVALUE1"
            },
            {
                "name":"XATTRNAME2",
                "value":"XATTRVALUE2"
            },
            {
                "name":"XATTRNAME3",
                "value":"XATTRVALUE3"
            }
        ]
    }
    

参照: FileSystem.getXAttrs

すべてのXAttrsのリスト表示

  • HTTP GET リクエストを送信します。
    curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=LISTXATTRS"
    

    XAttrNames JSONオブジェクトを含むレスポンスがクライアントに返されます。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {
        "XAttrNames":"[\"XATTRNAME1\",\"XATTRNAME2\",\"XATTRNAME3\"]"
    }
    

参照: FileSystem.listXAttrs

イレイジャーコーディング操作

ECポリシーの有効化

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/?op=ENABLEECPOLICY
                                  &ecpolicy=<policy>"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: HDFSErasureCoding.enablePolicy

ECポリシーの無効化

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/?op=DISABLEECPOLICY
                                  &ecpolicy=<policy>"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: HDFSErasureCoding.disablePolicy

ECポリシーの設定

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=SETECPOLICY
                                  &ecpolicy=<policy>"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: HDFSErasureCoding.setErasureCodingPolicy

ECポリシーの取得

  • HTTP GET リクエストを送信します。
    curl -i -X GET "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETECPOLICY
                                 "
    

ECPolicy JSONオブジェクトを含むレスポンスがクライアントに返されます。

    {
        "name": "RS-10-4-1024k",
        "schema":
        {
        "codecName": "rs",
        "numDataUnits": 10,
        "numParityUnits": 4,
        "extraOptions": {}
        }
        "cellSize": 1048576,
        "id":5,
        "codecname":"rs",
        "numDataUnits": 10,
        "numParityUnits": 4,
        "replicationpolicy":false,
        "systemPolicy":true

    }

参照: HDFSErasureCoding.getErasureCodingPolicy

ECポリシーの解除

  • HTTP POST リクエストを送信します。
    curl -i -X POST "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=UNSETECPOLICY
                                 "
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: HDFSErasureCoding.unsetErasureCodingPolicy

スナップショット操作

スナップショットの許可

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=ALLOWSNAPSHOT"
    

    成功した場合、コンテンツ長0のレスポンスがクライアントに返されます。

    HTTP/1.1 200 OK
    Content-Length: 0
    

スナップショットの拒否

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=DISALLOWSNAPSHOT"
    

    成功した場合、コンテンツ長0のレスポンスがクライアントに返されます。

    HTTP/1.1 200 OK
    Content-Length: 0
    

スナップショットの作成

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=CREATESNAPSHOT[&snapshotname=<SNAPSHOTNAME>]"
    

    クライアントは、Path JSON オブジェクト を含む応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {"Path": "/user/username/.snapshot/s1"}
    

参照: FileSystem.createSnapshot

スナップショットの削除

  • HTTP DELETE リクエストを送信します。
    curl -i -X DELETE "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=DELETESNAPSHOT&snapshotname=<SNAPSHOTNAME>"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: FileSystem.deleteSnapshot

スナップショットの名前変更

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=RENAMESNAPSHOT
                       &oldsnapshotname=<SNAPSHOTNAME>&snapshotname=<SNAPSHOTNAME>"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: FileSystem.renameSnapshot

スナップショット差分の取得

  • HTTP GET リクエストを送信します。
    curl -i GET "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETSNAPSHOTDIFF
                       &oldsnapshotname=<SNAPSHOTNAME>&snapshotname=<SNAPSHOTNAME>"
    

    SnapshotDiffReport JSONオブジェクトを含むレスポンスがクライアントに返されます。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {"SnapshotDiffReport":{"diffList":[],"fromSnapshot":"s3","snapshotRoot":"/foo","toSnapshot":"s4"}}
    

スナップショット可能ディレクトリリストの取得

  • HTTP GET リクエストを送信します。
    curl -i GET "http://<HOST>:<PORT>/webhdfs/v1/?user.name=<USER>&op=GETSNAPSHOTTABLEDIRECTORYLIST"
    

    ユーザーがHDFSスーパーユーザーでない場合、この呼び出しはユーザーが所有するスナップショット可能ディレクトリのみをリストします。ユーザーがHDFSスーパーユーザーの場合、この呼び出しはすべてのスナップショット可能ディレクトリをリストします。SnapshottableDirectoryList JSONオブジェクトを含むレスポンスがクライアントに返されます。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {
        "SnapshottableDirectoryList":
        [
            {
              "dirStatus":
                {
                    "accessTime":0,
                    "blockSize":0,
                    "childrenNum":0,
                    "fileId":16386,
                    "group":"hadoop",
                    "length":0,
                    "modificationTime":1520761889225,
                    "owner":"random",
                    "pathSuffix":"bar",
                    "permission":"755",
                    "replication":0,
                    "storagePolicy":0,
                    "type":"DIRECTORY"
                },
              "parentFullPath":"/",
              "snapshotNumber":0,
              "snapshotQuota":65536
            }
        ]
    }
    

委任トークン操作

委任トークンの取得

  • HTTP GET リクエストを送信します。
    curl -i "http://<HOST>:<PORT>/webhdfs/v1/?op=GETDELEGATIONTOKEN
                [&renewer=<USER>][&service=<SERVICE>][&kind=<KIND>]"
    

    Token JSONオブジェクトを含むレスポンスがクライアントに返されます。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {
      "Token":
      {
        "urlString": "JQAIaG9y..."
      }
    }
    

参照: renewerFileSystem.getDelegationToken、kindservice

委任トークンの更新

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/?op=RENEWDELEGATIONTOKEN&token=<TOKEN>"
    

    long JSONオブジェクトを含むレスポンスがクライアントに返されます。

    HTTP/1.1 200 OK
    Content-Type: application/json
    Transfer-Encoding: chunked
    
    {"long": 1320962673997}           //the new expiration time
    

参照: tokenDelegationTokenAuthenticator.renewDelegationToken

委任トークンのキャンセル

  • HTTP PUT リクエストを送信します。
    curl -i -X PUT "http://<HOST>:<PORT>/webhdfs/v1/?op=CANCELDELEGATIONTOKEN&token=<TOKEN>"
    

    クライアントは、コンテンツ長がゼロの応答を受け取ります。

    HTTP/1.1 200 OK
    Content-Length: 0
    

参照: tokenDelegationTokenAuthenticator.cancelDelegationToken

エラーレスポンス

操作が失敗すると、サーバーは例外をスローすることがあります。エラーレスポンスのJSONスキーマはRemoteException JSONスキーマで定義されています。以下の表は、例外とHTTPレスポンスコードのマッピングを示しています。

HTTPレスポンスコード

例外 HTTPレスポンスコード
IllegalArgumentException 400 Bad Request
UnsupportedOperationException 400 Bad Request
SecurityException 401 Unauthorized
IOException 403 Forbidden
FileNotFoundException 404 Not Found
RuntimeException 500 Internal Server Error

以下は、例外レスポンスの例です。

不正な引数例外

HTTP/1.1 400 Bad Request
Content-Type: application/json
Transfer-Encoding: chunked

{
  "RemoteException":
  {
    "exception"    : "IllegalArgumentException",
    "javaClassName": "java.lang.IllegalArgumentException",
    "message"      : "Invalid value for webhdfs parameter \"permission\": ..."
  }
}

セキュリティ例外

HTTP/1.1 401 Unauthorized
Content-Type: application/json
Transfer-Encoding: chunked

{
  "RemoteException":
  {
    "exception"    : "SecurityException",
    "javaClassName": "java.lang.SecurityException",
    "message"      : "Failed to obtain user group information: ..."
  }
}

アクセス制御例外

HTTP/1.1 403 Forbidden
Content-Type: application/json
Transfer-Encoding: chunked

{
  "RemoteException":
  {
    "exception"    : "AccessControlException",
    "javaClassName": "org.apache.hadoop.security.AccessControlException",
    "message"      : "Permission denied: ..."
  }
}

ファイルが見つかりません例外

HTTP/1.1 404 Not Found
Content-Type: application/json
Transfer-Encoding: chunked

{
  "RemoteException":
  {
    "exception"    : "FileNotFoundException",
    "javaClassName": "java.io.FileNotFoundException",
    "message"      : "File does not exist: /foo/a.patch"
  }
}

JSONスキーマ

OPENを除くすべての操作は、長さ0のレスポンスまたはJSONレスポンスを返します。OPENの場合、レスポンスはオクテットストリームです。JSONスキーマを以下に示します。draft-zyp-json-schema-03でJSONスキーマの構文定義を参照してください。

注記 additionalPropertiesのデフォルト値は空のスキーマであり、追加のプロパティに任意の値を許可します。そのため、すべてのWebHDFS JSONレスポンスは追加のプロパティを許可します。ただし、レスポンスに追加のプロパティが含まれている場合、互換性を維持するために、それらはオプションのプロパティと見なされます。

ACLステータスJSONスキーマ

{
  "name"      : "AclStatus",
  "properties":
  {
    "AclStatus":
    {
      "type"      : "object",
      "properties":
      {
        "entries":
        {
          "type": "array",
          "items":
          {
            "description": "ACL entry.",
            "type": "string"
          }
        },
        "group":
        {
          "description": "The group owner.",
          "type"       : "string",
          "required"   : true
        },
        "owner":
        {
          "description": "The user who is the owner.",
          "type"       : "string",
          "required"   : true
        },
        "stickyBit":
        {
          "description": "True if the sticky bit is on.",
          "type"       : "boolean",
          "required"   : true
        }
      }
    }
  }
}

XAttrs JSONスキーマ

{
  "name"      : "XAttrs",
  "properties":
  {
    "XAttrs":
    {
      "type"      : "array",
      "items":
      {
        "type"    : "object",
        "properties":
        {
          "name":
          {
            "description": "XAttr name.",
            "type"       : "string",
            "required"   : true
          },
          "value":
          {
            "description": "XAttr value.",
            "type"       : "string"
          }
        }
      }
    }
  }
}

XAttrNames JSONスキーマ

{
  "name"      : "XAttrNames",
  "properties":
  {
    "XAttrNames":
    {
      "description": "XAttr names.",
      "type"       : "string",
      "required"   : true
    }
  }
}

ブール値JSONスキーマ

{
  "name"      : "boolean",
  "properties":
  {
    "boolean":
    {
      "description": "A boolean value",
      "type"       : "boolean",
      "required"   : true
    }
  }
}

参照: MKDIRSRENAMEDELETESETREPLICATION

ContentSummary JSONスキーマ

{
  "name"      : "ContentSummary",
  "properties":
  {
    "ContentSummary":
    {
      "type"      : "object",
      "properties":
      {
        "directoryCount":
        {
          "description": "The number of directories.",
          "type"       : "integer",
          "required"   : true
        },
        "fileCount":
        {
          "description": "The number of files.",
          "type"       : "integer",
          "required"   : true
        },
        "length":
        {
          "description": "The number of bytes used by the content.",
          "type"       : "integer",
          "required"   : true
        },
        "quota":
        {
          "description": "The namespace quota of this directory.",
          "type"       : "integer",
          "required"   : true
        },
        "spaceConsumed":
        {
          "description": "The disk space consumed by the content.",
          "type"       : "integer",
          "required"   : true
        },
        "spaceQuota":
        {
          "description": "The disk space quota.",
          "type"       : "integer",
          "required"   : true
        },
        "typeQuota":
        {
          "type"      : "object",
          "properties":
          {
            "ARCHIVE":
            {
              "type"      : "object",
              "properties":
              {
                "consumed":
                {
                  "description": "The storage type space consumed.",
                  "type"       : "integer",
                  "required"   : true
                },
                "quota":
                {
                  "description": "The storage type quota.",
                  "type"       : "integer",
                  "required"   : true
                }
              }
            },
            "DISK":
            {
              "type"      : "object",
              "properties":
              {
                "consumed":
                {
                  "description": "The storage type space consumed.",
                  "type"       : "integer",
                  "required"   : true
                },
                "quota":
                {
                  "description": "The storage type quota.",
                  "type"       : "integer",
                  "required"   : true
                }
              }
            },
            "SSD":
            {
              "type"      : "object",
              "properties":
              {
                "consumed":
                {
                  "description": "The storage type space consumed.",
                  "type"       : "integer",
                  "required"   : true
                },
                "quota":
                {
                  "description": "The storage type quota.",
                  "type"       : "integer",
                  "required"   : true
                }
              }
            }
          }
        }
      }
    }
  }
}

参照: GETCONTENTSUMMARY

QuotaUsage JSONスキーマ

{
  "name"      : "QuotaUsage",
  "properties":
  {
    "QuotaUsage":
    {
      "type"      : "object",
      "properties":
      {
        "fileAndDirectoryCount":
        {
          "description": "The number of files and directories.",
          "type"       : "integer",
          "required"   : true
        },
        "quota":
        {
          "description": "The namespace quota of this directory.",
          "type"       : "integer",
          "required"   : true
        },
        "spaceConsumed":
        {
          "description": "The disk space consumed by the content.",
          "type"       : "integer",
          "required"   : true
        },
        "spaceQuota":
        {
          "description": "The disk space quota.",
          "type"       : "integer",
          "required"   : true
        },
        "typeQuota":
        {
          "type"      : "object",
          "properties":
          {
            "ARCHIVE":
            {
              "type"      : "object",
              "properties":
              {
                "consumed":
                {
                  "description": "The storage type space consumed.",
                  "type"       : "integer",
                  "required"   : true
                },
                "quota":
                {
                  "description": "The storage type quota.",
                  "type"       : "integer",
                  "required"   : true
                }
              }
            },
            "DISK":
            {
              "type"      : "object",
              "properties":
              {
                "consumed":
                {
                  "description": "The storage type space consumed.",
                  "type"       : "integer",
                  "required"   : true
                },
                "quota":
                {
                  "description": "The storage type quota.",
                  "type"       : "integer",
                  "required"   : true
                }
              }
            },
            "SSD":
            {
              "type"      : "object",
              "properties":
              {
                "consumed":
                {
                  "description": "The storage type space consumed.",
                  "type"       : "integer",
                  "required"   : true
                },
                "quota":
                {
                  "description": "The storage type quota.",
                  "type"       : "integer",
                  "required"   : true
                }
              }
            }
          }
        }
      }
    }
  }
}

参照: GETQUOTAUSAGE

FileChecksum JSONスキーマ

{
  "name"      : "FileChecksum",
  "properties":
  {
    "FileChecksum":
    {
      "type"      : "object",
      "properties":
      {
        "algorithm":
        {
          "description": "The name of the checksum algorithm.",
          "type"       : "string",
          "required"   : true
        },
        "bytes":
        {
          "description": "The byte sequence of the checksum in hexadecimal.",
          "type"       : "string",
          "required"   : true
        },
        "length":
        {
          "description": "The length of the bytes (not the length of the string).",
          "type"       : "integer",
          "required"   : true
        }
      }
    }
  }
}

FileStatus JSONスキーマ

{
  "name"      : "FileStatus",
  "properties":
  {
    "FileStatus": fileStatusProperties      //See FileStatus Properties
  }
}

参照: FileStatusプロパティGETFILESTATUSFileStatus

FileStatusプロパティ

fileStatusPropertiesを定義するためにJavaScript構文が使用されています。これにより、FileStatusFileStatusesの両方のJSONスキーマで参照できます。

var fileStatusProperties =
{
  "type"      : "object",
  "properties":
  {
    "accessTime":
    {
      "description": "The access time.",
      "type"       : "integer",
      "required"   : true
    },
    "blockSize":
    {
      "description": "The block size of a file.",
      "type"       : "integer",
      "required"   : true
    },
    "group":
    {
      "description": "The group owner.",
      "type"       : "string",
      "required"   : true
    },
    "length":
    {
      "description": "The number of bytes in a file.",
      "type"       : "integer",
      "required"   : true
    },
    "modificationTime":
    {
      "description": "The modification time.",
      "type"       : "integer",
      "required"   : true
    },
    "owner":
    {
      "description": "The user who is the owner.",
      "type"       : "string",
      "required"   : true
    },
    "pathSuffix":
    {
      "description": "The path suffix.",
      "type"       : "string",
      "required"   : true
    },
    "permission":
    {
      "description": "The permission represented as a octal string.",
      "type"       : "string",
      "required"   : true
    },
    "replication":
    {
      "description": "The number of replication of a file.",
      "type"       : "integer",
      "required"   : true
    },
   "symlink":                                         //an optional property
    {
      "description": "The link target of a symlink.",
      "type"       : "string"
    },
   "type":
    {
      "description": "The type of the path object.",
      "enum"       : ["FILE", "DIRECTORY", "SYMLINK"],
      "required"   : true
    }
  }
};

FileStatuses JSONスキーマ

FileStatuses JSONオブジェクトは、FileStatus JSONオブジェクトの配列を表します。

{
  "name"      : "FileStatuses",
  "properties":
  {
    "FileStatuses":
    {
      "type"      : "object",
      "properties":
      {
        "FileStatus":
        {
          "description": "An array of FileStatus",
          "type"       : "array",
          "items"      : fileStatusProperties      //See FileStatus Properties
        }
      }
    }
  }
}

参照: FileStatusプロパティLISTSTATUSFileStatus

DirectoryListing JSONスキーマ

DirectoryListing JSONオブジェクトは、ディレクトリの反復的なリスト表示中にディレクトリエントリのバッチを表します。FileStatuses JSONオブジェクトと反復情報が含まれています。

{
  "name"      : "DirectoryListing",
  "properties":
  {
    "DirectoryListing":
    {
      "type"      : "object",
      "properties":
      {
        "partialListing":
        {
          "description": "A partial directory listing",
          "type"       : "object", // A FileStatuses object
          "required"   : true
        },
        "remainingEntries":
        {
          "description": "Number of remaining entries",
          "type"       : "integer",
          "required"   : true
        }
      }
    }
  }

}

参照: FileStatuses JSONスキーマLISTSTATUS_BATCHFileStatus

Long JSONスキーマ

{
  "name"      : "long",
  "properties":
  {
    "long":
    {
      "description": "A long integer value",
      "type"       : "integer",
      "required"   : true
    }
  }
}

参照: RENEWDELEGATIONTOKEN

パスJSONスキーマ

{
  "name"      : "Path",
  "properties":
  {
    "Path":
    {
      "description": "The string representation a Path.",
      "type"       : "string",
      "required"   : true
    }
  }
}

参照: GETHOMEDIRECTORYPath

RemoteException JSONスキーマ

{
  "name"      : "RemoteException",
  "properties":
  {
    "RemoteException":
    {
      "type"      : "object",
      "properties":
      {
        "exception":
        {
          "description": "Name of the exception",
          "type"       : "string",
          "required"   : true
        },
        "message":
        {
          "description": "Exception message",
          "type"       : "string",
          "required"   : true
        },
        "javaClassName":                                     //an optional property
        {
          "description": "Java class name of the exception",
          "type"       : "string"
        }
      }
    }
  }
}

参照: エラーレスポンス

トークンJSONスキーマ

{
  "name"      : "Token",
  "properties":
  {
    "Token": tokenProperties      //See Token Properties
  }
}

参照: TokenプロパティGETDELEGATIONTOKEN委任の注記。

トークン プロパティ

tokenPropertiesを定義するためにJavaScript構文が使用されています。これにより、Token JSONスキーマで参照できます。

var tokenProperties =
{
  "type"      : "object",
  "properties":
  {
    "urlString":
    {
      "description": "A delegation token encoded as a URL safe string.",
      "type"       : "string",
      "required"   : true
    }
  }
}

参照: Tokenプロパティ委任の注記。

BlockStoragePolicy JSONスキーマ

{
  "name"      : "BlockStoragePolicy",
  "properties":
  {
    "BlockStoragePolicy": blockStoragePolicyProperties      //See BlockStoragePolicy Properties
  }
}

参照: BlockStoragePolicyプロパティGETSTORAGEPOLICY

BlockStoragePolicyプロパティ

blockStoragePolicyPropertiesを定義するためにJavaScript構文が使用されています。これにより、BlockStoragePolicyBlockStoragePoliciesの両方のJSONスキーマで参照できます。

var blockStoragePolicyProperties =
{
  "type"      : "object",
  "properties":
  {
    "id":
    {
      "description": "Policy ID.",
      "type"       : "integer",
      "required"   : true
    },
    "name":
    {
      "description": "Policy name.",
      "type"       : "string",
      "required"   : true
    },
    "storageTypes":
    {
      "description": "An array of storage types for block placement.",
      "type"       : "array",
      "required"   : true
      "items"      :
      {
        "type": "string"
      }
    },
    "replicationFallbacks":
    {
      "description": "An array of fallback storage types for replication.",
      "type"       : "array",
      "required"   : true
      "items"      :
      {
        "type": "string"
      }
    },
    "creationFallbacks":
    {
      "description": "An array of fallback storage types for file creation.",
      "type"       : "array",
      "required"   : true
      "items"      :
      {
       "type": "string"
      }
    },
    "copyOnCreateFile":
    {
      "description": "If set then the policy cannot be changed after file creation.",
      "type"       : "boolean",
      "required"   : true
    }
  }
};

ECPolicy JSONスキーマ

{
  "name": "RS-10-4-1024k",
  schema {
           "codecName": "rs",
           "numDataUnits": 10,
           "numParityUnits": 4,
           "extraOptions": {}
          }
  "cellSize": 1048576,
  "id":5,
  "codecname":"rs",
  "numDataUnits": 10,
  "numParityUnits": 4,
  "replicationpolicy":false,
  "systemPolicy":true
}

BlockStoragePolicies JSONスキーマ

BlockStoragePolicies JSONオブジェクトは、BlockStoragePolicy JSONオブジェクトの配列を表します。

{
  "name"      : "BlockStoragePolicies",
  "properties":
  {
    "BlockStoragePolicies":
    {
      "type"      : "object",
      "properties":
      {
        "BlockStoragePolicy":
        {
          "description": "An array of BlockStoragePolicy",
          "type"       : "array",
          "items"      : blockStoragePolicyProperties      //See BlockStoragePolicy Properties
        }
      }
    }
  }
}

SnapshotDiffReport JSONスキーマ

{
  "name": "SnapshotDiffReport",
  "type": "object",
  "properties":
  {
    "SnapshotDiffReport":
    {
      "type"        : "object",
      "properties"  :
      {
        "diffList":
        {
          "description": "An array of DiffReportEntry",
          "type"        : "array",
          "items"       : diffReportEntries,
          "required"    : true
        },
        "fromSnapshot":
        {
          "description": "Source snapshot",
          "type"        : "string",
          "required"    : true
        },
        "snapshotRoot":
        {
          "description" : "String representation of snapshot root path",
          "type"        : "string",
          "required"    : true
        },
        "toSnapshot":
        {
          "description" : "Destination snapshot",
          "type"        : "string",
          "required"    : true
        }
      }
    }
  }
}

DiffReportエントリ

diffReportEntriesを定義するためにJavaScript構文が使用されています。これにより、SnapshotDiffReport JSONスキーマで参照できます。

var diffReportEntries =
{
  "type": "object",
  "properties":
  {
    "sourcePath":
    {
      "description" : "Source path name relative to snapshot root",
      "type"        : "string",
      "required"    : true
    },
    "targetPath":
    {
      "description" : "Target path relative to snapshot root used for renames",
      "type"        : "string",
      "required"    : true
    },
    "type":
    {
      "description" : "Type of diff report entry",
      "enum"        : ["CREATE", "MODIFY", "DELETE", "RENAME"],
      "required"    : true
    }
  }
}

SnapshottableDirectoryList JSONスキーマ

{
  "name": "SnapshottableDirectoryList",
  "type": "object",
  "properties":
  {
    "SnapshottableDirectoryList":
    {
      "description": "An array of SnapshottableDirectoryStatus",
      "type"        : "array",
      "items"       : snapshottableDirectoryStatus,
      "required"    : true
    }
  }
}

SnapshottableDirectoryStatus

snapshottableDirectoryStatusを定義するためにJavaScript構文が使用されています。これにより、SnapshottableDirectoryList JSONスキーマで参照できます。

var snapshottableDirectoryStatus =
{
  "type": "object",
  "properties":
  {
    "dirStatus": fileStatusProperties,
    "parentFullPath":
    {
      "description" : "Full path of the parent of snapshottable directory",
      "type"        : "string",
      "required"    : true
    },
    "snapshotNumber":
    {
      "description" : "Number of snapshots created on the snapshottable directory",
      "type"        : "integer",
      "required"    : true
    },
    "snapshotQuota":
    {
      "description" : "Total number of snapshots allowed on the snapshottable directory",
      "type"        : "integer",
      "required"    : true
    }
  }
}

BlockLocations JSONスキーマ

BlockLocations JSONオブジェクトは、BlockLocation JSONオブジェクトの配列を表します。

{
  "name"      : "BlockLocations",
  "properties":
  {
    "BlockLocations":
    {
      "type"      : "object",
      "properties":
      {
        "BlockLocation":
        {
          "description": "An array of BlockLocation",
          "type"       : "array",
          "items"      : blockLocationProperties      //See BlockLocation Properties
        }
      }
    }
  }
}

参照 BlockLocationプロパティGETFILEBLOCKLOCATIONSBlockLocation

BlockLocation JSONスキーマ

{
  "name"      : "BlockLocation",
  "properties":
  {
    "BlockLocation": blockLocationProperties      //See BlockLocation Properties
  }
}

参照 BlockLocationプロパティGETFILEBLOCKLOCATIONSBlockLocation

BlockLocationプロパティ

blockLocationPropertiesを定義するためにJavaScript構文が使用されています。これにより、BlockLocationBlockLocationsの両方のJSONスキーマで参照できます。

var blockLocationProperties =
{
  "type"      : "object",
  "properties":
  {
    "cachedHosts":
    {
      "description": "Datanode hostnames with a cached replica",
      "type"       : "array",
      "required"   : "true",
      "items"      :
      {
        "description": "A datanode hostname",
        "type"       : "string"
      }
    },
    "corrupt":
    {
      "description": "True if the block is corrupted",
      "type"       : "boolean",
      "required"   : "true"
    },
    "hosts":
    {
      "description": "Datanode hostnames store the block",
      "type"       : "array",
      "required"   : "true",
      "items"      :
      {
        "description": "A datanode hostname",
        "type"       : "string"
      }
    },
    "length":
    {
      "description": "Length of the block",
      "type"       : "integer",
      "required"   : "true"
    },
    "names":
    {
      "description": "Datanode IP:xferPort for accessing the block",
      "type"       : "array",
      "required"   : "true",
      "items"      :
      {
        "description": "DatanodeIP:xferPort",
        "type"       : "string"
      }
    },
    "offset":
    {
      "description": "Offset of the block in the file",
      "type"       : "integer",
      "required"   : "true"
    },
    "storageTypes":
    {
      "description": "Storage type of each replica",
      "type"       : "array",
      "required"   : "true",
      "items"      :
      {
        "description": "Storage type",
        "enum"       : ["RAM_DISK", "SSD", "DISK", "ARCHIVE"]
      }
    },
    "topologyPaths":
    {
      "description": "Datanode addresses in network topology",
      "type"       : "array",
      "required"   : "true",
      "items"      :
      {
        "description": "/rack/host:ip",
        "type"       : "string"
      }
    }
  }
};

HTTPクエリパラメータ辞書

ACL仕様

名前 aclspec
説明 ACL変更操作に含まれるACL仕様。
タイプ 文字列
デフォルト値 <空>
有効な値 権限とHDFSを参照してください。
構文 権限とHDFSを参照してください。

XAttr名

名前 xattr.name
説明 ファイル/ディレクトリのXAttr名。
タイプ 文字列
デフォルト値 <空>
有効な値 user./trusted./system./security.で始まる任意の文字列。
構文 user./trusted./system./security.で始まる任意の文字列。

XAttr値

名前 xattr.value
説明 ファイル/ディレクトリのXAttr値。
タイプ 文字列
デフォルト値 <空>
有効な値 エンコードされた値。
構文 二重引用符で囲むか、0xまたは0sを前に付ける。

参照: 拡張属性

XAttr設定フラグ

名前 flag
説明 XAttr設定フラグ。
タイプ 文字列
デフォルト値 <空>
有効な値 CREATE、REPLACE。
構文 CREATE、REPLACE。

参照: 拡張属性

XAttr値エンコーディング

名前 encoding
説明 XAttr値エンコーディング。
タイプ 文字列
デフォルト値 <空>
有効な値 text hex base64
構文 text hex base64

参照: 拡張属性

アクセス時間

名前 accesstime
説明 ファイル/ディレクトリのアクセス時間。
タイプ long
デフォルト値 -1(変更しないことを意味する)
有効な値 -1またはタイムスタンプ
構文 任意の整数。

参照: SETTIMES

ブロックサイズ

名前 blocksize
説明 ファイルのブロックサイズ。
タイプ long
デフォルト値 設定で指定。
有効な値 > 0
構文 任意の整数。

参照: CREATE

バッファサイズ

名前 buffersize
説明 データ転送で使用されるバッファのサイズ。
タイプ int
デフォルト値 設定で指定。
有効な値 > 0
構文 任意の整数。

参照: CREATEAPPENDOPEN

作成フラグ

名前 createflag
説明 ファイル作成時に処理する可能性のあるフラグの列挙。
タイプ 列挙された文字列
デフォルト値 <空>
有効な値 create、overwrite、append、sync_blockの有効な組み合わせ。
構文 下記の注記を参照。

次の組み合わせは無効です:* append、create * create、append、overwrite

参照: CREATE

親ディレクトリの作成

名前 createparent
説明 親ディレクトリが存在しない場合、作成する必要がありますか?
タイプ boolean
デフォルト値 true
有効な値 true、false
構文 true

参照: CREATESYMLINK

委任

名前 delegation
説明 認証に使用される委任トークン。
タイプ 文字列
デフォルト値 <空>
有効な値 エンコードされたトークン。
構文 下記の注記を参照。

注記 委任トークンはURLセーフな文字列としてエンコードされます。エンコーディングの詳細については、org.apache.hadoop.security.token.TokenencodeToUrlString()decodeFromUrlString(String)を参照してください。

参照: 認証

宛先

名前 destination
説明 宛先パス。
タイプ パス
デフォルト値 <空>(無効なパス)
有効な値 スキームと権限のない絶対的なFileSystemパス。
構文 任意のパス。

参照: CREATESYMLINKRENAME

Do As

名前 doas
説明 プロキシユーザーが別のユーザーとして実行することを許可する。
タイプ 文字列
デフォルト値 null
有効な値 任意の有効なユーザー名。
構文 任意の文字列。

参照: プロキシユーザー

Fsアクション

名前 fsaction
説明 ファイルシステム操作の読み取り/書き込み/実行。
タイプ 文字列
デフォルト値 null(無効な値)
有効な値 正規表現パターン「[r-][w-][x-] 」に一致する文字列。
構文 「[r-][w-][x-] 」

参照: CHECKACCESS

グループ

名前 group
説明 グループ名。
タイプ 文字列
デフォルト値 <空>(変更しないことを意味する)
有効な値 任意の有効なグループ名。
構文 任意の文字列。

参照: SETOWNER

長さ

名前 length
説明 処理されるバイト数。
タイプ long
デフォルト値 null(ファイル全体を意味する)
有効な値 >= 0またはnull
構文 任意の整数。

参照: OPEN

変更時間

名前 modificationtime
説明 ファイル/ディレクトリの変更時間。
タイプ long
デフォルト値 -1(変更しないことを意味する)
有効な値 -1またはタイムスタンプ
構文 任意の整数。

参照: SETTIMES

新しい長さ

名前 newlength
説明 ファイルが切り詰められるサイズ。
タイプ long
有効な値 >= 0
構文 任意のlong。

オフセット

名前 offset
説明 開始バイト位置。
タイプ long
デフォルト値 0
有効な値 >= 0
構文 任意の整数。

参照: OPEN

古いスナップショット名

名前 oldsnapshotname
説明 名前を変更する古いスナップショット名。
タイプ 文字列
デフォルト値 null
有効な値 既存のスナップショット名。
構文 任意の文字列。

参照: RENAMESNAPSHOT

操作

名前 op
説明 実行する操作の名前。
タイプ enum
デフォルト値 null(無効な値)
有効な値 任意の有効な操作名。
構文 任意の文字列。

参照: 操作

上書き

名前 overwrite
説明 ファイルが既に存在する場合、上書きしますか?
タイプ boolean
デフォルト値 false
有効な値 true
構文 true

参照: CREATE

所有者

名前 owner
説明 ファイル/ディレクトリの所有者であるユーザー名。
タイプ 文字列
デフォルト値 <空>(変更しないことを意味する)
有効な値 任意の有効なユーザー名。
構文 任意の文字列。

参照: SETOWNER

権限

名前 permission
説明 ファイル/ディレクトリの権限。
タイプ 8進数
デフォルト値 ファイルの場合は644、ディレクトリの場合は755
有効な値 0 - 1777
構文 任意の8進数(先頭のゼロは省略可能です)。

参照: CREATEMKDIRSSETPERMISSION

再帰的

名前 recursive
説明 操作をサブディレクトリの内容に適用する必要がありますか?
タイプ boolean
デフォルト値 false
有効な値 true
構文 true

参照: RENAME

更新者

名前 renewer
説明 委任トークンの更新者のユーザー名。
タイプ 文字列
デフォルト値 <空>(現在のユーザーを意味する)
有効な値 任意の有効なユーザー名。
構文 任意の文字列。

参照: GETDELEGATIONTOKEN

レプリケーション

名前 replication
説明 ファイルのレプリケーション数。
タイプ short
デフォルト値 設定で指定。
有効な値 > 0
構文 任意の整数。

参照: CREATESETREPLICATION

スナップショット名

名前 snapshotname
説明 作成/削除するスナップショットの名前。または、スナップショットの名前変更後の新しい名前。
タイプ 文字列
デフォルト値 null
有効な値 任意の有効なスナップショット名。
構文 任意の文字列。

参照: CREATESNAPSHOTDELETESNAPSHOTRENAMESNAPSHOT

ソース

名前 sources
説明 ソースパスのリスト。
タイプ 文字列
デフォルト値 <空>
有効な値 スキームと権限のない絶対的なFileSystemパスのコンマ区切りリスト。
構文 任意の文字列。

参照: CONCAT

トークン

名前 token
説明 操作に使用される委任トークン。
タイプ 文字列
デフォルト値 <空>
有効な値 エンコードされたトークン。
構文 委任の注記を参照。

参照: RENEWDELEGATIONTOKENCANCELDELEGATIONTOKEN

トークン種別

名前 kind
説明 要求された委任トークンの種別。
タイプ 文字列
デフォルト値 <空>(サーバーはサービスのデフォルトの種別を設定します)
有効な値 トークン種別を表す文字列(例:「HDFS_DELEGATION_TOKEN」または「WEBHDFS delegation」)
構文 任意の文字列。

参照: GETDELEGATIONTOKEN

トークンサービス

名前 service
説明 トークンを使用するサービスの名前(例:namenodeのip:port)。
タイプ 文字列
デフォルト値 <空>
有効な値 文字列形式のip:portまたはサービスの論理名。
構文 任意の文字列。

参照: GETDELEGATIONTOKEN

ユーザー名

名前 user.name
説明 認証を参照してください。
タイプ 文字列
デフォルト値 null
有効な値 任意の有効なユーザー名。
構文 任意の文字列。

参照: 認証

NoRedirect

名前 noredirect
説明 レスポンスがHTTP 307リダイレクトまたはHTTP 200 OKを返すかどうか。ファイルの作成と書き込みを参照。
タイプ boolean
デフォルト値 false
有効な値 true
構文 true

参照: ファイルの作成と書き込み

名前空間クォータ

名前 namespacequota
説明 ディレクトリ下の名前空間の使用量(ファイル/ディレクトリの数)の制限。
タイプ 文字列
デフォルト値 Long.MAX_VALUE
有効な値 > 0.
構文 任意の整数。

参照: SETQUOTA

ストレージスペースクォータ

名前 storagespacequota
説明 ディレクトリ下のストレージスペースの使用量(レプリケーションを含むバイト数)の制限。
タイプ 文字列
デフォルト値 Long.MAX_VALUE
有効な値 > 0.
構文 任意の整数。

参照: SETQUOTASETQUOTABYSTORAGETYPE

ストレージタイプ

名前 storagetype
説明 変更する特定のストレージタイプクォータのストレージタイプ。
タイプ 文字列
デフォルト値 <空>
有効な値 任意の有効なストレージタイプ。
構文 任意の文字列。

参照: SETQUOTABYSTORAGETYPE

ストレージポリシー

名前 storagepolicy
説明 ストレージポリシーの名前。
タイプ 文字列
デフォルト値 <空>
有効な値 任意の有効なストレージポリシー名。GETALLSTORAGEPOLICYを参照。
構文 任意の文字列。

参照: SETSTORAGEPOLICY

イレイジャーコーディングポリシー

名前 ecpolicy
説明 イレイジャーコーディングポリシーの名前。
タイプ 文字列
デフォルト値 <空>
有効な値 任意の有効なイレイジャーコーディングポリシー名。
構文 任意の文字列。

参照: ENABLEECPOLICYまたはDISABLEECPOLICY

開始後

名前 startAfter
説明 liststatusバッチで返された最後の項目。
タイプ 文字列
デフォルト値 <空>
有効な値 任意の有効なファイル/ディレクトリ名。
構文 任意の文字列。

参照: LISTSTATUS_BATCH