html調用hadoop WebHDFS REST API


首先,hadoop的WebHDFS支持通過REST API用http的方式訪問HDFS。
通過REST API能完成很多,如上傳下載,查看文件,創建目錄等操作. 本地的hadoop版本是hadoop2.0,裝上了httpfs,端口是14000. 這里以上傳文件(原文是Create and Write to a File)為例。
上傳文件分為兩步,
第一步先提交一個不自動重定向的,不發送文件數據的put請求 如,我要上傳文件test.txt到user目錄。執行以下命令:
 
curl -i -X PUT "http://10.20.18.1:14000/webhdfs/v1/user/test.txt?user.name=hdfs&op=CREATE"
 
 [&overwrite=<true|false>][&blocksize=<LONG>][&replication=<SHORT>] [&permission=<OCTAL>][&buffersize=<INT>]"
 
//后面是可選參數其中overwrite是是否覆蓋,默認為false,但是官方文檔上說true是個Valid Values(暈)
 
//可以看出塊大小,副本數,文件權限都是可以設置的。 執行之后會得到一些返回,如下:
 
HTTP/1.1 307 Temporary Redirect Server: Apache-Coyote/1.1 Set-Cookie: hadoop.auth="u=hdfs&p=hdfs&t=simple&e=1345220043113&s=ikU/wiUsFtaTHrkPQmaya5PHjkQ="; Version=1; Path=/ Location: http://10.20.18.1:14000/webhdfs/v1/user/test.txt?op=CREATE&user.name=hdfs&data=true Content-Type: application/json Content-Length: 0 Date: Fri, 17 Aug 2012 06:14:03 GMT
 
//注意到返回值是307
記下headers中的Set-Cookie和Location的內容。
例如,我把Set-Cookie的內容寫到cookie.txt中,把Location寫到url.txt中。
第二步:上傳文件test.txt:
 
curl -i -X PUT -T test.txt -b cookie.txt --header "Content-Type: application/octet-stream" "`cat url.txt`"
這時就可以在hdfs上看到你上傳的文件了。
當然,在命令行中完成hadoop-httpfsde restAPI調用肯定不是httpfs的本意。
這里用XMLHttpResquest來上傳文件。作為例子。完整代碼請查看附件。
 
在/usr/lib/hadoop-httpfs/webapps/ROOT下創建abc.html,這樣可以通過httpfs的端口訪問了
  1. this.xhr.open( p.method, p.url, true); 
  2. this.xhr.setRequestHeader("Content-Type","application/octet-stream");//設置Content-Type屬性 
  3. this.xhr.onreadystatechange = function() { 
  4. if( this.xhr.readyState != 4 ) { return; } 
  5. }.bind( this ); 
  6.  this.xhr.send( null );//發送文件,這里使用空,null 

這里的this.xhr是個XMLHttpResquest對象。在this.xhr.send( null );之前,XMLHttpResquest
已經完成了cookie和location的重定向(注意上面出現了的307,xmlhttpresqust在send的時候會對307返回值的請求重定向)。

本文出自 “稀飯吃了不頂餓” 博客,請務必保留此出處http://chcearth.blog.51cto.com/2179839/965704


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM