您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)如何從Hadoop URL中讀取數(shù)據(jù),小編覺得挺實(shí)用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
要從Hadoop文件系統(tǒng)中讀取文件,一個最簡單的方法是使用java.net.URL對象來打開一個數(shù)據(jù)流,從而從中讀取數(shù)據(jù)。一般的格式如下:
1. InputStream in = null;
2. try {
3. in = new URL("hdfs://host/path").openStream();
4. // process in
5. } finally {
6. IOUtils.closeStream(in);
7. }
這里還需要一點(diǎn)工作來讓Java識別Hadoop文件系統(tǒng)的URL 方案,就是通過一個FsUrlStreamHandlerFactory實(shí)例來調(diào)用在URL中的setURLStreamHandler-Factory方法。這種方法在一個Java虛擬機(jī)中只能被調(diào)用一次,因此一般都在一個靜態(tài)塊中執(zhí)行。這個限制意味著如果程序的其他部件(可能是不在你控制中的第三方部件)設(shè)置一個URLStreamHandlerFactory,我們便無法再從Hadoop中讀取數(shù)據(jù)。下一節(jié)將討論另一種方法。
例3-1展示了以標(biāo)準(zhǔn)輸出顯示Hadoop文件系統(tǒng)的文件的程序,它類似于Unix的cat命令。
例3-1:用URLStreamHandler以標(biāo)準(zhǔn)輸出格式顯示Hadoop文件系統(tǒng)的文件
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子句中關(guān)閉數(shù)據(jù)流,同時復(fù)制輸入流和輸出流之間的字節(jié)(本例中是System.out)。copyBytes方法的最后兩個參數(shù),前者是要復(fù)制的緩沖的大小,后者表示復(fù)制結(jié)束后是否關(guān)閉數(shù)據(jù)流。這里是將輸入流關(guān)掉了,而System.out不需要關(guān)閉。
下面是一個運(yùn)行示例:
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.
關(guān)于“如何從Hadoop URL中讀取數(shù)據(jù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。