1. 程式人生 > >Hadoop權威指南學習——從Hadoop URL讀取資料

Hadoop權威指南學習——從Hadoop URL讀取資料

一、準備工作

        在hadoop-env.sh中配置好 HADOOP_CLASSPATH 變數,值為編譯後的.class檔案所放置的地方。

export HADOOP_CLASSPATH=/usr/software/hadoop/hadoop-2.2.0/classpath

二、編寫程式

import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.apache.hadoop.io.IOUtils;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

public class URLCat {

    static {
        URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
    }

    //讀取檔案輸出
    public static void main(String[] args) {
        InputStream in = null;
        try {

            in = new URL(args[0]).openStream();
            IOUtils.copyBytes(in, System.out, 4096, false);

        }catch (IOException e){
            e.printStackTrace();
        }finally {
            IOUtils.closeStream(in);
        }
    }
}

三、編譯執行

[[email protected] classpath]# javac URLCat.java
[[email protected] classpath]# hadoop URLCat hdfs://localhost/part-r-00000
1901	317
1949	111
1950	22

四、程式介紹

        要從 Hadoop 檔案系統中讀取檔案,最簡單的方法是使用 java.net.URL 物件開啟資料流,從中讀取資料。

        讓 Java 程式能夠識別 Hadoop 的 hdfs URL 方案還需要一些額外的工作。這裡採用的方法是 FsUrlStreamHandlerFactory 例項,呼叫 java.net.URL 物件的 setURLStreamHandlerFactory方法將其設定為 URL 物件所使用的URLStreamHandlerFactory

        每個虛擬機器只能呼叫一次該方法,因此通常在靜態方法或程式碼塊中呼叫。這個限制意味著如果程式的其他第三方元件也宣告過一個 FsUrlStreamHandlerFactory 例項,該程式將無法使用。

結束