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

?

基于Hadoop的分布式文件系統(tǒng)實(shí)現(xiàn)

2015-03-14 11:31羅光明
關(guān)鍵詞:配置文件海量命令

羅光明

(四川水利職業(yè)技術(shù)學(xué)院,四川 成都 611230)

?

基于Hadoop的分布式文件系統(tǒng)實(shí)現(xiàn)

羅光明

(四川水利職業(yè)技術(shù)學(xué)院,四川 成都 611230)

為了解決現(xiàn)階段海量數(shù)據(jù)的傳輸效率低下的問(wèn)題,設(shè)計(jì)了基于Hadoop的分布式文件系統(tǒng)。系統(tǒng)是基于Hadoop的架構(gòu)進(jìn)行研究的,用MapReduce編程模型實(shí)現(xiàn)海量數(shù)據(jù)的上傳與下載,從而達(dá)到數(shù)據(jù)的高效傳輸,并對(duì)其進(jìn)行了傳輸性能測(cè)試。通過(guò)測(cè)試,基于Hadoop的數(shù)據(jù)傳輸效率遠(yuǎn)遠(yuǎn)大于傳統(tǒng)的數(shù)據(jù)傳輸效率,該系統(tǒng)具有一定的實(shí)用性.

Hadoop分布式系統(tǒng),MapReduce編程模型,高效傳輸

自進(jìn)入21世紀(jì)以來(lái),網(wǎng)絡(luò)信息發(fā)展就邁入了一個(gè)全新的階段,網(wǎng)絡(luò)信息的發(fā)展對(duì)我們的生產(chǎn)、生活和學(xué)習(xí)的影響非常之大,從根本上變革了我們的生產(chǎn)和生活方式.同時(shí),隨著網(wǎng)絡(luò)信息技術(shù)的快速發(fā)展也推動(dòng)了各類(lèi)資源信息的全球化共享.根據(jù)全球著名統(tǒng)計(jì)機(jī)構(gòu)統(tǒng)計(jì),在2012年底,全球的互聯(lián)網(wǎng)用戶(hù)達(dá)到了26.5億.網(wǎng)絡(luò)信息技術(shù)正以不可阻擋的趨勢(shì)在向前發(fā)展,在推動(dòng)著人類(lèi)的進(jìn)步和人類(lèi)的信息文明.因此,如何在充滿(mǎn)信息的世界中駕馭這些海量的信息并把這些信息轉(zhuǎn)為財(cái)富,已經(jīng)成為了IT互聯(lián)網(wǎng)各個(gè)行業(yè)的必爭(zhēng)舞臺(tái)[1].但現(xiàn)階段的情況卻是傳統(tǒng)的數(shù)據(jù)存儲(chǔ)平臺(tái)已不能適應(yīng)海量數(shù)據(jù)的并行處理速度需求和容量需求,故如何實(shí)現(xiàn)海量數(shù)據(jù)的上傳、下載和存儲(chǔ)成為了我們需要解決的問(wèn)題.云計(jì)算的出現(xiàn)為解決這一問(wèn)題帶來(lái)了曙光,尤其是云計(jì)算平臺(tái)Hadoop的使用,為解決海量數(shù)據(jù)存儲(chǔ)與處理提供了實(shí)施的方法.

1 Hadoop平臺(tái)搭建

Hadoop集群搭建有3種模式,分別為單機(jī)模式、偽分布式模式和完全分布式模式.由于該Hadoop平臺(tái)是搭建在云實(shí)驗(yàn)教學(xué)平臺(tái)上的,故選用完全分布式Hadoop集群作為數(shù)據(jù)上傳與下載平臺(tái).搭建的Hadoop云計(jì)算平臺(tái)由5臺(tái)機(jī)器組成,一臺(tái)作為Master實(shí)現(xiàn)Damenode和Jobtracter功能,其余四臺(tái)作為Slave(分別命名為Slave1、Slave2、Slave3和Slave4)實(shí)現(xiàn)Datanode和Tasktracker功能,

Hadoop云計(jì)算平臺(tái)搭建涉及到JDK的安裝、SSH的配置(實(shí)現(xiàn)無(wú)密碼登錄)、Hadoop平臺(tái)中相應(yīng)配置文件的參數(shù)配置和Eclipse跟Hadoop平臺(tái)的連接.

1.1 jdk安裝

由于Hadoop使用java程序編寫(xiě),故在運(yùn)行Hadoop平臺(tái)前需先安裝jdk,為Hadoop的運(yùn)行提供JVM,安裝jdk的步驟:

(1)在Ubuntu命令窗口輸入sudo apt-get install sun-java6-jdk.

(2) 在命令窗口輸入sudo gedit /etc/profile ,在打開(kāi)的文件中添加下面的內(nèi)容:

export JAVA_HOME= (java安裝位置,自動(dòng)安裝的目錄為/usr/lib/jvm/java-6-sun)

(3) 輸入命令java -verison驗(yàn)證安裝成功與否

1.2 SSH安裝

ssh無(wú)密碼登錄安裝步驟如下:

(1) 創(chuàng)建密鑰

Generating public/private rsa key pair.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /.ssh/id_rsa.

Your public key has been saved in /.ssh/id_rsa.pub.

(2) 添加公密到信任列表

(3) 啟動(dòng)ssh-agent

(4) 添加id_rsa到ssh-agent

(5)修改目錄權(quán)限

sudo chmod 600 ~/.ssh/id_rsa sudo chmod 600 ~/.ssh/id_rsa.pub

sudo chmod 644 ~/.ssh/known_hosts

sudo chmod 755 ~/.ssh

(6) 登陸測(cè)試

1.3 Hadoop平臺(tái)配置

(1)解壓Hadoop源碼包

終端下進(jìn)入hadoop源碼包所在目錄,使用復(fù)制命令把hadoop源碼包復(fù)制到/home/hadoop下,其命令為cp hadoop-1.2.1.tar.gz /home/hadoop,然后解壓,命令為:

tar -xzvf *.tag.gz.

(2)配置hadoop的hadoop/conf下的配置文件

①core-site.xml配置

其配置文件代碼如下:

②mapred-site.xml

其配置文件代碼如下:

③hdfs-site.xml

其配置文件代碼如下:

(3)格式化HDFS文件系統(tǒng)

其命令為 /bin/hadoop namenode -format,當(dāng)出現(xiàn)圖1時(shí)證明HDFS文件系統(tǒng)格式化成功.

(4)啟動(dòng)Hadoop服務(wù)

啟動(dòng)Hadoop命令為:/bin/start-all.sh,啟動(dòng)后如圖2所示,運(yùn)行jps命令,如顯示如圖3所示,則Hadoop平臺(tái)搭建成功.

至此,完整的基于云實(shí)驗(yàn)教學(xué)中心的Hadoop平臺(tái)搭建成功,可以用其做實(shí)際的上傳與下載任務(wù).

2 MapReduce實(shí)現(xiàn)數(shù)據(jù)上傳下載

2.1 客戶(hù)端

HDFS打開(kāi)一個(gè)文件,需要在客戶(hù)端調(diào)用DistributedFileSystem.open(Path f, int bufferSize),其實(shí)現(xiàn)為:

public FSDataInputStream open(Path f, int bufferSize) throws IOException {

return new DFSClient.DFSDataInputStream(

dfs.open(getPathName(f), bufferSize, verifyChecksum, statistics));

}

其中dfs為DistributedFileSystem的成員變量DFSClient,其open函數(shù)被調(diào)用,其中創(chuàng)建一個(gè)DFSInputStream(src, buffersize, verifyChecksum)并返回. 在DFSInputStream的構(gòu)造函數(shù)中,openInfo函數(shù)被調(diào)用,其主要從namenode中得到要打開(kāi)的文件所對(duì)應(yīng)的blocks的信息,實(shí)現(xiàn)如下:

synchronized void openInfo() throws IOException {

LocatedBlocks newInfo = callGetBlockLocations(namenode, src, 0, prefetchSize);

this.locatedBlocks = newInfo;

this.currentNode = null;

}

private static LocatedBlocks callGetBlockLocations(ClientProtocol namenode,

String src, long start, long length) throws IOException {

return namenode.getBlockLocations(src, start, length);

}

2.2 NameNode端

NameNode.getBlockLocations實(shí)現(xiàn)如下:

public LocatedBlocks getBlockLocations(String src,

long offset,

long length) throws IOException {

return namesystem.getBlockLocations(getClientMachine(),

src, offset, length);

}

namesystem是NameNode一個(gè)成員變量,其類(lèi)型為FSNamesystem,保存的是NameNode的name space樹(shù),其中一個(gè)重要的成員變量為FSDirectory dir. FSDirectory和Lucene中的FSDirectory沒(méi)有任何關(guān)系,其主要包括FSImage fsImage,用于讀寫(xiě)硬盤(pán)上的fsimage文件,F(xiàn)SImage類(lèi)有成員變量FSEditLog editLog,用于讀寫(xiě)硬盤(pán)上的edit文件. FSDirectory還有一個(gè)重要的成員變量INodeDirectoryWithQuota rootDir,INodeDirectoryWithQuota的父類(lèi)為INodeDirectory,實(shí)現(xiàn)如下:

public class INodeDirectory extends INode {

……

private List children;

……

}

getBlockLocationsInternal的實(shí)現(xiàn)如下:

private synchronized LocatedBlocks getBlockLocationsInternal(String src, INodeFile inode, long offset, long length, int nrBlocksToReturn, boolean doAccessTime)

throws IOException {

//得到此文件的block信息

Block[] blocks = inode.getBlocks();

List results = new ArrayList(blocks.length);

//計(jì)算從offset開(kāi)始,長(zhǎng)度為length所涉及的blocks

int curBlk = 0;

long curPos = 0, blkSize = 0;

int nrBlocks = (blocks[0].getNumBytes() == 0) ? 0 : blocks.length;

for (curBlk = 0; curBlk < nrBlocks; curBlk++) {

blkSize = blocks[curBlk].getNumBytes();

if (curPos + blkSize > offset) {

//當(dāng)offset在curPos和curPos + blkSize之間的時(shí)候,curBlk指向offset所在的

block

break;

}

curPos += blkSize;

}

long endOff = offset + length;

//循環(huán),依次遍歷從curBlk開(kāi)始的每個(gè)block,直到當(dāng)前位置curPos越過(guò)endOff

do {

int numNodes = blocksMap.numNodes(blocks[curBlk]);

int numCorruptNodes = countNodes(blocks[curBlk]).corruptReplicas( );

int numCorruptReplicas = corruptReplicas.numCorruptReplicas(blocks[curBlk]);

boolean blockCorrupt = (numCorruptNodes == numNodes);

int numMachineSet = blockCorrupt ? numNodes :

(numNodes - numCorruptNodes);

//依次找到此block所對(duì)應(yīng)的datanode,將其中沒(méi)有損壞的放入machineSet中

DatanodeDescriptor[] machineSet = new DatanodeDescriptor[numMachineSet];

if (numMachineSet > 0) {

numNodes = 0;

for(Iterator it =

blocksMap.nodeIterator(blocks[curBlk]); it.hasNext();) {

DatanodeDescriptor dn = it.next();

boolean replicaCorrupt = corruptReplicas.isReplicaCorrupt(blocks[curBlk],dn);

if (blockCorrupt || (!blockCorrupt && !replicaCorrupt))

machineSet[numNodes++] = dn;

}

}

//使用此machineSet和當(dāng)前的block構(gòu)造一個(gè)LocatedBlock

results.add(new LocatedBlock(blocks[curBlk], machineSet, curPos,blockCorrupt));

curPos += blocks[curBlk].getNumBytes();

curBlk++;

} while (curPos < endOff

&& curBlk < blocks.length

&& results.size() < nrBlocksToReturn);

//使用此LocatedBlock鏈表構(gòu)造一個(gè)LocatedBlocks對(duì)象返回

return inode.createLocatedBlocks(results);

}

通過(guò)以上代碼即可實(shí)現(xiàn)基于Hadoop的數(shù)據(jù)上傳與下載,為了測(cè)試方法的有效性,以下選用真實(shí)數(shù)據(jù)對(duì)其進(jìn)行測(cè)試.

3 性能測(cè)試

為了比較傳統(tǒng)環(huán)境下數(shù)據(jù)上傳與下載速率和基于Hadoop平臺(tái)的數(shù)據(jù)上傳與下載速率,從UCI中下載數(shù)據(jù)并將其分為10G、20G、30G、40G和50G等5組測(cè)試集,分別用傳統(tǒng)方法和基于Hadoop的數(shù)據(jù)上傳下載方法對(duì)其進(jìn)行處理,其結(jié)果如圖4、圖5所示.

綜上所述,從以上測(cè)試結(jié)果可以看出,基于Hadoop的數(shù)據(jù)傳輸效率遠(yuǎn)遠(yuǎn)大于傳統(tǒng)的數(shù)據(jù)傳輸效率.該方案可以解決海量數(shù)據(jù)處理性能瓶頸等問(wèn)題,對(duì)于現(xiàn)階段解決海量數(shù)據(jù)的傳輸與存儲(chǔ)具有一定的參考意義.

[1] 梁一帆.互聯(lián)網(wǎng)與信息型教育[J].黑龍江高教研究.2009 (4):104-106

[2] 陳全,鄧倩妮.云計(jì)算及其關(guān)鍵技術(shù)[J].計(jì)算機(jī)應(yīng)用.2009.29(9):2562-2567

[3] ZHANG Q,CHENG L,Boutaba R.Cloud computing: state-of-the-art and research challenges[J].Journal of internet services and applications.2010.1(1):7-18

[4] 羅軍舟,金嘉暉,宋愛(ài)波等.云計(jì)算:體系架構(gòu)與關(guān)鍵技術(shù)[J].通信學(xué)報(bào).2011.32(7):3-21

[5] 劉正偉,文中領(lǐng),張海濤等.云計(jì)算和云數(shù)據(jù)管理技術(shù)[J].計(jì)算機(jī)研究與發(fā)展.2012.49(z1):26-31

[6] 孫大為,常桂然,陳東等.云計(jì)算環(huán)境中綠色服務(wù)級(jí)目標(biāo)的分析、量化、建模及評(píng)價(jià)[J].計(jì)算機(jī)學(xué)報(bào).2013.36(7):1509-1525

[7] 曾文英,趙躍龍,尚敏等.云計(jì)算及云存儲(chǔ)生態(tài)系統(tǒng)研究[J].計(jì)算機(jī)研究與發(fā)展.2011.48(z1):234-239

[8] 崔杰,李陶深,蘭紅星等.基于Hadoop的海量數(shù)據(jù)存儲(chǔ)平臺(tái)設(shè)計(jì)與開(kāi)發(fā)[J].計(jì)算機(jī)研究與發(fā)展.2012.49(z1):12-18

[9] STONEBRAKER M,ABADI D,DEWITT D J,et al.MapReduce and parallel DBMSs: friends or foes[J].Communications of the ACM.2010.53(1):64-71

[10] 朱建生,汪健雄,張軍鋒等.基于NoSQL數(shù)據(jù)庫(kù)的大數(shù)據(jù)查詢(xún)技術(shù)的研究與應(yīng)用[J].中國(guó)鐵道科學(xué).2014.35(1):135-141

The Implementation of A Distributed File System Based on Hadoop

LUO Guang-Ming

(Sichuan Water Conservancy vocational College, Chengdu 611230, China)

In order to solve the problem that the transmission efficiency of mass data is low,the distributed file system based on Hadoop has been designed. The system is studied based on Hadoop architecture. It uploads and downloads massive data through the MapReduce programming model, so as to achieve the efficient transmission of data. According to the transmission performance test. The data transmission efficiency based on Hadoop is far greater than the transmission efficiency of the traditional.

Hadoop distributed file system; MapReduce programming model; efficient transmission

1673-5072(2015)01-0095-07

2014-12-12

羅光明(1981-),男,重慶大足人,四川水利職業(yè)技術(shù)學(xué)院信息工程系講師,主要從事計(jì)算機(jī)應(yīng)用研究.

TP393

A

猜你喜歡
配置文件海量命令
一種傅里葉域海量數(shù)據(jù)高速譜聚類(lèi)方法
只聽(tīng)主人的命令
從Windows 10中刪除所有網(wǎng)絡(luò)配置文件
用軟件處理Windows沙盒配置文件
互不干涉混用Chromium Edge
海量快遞垃圾正在“圍城”——“綠色快遞”勢(shì)在必行
基于Zookeeper的配置管理中心設(shè)計(jì)與實(shí)現(xiàn)
移防命令下達(dá)后
一個(gè)圖形所蘊(yùn)含的“海量”巧題
這是人民的命令
华池县| 宜兰市| 漳平市| 桓仁| 五寨县| 务川| 高陵县| 抚州市| 大安市| 中西区| 高青县| 昂仁县| 吉隆县| 曲水县| 长治县| 朝阳市| 铜鼓县| 信阳市| 秦皇岛市| 敖汉旗| 米泉市| 成都市| 伽师县| 皮山县| 咸阳市| 上饶市| 长子县| 射洪县| 阿巴嘎旗| 云阳县| 芦溪县| 浦江县| 西乌| 义乌市| 石棉县| 乌审旗| 长垣县| 新竹县| 陇西县| 沙洋县| 新民市|