このページでは、疑似認証を使用するHadoopクラスタに対して、疑似認証を使用してHttpFSを迅速に設定する方法について説明します。
~ $ tar xzf httpfs-3.3.6.tar.gz
デフォルトでは、HttpFSはHadoop構成ファイル(core-site.xml & hdfs-site.xml)がHttpFS構成ディレクトリにあると想定します。
そうでない場合は、httpfs-site.xmlファイルに、Hadoop構成ディレクトリの場所を設定したhttpfs.hadoop.config.dirプロパティを追加します。
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を再起動する必要があります。
HttpFSを起動/停止するには、hdfs --daemon start|stop httpfsを使用します。 例:
hadoop-3.3.6 $ hdfs --daemon start httpfs
注:スクリプトhttpfs.shは非推奨です。現在はhdfs httpfsのラッパーにすぎません。
$ curl -sS 'http://<HTTPFSHOSTNAME>:14000/webhdfs/v1?op=gethomedirectory&user.name=hdfs'
{"Path":"\/user\/hdfs"}
HttpFSはHTTPポートを14000に事前設定します。
HttpFSは、HttpFSのetc/hadoop/httpfs-site.xml構成ファイルで、以下の構成プロパティをサポートしています。
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 |
| 名前 | 説明 |
|---|---|
| /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>