您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何從Hadoop URL中讀取數據,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
要從Hadoop文件系統中讀取文件,一個最簡單的方法是使用java.net.URL對象來打開一個數據流,從而從中讀取數據。一般的格式如下:
1. InputStream in = null;
2. try {
3. in = new URL("hdfs://host/path").openStream();
4. // process in
5. } finally {
6. IOUtils.closeStream(in);
7. }
這里還需要一點工作來讓Java識別Hadoop文件系統的URL 方案,就是通過一個FsUrlStreamHandlerFactory實例來調用在URL中的setURLStreamHandler-Factory方法。這種方法在一個Java虛擬機中只能被調用一次,因此一般都在一個靜態塊中執行。這個限制意味著如果程序的其他部件(可能是不在你控制中的第三方部件)設置一個URLStreamHandlerFactory,我們便無法再從Hadoop中讀取數據。下一節將討論另一種方法。
例3-1展示了以標準輸出顯示Hadoop文件系統的文件的程序,它類似于Unix的cat命令。
例3-1:用URLStreamHandler以標準輸出格式顯示Hadoop文件系統的文件
1. public class URLCat {
2.
3. static {
4. URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
5. }
6.
7. public static void main(String[] args) throws Exception {
8. InputStream in = null;
9. try {
10. in = new URL(args[0]).openStream();
11. IOUtils.copyBytes(in, System.out, 4096, false);
12. } finally {
13. IOUtils.closeStream(in);
14. }
15. }
16. }
我們使用Hadoop中簡潔的IOUtils類在finally子句中關閉數據流,同時復制輸入流和輸出流之間的字節(本例中是System.out)。copyBytes方法的最后兩個參數,前者是要復制的緩沖的大小,后者表示復制結束后是否關閉數據流。這里是將輸入流關掉了,而System.out不需要關閉。
下面是一個運行示例:
1. % hadoop URLCat hdfs://localhost/user/tom/quangle.txt
2. On the top of the Crumpetty Tree
3. The Quangle Wangle sat,
4. But his face you could not see,
5. On account of his Beaver Hat.
關于“如何從Hadoop URL中讀取數據”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。