paulwong

          HBASE讀書筆記

          GET、PUT是ONLINE的操作,MAPREDUCE是OFFLINE的操作


          HDFS寫流程
          客戶端收到要保存文件的請求后,將文件以64M為單位拆成若干份BLOCK,形成一個列表,即由幾個BLOCK組成,將這些信息告訴NAME NODE,我要保存這個,NAME NODE算出一個列表,哪段BLOCK應該寫到哪個DATA NODE,客戶端將第一個BLOCK傳到第一個節點DATA NODE A,通知其保存,同時讓它通知DATA NODE D和DATA NODE B也保存一份,DATA NODE D收到信息后進行了保存,同時通知DATA NODE B保存一份,DATA NODE B保存完成后則通知客戶端保存完成,客戶端再去向NAME NODE中取下一個BLOCK要保存的位置,重復以上的動作,直到所有的BLOCK都保存完成。

          HDFS讀流程
          客戶端向NAME NODE請求讀一個文件,NAME NODE返回這個文件所構成的所有BLOCK的DATA NODE IP及BLOCK ID,客戶端并行的向各DATA NODE發出請求,要取某個BLOCK ID的BLOCK,DATA NODE發回所要的BLOCK給客戶端,客戶端收集到所有的BLOCK后,整合成一個完整的文件后,此流程結束。


          MAPREDUCE流程
          輸入數據 -- 非多線程了,而是多進程的挑選數據,即將輸入數據分成多塊,每個進程處理一塊 -- 分組 -- 多進程的匯集數據 -- 輸出

          HBASE表結構
          HBASE中將一個大表數據分成不同的小表,每個小表叫REGION,存放REGION的服務器叫REGIONSERVER,一個REGIONSERVER可以存放多個REGION。通常REGIONSERVER和DATA NODE是在同一服務器,以減少NETWORK IO。
          -ROOT-表存放于MASTER SERVER上,記錄了一共有多少個REGIONSERVER,每個REGION SERVER上都有一個.META.表,上面記錄了本REGION SERVER放有哪幾個表的哪幾個REGION。如果要知道某個表共有幾個REGION,就得去所有的REGION SERVER上查.META.表,進行匯總才能得知。
          客戶端如果要查ROW009的信息,先去咨詢ZOOPKEEPER,-ROOT-表在哪里,然后問-ROOT-表,哪個.META.知道這個信息,然后去問.META.表,哪個REGION有這個信息,然后去那個REGION問ROW009的信息,然后那個REGION返回此信息。


          HBASE MAPREDUCE
          一個REGION一個MAP任務,而任務里的map方法執行多少次,則由查詢出來的記錄有多少條,則執行多少次。
          REDUCE任務負責向REGION寫數據,但寫到哪個REGION則由那個KEY歸屬哪個REGION管,則寫到哪個REGION,有可能REDUCE任務會和所有的REGION SERVER交互。


          在HBASE的MAPREDUCE JOB中使用JOIN
          REDUCE-SIDE JOIN
          利用現有的SHUTTLE分組機制,在REDUCE階段做JOIN,但由于MAP階段數據大,可能會有性能問題。
          MAP-SIDE JOIN
          將數據較少的一表讀到一公共文件中,然后在MPA方法中循環另一表的數據,再將要的數據從公共文件中讀取。這樣可以減少SHUTTLE和SORT的時間,同時也不需要REDUCE任務。

          posted on 2013-02-01 13:55 paulwong 閱讀(477) 評論(0)  編輯  收藏 所屬分類: 分布式HADOOP 、HBASE

          主站蜘蛛池模板: 抚州市| 齐齐哈尔市| 宕昌县| 湟源县| 思南县| 沅陵县| 内丘县| 抚顺市| 平安县| 黄梅县| 临泽县| 玉山县| 开封市| 鄂州市| 张家界市| 宣汉县| 松阳县| 东乡族自治县| 水城县| 淮滨县| 泉州市| 左云县| 隆化县| 东乡族自治县| 盐边县| 金湖县| 池州市| 长宁县| 蕲春县| 读书| 龙山县| 虎林市| 和林格尔县| 静安区| 那曲县| 浮山县| 岚皋县| 永嘉县| 扬州市| 德惠市| 隆回县|