Web⽅式访问HDFS
Hadoop提供了两种Web⽅式访问HDFS,分别是:WebHDFS和HttpFS。
WebHDFS
WebHDFS提供了访问HDFS的RESTful接⼝,是内置组件,并且默认开启,运⾏于NameNode和DataNode中,对HDFS⽂件的读写,将会重定向到⽂件所在的DataNode,并且会完全利⽤HDFS的带宽。;
WebHDFS访问时,⾸先访问NameNode获知⽂件所在的DataNode地址,然后重定向到⽬标DataNode获取⽂件内容;
WebHDFS默认端⼝是50070和50075;
WebHDFS使得集外的客户端可以不安装Hadoop和Java环境就可以对HDFS进⾏访问,并且不限制编程语⾔;
默认的URL格式: webhdfs://<HOST>:<HTTP_PORT>/<PATH>
WebHDFS提供的操作列表功能清单:
HTTP GET
· OPEN (see FileSystem.open)
· GETFILESTATUS (FileStatus)
· LISTSTATUS (see FileSystem.listStatus)
· GETCONTENTSUMMARY (ContentSummary)
· GETFILECHECKSUM (FileChecksum)
· GETHOMEDIRECTORY (HomeDirectory)
· GETDELEGATIONTOKEN (DelegationToken)
HTTP PUT
· CREATE (ate)
· MKDIRS (see FileSystem.mkdirs)
·
RENAME (ame)
· SETREPLICATION (see FileSystem.setReplication)
· SETOWNER (see FileSystem.setOwner)
· SETPERMISSION (see FileSystem.setPermission)
· SETTIMES (see FileSystem.setTimes)
· RENEWDELEGATIONTOKEN (wDelegationToken)
· CANCELDELEGATIONTOKEN (see DistributedFileSystem.cancelDelegationToken)
HTTP POST
· APPEND (see FileSystem.append)
实例1
类似:hadoop fs -ls /test
实例2
上传⽂件,需要两次请求,第⼀次请求会返回第⼆次请求的URL,通过第⼆次的URL上传⽂件。 这两次请求都是PUT请求。返回信息:
{
"Location": "LAPTOP-CEJI62RD:9864/webhdfs/v1/?
op=CREATE&namenoderpcaddress=localhost:9000&createflag=&createparent=true&overwrite=true&replication=2"
}
如下图(postman请求)
第⼆次请求需要在请求的body中指定上传的⽂件,返回上传⽂件的数量,返回状态201表⽰上传成功, 如下图(postman请求)
HttpFS
HttpFS是独⽴于HDFS的⼀个服务(Java Web应⽤程序),通过内置的Jetty服务器对外提供服务。本质上是⼀个代理服务。客户端对HDFS⽂件的读写,将会通过HttpFS进⾏中转,然后由HttpFS去跟HDFS集互,它能限制带宽占⽤。HttpFS的使⽤需要⼿动配置安装,它的默认端⼝14000。
HttpFS 可⽤于访问防⽕墙后⾯的集上的 HDFS 中的数据(HttpFS 服务器充当⽹关,并且是唯⼀允许通过防⽕墙进⼊集的系统)。
HttpFS 具有内置安全功能,⽀持 Hadoop 伪⾝份验证和 HTTP SPNEGO Kerberos 和其他可插⼊⾝份验证机制。它还提供 Hadoop 代理⽤户⽀持。
HttpFS的配置
配置⽂件:l(或l), 添加下⾯内容:
</property>
<property>
<name>roups</name>
<value>*</value>
</property>
注:两个参数名称中的root代表的是启动hdfs服务的OS⽤户,应以实际的⽤户名称代替。 表⽰root⽤户可以在任意host主机节点上代表任意group组的⽤户。
HttpFS的启动
hdfs --daemon start httpfs
进程名称为: HttpFSServerWebServer
HttpFS的默认服务
Name Description
/conf Display configuration properties
/jmx Java JMX management interface
/logLevel Get or set log level per class
/logs Display log files
/stacks Display JVM stacks
/static/index.html The static home page
如果要访问/conf, /jmx, /logLevel, /logs, 或 /stacks,需要在l中配置如下内容:
<description>Is service-level authorization enabled?</description>
</property>
<property>
<name>hadoop.quires.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,
< "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.
mkdirs方法</description>
</property>
实例(使⽤curl命令):
浏览器打开HttpFS的服务⾸页
1、 $ curl 'httpfs-host:14000/webhdfs/v1/user/?op=OPEN&user.name=foo'
返回HDFS中/user/⽂件的内容。
2、 $ curl 'httpfs-host:14000/webhdfs/v1/user/foo?op=LISTSTATUS&user.name=foo'
returns the contents of the HDFS /user/foo directory in JSON format.
返回JSON格式化数据的HDFS中/user/foo⽬录下的内容。
3、 $ curl 'httpfs-host:14000/webhdfs/v1/user/foo?op=GETTRASHROOT&user.name=foo'
返回“/user/foo/.Trash”路径,如果/是加密区域,则返回“/.Trash/foo”路径。
4、 $ curl -X POST 'httpfs-host:14000/webhdfs/v1/user/foo/bar?op=MKDIRS&user.name=foo' 创建HDFS⽬录:/user/foo/bar。
注: HttpFS访问时可以指定⽤户⾝份,使⽤参数:user.name (避免HTTP ERROR 401错误)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论