1. 程式人生 > >大資料與Hadoop--1

大資料與Hadoop--1

  • 大資料概念

    大資料(big data,mega data),或稱巨量資料。比如TB、PB級別的資料。 5V volume 大量 velocity 高速 variet 多樣 value 價值密度低 veracity 真實

  • 大資料價值

    資料量達到一定程度,資料本身也可以說話,資料被譽為新的生產力 當資料足夠多的時候,不需要了解具體的因果關係就能夠得出結論 大資料提供了多種結構的資料能夠最大程度的分析出各種特徵 大資料產生大量就業崗位 大資料是一種新的生產力

  • Hadoop

    是apache的一個開源的,可靠的,可擴充套件的系統架構,可利用分散式架構來儲存海量資料,以及實現分散式計算 作用:1海量儲存資料2計算海量資料 允許使用簡單的程式設計模型在計算機叢集中對大型資料進行分散式處理 hadoop叢集的高可用性非常好,因為框架內的機制是可以自動檢測和故障處理的 源於google的三篇論文

  • 版本

    第一代hadoop1.0為0.20.x和0.21.x和0.22.x 第二代hadoop2.0為0.23.x和2.x 第二代完全不同於第一代,是一個全新的架構,加入了yarn資源協調管理框架 yarn資源排程框架--實現對資源的細粒度封裝(cpu 記憶體 頻寬) yarn協調不同計算框架(MR,spark) hadoop3.0在2017年釋出

  • 安裝模式

    單機模式:不能使用HDFS,只能使用MapReduce,所以單機模式最主要的目的是在本機除錯mapreduce程式碼 偽分散式模式:用多個執行緒模擬多臺真實機器,即模擬真實的分散式環境。 完全分散式模式:用多臺機器(或啟動多個虛擬機器)來完成部署叢集。

  • hadoop安全模式

    在重新啟動HDFS後,會立即進入安全模式,此時不能操作hdfs中的檔案,只能檢視目錄檔名等,讀寫操作都不能進行。 此時namenode檔案系統對於客戶端來說是隻讀的。

    如果HDFS處於安全模式,對外只能提供讀服務,不能提供寫服務。

    當整個HDFS啟動(namenode和datanode)時,底層每臺datanode都會向namenode彙報自身的儲存狀態資訊(儲存了哪些檔案塊),namenode收到這寫資料後,彙總並檢查。檢查檔案塊是否缺少,資料是否丟失,以及每個檔案塊的副本數量是否達到要求(叢集環境,3副本),如果檢查有問題,HDFS會進入安全模式,在安全模式下,要完成資料的修復、副本的複製。安全模式直到資料恢復完畢之後自動退出

    指令:

    hadoop dfsadmin -safemode enter
    hadoop dfsadmin -safemode leave
  • HDFS

    1.HDFS是hadoop的分散式檔案系統,可以儲存海量資料(檔案,圖片,影音等),實際工作中一般儲存使用者的訪問日誌 2.HDFS之所以能夠儲存海量資料,原因是一個可擴充套件的分散式架構,磁碟儲存空間不足,加機器就可以解決 3.HDFS是基於google的一篇論文《Google File System》

    偽分佈下在hdfs-site.xml 配置副本數量,只能配置1,因為如果大於1,會使得HDFS一直安全模式而不退出(因為副本數量一直滿足不了要求,就一臺伺服器,只能存一個副本)

    HDFS儲存檔案的方式是切塊儲存:

    Hadoop 1.0 切塊大小64MB

    Hadoop 2.0 切塊大小128MB

    切塊是以檔案為單位的,不同檔案的檔案塊不能共用。

    塊是多大,在磁碟上就佔多大。

    HDFS的特點:當檔案上傳HDFS之後,就不允許修改此檔案。所以HDFS的適用場景:once-write-many-read (一次寫入,多次讀取)

    HDFS不允許修改資料,但允許追加資料

    HDFS不適合儲存海量的小檔案:因為每個檔案都會佔用一條元資料資訊,根據經驗,一條元資料大約在150位元組,即如果由海量小檔案時,會佔用大量的namenode服務記憶體空間。

    HDFS 回收站機制:

    Hadoop回收站trash,預設是關閉的。

    修改conf/core-site.xml,增加

    <property>
      <name>fs.trash.interval</name>
      <value>1440</value>
      <description>
        Number of minutes between trash checkpoints.  
        If zero, the trash feature is disabled. 
      </description>
    </property>

    注:value的時間單位是分鐘,如果配置成0,表示不開啟HDFS的回收站。

    1440=24*60,表示的一天的回收間隔,即檔案在回收站存在一天後,被清空。

    啟動回收站後,比如我們刪除一個檔案:

    我們可以通過遞迴檢視指令,找到我們要恢復的檔案放在回收站的哪個目錄下

    執行:

    hadoop fs -lsr  /user/root/.Trash

    找到檔案路徑後,如果想恢復,執行hdfs 的mv 指令即可,(mv指令可用於檔案的移動)

  • NameNode

    主要職責是管理和儲存HDFS的元資料資訊(如檔名,檔案大小,檔案切塊的數量,每個檔案塊的大小,檔案塊編號,在哪個datanode儲存)-locations

    hadoop  fsck  /park01/1.txt  -files  -blocks -locations

    namenode不儲存檔案塊 ,除了儲存元資料資訊以外,還會通過RPC心跳機制來管理各個datanode

    namenode為了給使用者提供快速的查詢,會把元資料資訊儲存在namenode伺服器的記憶體中。

    namenode為了確保儲存元資料的可靠性,會將元資料落地,儲存的目錄路徑由配置檔案core-site.xml裡的hadoop.tmp.dir屬性來指定。此屬性預設是放在linux的 /tmp 目錄,所以在工作中一定要更換此目錄。

    namenode底層是通過兩個檔案來進行元資料管理:

    ①Edits檔案 當客戶端發起寫請求時,Edits檔案都會進行記錄

    寫請求,比如:-mkdir -put -mv

    ②Fsimage檔案 儲存元資料資訊的

    以上這個兩個檔案會定期做一次合併,合併的目的是確保Fsimage檔案裡的資料是最新的。合併週期預設是3600s(1小時)

    以上這個兩個檔案可以在配置的元資料目tmp/dfs/name/current找到

    namenode格式化指令

    hadoop namenode -format 

    它的作用是在元資料目錄生成新的Edits和Fsimage檔案。這個指令 在初次Hadoop時需要執行一次。

    格式化指令是很危險,因為它會清空之前所有的元資料。所以在實際工作,初次使用完之後,會通過配置檔案的使得這個指令失效。

    Edits和Fsimage檔案可以通過指令手動合併

    hadoop dfsadmin -rollEdits

    為了當namenode宕機後,SecondaryNameNode能夠工作,我們需要SecondaryNameNode具有元資料資料,所以Hadoop底層機制是讓SecondaryNameNode來做元資料的合併工作,通過這機制使得namenode和SecondaryNameNode都有元資料資訊了。

    以上這個機制存在一個問題,就是可能會造成元資料丟失,這個機制是Hadoop1.0的機制,是存在問題的,即SecondaryNameNode合併不能達到實時熱備,所以會存在元資料丟失的情況,即Hadoop1.0的namenode還是會存在單點故障問題。

    在Hadoop2.0版本中取消了SecondaryNameNode而是使用了namenode的雙機熱備

    當namenode掛掉再次啟動時,底層會將Edits和Fsimage合併一次。所以通過這種機制,可以確保namenode宕機再啟動之後,Fsimage是最新的。

    指令單獨啟停某個程序:

    啟動:

    hadoop-daemon.sh start namenode
    hadoop-daemon.sh start datanode
    hadoop-daemon.sh start secondarynamenode

    停止:

    hadoop-daemon.sh stop namenode
  • DataNode

   資料節點,專門用來儲存和管理檔案塊。DataNode會定期向namenode傳送心跳,心跳週期預設是3s,.配置datanode地址列表是在slaves配置檔案裡配置的

   如果10分鐘沒有收到DataNode的心跳,則認為其已經lost,並copy其上的block到其它DataNode

   DN在其檔案建立後三週進行驗證其checkSum的值是否和檔案建立時的checkSum值一致