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();
	}
}
`

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章