TDH-使用httpFS接口操作说明

星环-使用httpFS接口操作说明.doc

1.httpFS简介
httpfs是cloudera公司提供的一个hadoop hdfs的一个http接口,通过WebHDFS REST API 可以对hdfs进行读写等访问。
与WebHDFS的区别是不需要客户端可以访问hadoop集群的每一个节点,通过httpfs可以访问放置在防火墙后面的hadoop集群
httpfs是一个Web应用,部署在内嵌的tomcat中

HttpFS可以用于在不同的Hadoop版本间传输数据(避免了RPC版本问题),例如使用Hadoop DistCP。
HttpFS可以通过HTTP工具(比如curl和wget)和各种编程语言的HTTP包(不局限Java)来访问数据。
webhdfs 客户端文件系统实现可以使用HDFS文件系统命令行命令(如hadoop dfs)以及使用HDFS Java API来访问HttpFS。HttpFS内置安全特性支持Hadoop伪身份验证和HTTP SPNEGO Kerberos 和其他插件式(pluggable )验证机制。它还提供了Hadoop代理用户的支持。

Hdfs2.7.2版本的介绍官网地址:
http://hadoop.apache.org/docs/r2.7.2/
2.CURL访问
用curl命令访问,url的格式为:http://httpfs-host:14000/webhdfs/v1/
这是固定格式,/webhdfs/v1/相当于hdfs的根目录/
14000是默认端口

示例如下:
curl -X GET 'http://10.85.252.1:30142/webhdfs/v1/tmp/xujing/data?op=open&
guardian_access_token=CMjaaNFrKDATxzowF1mY-880TDCA.TDH'

查看HDFS中/tmp/xujing/data文件的内容。
10.85.252.1:30142,hdfs安装在容器里,容器里的端口是14000,这里ip和端口是svc映射出来的物理机ip和端口。外部访问要用物理机的地址。

在这里插入图片描述

op=open,op指operation,有多种不同的操作,open指打开文件,mkdir指新建目录,大小写都可以,具体支持的操作见下表,自已网上查下每个操作是什么意思。
guardian_access_token,安全认证,access token在guardian中获取。

Operation支持的操作:


 OPEN(HTTP_GET), GETFILESTATUS(HTTP_GET), LISTSTATUS(HTTP_GET),
    GETHOMEDIRECTORY(HTTP_GET), GETCONTENTSUMMARY(HTTP_GET),
    GETFILECHECKSUM(HTTP_GET),  GETFILEBLOCKLOCATIONS(HTTP_GET),
    INSTRUMENTATION(HTTP_GET), GETACLSTATUS(HTTP_GET),
    APPEND(HTTP_POST), CONCAT(HTTP_POST), TRUNCATE(HTTP_POST),
    CREATE(HTTP_PUT), MKDIRS(HTTP_PUT), RENAME(HTTP_PUT), SETOWNER(HTTP_PUT),
    SETPERMISSION(HTTP_PUT), SETREPLICATION(HTTP_PUT), SETTIMES(HTTP_PUT),
    MODIFYACLENTRIES(HTTP_PUT), REMOVEACLENTRIES(HTTP_PUT),
    REMOVEDEFAULTACL(HTTP_PUT), REMOVEACL(HTTP_PUT), SETACL(HTTP_PUT),
    DELETE(HTTP_DELETE), SETXATTR(HTTP_PUT), GETXATTRS(HTTP_GET),
    REMOVEXATTR(HTTP_PUT), LISTXATTRS(HTTP_GET);

3.java api访问

3.java api访问
主要使用commons-httpclient.jar。
这里以org.apache.commons.httpclient的api为例说明,代码如下:
1.相关jar直接到apache网站下载hadoop包解压后获得即可。
2.我这里只用了hadoop-2.7.7\share\hadoop\common\lib下的所有包(commons-httpclient.jar也在这里个lib里面)。
3.编译java程序我用的是jdk1.7







上传示例:
把文件上传到hdfs /tmp目录下,上传的本地文件是mydata,上传到hdfs上的文件名是aaa(hdfs上要指定一个文件名)。
上传时url中的op参数为CREATE,因为上传相当于在hdfs上创建文件。
注意url中的data=TRUE参数,上传文件一定要加这个参数。
import java.io.File;
import java.io.FileInputStream;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PutMethod;

public class UpLoad{
	public static void main(String[] args) {
		String url = "http://10.85.252.1:30142/webhdfs/v1/tmp/ccc?op=CREATE&data=TRUE&guardian_access_token=CMjaaNFrKDATxzowF1mY-880TDCA.TDH";		
		HttpClient client = new HttpClient();
		int status = -1;
		PutMethod method = new PutMethod(url);
		method.setRequestHeader("Content-Type","application/octet-stream");		
		try {
			// 设置上传文件
			File targetFile = new File("mydata");
			FileInputStream in =new FileInputStream(targetFile);
			method.setRequestBody(in);		
			status = client.executeMethod(method);
			System.out.println(status);
		} catch (Exception e) {
			e.printStackTrace();
		}
		method.releaseConnection();
	}
}


下载示例:
把hdfs /tmp目录下的aaa文件下载到本地,本地文件名为mydata12。
url中的op参数为open
没有data=TRUE参数
``

import java.io.File;
import java.io.FileOutputStream;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;

public class DownLoad {
	public static void main(String[] args) {
		String url = "http://10.85.252.1:30142/webhdfs/v1/tmp/aaa?op=open&guardian_access_token=CMjaaNFrKDATxzowF1mY-880TDCA.TDH";		
		HttpClient client = new HttpClient();
		int status = -1;
		GetMethod method = new GetMethod(url);	
		try {
			// 设置下载文件
			File file = new File("mydata12");
			status = client.executeMethod(method);
			byte[] getData= method.getResponseBody();
			FileOutputStream fos = new FileOutputStream(file);
		    fos.write(getData);			
		    if(fos!=null){
	            fos.close();
	        }
		} catch (Exception e) {
			e.printStackTrace();
		}
		method.releaseConnection();
	}
}
`

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值