原创 淺談zk(3).領導者與追隨者如何協作?

角色定義 leader 一個集羣內只有1個leader,leader由選舉產生。 leader的職責: 1) 接收follow轉發過來的寫請求,生成遞增的zxid; 2)將寫請求原子廣播到各個follower; 3)寫數據,廣播超過

原创 淺談zk(4).leader如何選舉?

如果leader掛了怎麼辦? 當然是重新選舉一個新的leader呀, 選舉流程如下: 1)、所有當前server向所有節點廣播消息,去竟選leader 2)、收到回執 3)、向小於或等於當前節點編號的節點發送廣播 4)、比較投票數,

原创 淺談zk(5).如何保證併發寫的順序性?

所有寫請求都會被轉發到leader節點,follower會通過單獨的端向leader報告, 集羣配置裏面有專門指定,如下 zoo.cfg配置: clientPort=4180 #用來接受客戶端讀請求的監聽端口 #server.A=B:C:

原创 理解高併發(18).編寫自己的threadlocal

李四 當前投票次數 :5 張三 當前投票次數 :4 李四 當前投票次數 :6 張三 當前投票次數 :5 李四 當前投票次數 :7 張三 當前投票次數 :6 李四 當前投票次數 :8 張三 當前投票次數 :7 李四 當前投票次數 :9 張

原创 (4). hdfs數據寫過程概述

(1)客戶端要向HDFS寫數據,首先要跟namenode通信以確認可以寫文件並獲得接收文件block的datanode,然後,客戶端按順序將文件逐個block傳遞給相應datanode,並由接收到block的datanode負責向其他da

原创 (5).hdfs數據讀過程概述

(1)客戶端將要讀取的文件路徑發送給namenode,namenode獲取文件的元信息(主要是block的存放位置信息)返回給客戶端,客戶端根據返回的信息找到相應datanode逐個獲取文件的block並在客戶端本地進行數據追加合併從而獲

原创 理解高併發(11).線程通信之_join使用及原理

概述 根據jdk官方API的定義: Thread.join方法是阻塞調用線程(也稱阻塞主線程),待被調用線程(子線程)運行結束後主線程纔會被喚醒。 通常用在main方法中。 替代方案 jdk1.7 CountDownLatch joi

原创 理解高併發(17).threadlocal原理及用法

概述 threadlocal 是線程本地變量的意思, 它能夠將主內存空間中的共享變量拷貝一份到本地工作內存空間, 使多個線程操作共享變量互不影響, 達到了線程安全的效果。 場景 特別適合於控制每個線程某個業務的執行次數,例如:做投票系統

原创 (2).hdfs的架構設計

hdfs被設計成Master/Slave結構: (1)HDFS集羣分爲兩大角色:NameNode、DataNode     (2)NameNode負責管理整個文件系統的元數據     (3)DataNode 負責管理用戶的文件數據塊   

原创 理解高併發(19).volatile原理及用法

功能 volatile關鍵字有2大作用, 保證被修飾的語句在執行和編譯時不被優化下面的例子,如果不加volatile,執行器對stop的取值僅從本地工作內存中獲取,這樣的話會造成即使該值被其它線程修改無無從感知。 專業點講:禁止指令重排

原创 (1).hdfs特性及適用場景

hdfs是一個分佈式文件系統,用於存儲文件,通過統一的命名空間——目錄樹來定位文件,並且是分佈式的,由很多服務器聯合起來實現其功能,集羣中的服務器各自負責角色;   重要特徵:   1.HDFS中的文件在物理上是分塊存儲(block),塊

原创 (3).hdfs集羣節點

Namenode 1.Namenode工作職責:負責客戶端請求的響應,元數據的管理(查詢,修改)   2.元數據管理 : namenode對數據的管理採用了三種存儲形式:內存元數據(NameSystem)  磁盤元數據鏡像文件數據操作日誌

原创 理解高併發(14).到齊後才能開幹_cyclicBarrier

概念 循環柵欄。工作線程必須等待其它線程都到達後才能夠繼續。 這就好比500米短跑比賽, 3跑道必須等到3人都到齊後才能開始賽跑。 與CountDownLatch區別 CountDownLatch 的使用場景更多的是側重於主線程-從線

原创 理解高併發(16).自己動手編寫Future、Callable

實現帶返回值的線程調用方式有很多, 這裏主要是藉助LockSupport工具來實現。 MyFuture.java類: 功能職責: 1、實現runnable接口,使其具體線程的特質 2、 提供future的get方法,使調用者能夠獲取到

原创 淺談zk(8).zookeeper環境搭建_集羣版

  一、環境搭建 1、分別創建三個server目錄 2、分別在3個目錄中創建logs、data子目錄,如下: 3、分別在data目錄下創建myid文件 server1: myid, 內容爲0