---
# System prepended metadata

title: 平行程式 NTHU-PP-Chap10-Big Data-Part1  Parallel Reduction / Distributed Computing Framework
tags: [平行程式]

---

教材:10710周志遠教授平行程式
https://www.youtube.com/playlist?list=PLS0SUwlYe8cxqw70UHOE5n4Lm-mXFXbZT

20250914 筆記
內容可能有錯僅供參考
在這個章節開始投影片和10710周志遠教授平行程式有差異，接下來以
NTHU-PP-2021 (Chinese) 為主

[NTHU-PP-Chap10-Big Data-Part1](https://www.youtube.com/watch?v=lag1UD8NDCw&list=PLQTDfc8kgjhMKtgumyK0gmEelnTtqJGsp&index=22)


21C~21D  Parallel Reduction / Distributed Computing Framework

今日大綱
1. 分散式運算與平行運算的區別
2. 巨量資料 (Big Data) 的崛起與重要應用
3. 巨量資料的定義與 5V 特性

#### 1. 分散式運算 (Distributed Computing) 與平行運算 (Parallel Computing) 的區別
*   本課程將從平行運算轉向**分散式運算**。
*   **平行運算**和**分散式運算**在本質上非常不同，因為它們解決的問題、注重的點以及應用場景都不同。
*   **平行運算**：
    *   通常與**高效能計算 (High-Performance Computing, HPC)**相關，注重**效能**。
    *   更偏向**演算法**層面，專注於拆解單一演算法的計算方法。
    *   常運行於超級電腦 (supercomputer) 或單一叢集 (single cluster)。
*   **分散式運算**：
    *   更多是為了解決**應用**層面的問題，需要**可擴展性 (scalability)**來處理**大型問題**。
    *   有時**效能不是最重要**的考量。
    *   常運行於資料中心甚至網際網路上，考量點與平行運算完全不同。
    *   更偏向**系統**層面，因此常被稱為**分散式系統 (distributed system)**。分散式系統是為了實現分散式運算而建構的系統。
    *   對一般人而言，接觸**分散式運算**或**分散式系統**的機會可能更大。

#### 2. 巨量資料 (Big Data) 的崛起與重要應用
*   本課程將介紹兩個非常重要的應用領域：**巨量資料 (Big Data)**和**人工智慧 (AI)**，尤其是深度學習 (Deep Learning)。
*   在 AI 興起之前，**巨量資料**曾是熱門話題並持續了一段時間。
*   當前的熱門計算問題（如巨量資料和深度學習）都涉及**大量計算與資料處理**，因此都需**依賴分散式計算**。
*   在分散式計算中，較低階或效能關鍵的部分仍會利用 **GPU (圖形處理單元)**和**平行計算技巧**來提升計算效能。
*   巨量資料解決方案是一個問題類型，包含各式各樣的解決方案。
*   **Hadoop** 和 **MapReduce** 是開啟巨量資料時代最主要的推手或發明。它們不僅是程式模型，更是實際的**系統**。
*   **系統計算**非常重要，如同 AI 和深度學習的例子：理論存在數十年，但直到 **GPU 應用**提升了計算效能，才使其變得可行並展現出其優勢。
*   **MapReduce** 是 Google 的解決方案，但**未開源**。
*   **Hadoop** 是開源的解決方案。本課程會介紹 Hadoop 的程式設計 ，並會安排實驗學習程式碼和使用方法。
*   巨量資料的核心問題是**資料量大到難以處理**。
*   資料的產生量和成長速度都非常驚人，例如十年內資料量增加了 50 倍。
*   **COVID-19 疫情**加速了線上化和資訊化，導致資料量進一步激增。

#### 3. 巨量資料量暴增的原因
*   **資料來源變多**：各種感測器、設備 及資訊應用的出現，每個應用都產生資料。例如，**元宇宙 (Metaverse)、AR、VR**等技術帶來高解析度圖形等驚人資料量.
*   **資料保存觀念改變**：
    *   以前的商業應用常在資料使用後即丟棄，因為儲存成本高且未意識到其價值。
    *   巨量資料時代意識到**所有資料都可能很有價值**，因此傾向於**先收集再說**，導致資料快速累積而非丟棄。
*   **歷史背景**：巨量資料問題並非全新。最早的超級電腦就是為了解決科學計算問題，例如天文觀測中的正地雷達陣列，其一天產生的資料量在多年前就非常驚人，甚至連資料傳輸都是大問題。

#### 4. DIKW 金字塔 (Data-Information-Knowledge-Wisdom Pyramid)
*   這個理論闡述了資料的**價值遞進**過程。
*   **Data (資料)**：原始、未經處理的數據，可以是任何產生的東西，甚至二進位訊號 (binary signal)。
*   **Information (資訊)**：經過處理、分析或前處理後的資料，具有**意義**。不必要的資料會被丟棄，有用的資料經過彙整後成為資訊。
*   **Knowledge (知識)**：能夠理解資訊的**含義**、解釋「為什麼」(why) 或「怎麼做」(how)。例如，理解圖畫的含義、課堂上傳授的定義和方法。
*   **Wisdom (智慧)**：最高層次，指**學以致用**，能夠解決問題、做出決策、產生價值 (value) 或達到目標，例如安全駕駛或下棋獲勝。

#### 5. 巨量資料與人工智慧的關係
*   **巨量資料**主要處理從**資料 (Data) 到資訊 (Information)**，甚至輕微觸及知識 (Knowledge) 的階段，它從最底層開始往上。
*   **AI (人工智慧)**，特別是深度學習，則旨在實現**智慧 (Wisdom)**，讓系統具備判斷和創造價值的「智能」。
*   兩者**相互關聯，無法獨立發展**。要發展 AI，必須有堅實的巨量資料基礎建設，否則沒有資料和資訊，AI 難以成功。
*   巨量資料時代來臨不久後，AI 時代也隨之來臨，印證了兩者的緊密聯繫。

#### 6. 巨量資料的實踐過程
*   巨量資料的實現目標過程主要包括：
    1.  **收集資料 (Data Collection)**：從多樣化的資料來源 (diverse dataset) 獲取資料，例如感測器、機台、手機。
    2.  **資料分析 (Data Analysis)**：巨量資料的分析通常較為簡單，偏向統計分析，而非傳統資料處理注重複雜演算法的分析。
    3.  **產生價值 (Deliver Value)**：最終目標是產生任何形式的**商業決策 (business decision)**或**智慧 (intelligence)**。
*   在產生價值方面，巨量資料透過簡單統計分析，可能無法做到非常「智能」的決策。
*   **AI 彌補了這一塊**，使得資料更容易轉化為價值，因為 AI 的核心是學習 (learn)。
*   **價值 (Value) 是最重要**的，缺乏應用和產品化的技術難以持續。
*   **跨領域人才**極為重要，能將技術與使用者端結合，將技術轉化為實際應用和價值。

#### 7. 巨量資料的經典案例：尿布與啤酒
*   這個案例發生在像沃爾瑪 (Walmart) 或全聯 (PX Mart) 這樣的大賣場。
*   賣場商品擺放的學問：好的擺放能增加顧客注意力，提升購買慾望和營業額。
*   賣場透過**巨量資料分析**，發現**啤酒和尿布**的關聯性非常高。
*   方法：透過**統計客戶發票**上商品同時出現的機率。
*   結果：將啤酒和尿布擺放在一起，成功**增加了營業額**。
*   這個案例的特點是：即使**不知道背後的原因**（例如新生兒家庭的慶祝或先生的苦悶），僅憑**數據統計結果**就能做出正確的商業決策並取得效果。這顯示了巨量資料的特性：**知道結果，即使不知道原因也能行動**。
*   前提是**資料量必須夠大**，才能確保統計結果的**可信度 (credibility)**。

#### 8. 深度學習 (Deep Learning) 的特性
*   深度學習目前非常熱門，其強大之處在於：
    *   **通用近似函數 (Universal Approximation Function)**：理論證明神經網路 (neural network) 可以近似任何映射問題，解決複雜問題。
    *   **結構化與彈性**：類似積木堆疊，可用模組化方式堆疊不同層 (layer) 和網路 (network) 來呈現概念，實現不同想法。
    *   **學習能力**：資料量越多，學習結果越好。反之，如果資料不足，深度學習的效果會大打折扣 (**Garbage In, Garbage Out**)。
*   因此，**巨量資料是深度學習非常重要的前置條件**。

#### 9. 資料與 AI 相關職位
*   資料處理流程從資料到智慧的轉變，對應到業界的不同職位。
*   **Data Engineer (資料工程師)**：
    *   更偏向**計算**和**系統**層面，負責處理資料的工具、基礎設施 (infrastructure)、系統建制和資料管理。
    *   需熟悉 Hadoop 等工具、資料架構 (data architecture) 和資料管理。
*   **Data Scientist (資料科學家)**：
    *   在資料工程師提供的基礎設施之上，利用機器學習 (machine learning) 和統計 (statistics) 等**演算法和分析**方法，從資料中提取含義，達到知識 (Knowledge) 層次。
    *   通常專注於資料本身的含義，是**資料驅動 (data driven)**，而非應用驅動 (application driven)。
*   **AI Scientist (人工智慧科學家)** / **AI Engineer (人工智慧工程師)**：
    *   將資料科學家的分析成果轉化為**產品 (product)**或**應用 (application)**，例如自動駕駛車或人臉辨識 App。
    *   更強調**應用驅動 (application driven)**，需要深度學習和其他技術，並需要跨領域的合作。
    *   **ML System (機器學習系統)**：AI 工程師會負責為 ML 和 AI 構建和管理所需的系統和流程基礎設施。
    *   AI 科學家可能更多地專注於學習和設計模型本身。

#### 10. 巨量資料的定義與 5V 特性
*   **巨量資料的定義是與時俱進的**。
    *   1956 年，5MB 的資料量就需要動用大型機器甚至飛機來運輸，當時就是一個巨量資料問題。
    *   2016年 100 PB 的資料量仍需要卡車運輸硬碟來解決資料傳輸問題，如同 AWS 等雲服務提供商的搬遷服務。
    *   因此，巨量資料的定義是：**過去或現有方法無法解決的資料處理問題**，就可稱之為巨量資料。資料量即使很小，在特定情境下也可能構成巨量資料問題。
*   巨量資料通常用五個 V (5V)來描述其挑戰和特性：
    1.  **Volume (資料量)**：最直接的挑戰，資料量龐大到記憶體、硬碟無法容納，甚至傳輸和處理都困難。
        *   大量的資料中，非結構化資料 (unstructured data)佔比較高。
        *   這與資料來源的多樣化有關。
    2.  **Variety (多樣性)**：指資料來源、格式和類型非常多元，特別是**非結構化資料**問題。
        *   傳統的關聯式資料庫 (relational database) 或 SQL 資料庫 (SQL database) 主要處理結構化資料，無法有效處理非結構化資料。
        *   需要能夠處理各種資料類型的系統或工具。
        *   **MapReduce** 被認為是解決資料量和多樣性問題的良好方案。
    3.  **Velocity (即時性)**：指資料處理的**速度要求**。資料需要**快速**處理，常與串流資料 (streaming data)處理相關。
        *   這是巨量資料時代越來越重要的問題，因IoT (物聯網)和社群網路 (social network)等應用產生大量即時、高速率且需要短回應時間的串流資料。
        *   這些資料通常無法長期保留，或累積速度太快。
        *   解決即時性問題的方案（如串流處理工具）通常**依賴分散式計算和平行計算**。
    4.  **Veracity (真實性/準確性)**：指資料的**可疑性**和**準確度**問題。
        *   傳統資料處理要求資料在分析前必須是正確的，但這會導致丟棄大量（例如來自感測器噪聲、封包遺失等）不準確的資料。
        *   Veracity 的重點是即使在資料不完全可靠的情況下，也能從中**發現有用的結果**。
        *   它專注於從那些傳統會被丟棄的「**暗資料 (dark data)**」中找到價值。
        *   這部分問題與分散式計算的關係較小，工具更偏向演算法。
    5.  **Value (價值)**：最重要的 V。所有技術和挑戰的克服最終都必須**產生價值**。
        *   雖然前四個 V 是技術挑戰，但**落地 (implementation)**和**產生價值**才是最難成功的部分。
        *   這往往需要跨領域的專業知識，而不僅僅是資料或科學工具所能單純解決的。

#### 11. 資料分析的挑戰與工具的重要性
*   資料分析是一個困難的問題，如同廣告商不確定哪一半廣告有效一樣。
*   解決巨量資料問題的關鍵方式之一是擁有正確的工具和方法。
*   工具的出現可以徹底改變問題的解決方式和效率，例如機械化收割取代人工。
*   **Hadoop** 和 **MapReduce** 正是這樣的工具，它們的出現開啟了巨量資料時代。
*   透過學習這些工具的 API 和程式設計模型，就能具備處理巨量資料問題的能力。

---
其他課程連結

[平行程式1C~2B Introduction parallel programming](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/Syxh3H7Kxe)
[平行程式3A~3D The Latest Developments and Applications Using Parallel Programming](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HJh7QFVKle)
[平行程式4A~4B IO Parallel IO and Program Analysis](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HJLMsuHFgg)
[平行程式5A~5B The Latest Developments and Applications Using Parallel Programming](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/SJh57hIFle)
[平行程式6A~6B Communication Routines and Parallel Function Code](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/r1X9kX_Fle)
[平行程式 6C~6D Communication Routines and Parallel Function Code](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/S1DPjoYFlx)
[平行程式 7A~8A Pthread:Synchronization Problem & Tools](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HJu-_0tKge)
[平行程式 8B~8D Synchronization Tools & Open Multi-Processing(OpenMP)](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/H1ki4E2Fee)
[平行程式 9A~9B Synchronization Construct](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BJTYMrpKlx)
[平行程式 10A~10B Synchronization Tools & Open Multi-Processing Synchronization Construct](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/B1cY6M1qee)
[平行程式 10C~10D Synchronization Tools & Open Multi-Processing Synchronization Construct](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BkgFaNg5gg)
[平行程式 11A~11B Parallel Work Pool and Termination / Parallel Sorting](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/H1hfOw-5xl)
[平行程式 12A~12B Parallel Sorting and Pipelined Computations](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/Symo-zQ9eg)
[平行程式 12C~12D Parallel Sorting and Pipelined Computations](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BJYNKDVceg)
[平行程式 13A-13B  Sychronous Parallelism](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HJ2UJ2Bqex)
[平行程式 14A~14B Heterogeneous Computing](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BksS4yP5eg)
[平行程式 14C~14D Heterogeneous Computing](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BJrfTUd9xx)
[平行程式 15A~15B Parallel Programming Model on GPU](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/ByWnl-t5gg)
[平行程式 16A~16B What is Compute Unified Device Architecture(CUDA)?](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HyYpsjcqgl)
[平行程式 17A~18A 平行運算的CUDA](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/H1dUeBT5lg)
[平行程式 18B~19A  記憶體層級 / CUDA的優化](https://hackmd.io/@JuitingChen/HyF44e1jge)
[平行程式 19B~19D 記憶體層級 / CUDA的優化 ](https://hackmd.io/@JuitingChen/ryPEu4lieg)
[平行程式 20A~20B CUDA優化全域和區域記憶體/共享記憶體](https://hackmd.io/@JuitingChen/r1X659Zoxl)
[平行程式 21A~21B Parallel Reduction / Distributed Computing Framework](https://hackmd.io/@JuitingChen/HyiOpozjxl)
[平行程式 NTHU-PP-Chap10-Big Data-Part1 ](https://hackmd.io/@JuitingChen/Hyc-e3Golx)
[平行程式 NTHU-PP-Chap10-Big Data-Part2 ](https://hackmd.io/@JuitingChen/ryC_QTXoxl)
[平行程式 NTHU-PP-Chap11-MapReduce](https://hackmd.io/@JuitingChen/HJgBXJOsge)
[平行程式 NTHU-PP-Chap12-Distributed Training-Part1](https://hackmd.io/@JuitingChen/ryh5hBtsge)
[平行程式 NTHU-PP-Chap12-Distributed Training-Part2](https://hackmd.io/@JuitingChen/rJ2G7kdjxg)
[平行程式 NTHU-PP-Chap12-Distributed Training-Part3](https://hackmd.io/@JuitingChen/HkA471dilx)
[平行程式 NTHU-PP-Chap13-UCX-Part1](https://hackmd.io/@JuitingChen/rJbq103ieg)
[平行程式 NTHU-PP-Chap13-UCX-Part2](https://hackmd.io/@JuitingChen/SJpNmk_ixl)
[平行程式 NTHU-PP-Chap13-UCX-Part3](https://hackmd.io/@JuitingChen/HkIUYa13xe)
