HttpFS的安装以及操作详解

一、HttpFS的简介

在项目中使用到 HDFS 作为存储,为了在不同的环境下都可以使用 HDFS 上的数据,我们使用采用了 HttpFS 服务,这样不需要部署 Hadoop 的环境,就可以访问到了,无论是 Windows 还是 Linux 。为什么不用 WebHDFS 呢?因为这个我们的集群 NameNodeHA 的,所以在访问文件前,需要确认 ActiveNameNode,而且比较不爽的事,如果客户端的机器 /etc/hosts 中需要配置所有的 Datanodes 机器信息。

后来找到的解决方案是使用 HttpFS ,它本质上是一个代理,是 java jetty web 程序,直接运行在可以在 Hadoop 集群上,可以感知 NameNode HA 的配置,本质上是对 WebHDFS 进行了一次封装,但使用它的时候不用担心本机是否配置好所有的 DataNode IP 主机名映射。

二、HttpFS的安装

  • 如果使用HDP 之类的大数据平台,有现成的 rpm 包,直接使用下面得命令安装即可
yum install -y hadoop-httpfs
  • 若是使用 CDH ,它默认就已经包含了 HttpFS 服务,直接可以使用。

配置:主要配置一下httpfs启动用户的代理

<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 服务的用户名即可(我的集群是使用 root 启动的 Hadoop 集群,这儿就换成 root)。

注意:core-site.xml里面的添加的配置必须在namenode的节点进行配置,在datanode配置是不起作用的
HDP安装HttpFS服务踩坑指南

三、启动注意事项

第一步:必须要重新启动 Hadoop 集群

start-dfs.sh

第二步:httpfs 启动命令(CDH 版本的在 /hadoop/sbin 目录,HDP版本的在 /hadoop-httpfs/sbin 目录):

sbin/httpfs.sh start

四、常用的命令

1、查看目录信息(查看/tmp目录)

curl -i "http://192.168.10.20:14000/webhdfs/v1/tmp?op=GETFILESTATUS&user.name=root"

返回结果:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: hadoop.auth="u=root&p=root&t=simple-dt&e=1604056301367&s=vUJ/wDXktvXbrOeC9FxPFt1ea8c="; Path=/; HttpOnly
Content-Type: application/json
Transfer-Encoding: chunked
Date: Fri, 30 Oct 2020 01:11:41 GMT

{
    "FileStatus":{
        "pathSuffix":"",
        "type":"DIRECTORY",
        "length":0,
        "owner":"root",
        "group":"supergroup",
        "permission":"770",
        "accessTime":0,
        "modificationTime":1602967570741,
        "blockSize":0,
        "replication":0
    }
}

2、查看目录下的文件信息,不会递归(查看/tmp目录下的文件,不会列出子目录所包含的)

curl -i "http://192.168.10.20:14000/webhdfs/v1/tmp?op=LISTSTATUS&user.name=root"

返回结果:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: hadoop.auth="u=root&p=root&t=simple-dt&e=1604057646044&s=ZLo8GPlaTuSc9diZyhmUcrUUDEU="; Path=/; HttpOnly
Content-Type: application/json
Transfer-Encoding: chunked
Date: Fri, 30 Oct 2020 01:34:06 GMT

{
    "FileStatuses":{
        "FileStatus":[
            {
                "pathSuffix":"hadoop-yarn",
                "type":"DIRECTORY",
                "length":0,
                "owner":"root",
                "group":"supergroup",
                "permission":"770",
                "accessTime":0,
                "modificationTime":1568803432349,
                "blockSize":0,
                "replication":0
            },
            {
                "pathSuffix":"hive",
                "type":"DIRECTORY",
                "length":0,
                "owner":"root",
                "group":"supergroup",
                "permission":"733",
                "accessTime":0,
                "modificationTime":1602965215913,
                "blockSize":0,
                "replication":0
            },
            {
                "pathSuffix":"jars",
                "type":"DIRECTORY",
                "length":0,
                "owner":"root",
                "group":"supergroup",
                "permission":"755",
                "accessTime":0,
                "modificationTime":1569322824112,
                "blockSize":0,
                "replication":0
            },
            {
                "pathSuffix":"student.txt",
                "type":"FILE",
                "length":525,
                "owner":"root",
                "group":"supergroup",
                "permission":"644",
                "accessTime":1604019748697,
                "modificationTime":1602967570735,
                "blockSize":134217728,
                "replication":1
            }
        ]
    }
}

在这里插入图片描述

3、新建目录(在/user目录下,新建/abc目录)

curl -i -X PUT "http://192.168.10.20:14000/webhdfs/v1/user/abc?op=MKDIRS&user.name=root"


或者
curl -L -X PUT "http://192.168.10.20:14000/webhdfs/v1/user/abc?op=MKDIRS&user.name=root"

返回结果:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: hadoop.auth="u=root&p=root&t=simple-dt&e=1604055928849&s=ZH5KpFfxyqKFyCW3XyElZN+rIMM="; Path=/; HttpOnly
Content-Type: application/json
Transfer-Encoding: chunked
Date: Fri, 30 Oct 2020 01:05:29 GMT

{"boolean":true}

4、修改文件/文件夹名(在/user目录下,修改/abc目录为/abcdef)

curl -i -X PUT "http://192.168.10.20:14000/webhdfs/v1/user/abc?op=RENAME&user.name=root&destination=/user/abcdef"

返回结果:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: hadoop.auth="u=root&p=root&t=simple-dt&e=1604059219171&s=Nv2Dr0pz7JTi35NqDc/yz86adhg="; Path=/; HttpOnly
Content-Type: application/json
Transfer-Encoding: chunked
Date: Fri, 30 Oct 2020 02:00:19 GMT

{"boolean":true}

5、查看文件内容(查看/tmp目录下的student.txt文件)

curl -i "http://192.168.10.20:14000/webhdfs/v1/tmp/student.txt?op=open&user.name=root"


或者
curl -i -L PUT "http://192.168.10.20:14000/webhdfs/v1/tmp/student.txt?op=open&user.name=root"

返回结果:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: hadoop.auth="u=root&p=root&t=simple-dt&e=1604056735562&s=g+jF+wttTwv8nmDggJKxOboZvW8="; Path=/; HttpOnly
Content-Type: application/octet-stream
Content-Length: 525
Date: Fri, 30 Oct 2020 01:18:55 GMT

95002,刘晨,女,19,IS
95017,王风娟,女,18,IS
95018,王一,女,19,IS
95013,冯伟,男,21,CS
注意:这条指令中的的路径如果包含中文路径,执行curl命令的时候会报400错误。下载文件也会下载失败

6、下载HDFS文件到本地(下载/tmp目录下的student.txt文件,下载后文件名为download.txt)

curl -L -o download.txt "http://192.168.10.20:14000/webhdfs/v1/tmp/student.txt?op=OPEN&user.name=root"

返回结果:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   525  100   525    0     0  14247      0 --:--:-- --:--:-- --:--:-- 14583
说明:如果本地有该文件(download.txt)将会覆盖已存在的文件

7、上传本地文件(查看/tmp目录下的student.txt文件)(可以覆盖文件)

curl -X PUT -T /root/anaconda-ks.cfg "http://192.168.10.20:14000/webhdfs/v1/tmp/test.txt?op=CREATE&data=true&user.name=root" -H Content-Type:application/octet-stream

返回结果:

无任何返回结果
注意:这条指令默认开启了写入覆盖模式,当该目录下已经存在此文件,则会覆盖

若要防止文件覆盖,则需要添加参数 overwrite=false

curl -X PUT -T /root/anaconda-ks.cfg "http://192.168.10.20:14000/webhdfs/v1/tmp/test.txt?op=CREATE&data=true&overwrite=false&user.name=root" -H Content-Type:application/octet-stream

再次上传同名的文件,报如下的错误

{
	"RemoteException": {
		"message": "\/tmp\/test.txt for client 192.168.10.20 already exists",
		"exception": "FileAlreadyExistsException",
		"javaClassName": "org.apache.hadoop.fs.FileAlreadyExistsException"
	}
}

8、删除文件/文件夹(删除/tmp目录下的abc文件夹)

curl -i -X DELETE "http://192.168.10.20:14000/webhdfs/v1/user/abc?op=DELETE&user.name=root"


或者
curl -L -X DELETE "http://192.168.10.20:14000/webhdfs/v1/user/abc?op=DELETE&user.name=root"

返回结果:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: hadoop.auth="u=root&p=root&t=simple-dt&e=1604058717208&s=1YJLjUGRD28PVkJku2gYYnZqHtk="; Path=/; HttpOnly
Content-Type: application/json
Transfer-Encoding: chunked
Date: Fri, 30 Oct 2020 01:51:57 GMT

{"boolean":true}
注意:这条指令删除文件,不会走垃圾回收站

9、内容摘要,统计该目录下所包含的目录以及文件的数量,会递归(查看/tmp目录)

curl -i "http://192.168.10.20:14000/webhdfs/v1/tmp?op=GETCONTENTSUMMARY&user.name=root"

返回结果:

{
	"ContentSummary": {
		"directoryCount": 38,
		"fileCount": 7039,
		"length": 600788558,
		"quota": -1,
		"spaceConsumed": 600797216,
		"spaceQuota": -1
	}
}

10、重命名(重命名/tmp目录)

curl -L -X PUT "http://192.168.10.20:14000/webhdfs/v1/tmp/test.txt?op=RENAME&user.name=root&destination=/tmp/new_test.txt"


或者
curl -i -X PUT "http://192.168.10.20:14000/webhdfs/v1/tmp/test.txt?op=RENAME&user.name=root&destination=/tmp/new_test.txt"

返回结果:

{"boolean":true}

11、修改文件权限(修改/tmp目录)

curl -X PUT "http://192.168.10.20:14000/webhdfs/v1/tmp/new_test.txt?op=SETPERMISSION&user.name=root&permission=641"

无任何返回结果

五、WebHDFS的使用详解

WebHDFS的使用详解

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值