Hadoop權威指南學習——從Hadoop URL讀取資料
阿新 • • 發佈:2019-01-06
一、準備工作
在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 例項,該程式將無法使用。