大數據與Hadoop

大數據與Hadoop

  • 大數據概念

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

  • 大數據價值

    數據量達到必定程度,數據自己也能夠說話,數據被譽爲新的生產力 當數據足夠多的時候,不須要了解具體的因果關係就可以得出結論 大數據提供了多種結構的數據可以最大程度的分析出各類特徵 大數據產生大量就業崗位 大數據是一種新的生產力java

  • Hadoop

    是apache的一個開源的,可靠的,可擴展的系統架構,可利用分佈式架構來存儲海量數據,以及實現分佈式計算 做用:1海量存儲數據2計算海量數據 容許使用簡單的編程模型在計算機集羣中對大型數據進行分佈式處理 hadoop集羣的高可用性很是好,由於框架內的機制是能夠自動檢測和故障處理的 源於google的三篇論文node

  • 版本

    第一代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年發佈linux

  • 安裝模式

    單機模式:不能使用HDFS,只能使用MapReduce,因此單機模式最主要的目的是在本機調試mapreduce代碼 僞分佈式模式:用多個線程模擬多臺真實機器,即模擬真實的分佈式環境。 徹底分佈式模式:用多臺機器(或啓動多個虛擬機)來完成部署集羣。git

  • hadoop安全模式

    在從新啓動HDFS後,會當即進入安全模式,此時不能操做hdfs中的文件,只能查看目錄文件名等,讀寫操做都不能進行。 此時namenode文件系統對於客戶端來講是隻讀的。程序員

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

    當整個HDFS啓動(namenode和datanode)時,底層每臺datanode都會向namenode彙報自身的存儲狀態信息(存儲了哪些文件塊),namenode收到這寫數據後,彙總並檢查。檢查文件塊是否缺乏,數據是否丟失,以及每一個文件塊的副本數量是否達到要求(集羣環境,3副本),若是檢查有問題,HDFS會進入安全模式,在安全模式下,要完成數據的修復、副本的複製。安全模式直到數據恢復完畢以後自動退出web

    指令:算法

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

    1.HDFS是hadoop的分佈式文件系統,能夠存儲海量數據(文件,圖片,影音等),實際工做中通常存儲用戶的訪問日誌 2.HDFS之因此可以存儲海量數據,緣由是一個可擴展的分佈式架構,磁盤存儲空間不足,加機器就能夠解決 3.HDFS是基於google的一篇論文《Google File System》sql

    僞分佈下在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,增長

     
     
     
    xxxxxxxxxx
     
     
     
     
    <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,表示的一天的回收間隔,即文件在回收站存在一天後,被清空。

    啓動回收站後,好比咱們刪除一個文件:

    咱們能夠經過遞歸查看指令,找到咱們要恢復的文件放在回收站的哪一個目錄下

    執行:

     
     
     
    xxxxxxxxxx
     
     
     
     
    hadoop fs -lsr  /user/root/.Trash
     

    找到文件路徑後,若是想恢復,執行hdfs 的mv 指令便可,(mv指令可用於文件的移動)

  • NameNode

    主要職責是管理和存儲HDFS的元數據信息(如文件名,文件大小,文件切塊的數量,每一個文件塊的大小,文件塊編號,在哪一個datanode存儲)-locations

     
     
     
    xxxxxxxxxx
     
     
     
     
    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格式化指令

     
     
     
    xxxxxxxxxx
     
     
     
     
    hadoop namenode -format 
     

    它的做用是在元數據目錄生成新的Edits和Fsimage文件。這個指令 在初次Hadoop時須要執行一次。

    格式化指令是很危險,由於它會清空以前全部的元數據。因此在實際工做,初次使用完以後,會經過配置文件的使得這個指令失效。

    Edits和Fsimage文件能夠經過指令手動合併

     
     
     
    xxxxxxxxxx
     
     
     
     
    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是最新的。

    指令單獨啓停某個進程:

    啓動:

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

    中止:

     
     
     
    xxxxxxxxxx
     
     
     
     
    hadoop-daemon.sh stop namenode
     
  • DataNode

數據節點,專門用來存儲和管理文件塊。DataNode會按期向namenode發送心跳,心跳週期默認是3s,.配置datanode地址列表是在slaves配置文件裏配置的

若是10分鐘沒有收到DataNode的心跳,則認爲其已經lost,並copy其上的block到其它DataNode

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

 生態系統
 

 


    一、HDFS(Hadoop分佈式文件系統)
    二、Mapreduce(分佈式計算框架)
    3. HBASE(分佈式列存數據庫)
    4. Zookeeper(分佈式協做服務)
    5. HIVE(數據倉庫)
    6.Pig(ad-hoc腳本)
    7.Sqoop(數據ETL/同步工具)
    8.Flume(日誌收集工具)
    9.Mahout(數據挖掘算法庫)
    10. Yarn(分佈式資源管理器)
    11. Phoenix(hbase sql接口)
    12.Ambari(安裝部署配置管理工具)

Hadoop開發存在的問題    只能用java語言開發,若是是c語言或其餘語言的程序員用Hadoop,存在語言門檻。須要對Hadoop底層原理,api比較瞭解才能作開發

相關文章
相關標籤/搜索