大數據 — Hadoop

HDFS


Hadoop 1.0:

  • 3個組件:
    • Namenode
    • SecondNamenode
    • Datanode

namenode(主節點,master,只有一個,單點故障的風險)中間存儲信息(元數據)
2種映射關系

  1. path -> blockid list 列表
  2. blockid 數據塊 -> datanode 節點地址
    元數據存在內存中
    元數據進行持久化 — 磁盤fsimage — 目的:避免數據丟失
    fsimage : 元數據鏡像文件
    只有機器重啟的時候加載fsimage

    元數據持久化的過程 — SNN — secondnamenode
    內存 -> edit log(磁盤)-> fsimage

    SNN 存在意義 : 備份 / 數據恢復

    namenode和 edit log關系:
    namenode需要把每一次改動都存在 edit log ,整個過程誰來推動?(Datanode和namenode之間心跳機制)

    namenode除了單點問題之外,還有不適合存儲太多小文件的問題,因為內存有限

datanode (slave,從節點,多個機器)

  1. block 數據塊 -> 真實輸據
    多副本機制 — 默認3副本 (作用:數據冗余,高可用)
    本地化原則 (就近原則):mapreduce:主(jobtracker - namenode),從(tasktracker - datanode)

可靠性保證 :

  1. 數據校驗
    目的 : 保證數據完整性 (通過crc32校驗算法)
    整個數據傳輸過程,輸據需要校驗幾次?
    1. client給datanode寫數據:要針對寫的數據,每個檢查單元(512字節)
      • 每一個單元創建一個單獨的校驗碼(crc32) , 數據和校驗碼統一發送給Datanode
    2. Datanode 接受輸據的時候 : 用同樣的加密算法,生成校驗碼,并校驗
      • 在后臺還會運行一個掃描進程:DataBlockScanner(定期校驗)
      • 一旦檢測出現問題,通過心跳,通知NN,讓NN發起DN修復 (拷貝沒有問題的備份)

2.可靠性保證 :

  • 心跳
  • 多副本機制
  • crc32
  • SNN (secondnamenode)
  • 回收站 ( .Trash 目錄)

Hadoop 2.0:

?

  1. HA 高可用 : 解決了單點故障問題
    1.0里有一個SNN,但是不可靠
    如何便可靠:需要兩個NN,一個active,一個standby(備用)
    為了保證兩個NN的數據一致性,Datanode要對兩個NN同時發送心跳

  2. 雖然Datanode同時發送心跳,但是為什么還需要JN?
    2種映射關系
    path -> blockid list 列表 :JN
    blockid 數據塊 -> datanode 節點地址 : Datanode心跳
    分工不同:::

  3. HDFS2.0 需要引入zookeeper , (zookeeper目的:協調分布式集群中各個節點工作有序進行,完成故障轉移)

  4. 在2.0,引入zkfc(ZookeeperFailoverController)進程,和NN部署到同一個機器上,目的:負責自己管轄之內的NN進行健康檢查
    zkfc 進程會在zookeeper上注冊一個臨時節點
    目的:監控NN,一旦NN掛掉,相對應的臨時節點消失,接下來開始選主(申請鎖)流程

  5. JN目的:讓activeNN和standbyNN保持輸據同步(文件 -> block)
    同步問題:需要以來JN(JournalNodes)守護進程,完成元數據的一致性

  6. JN 角色有兩種選擇:
    1) NFS — 網絡系統 (network file system)
    需要額外的磁盤空間
    2)QJM — 最低法人管理機制 (投票)
    不需要額外的磁盤空間
    需要用2n+1臺機器存儲edit log (奇數是為了投票)
    QJM本質是小集群
    好處
    * 不需要空間
    * 無但點問題
    * 不會因為個別機器延遲,影響整體性能
    * 只需要通過簡單的系統配置可以實現

  7. NN 和 JN 通常不再一個機器上
    FC 和 NN 在同一個機器上
    RM(Yarn主) 和 NN(HDFS主) 通常在同一臺機器上
    zookeeper 需要單獨維護一套獨立集群

?

HDFS Federation(聯邦) : 水平擴展

集群中提供多個Name Node,每個NameNode負責管理一部分DataNode
每一個NN只管理自己管轄之內的DN
目的:減輕單一NN壓力,將一部分文件轉移到其他NN上管理

如果集群中一個目錄比較大,那么可以用單獨的NN維護起來
橫向虧站,突破了NN的限制

不同的NN,會可以訪問所有的DN嗎? 會的?
聯邦的本質:將元數據管理NN和存儲DN進行解耦

可以把聯邦和高可用同時體現出來

快照:真實數據(不是元數據) ::: 數據備份/災備/快速恢復

本質:僅僅記錄block列表和大小而已,并不涉及數據本身的復制
某個目錄的某一時刻的鏡像
創建和恢復,都非常快 — 瞬間完成,高效

HDFS快照是一個只讀的基于時間點文件系統拷貝
HDFS快照是對目錄進行設定,是某個目錄的某一個時刻的鏡像

  • 快照可以是整個文件系統的也可以是一部分
  • 常用來作為數據備份,防止用戶錯誤操作和容災恢復
  • Snapshot并不會影響HDFS的正常操作:修改會按照時間的反序記錄,這樣可以直接讀取到最新的數據
  • 快照數據是當前數據減去修改部分計算出來的
  • 快照會存儲在snapeshottable的目錄下

?

快照的各種命令
hdfs dfsadmin -allowSnapshot /user/spark
hdfs dfs -createSnapshot /user/spark s0
hdfs dfs -renameSnapshot /user/spark s0 s_init
hdfs dfs -deleteSnapshot  /user/spark s_init
hdfs dfsadmin -disallowSnapshot /user/spark

?

?

緩存(集中式緩存 — 不局限具體的機器的cpu和操作系統層面上的優化)

對于重復訪問的文件很有用
優點:速度快

  • 允許用戶指定要緩存的HDFS路徑
  • 明確的鎖定可以阻止頻繁使用的數據被從內存中清除
  • 集中化緩存管理對于重復訪問的文件很有用
  • 可以換成目錄或文件,但目錄是非遞歸

?

權限控制 ACL

類似于linux系統acl

例:rwx - rwx - rwx
自己 - 組 - 其他

設置權限: setacl命令
需要開啟功能:

    dfs.permissions.enableddfs.namenode.acls.enabledhadoop fs -getfacl /input/aclhdfs dfs -setfacl -m user:mapred:r-- /input/aclhdfs dfs -setfacl -x user:mapred /input/acl





















轉載于:https://www.cnblogs.com/pipemm/articles/11331639.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447963.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447963.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447963.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VUE:兄弟組件間傳參

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1、定義一個中間 eventBus.js ,只有 2 行代碼,用于傳參: // 此頁面是vue 巴士,用于兄…

C++的歷史

本文由 伯樂在線 - honpey 翻譯自 Albatross。歡迎加入 技術翻譯小組。轉載請參見文章末尾處的要求。C的歷史可以追溯到1979年,當時Bjarne Stroustrup(譯者注:C之父)正在準備他的博士畢業論文,他有機會使用一種叫做Si…

asp.net ajax的學習第一篇

自己理解的asp.net ajax的核心思想&#xff1a; javascript 調用web service <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />由于工作的原因&#xff0c;要在自己的網頁上使用無刷新技術&#xff0c;增加客戶體驗。開始學習asp…

insertSelective 和 insert 的區別

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1、selective的意思是&#xff1a;選擇性。 2、insertSelective--選擇性保存數據&#xff1b; 比如User里面有三個字段:id&#xff0c;n…

病從口入 這樣吃小心癌癥找上門

腫瘤專家估計&#xff0c;大約有35%的致癌物質是經過飲食&#xff0c;30%是經過吸煙侵入體內的。僅此兩項已經占了致癌因素入侵人體的一半以上了。所以說&#xff0c;預防腫瘤&#xff0c;飲食首當其沖&#xff0c;第一步就要從入口的食物談起。 食管癌&#xff1a;腌制的咸…

VUE插件總結

UI組件 element - 餓了么出品的Vue2的web UI工具套件Vux - 基于Vue和WeUI的組件庫mint-ui - Vue 2的移動UI元素iview - 基于 Vuejs 的開源 UI 組件庫Keen-UI - 輕量級的基本UI組件合集vue-material - 通過Vue Material和Vue 2建立精美的app應用muse-ui - 三端樣式一致的響應式 …

解決:No goals have been specified for this build. You must specify a valid lifecycle phase or a goal i

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 執行打包命令報錯&#xff1a; No goals have been specified for this build. You must specify a valid lifecycle phase or a goa…

十個好習慣幫你理財省大錢

理財和收入高低其實是沒有關系的&#xff0c;僅和生活習慣相關。有了好的理財方法&#xff0c;也可以攢下自己的錢&#xff0c;達到財務自由的境界。下面是一些理財的技巧? 1、定時積極的存款 怎樣開源節流是理財的第一步。增加收入來源&#xff0c;算好該存的錢&#xff0…

生成隨機碼,保存隨機文件.

PrivateFunction GetRandomizeNo()Function GetRandomizeNo() As Integer 功能說明:生成隨機驗證碼 Dim RandomizeNo As Integer Randomize() RandomizeNo 9999 * Rnd() 1000 If (RandomizeNo).ToString.Length > 5 Then R…

解決:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) ...

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)問題&#xff0c;即在mybatis中dao接口與mapper配置…

真實股市房市信托本質,金融故事三則:錢都去哪兒了?

什么叫做虛擬經濟、泡沫經濟、次貸危機、金融危機?看完本文這幾個簡短精辟故事&#xff0c;你就都知道了。 故事&#xff08;1&#xff09; 有一個商人到了一個山村&#xff0c;村子周圍的山上全是猴子。 商人就和村子種地的農民說&#xff0c;我買猴子&#xff0c;100元一只…

Mac 遠程命令工具

轉載于:https://www.cnblogs.com/BrightMoon/p/4479375.html

Springboot Mybatis 整合(完整版)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 正題 本項目使用的環境&#xff1a; 開發工具&#xff1a;Intellij IDEA 2017.1.3 springboot: 1.5.6 jdk&#xff1a;1.8.0_161 maven…

OpenCL 第5課:向量相加

OpenCL程序分為兩個部份&#xff0c;一部份是內核代碼&#xff0c;負責具體算法。另一部份是主程序負責初始化OpenCL和準備數據。主程序加載內核代碼&#xff0c;并按照即定方法進行運算。 內核代碼可以寫在主程序里面&#xff0c;也可以寫在另一個文本文件里&#xff0c;有點…

同名的const 成員函數

如下代碼&#xff1a;struct Derived{ void foo(string) { cout<<"ddd foo"<<endl; }; void foo(string) const { cout<<"ddd foo const"<<endl; };}; int _tmain(int argc, TCH…

springboot 中使用 Mybatis 注解 配置 詳解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 傳參方式 使用不同的傳參方式&#xff1a; 使用Param 之前博文中的項目使用了這種簡單的傳參方式&#xff1a; Insert("INSERT IN…

mongodb數據庫的備份與恢復

先介紹下命令語法&#xff1a; ./mongodump -h 127.0.0.1:10001 -d lietou -o /usr/local/data -h&#xff1a;MongDB所在服務器地址&#xff0c;例如&#xff1a;127.0.0.1&#xff0c;當然也可以指定端口號&#xff1a;127.0.0.1:10001 -d&#xff1a;需要備份的數據庫實例…

OpenCL 第6課:矩陣轉置

上一節我們寫了個一維向量相加的程序。這節我們來看一個44矩陣轉置程序。 4X4矩陣我們采用二維數組進行存儲&#xff0c;在程序設計上&#xff0c;我們讓轉置過程分4次轉置完成&#xff0c;就是一次轉一行。注意這里的OpenCL的工作維數是二維。&#xff08;當然用一維的方式也…

springboot 系列技術教程目錄

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、教程目錄地址&#xff1a; springboot系列技術教程目錄 二、教程內容&#xff1a; springboot2.X系列&#xff1a; springboot整…

OpenCL 第7課:旋轉變換(1)

旋轉是一個常用的處理功能。圖片中所有的點以某一個點為軸&#xff0c;順時或逆時方向旋轉N個角度。我們利用OpenCL就可以對圖片中所有的點進行并行轉換&#xff0c;大大提高效率。 上兩節中&#xff0c;我們編寫了CL文件來傳遞數組的地址&#xff0c;這一節中我們會多加入幾個…