国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Java流機(jī)制在Hadoop分布式文件系統(tǒng)中的應(yīng)用

2018-04-09 11:22龐雙玉
電子技術(shù)與軟件工程 2018年5期
關(guān)鍵詞:數(shù)據(jù)

龐雙玉

摘 要 本文討論JAVA語言中的流機(jī)制在HDFS分布式文件系統(tǒng)讀寫操作中的應(yīng)用,通過對比JAVA中的輸入和輸出流機(jī)制和HDFS的讀寫操作,闡述java流思想的本質(zhì),以及Java在分布式系統(tǒng)開發(fā)中的優(yōu)越性。

【關(guān)鍵詞】Java 分布式系統(tǒng) 數(shù)據(jù)

1 引言

Apache Hadoop是一個(gè)分布式開源的軟件系統(tǒng)框架。它被用于分布文式文件系統(tǒng)和用MAP/REUDUCE機(jī)制處理的大數(shù)據(jù)處理模型中。它包含多個(gè)由通用商業(yè)硬件組成的計(jì)算機(jī)集群。Hadoop中所有的模塊設(shè)計(jì)都基于一個(gè)基本的假設(shè)即硬件錯(cuò)誤是普遍發(fā)生并且可以自動(dòng)被處理的。

Hadoop的核心包括分布式的文件系統(tǒng)存儲(chǔ)即HDFS。Hadoop是用Java語言開發(fā)的,本文討論Java語言中的流機(jī)制在HDFS文件系統(tǒng)設(shè)計(jì)中的應(yīng)用。

2 Java語言中的流機(jī)制

流是java語言所特有的機(jī)制,把數(shù)據(jù)的存取想象成從一個(gè)源源不斷的數(shù)據(jù)流中讀取,在Java中,創(chuàng)建輸入和輸出流對象時(shí),以要操作的文件對象或者數(shù)據(jù)源頭作為構(gòu)造方法參數(shù),將輸入和輸出流與操作對象關(guān)聯(lián)。

流的一端可以是數(shù)據(jù)、設(shè)備、網(wǎng)絡(luò)、內(nèi)存,根據(jù)數(shù)據(jù)的流向,數(shù)據(jù)從網(wǎng)絡(luò),設(shè)備,內(nèi)存等到創(chuàng)建好的流,稱為輸入流,數(shù)據(jù)從創(chuàng)建好的流到網(wǎng)絡(luò),設(shè)備,內(nèi)存等,稱為輸出流。如圖1、圖2所示。

3 Hadoop和HDFS文件系統(tǒng)

Hadoop是Apach公司實(shí)現(xiàn)的一個(gè)框架,用Java語言開發(fā),從本質(zhì)上說,hadoop實(shí)現(xiàn)了一個(gè)分布式集群,這個(gè)集群中有一個(gè)master節(jié)點(diǎn)和多個(gè)slave節(jié)點(diǎn),核心機(jī)制是Map/Reduce數(shù)據(jù)處理機(jī)制和HDFS文件系統(tǒng),HDFS是分布式文件系統(tǒng),它采用數(shù)據(jù)塊和多節(jié)點(diǎn)備份機(jī)制,保證了高可靠性和容錯(cuò)性。

4 對HDFS文件系統(tǒng)的訪問

對HDFS文件系統(tǒng)的訪問,有兩種方式,一種通過java.net.URL訪問,一種是通過FileSystem來訪問。

通過URL訪問代碼:

HDFS的API使用:

public class ExCat {

static{

URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());

}

public static void main(String[] args) {

InputStream input=null;

try {

input = new URL(args[0]).openStream();

//使用java.net.URL對象打開數(shù)據(jù)流

IOUtils.copyBytes(input,System.out,4096,false);

//IOUtils類實(shí)現(xiàn)字節(jié)復(fù)制,將URL所在的文件內(nèi)容輸出到控制臺(tái)

} catch (Exception e) {

System.err.println("Error");

}finally{

IOUtils.closeStream(input);

}

}

}

需要注意的是,程序中的static block代碼塊,這個(gè)代碼塊的作用是,將URL地址轉(zhuǎn)換為一個(gè)HDFS地址,但是JVM只能調(diào)用一次這樣的代碼塊。

通過java文件系統(tǒng)來訪問代碼:

packageTestHdfs;

importjava.io.BufferedInputStream;

importjava.io.FileInputStream;

importjava.io.FileNotFoundException;

importjava.io.InputStream;

importjava.io.OutputStream;

importjava.net.URI;

importorg.apache.hadoop.conf.Configuration;

importorg.apache.hadoop.fs.FSDataOutputStream;

importorg.apache.hadoop.fs.FileSystem;

importorg.apache.hadoop.fs.Path;

importorg.apache.hadoop.io.IOUtils;

public class FileCopyFromLocal {

public static void main(String[] args) throws Exception {

String sr="/usr/local/filecontent/exmple";

//本地路徑文件

String des="hdfs://neusoft-master:9000/data/test";

//HDFS的路徑

InputStream in = new BufferedInputStream(new FileInputStream(sr));

//HDFS讀寫的配置文件

Configuration con = new Configuration();

FileSystemfs = FileSystem.get(URI.create(des),con);

OutputStream out = fs.create(new Path(des));

IOUtils.copyBytes(in, out, 4096, true);

}

}

從上面兩種方式,我們可以看出,對HDFS文件系統(tǒng)的訪問,無論采用以上哪種,都利用java數(shù)據(jù)流方式來訪問和讀寫數(shù)據(jù)。流式數(shù)據(jù)訪問的優(yōu)點(diǎn)在于,一次寫入,多次去讀取。

5 結(jié)論

Hadoop平臺(tái)本身就是用java實(shí)現(xiàn)的,Java語言跨平臺(tái)的天然特性,使其分別適合于分布式開發(fā),java中的流數(shù)據(jù)訪問機(jī)制,正是hadoop中HDFS分布式文件系統(tǒng)數(shù)據(jù)訪問的思想原型,流數(shù)據(jù)訪問特別適合于需要持續(xù)生成動(dòng)態(tài)數(shù)據(jù)的場景。流式數(shù)據(jù)訪問,解決了尋址耗時(shí)比較長的問題,更易于實(shí)現(xiàn)對數(shù)據(jù)的動(dòng)態(tài)的處理,并節(jié)省機(jī)器硬盤空間。

作者單位

深圳技師學(xué)院 廣東省深圳市 518000

猜你喜歡
數(shù)據(jù)
淺談?dòng)?jì)量自動(dòng)化系統(tǒng)實(shí)現(xiàn)預(yù)購電管理應(yīng)用
周至县| 安达市| 东台市| 望奎县| 彭水| 西林县| 南部县| 松阳县| 勐海县| 宝山区| 南昌县| 罗平县| 彭阳县| 永年县| 文安县| 土默特右旗| 凯里市| 静宁县| 兰州市| 大关县| 喜德县| 铜梁县| 桑植县| 建德市| 灵寿县| 贡嘎县| 永泰县| 内丘县| 禄丰县| 永新县| 崇文区| 电白县| 阿勒泰市| 鹤峰县| 万全县| 蓬莱市| 武定县| 云南省| 普兰县| 汉中市| 新安县|