HTTP経由のHadoop HDFS - サーバー設定

このページでは、疑似認証を使用するHadoopクラスタに対して、疑似認証を使用してHttpFSを迅速に設定する方法について説明します。

HttpFSのインストール

~ $ tar xzf  httpfs-3.3.6.tar.gz

HttpFSの構成

デフォルトでは、HttpFSはHadoop構成ファイル(core-site.xml & hdfs-site.xml)がHttpFS構成ディレクトリにあると想定します。

そうでない場合は、httpfs-site.xmlファイルに、Hadoop構成ディレクトリの場所を設定したhttpfs.hadoop.config.dirプロパティを追加します。

Hadoopの構成

Hadoopのcore-site.xmlを編集し、HttpFSサーバーを実行するUnixユーザーをプロキシユーザーとして定義します。 例:

  <property>
    <name>hadoop.proxyuser.#HTTPFSUSER#.hosts</name>
    <value>httpfs-host.foo.com</value>
  </property>
  <property>
    <name>hadoop.proxyuser.#HTTPFSUSER#.groups</name>
    <value>*</value>
  </property>

重要:#HTTPFSUSER#を、HttpFSサーバーを起動するUnixユーザーに置き換えてください。

Hadoopの再起動

プロキシユーザー構成を有効にするには、Hadoopを再起動する必要があります。

HttpFSの起動/停止

HttpFSを起動/停止するには、hdfs --daemon start|stop httpfsを使用します。 例:

hadoop-3.3.6 $ hdfs --daemon start httpfs

注:スクリプトhttpfs.shは非推奨です。現在はhdfs httpfsのラッパーにすぎません。

HttpFSが動作していることの確認

$ curl -sS 'http://<HTTPFSHOSTNAME>:14000/webhdfs/v1?op=gethomedirectory&user.name=hdfs'
{"Path":"\/user\/hdfs"}

HttpFSの構成

HttpFSはHTTPポートを14000に事前設定します。

HttpFSは、HttpFSのetc/hadoop/httpfs-site.xml構成ファイルで、以下の構成プロパティをサポートしています。

HTTPS(SSL)経由のHttpFS

etc/hadoop/httpfs-site.xmlでSSLを有効にします

  <property>
    <name>httpfs.ssl.enabled</name>
    <value>true</value>
    <description>
      Whether SSL is enabled. Default is false, i.e. disabled.
    </description>
  </property>

etc/hadoop/ssl-server.xmlを適切な値で構成します。例:

  <property>
    <name>ssl.server.keystore.location</name>
    <value>${user.home}/.keystore</value>
    <description>Keystore to be used. Must be specified.
    </description>
  </property>

  <property>
    <name>ssl.server.keystore.password</name>
    <value></value>
    <description>Must be specified.</description>
  </property>

  <property>
    <name>ssl.server.keystore.keypassword</name>
    <value></value>
    <description>Must be specified.</description>
  </property>

SSLパスワードは、クレデンシャルプロバイダーによって保護できます。 クレデンシャルプロバイダーAPIを参照してください。

HttpFSサーバーのSSL証明書を作成する必要があります。 httpfs Unixユーザーとして、Javaのkeytoolコマンドを使用してSSL証明書を作成します

$ keytool -genkey -alias jetty -keyalg RSA

対話型プロンプトで一連の質問が表示されます。 .keystoreという名前のキーストアファイルが作成され、httpfsユーザーのホームディレクトリに配置されます。

「keystore password」に入力するパスワードは、構成ディレクトリのssl-server.xmlに設定されているプロパティssl.server.keystore.passwordの値と一致する必要があります。

「あなたの姓名は何ですか?」(つまり「CN」)への回答は、HttpFSサーバーが実行されるマシンのホスト名である必要があります。

HttpFSを起動します。HTTPS経由で動作するはずです。

Hadoop FileSystem APIまたはHadoop FSシェルを使用して、swebhdfs://スキームを使用します。自己署名証明書を使用する場合は、JVMがSSL証明書の公開鍵を含むトラストストアを取得していることを確認してください。クライアント側の設定の詳細については、SWebHDFSのSSL構成を参照してください。

注:一部の古いSSLクライアントは、HttpFSサーバーでサポートされていない弱い暗号を使用する場合があります。SSLクライアントをアップグレードすることをお勧めします。

非推奨の環境変数

以下の環境変数は非推奨です。代わりに、対応する構成プロパティを設定してください。

環境変数 構成プロパティ 構成ファイル
HTTPFS_HTTP_HOSTNAME httpfs.http.hostname httpfs-site.xml
HTTPFS_HTTP_PORT httpfs.http.port httpfs-site.xml
HTTPFS_MAX_HTTP_HEADER_SIZE hadoop.http.max.request.header.size and hadoop.http.max.response.header.size httpfs-site.xml
HTTPFS_MAX_THREADS hadoop.http.max.threads httpfs-site.xml
HTTPFS_SSL_ENABLED httpfs.ssl.enabled httpfs-site.xml
HTTPFS_SSL_KEYSTORE_FILE ssl.server.keystore.location ssl-server.xml
HTTPFS_SSL_KEYSTORE_PASS ssl.server.keystore.password ssl-server.xml

HTTPデフォルトサービス

名前 説明
/conf 構成プロパティを表示
/jmx Java JMX管理インターフェース
/logLevel クラスごとのログレベルを取得または設定
/logs ログファイルを表示
/stacks JVMスタックを表示
/static/index.html 静的ホームページ

サーブレット/conf/jmx/logLevel/logs、および/stacksへのアクセスを制御するには、httpfs-site.xmlで以下のプロパティを構成します

  <property>
    <name>hadoop.security.authorization</name>
    <value>true</value>
    <description>Is service-level authorization enabled?</description>
  </property>

  <property>
    <name>hadoop.security.instrumentation.requires.admin</name>
    <value>true</value>
    <description>
      Indicates if administrator ACLs are required to access
      instrumentation servlets (JMX, METRICS, CONF, STACKS).
    </description>
  </property>

  <property>
    <name>httpfs.http.administrators</name>
    <value></value>
    <description>ACL for the admins, this configuration is used to control
      who can access the default servlets for HttpFS server. The value
      should be a comma separated list of users and groups. The user list
      comes first and is separated by a space followed by the group list,
      e.g. "user1,user2 group1,group2". Both users and groups are optional,
      so "user1", " group1", "", "user1 group1", "user1,user2 group1,group2"
      are all valid (note the leading space in " group1"). '*' grants access
      to all users and groups, e.g. '*', '* ' and ' *' are all valid.
    </description>
  </property>