このページでは、疑似認証を使用する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>