此页面说明如何使用伪身份验证快速设置 HttpFS 以对抗使用伪身份验证的 Hadoop 集群。
~ $ tar xzf httpfs-3.3.6.tar.gz
默认情况下,HttpFS 假设 Hadoop 配置文件 (core-site.xml & hdfs-site.xml
) 位于 HttpFS 配置目录中。
如果不是这种情况,请将 httpfs.hadoop.config.dir
属性添加到 httpfs-site.xml
文件中,并将其设置为 Hadoop 配置目录的位置。
编辑 Hadoop core-site.xml
并定义将作为 proxyuser 运行 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 才能使 proxyuser 配置生效。
要启动/停止 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
用户主目录中。
您为“密钥库密码”输入的密码必须与配置目录中的ssl-server.xml
中设置的属性ssl.server.keystore.password
的值匹配。
对“您的名字和姓氏是什么?”(即“CN”)的回答必须是 HttpFS 服务器将运行的机器的主机名。
启动 HttpFS。它应该通过 HTTPS 运行。
使用 Hadoop FileSystem
API 或 Hadoop FS shell,使用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 和 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 | 静态主页 |
若要控制对 servlet /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>