Hadoop HDFS over HTTP 2.4.1 -Server Setup

本篇文章介绍了如何快速建立一个带Pseudo认证的HttpFS。

Requirements

  • Java 6+
  • Maven 3+

Install HttpFS

~ $ tar xzf httpfs-2.4.1.tar.gz

Configure HttpFS

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

如果文件不在,增加 httpfs-site.xml文件,然后用httpfs.hadoop.config.dir属性设置本地的Hadoop配置文件目录。

【HttpFS服务器不一定在已存在的Hadoop集中的节点上?】

Configure 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>
...

重要的:使用将要用来启动HttpFS Server的Unix用户代替#HTTPFSUSER#。

Restart Hadoop

你需要重新启动Hadoop以使代理用户配置生效。

Start/Stop HttpFS

使用bin/httpfs.sh 脚本启动/停止HttpFS。例如:

httpfs-2.4.1 $ bin/httpfs.sh start

注意:不用任何参数调用这个脚本将列出所有可用的参数(start,stop,run等等)。Httpfs.sh脚本是tomcat的catalina.sh脚本的封装,在运行tomcat之前设置了环境变量和运行HttpFS Server 的java系统需求。

Test HttpFS is Working



~ $ curl -i "http://<HTTPFSHOSTNAME>:14000?user.name=babu&op=homedir" HTTP/1.1 200 OK Content-Type: application/json Transfer-Encoding: chunked {"homeDir":"http:\/\/<HTTPFS_HOST>:14000\/user\/babu"}

Embedded Tomcat Configuration

可以在tomcat/conf中配置内置的tomcat。

HttpFS在server.xml文件中预配置了HTTP端口14000和Admin端口14001。

Tomcat的日志预配置在HttpFS的logs/目录中。

下面是用到的环境变量(需要设置在HttpFS的conf/httpfs-env.sh脚本中):

  • HTTPFS_HTTP_PORT
  • HTTPFS_ADMIN_PORT
  • HTTPFS_LOG

HttpFS Configuration

HttFS支持doc/hadoop/hadoop-hdfs-httpfs/httpfs-default.html中所列出的属性,可以配置在HttpFS的配置目录conf/httpfs-site.xml配置文件中。

HttpFS over HTTPS(SSL)

将配置文件目录中的httpfs-env.sh文件中的HTTPFS_SSL_ENABLED设置为true可以配置HttpFS工作在SSL之上。

此外,下面的两个属性可以被设置(显示的是默认值):

  • HTTPFS_SSL_KEYSTORE_FILE=$HOME/.keystore
  • HTTPFS_SSL_KEYSTORE_PASS=password

在HttpFS的tomcat/conf目录中,用ssl_server.xml文件替换server.xml文件。

你需要为HttpFS服务器创建一个SSL证书。就像httpfsUnix用户,使用java keytool命令创建一个SSL证书:

$ keytool -genkey -alias tomcat -keyalg RSA

在这个命令的交互过程中,你将会被问一些问题。它将创建keystore 文件,这个文件将被命名为.keystore ,存放在httpfs用户目录下边。

你为keystorepassword输入的密码密闭匹配环境变量HTTPFS_SSL_KEYSTORE_PASS的值,这个环境变量在httpfs-env.sh脚本中设置。

What is your first and last name? 这个问题的答案必须是运行HttpFS Server的机器的hostname。

这时启动HttpFS,应该工作在HTTPS上。

使用Hadoop文件系统API或者Hadoop FS Shell的时候,用swebhdfs://scheme。如果使用自签名的证书的话,确认JVM是拥有包括SSL证书的公钥。