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