1.外部的应用程序需要操作HDFS的情况,该如何解决?
2.WebHDFS REST API可以完成什么事情?
3.Httpfs 配置启动,core-site.xml、hdfs-site.xml文件改如何配置?
4.REST API 如何启动httpfs?
5.通过什么命令可以查看hdfs文件的状态?
6.WebHDFS常用操作都包含什么?该如何实现?
1 介绍
Hadoop提供了一个Java native API来支持对文件系统进行创建,重命名,删除文件或者目录,打开读取或者写文件,设置文件权限等操作。这对于运行在hadoop集群中的应用程序来说是挺棒的,但是,也有许多外部的应用程序需要操作HDFS的情况,怎么办?如果解决这种问题呢?Hortonworks 开发了一些额外的API来支持这些基于标准REST功能的需求。
2 WebHDFS REST API
WebHDFS观念是基于HTTP操作,比如GET、PUT、POST和DELETE。像OPEN、GETFILESTATUS、LISTSTATUS的操作是使用HTTP GET,其它的像CREAT、MKDIRS、RENAME、SETPERMISSION是依赖于HTTP PUT类型。APPEND操作时基于HTTP POST类型,然而,DELETE是使用HTTP DELETE。
认证方式可以使用基于user.name参数或者如果安全机制开启了就依赖于Kerberos。标准的URL格式如下所示:
http://host:port/webhdfs/v1/?op=operation&user.name=username
默认的启动对口是14000,你可以在httpfs-env.sh 中配置端口的值。所有与httpfs有关的环境参数变量,你可以再httpfs-env.sh中进行个性化的配置。
3 Httpfs 配置启动
编辑core-site.xml文件,添加如下内容:
值得注意的是,#HTTPFSUSER#指的是用户名,即linux启动httpfs的用户。
编辑hdfs-site.xml文件,添加下列属性配置。
另外,想知道更多的有关HDFS端口信息,请参考Cloudera blog.
启动httpfs,执行如下命令:
4 验证
一切配置好了之后,测试一下是否配置成功是非常有必要的。有这样一种情况,我们需要知道hdfs 目录下tmp的文件状态。按照这样的需求,我们可以编写这样的命令:
命令行下
浏览器中:
返回信息:
5介绍几种常用的WebHDFS操作
5.1 创建
创建一个目录/tmp/webhdfs。
达到相似的功能,Hadoop 命令:
创建一个文件
创建一个文件需要两个步骤:第一步是在namenode运行命令,第二步根据第一步提供的location参数执行PUT操作。
发送数据到指定文件中:
5.2 读取文件
读取/input文件信息,使用-L参数。
5.3 重命名目录
需要修改op的值和添加destination参数,实例如下所示:
验证是否正确地执行,输入下列命令:
5.4 删除目录
非空的目录删除的话会抛出异常,只有为空的目录才会被删除。
核查是否正确地执行
总结
WebDFS提供了一个简单、标准的方式来执行Hadoop 文件系统操作,这个客户端不必运行在Hadoop集群本身中。WebHDFS最主要的特性是让客户端通过预定义端口直接地链接namenode 和 datanode。这样的话,规避了好多HDFS proxy的代理层以及预先配置Tomcat的绑定。WebHDFD API是可互相交换的,这样让客户端不需要去打开防火墙端口。
两种常见的异常:
1. HTTP/1.1 405 HTTP method PUT is not supported by this URL
修改hdfs-site.xml文件的权限属性。
2 {"RemoteException":{"exception":"AccessControlException","javaClassName":"org.apache.hadoop.security.AccessControlException","message":"Permission denied: user=dr.who, access=WRITE, inode=\"/qzhang\":Administrator:supergroup:drwxr-xr-x\n\tat
问题2与问题1是一个问题,解决方案同上。
http://blog.csdn.net/john_f_lau/article/details/20007299