Hadoop HDFS HTTP服务端设置

本页面介绍如何在使用伪认证的Hadoop集群上快速设置HttpFS并采用伪认证方式。

安装HttpFS

~ $ tar xzf  httpfs-3.4.1.tar.gz

配置HttpFS

默认情况下,HttpFS假定Hadoop配置文件(core-site.xml & hdfs-site.xml)位于HttpFS配置目录中。

如果不是这种情况,请将httpfs.hadoop.config.dir属性添加到httpfs-site.xml文件中,并将其设置为Hadoop配置目录的位置。

配置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.4.1 $ 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密码可以通过凭证提供程序进行保护。请参阅Credential Provider 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 Server的主机的主机名。

启动HttpFS。它应该通过HTTPS工作。

使用Hadoop的FileSystem API或Hadoop FS shell时,请采用swebhdfs://协议方案。若使用自签名证书,请确保JVM已加载包含SSL证书公钥的信任库。有关客户端设置的更多信息,请参阅SSL Configurations for SWebHDFS

注意:某些旧版SSL客户端可能使用HttpFS服务器不支持的弱密码套件。建议升级SSL客户端。

已弃用的环境变量

以下环境变量已被弃用。请设置相应的配置属性替代。

环境变量 配置属性 配置文件
HTTPFS_HTTP_HOSTNAME httpfs.http.hostname httpfs-site.xml
HTTPFS_HTTP端口 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最大线程数 hadoop.http.max.threads httpfs-site.xml
HTTPFS_SSL_ENABLED httpfs.ssl.enabled httpfs-site.xml
HTTPFS_SSL密钥库文件 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 The static home page
/prof 异步性能分析器端点

要控制对servlet /conf/jmx/logLevel/logs/stacks/prof的访问权限,请在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, PROF).
    </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>