成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spark Streaming學(xué)習(xí)筆記之HDFS

qqlcbb / 832人閱讀

摘要:用來管理文件系統(tǒng)的命名空間,其將所有的文件和文件夾的元數(shù)據(jù)保存在一個(gè)文件系統(tǒng)樹中。文件系統(tǒng)鏡像元數(shù)據(jù)鏡像文件。其周期性的向元數(shù)據(jù)節(jié)點(diǎn)回報(bào)其存儲(chǔ)的數(shù)據(jù)塊信息。

Hadoop分布式文件系統(tǒng)(hadoopdistributed filesystem,HDFS)。HDFS是一個(gè)高度容錯(cuò)性的系統(tǒng),適合部署在廉價(jià)的機(jī)器上。HDFS能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。HDFS可以實(shí)現(xiàn)流的形式訪問(streaming access)文件系統(tǒng)中的數(shù)據(jù)。
它是基于流數(shù)據(jù)模式的訪問和處理超大文件。(分布式最大的好處就是其通透性,雖然分布存在不同的datanode上面,但是感覺在一臺(tái)電腦的本地進(jìn)行操作)。

特點(diǎn):

錯(cuò)誤檢測(cè)和快速、自動(dòng)的恢復(fù)是 HDFS的核心架構(gòu)目標(biāo)

HDFS 以支持大數(shù)據(jù)集合為目標(biāo),一個(gè)存儲(chǔ)在上面的典型文件大小一般都在千兆至 T字節(jié),一個(gè)單一 HDFS實(shí)例應(yīng)該能支撐數(shù)以千萬計(jì)的文件。

主從架構(gòu)。

文件采用write-one-read-many訪問模型(一次寫,多次讀,不可更新已有內(nèi)容,但如果需要追加,需要將hdfs-site.xml中的dfs.support.append屬性設(shè)置為true)

跑在 HDFS上的應(yīng)用與一般的應(yīng)用不同,它們主要是以流式讀為主,做批量處理;比之關(guān)注數(shù)據(jù)訪問的低延遲問題,更關(guān)鍵的在于數(shù)據(jù)訪問的高吞吐量。

HDFS的限制:

適用于一次寫入、多次查詢的情況,不支持并發(fā)寫情況,小文件不合適。因?yàn)樾∥募舱加靡粋€(gè)塊,小文件越多(如100000個(gè)1k文件)塊越 多,NameNode壓力越大。

如果要處理一些用戶要求時(shí)間比較短的低延遲應(yīng)用請(qǐng)求,則HDFS不適合。HDFS是為了處理大型數(shù)據(jù)集分析任務(wù)的,主要是為達(dá)到高的數(shù)據(jù)吞吐量而設(shè)計(jì)的,這就可能要求以高延遲作為代價(jià)。

HDFS架構(gòu)

一個(gè)HDFS集群是有一個(gè) Namenode和一定數(shù)目的 Datanode組成。 Namenode是一個(gè)中心服務(wù)器,負(fù)責(zé)管理文件系統(tǒng)的 namespace和客戶端對(duì)文件的訪問。 Datanode在集群中一般是一個(gè)節(jié)點(diǎn)一個(gè),負(fù)責(zé)管理節(jié)點(diǎn)上它們附帶的存儲(chǔ)。在內(nèi)部,一個(gè)文件其實(shí)分成一個(gè)或多個(gè) block,這些 block存儲(chǔ)在 Datanode集合里。 Namenode執(zhí)行文件系統(tǒng)的 namespace操作,例如打開、關(guān)閉、重命名文件和目錄,同時(shí)決定 block到具體 Datanode節(jié)點(diǎn)的映射。 Datanode在 Namenode的指揮下進(jìn)行 block的創(chuàng)建、刪除和復(fù)制。
namenode用來管理文件系統(tǒng)的命名空間,其將所有的文件和文件夾的元數(shù)據(jù)保存在一個(gè)文件系統(tǒng)樹中。這些信息也會(huì)在硬盤上保存成以下文件:命名空間鏡像 (namespace image)及修改日志 (edit log) 。其還保存了一個(gè)文件包括哪些數(shù)據(jù)塊,分布在哪些數(shù)據(jù)節(jié)點(diǎn)上。

1、NameNode 是master節(jié)點(diǎn),NameNode的作用是 管理文件目錄結(jié)構(gòu),接受用戶的操作請(qǐng)求,是管理數(shù)據(jù)節(jié)點(diǎn)的。名字節(jié)點(diǎn)維護(hù)兩套數(shù)據(jù), 一套 是文件 目錄與數(shù)據(jù)塊之間的關(guān)系 , 另一套 是 數(shù)據(jù)塊與節(jié)點(diǎn)之間的關(guān)系 。 前一套 數(shù)據(jù)是 靜態(tài)的 ,是存放在磁盤上的, 通過fsimage和edits文件來維護(hù) ; 后一套 數(shù)據(jù)是 動(dòng)態(tài)的 ,不持久放到到磁盤的,每當(dāng)集群?jiǎn)?dòng)的時(shí)候,會(huì)自動(dòng)建立這些信息,所以一般都放在內(nèi)存中。

fsimage (文件系統(tǒng)鏡像):元數(shù)據(jù)鏡像文件。存儲(chǔ)某一時(shí)段NameNode內(nèi)存 元數(shù)據(jù)信息。

edits: 操作日志文件。

fstime: 保存最近一次checkpoint的時(shí)間

2、SecondaryNameNode
HA的一個(gè)解決方案。但不支持熱備。由于數(shù)據(jù)操作越多edits文件膨脹越大,但不能讓他無限的膨脹下去,所以要把日志過程轉(zhuǎn)換出來 放到fsimage中。由于NameNode要接受用戶的操作請(qǐng)求,必須能夠快速響應(yīng)用戶請(qǐng)求,為了保證NameNode的快速響應(yīng)給用戶,所以將此項(xiàng)工 作交給了 SecondaryNode ,它從NameNode上 下載元數(shù)據(jù)信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,并將其推送到NameNode,同時(shí)重置NameNode的edits

3、DataNode 是HDFS中真正存儲(chǔ)數(shù)據(jù)的。按Block存儲(chǔ)(每個(gè)block大小64M)。

客戶端(client)或者元數(shù)據(jù)信息(namenode)可以向數(shù)據(jù)節(jié)點(diǎn)請(qǐng)求寫入或者讀出數(shù)據(jù)塊。

其周期性的向元數(shù)據(jù)節(jié)點(diǎn)回報(bào)其存儲(chǔ)的數(shù)據(jù)塊信息。

數(shù)據(jù)流

1、讀數(shù)據(jù)
客戶端(client)用 FileSystem的 open()函數(shù)打開文件,DistributedFileSystem用RPC調(diào)namenode,得到文件的數(shù)據(jù)塊信息。
對(duì)于每一個(gè)數(shù)據(jù)塊,namenode返回保存數(shù)據(jù)塊的數(shù)據(jù)節(jié)點(diǎn)的地址。DistributedFileSystem返回FSDataInputStream 給客戶端,用來讀取數(shù)據(jù)??蛻舳苏{(diào)用 stream的 read()函數(shù)開始讀取數(shù)據(jù)。DFSInputStream連接保存此文件第一個(gè)數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點(diǎn)。Data從數(shù)據(jù)節(jié)點(diǎn)讀到客戶端 (client),當(dāng)此數(shù)據(jù)塊讀取完畢時(shí), DFSInputStream關(guān)閉和此數(shù)據(jù)節(jié)點(diǎn)的連接,然后連接此文件下一個(gè)數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點(diǎn)。
當(dāng)客戶端讀取完畢數(shù)據(jù)的時(shí)候,調(diào)用 FSDataInputStream的 close函數(shù)。在讀取數(shù)據(jù)的過程中,如果客戶端在與數(shù)據(jù)節(jié)點(diǎn)通信出現(xiàn)錯(cuò)誤,則嘗試連接包含此數(shù)據(jù)塊的下一個(gè)數(shù)據(jù)節(jié)點(diǎn)。失敗的數(shù)據(jù)節(jié)點(diǎn)將被記錄,以后不再連接。

2、寫數(shù)據(jù)
客戶端調(diào)用 create()來創(chuàng)建文件,DistributedFileSystem 用RPC 調(diào)用namenode,在文件系統(tǒng)的命名空間中創(chuàng)建一個(gè)新的文件。
namenode首先確定文件原來不存在,并且客戶端有創(chuàng)建文件的權(quán)限,然后創(chuàng)建新文件。DistributedFileSystem 返回DFSOutputStream ,客戶端用于寫數(shù)據(jù)??蛻舳碎_始寫入數(shù)據(jù), DFSOutputStream將數(shù)據(jù)分成塊,寫入 data queue。Data queue 由Data Streamer讀取,并通知namenode分配數(shù)據(jù)節(jié)點(diǎn),用來存儲(chǔ)數(shù)據(jù)塊 (每塊默認(rèn)復(fù)制 3份,也就是說1T數(shù)據(jù)需要3T存儲(chǔ)空間 )。
分配的數(shù)據(jù)節(jié)點(diǎn)放在一個(gè) pipeline里。 Data Streamer 將數(shù)據(jù)塊寫入pipeline 中的第一個(gè)數(shù)據(jù)節(jié)點(diǎn)。第一個(gè)數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)塊發(fā)送給第二個(gè)數(shù)據(jù)節(jié)點(diǎn)。第二個(gè)數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)發(fā)送給第三個(gè)數(shù)據(jù)節(jié)點(diǎn)。DFSOutputStream 為發(fā)出去的數(shù)據(jù)塊保存了 ack queue,等待 pipeline中的數(shù)據(jù)節(jié)點(diǎn)告知數(shù)據(jù)已經(jīng)寫入成功。當(dāng)客戶端結(jié)束寫入數(shù)據(jù),則調(diào)用 stream的 close函數(shù)。此操作將所有的數(shù)據(jù)塊寫入 pipeline中的數(shù)據(jù)節(jié)點(diǎn),并等待 ack queue返回成功。最后通知namenode寫入完畢。 如下圖:

3、文件復(fù)制
副本的存放是 HDFS可靠性和性能的關(guān)鍵。 HDFS采用一種稱為 rack-aware的策略來改進(jìn)數(shù)據(jù)的可靠性、有效性和網(wǎng)絡(luò)帶寬的利用。

數(shù)據(jù)傳輸

1、數(shù)據(jù)在HDFS上存儲(chǔ)的基本單位是Block,默認(rèn)大小64M;

2、數(shù)據(jù)在Client和DataNode之間傳輸數(shù)據(jù)的基本單位是Packet,默認(rèn)最大為65557B;

3、數(shù)據(jù)傳輸Pipeline,宏觀上看是Block Pipeline,但是微觀上其實(shí)是Packet Pipeline。

HDFS命令行:

支持的操作:

創(chuàng)建 復(fù)制 移動(dòng) 和刪除文件.

實(shí)現(xiàn)管理職責(zé) - chmod, chown, chgrp.

設(shè)置復(fù)制文件的比率

使用Head, tail, cat查看文件

支持的全部命令說明見:http://hadoop.apache.org/docs...

DFSShell
??HDFS允許用戶數(shù)據(jù)組織成文件和文件夾的方式,它提供一個(gè)叫DFSShell的接口,使用戶可以和HDFS中的數(shù)據(jù)交互。

hadoop fs|dfs - [args]   

例如:列出HDFS指定目錄下的文件: 
hadoop fs -ls   

HDFS路徑(稱為資源)使用URI格式來表示:scheme://authority/path  scheme協(xié)議名:file或hdfs;authority:NameNode主機(jī)名+端口號(hào);path:文件路徑
hadoop fs -ls hdfs://winstar:9000/user/root  
如果在core-site.xml中有如下配置,則直接使用/user/root(路徑)即可。即hadoop fs -ls /user/root 
  
    
    fs.default.name  
    hdfs://winstar:9000  
    
 

HDFS默認(rèn)工作目錄為/user/$USER,$USER表示當(dāng)前賬戶的用戶名。

常用的命令示例

在user/目錄下創(chuàng)建trunk子目錄:
hadoop fs -mkdir /user/trunk  

列出user/目錄下所有文件和子目錄:
hadoop fs -ls /user  

遞歸列出user/目錄下所有文件和子目錄
hadoop fs -lsr /user  

將本地目錄下test.txt文件上傳至HDFS當(dāng)前目錄
hadoop fs -put test.txt .  

將HDFS/user/root/test.txt文件下載至本地當(dāng)前目錄
hadoop fs -get /user/root/test.txt  

查看/user/root/test.txt文件內(nèi)容
hadoop fs -cat /user/root/test.txt  

查看/user/root/test.txt文件的尾部?jī)?nèi)容(最后1K)
hadoop fs -tail /user/root/test.txt  

刪除/user/root/test.txt文件
hadoop fs -rm /user/root/test.txt  

查看ls命令的幫助文檔
hadoop fs -help ls  
使用Java API訪問HDFS

APIDOC: http://hadoop.apache.org/docs...

Configuration類:該類的對(duì)象封裝了配置信息,這些配置信息來自core-*.xml;

FileSystem類:文件系統(tǒng)類,可使用該類的方法對(duì)文件/目錄進(jìn)行操作。一般通過FileSystem的靜態(tài)方法get獲得一個(gè)文件系統(tǒng)對(duì)象;

FSDataInputStream和FSDataOutputStream類:HDFS中的輸入輸出流。分別通過FileSystem的open方法和create方法獲得。

操作文件程序的基本步驟

得到Configuration對(duì)象

得到FileSystem對(duì)象

進(jìn)行文件操作

將本地文件上傳到HDFS

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;

public class CopyFromLocal {
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://localhost:9001");
        FileSystem fs = FileSystem.get(conf);
        Path src = new Path("/usr/local/hadoop-2.7.2/README.txt");
        Path dst = new Path("hdfs://localhost:9001/home/");
        fs.copyFromLocalFile(src, dst);
        System.out.println("upload to "+conf.get("fs.default.name"));
        fs.close();
    }
}

將HDFS上的文件傳回到本地

        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://localhost:9001");
        FileSystem fs = FileSystem.get(conf);
        Path src = new Path("hdfs://localhost:9001/home/README.txt");
        Path dst = new Path("/home/hadoop/Desktop/");
        fs.copyToLocalFile(src, dst);
        fs.close();

刪除文件/目錄, 當(dāng)刪除對(duì)象為目錄時(shí),將第二個(gè)參數(shù)設(shè)為true否則將產(chǎn)生異常

        Path dfs = new Path("hdfs://localhost:9001/home/test.txt");
        System.out.println(fs.delete(dfs,true));
        fs.close();

創(chuàng)建目錄

        Path dfs = new Path("hdfs://localhost:9001/home1/");
        System.out.println(fs.mkdirs(dfs));
        fs.close();

在HDFS上創(chuàng)建文件,并寫入

        Path dfs = new Path("hdfs://localhost:9001/home/test.txt");
        FSDataOutputStream outputStream = fs.create(dfs);
        byte[] buff = "hello world!".getBytes();
        outputStream.write(buff,0, buff.length);
        outputStream.close();
        fs.close();

讀取文件

        Path dst = new Path("hdfs://localhost:9001/home/test.txt");
        if(fs.exists(dst) && !fs.isDirectory(dst)) {
            FSDataInputStream is = fs.open(dst);
            FileStatus stat = fs.getFileStatus(dst);
            byte[] buffer = new byte[(int) stat.getLen()];
            is.read(buffer);
            System.out.println(new String(buffer));
            is.close();
            fs.close();
        } else {
            throw new Exception("fail to read file "+dst.toString());
        }

追加文件內(nèi)容,注:需要將hdfs-site.xml中的dfs.support.append屬性設(shè)置為true


    dfs.support.append
    true
        Configuration conf = new Configuration();
        //conf.setBoolean( "dfs.support.append", true );
        FileSystem fs = FileSystem.get(conf);
        Path dfs = new Path("hdfs://localhost:9001/home/test.txt");
        FSDataOutputStream outputStream = fs.append(dfs);
        byte[] buff = "test".getBytes();
        outputStream.write(buff);
        outputStream.close();
        fs.close();
參考:

http://hadoop.apache.org/docs...
http://blog.csdn.net/xman_200...
http://www.jdon.com/bigdata/h...
http://www.cnblogs.com/davidw...
http://www.cnblogs.com/laov/p...
https://my.oschina.net/crxy/b...
http://blog.csdn.net/fanxiaob...
http://www.cnblogs.com/finalb...
http://blog.csdn.net/yew1eb/a...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67297.html

相關(guān)文章

  • Spark Streaming學(xué)習(xí)筆記

    摘要:輸入和接收器輸入代表從某種流式數(shù)據(jù)源流入的數(shù)據(jù)流。文件數(shù)據(jù)流可以從任何兼容包括等的文件系統(tǒng),創(chuàng)建方式如下將監(jiān)視該目錄,并處理該目錄下任何新建的文件目前還不支持嵌套目錄。會(huì)被一個(gè)個(gè)依次推入隊(duì)列,而則會(huì)依次以數(shù)據(jù)流形式處理這些的數(shù)據(jù)。 特點(diǎn): Spark Streaming能夠?qū)崿F(xiàn)對(duì)實(shí)時(shí)數(shù)據(jù)流的流式處理,并具有很好的可擴(kuò)展性、高吞吐量和容錯(cuò)性。 Spark Streaming支持從多種數(shù)...

    陸斌 評(píng)論0 收藏0
  • 大數(shù)據(jù)入門指南(GitHub開源項(xiàng)目)

    摘要:項(xiàng)目地址前言大數(shù)據(jù)技術(shù)棧思維導(dǎo)圖大數(shù)據(jù)常用軟件安裝指南一分布式文件存儲(chǔ)系統(tǒng)分布式計(jì)算框架集群資源管理器單機(jī)偽集群環(huán)境搭建集群環(huán)境搭建常用命令的使用基于搭建高可用集群二簡(jiǎn)介及核心概念環(huán)境下的安裝部署和命令行的基本使用常用操作分區(qū)表和分桶表視圖 項(xiàng)目GitHub地址:https://github.com/heibaiying... 前 言 大數(shù)據(jù)技術(shù)棧思維導(dǎo)圖 大數(shù)據(jù)常用軟件安裝指...

    guyan0319 評(píng)論0 收藏0
  • Spark入門階段一掃盲筆記

    摘要:同時(shí)集成了機(jī)器學(xué)習(xí)類庫。基于計(jì)算框架,將的分布式計(jì)算應(yīng)用到機(jī)器學(xué)習(xí)領(lǐng)域。提供了一個(gè)簡(jiǎn)單的聲明方法指定機(jī)器學(xué)習(xí)任務(wù),并且動(dòng)態(tài)地選擇最優(yōu)的學(xué)習(xí)算法。宣稱其性能是的多倍。 介紹 spark是分布式并行數(shù)據(jù)處理框架 與mapreduce的區(qū)別: mapreduce通常將中間結(jié)果放在hdfs上,spark是基于內(nèi)存并行大數(shù)據(jù)框架,中間結(jié)果放在內(nèi)存,對(duì)于迭代數(shù)據(jù)spark效率更高,mapred...

    starsfun 評(píng)論0 收藏0
  • Spark 』1. spark 簡(jiǎn)介

    摘要:原文鏈接簡(jiǎn)介寫在前面本系列是綜合了自己在學(xué)習(xí)過程中的理解記錄對(duì)參考文章中的一些理解個(gè)人實(shí)踐過程中的一些心得而來。其次,本系列是基于目前最新的系列開始的,目前的更新速度很快,記錄一下版本好還是必要的。 原文鏈接:『 Spark 』1. spark 簡(jiǎn)介 寫在前面 本系列是綜合了自己在學(xué)習(xí)spark過程中的理解記錄 + 對(duì)參考文章中的一些理解 + 個(gè)人實(shí)踐spark過程中的一些心得而來。寫...

    G9YH 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<