---
# System prepended metadata

title: Hadoop

---

# Hadoop

## Apache Hadoop
* ==儲存==、==運算==、==資源管理==的分散式 Big Data 處理平臺
* 每個Hadoop具有一個`ResourceManager`，或一台以上的`NodeManager`,`NodeManager`數量與`DataNode`相同
    - 優點
        - 容易擴充
        - 高可用性
    - 主要服務
        - HDFS `Hadoop Distributed File System`
            - 由一台 `NameNode` 與至少一台的 `DataNode` 所組成。
            - NameNode：管理檔案系統的名稱空間，記錄每個檔案的元資料==metadata==（例如，檔案大小、權限、創建時間、儲存位置等），並且負責管理數據區塊的映射。
            - SecondaryNameNode：如果`NameNode`掛了，`SecondaryNameNode`可還原數據
            - DataNode：實際存儲數據區塊==block==的節點，負責向 NameNode 報告自己所存儲的數據區塊信息，以及將數據區塊傳輸到其他 DataNode。
            ```mermaid
            graph TD;
            NameNode-->DataNode1;
            NameNode-->DataNode2;
            NameNode-->DataNode3;
            ```
        - Yarn `Yet Another Resource Negotiator`
            - 主要服務
                - ResourceManager
                    - 管理與裁決Hadoop叢集內資源的使用權，根據資源的狀態分配作業給計算節點
                    - 發生故障時自動將未完成的作業分配到其他可用的節點上
                - NodeManager
                    - 數量應與`DataNode`相同
                    - 取得`ResourceManager`分配的資源後，啟動並監控Container其資源，包括記憶體、硬碟、CPU、網路
                - Container
                    - 運行完釋放、動態分配大小
                - ApplicationMaster
                    - 任務運行時的管理者
                    - 分配任務給 MapTask
                    - 跟`ResourceManager`請求任務
                    ![](https://i.imgur.com/t7musYT.png)
                    - [圖片來源](https://img2020.cnblogs.com/blog/2114512/202111/2114512-20211124203943202-1819864049.png)
* MapReduce
    * Map 大工作拆解成小工作
    * Reduce 各小工作合併成完整檔案
    ### <p class="text-center">搜尋檔案</p>
    
    ```mermaid
    flowchart LR
    id1{{搜尋檔案 happy.avi}} --> hadoop001
    id1{{搜尋檔案 happy.avi}} --> hadoop002
    id1{{搜尋檔案 happy.avi}} -- Map --> hadoop003
    id1{{搜尋檔案 happy.avi}} --> hadoop004
    id1{{搜尋檔案 happy.avi}} --> hadoop999
    hadoop001 --> id2[[520MB happy.avi]]
    hadoop002 --> id2[[520MB happy.avi]]
    hadoop003 -- Reduce --> id2[[520MB happy.avi]]
    hadoop004 --> id2[[520MB happy.avi]]
    hadoop999 --> id2[[520MB happy.avi]]
    ```

## Apache HBase
* 運作在 HDFS 的分散式資料庫

## Docker Network
| Network Mode | description |
| -------- | -------- |
| none | 無網路 |
| host | 直接使用本機網路 |
| bridge (default) | 與 container 溝通 |
| overlay | 不同電腦上 container 溝通 |

###### 參考資料
https://www.youtube.com/watch?v=JTKvhw_ppHw&list=PLmOn9nNkQxJECK87zGkugJmfx6yXEQt-F&index=14