Apache Hadoop 簡介
一、簡介
人類每天都會產生數量驚人的數據,世界透過社群媒體平台、訊息應用程式和音訊/視訊串流服務的聯繫比以往任何時候都更加緊密。
因此,統計數據顯示,令人震驚的是,所有創建的數據中有90%是在過去兩三年內產生的。
由於資料在現代世界中的作用變得更具策略性,並且大多數資料都是非結構化格式,因此我們需要一個能夠處理如此龐大的資料集的框架——拍字節、澤字節或更多的規模,通常稱為作為大數據。
在本教程中,我們將探索Apache Hadoop ,這是一種廣泛認可的處理大數據的技術,可提供可靠性、可擴展性和高效的分散式運算。
2.什麼是Apache Hadoop?
Apache Hadoop 是一個開源框架,旨在從單一伺服器擴展到多個機器,提供每個機器的本地運算和存儲,促進分散式運算環境中大規模資料集的儲存和處理。
該框架利用叢集運算的力量—跨叢集中的多個伺服器處理小塊資料。
此外,Hadoop 與許多其他工具配合使用的靈活性使其成為現代大數據平台的基礎 - 為企業提供可靠且可擴展的方式來從不斷增長的數據中獲取見解。
3.Hadoop的核心元件
Hadoop 的四個核心元件構成了其係統的基礎,實現了分散式資料儲存和處理。
3.1. Hadoop 通用
它是一組基本的 Java 函式庫,所有 Hadoop 模組都可以使用它來更好地運作。
3.2. Hadoop 分散式檔案系統 (HDFS)
HDFS 是一種分散式檔案系統,原生支援大型資料集,可提供具有高可用性和容錯性的資料吞吐量。
簡單來說,它是 Hadoop 的儲存元件,跨多台機器儲存大量數據,並且能夠在標準硬體上運行,使其具有成本效益。
3.3. Hadoop紗線
YARN 是 Yet Another Resource Negotiator 的縮寫,它提供了調度作業的框架,並為分散式系統管理系統資源。
簡而言之,它是 Hadoop 的資源管理元件,管理用於處理 HDFS 中儲存的資料的資源。
3.4. Hadoop MapReduce
一種簡單的程式設計模型,透過將非結構化資料轉換為鍵值對(映射)來並行處理數據,然後將其拆分到節點上並將結果組合成最終輸出(減少)。
所以,通俗地說,它是 Hadoop 的大腦,分兩個階段提供主要的處理引擎能力——映射和歸約。
4. 設定
GNU/Linux 平台支援 Hadoop。那麼,讓我們在 Linux 作業系統上設定 Hadoop 叢集。
4.1.先決條件
首先,我們需要為最新的 Apache Hadoop安裝 Java 8/11。另外,我們可以遵循此處的Java 版本建議。
接下來,我們需要安裝 SSH 並確保sshd服務正在運行才能使用 Hadoop 腳本。
4.2.下載並安裝 Hadoop
我們可以按照詳細的指南在Linux中安裝和設定Hadoop。
設定完成後,讓我們執行以下命令來驗證已安裝的 Hadoop 的版本:
hadoop version
這是上述命令的輸出:
Hadoop 3.4.0 Source code repository [email protected]:apache/hadoop.git -r bd8b77f398f626bb7791783192ee7a5dfaeec760
 Compiled by root on 2024-03-04T06:29Z
 Compiled on platform linux-aarch_64
 Compiled with protoc 3.21.12
 From source with checksum f7fe694a3613358b38812ae9c31114e
 This command was run using /usr/local/hadoop/common/hadoop-common-3.4.0.jar
值得注意的是,我們可以在三種支援的操作模式中的任何一種下運行它:獨立、偽分佈式和完全分佈式。然而,預設情況下,Hadoop 配置為以獨立(本地非分散式)模式運行,本質上運行單一 Java 進程。
5. 基本操作
一旦我們的 Hadoop 叢集啟動並運行,我們就可以執行許多操作。
5.1. HDFS操作
讓我們來看看使用 HDFS 命令列介面管理檔案和目錄的一些便捷操作。
例如,我們可以將檔案上傳到 HDFS:
hdfs dfs -put /local_file_path /hdfs_path
同樣,我們可以下載檔案:
hdfs dfs -get /hdfs_file_path /local_path
讓我們列出HDFS目錄中的所有檔案:
hdfs dfs -ls /hdfs_directory_path
並且,我們可以透過以下方式讀取 HDFS 位置的檔案內容:
hdfs dfs -cat /hdfs_file_path
此外,此指令也會檢查 HDFS 磁碟使用情況:
hdfs dfs -du -h /hdfs_path
此外,還有其他有用的命令,例如-mkdir用於建立目錄, rm用於刪除檔案或目錄,以及-mv用於移動以重命名透過 HDFS 可用的檔案。
5.2.運行MapReduce作業
Hadoop 發行版包含一些簡單的介紹性範例,用於在hadoop-mapreduce-examples-3.4.0 jar 檔案下探索 MapReduce。
例如,讓我們看一下WordCount ,這是一個簡單的應用程序,它掃描給定的輸入檔案並提取每個單字出現的次數作為輸出。
首先,我們將在input目錄中建立一些文字檔案 – textfile1.txt和textfile2.txt其中包含一些內容:
echo "Introduction to Apache Hadoop" > textfile01.txt
 echo "Running MapReduce Job" > textfile01.txt
然後,讓我們執行 MapReduce 作業並建立輸出檔:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.4.0.jar wordcount input output
輸出日誌顯示了其他任務之間的對應和歸約操作:
2024-09-22 12:54:39,592 INFO impl.MetricsSystemImpl: Scheduled Metric snapshot period at 10 second(s).
 2024-09-22 12:54:39,592 INFO impl.MetricsSystemImpl: JobTracker metrics system started
 2024-09-22 12:54:39,722 INFO input.FileInputFormat: Total input files to process : 2
 2024-09-22 12:54:39,752 INFO mapreduce.JobSubmitter: number of splits:2
 2024-09-22 12:54:39,835 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_local1009338515_0001
 2024-09-22 12:54:39,835 INFO mapreduce.JobSubmitter: Executing with tokens: []
 2024-09-22 12:54:39,917 INFO mapreduce.Job: The url to track the job: http://localhost:8080/
 2024-09-22 12:54:39,918 INFO mapreduce.Job: Running job: job_local1009338515_0001
 2024-09-22 12:54:39,959 INFO mapred.MapTask: Processing split: file:/Users/anshulbansal/work/github_examples/hadoop/textfile01.txt:0+30
 2024-09-22 12:54:39,984 INFO mapred.MapTask: (EQUATOR) 0 kvi 26214396(104857584)
 2024-09-22 12:54:39,984 INFO mapred.MapTask: mapreduce.task.io.sort.mb: 100
 2024-09-22 12:54:39,984 INFO mapred.MapTask: soft limit at 83886080
 2024-09-22 12:54:39,984 INFO mapred.MapTask: bufstart = 0; bufvoid = 104857600
 2024-09-22 12:54:39,984 INFO mapred.MapTask: kvstart = 26214396; length = 6553600
 2024-09-22 12:54:39,985 INFO mapred.MapTask: Map output collector class = org.apache.hadoop.mapred.MapTask$MapOutputBuffer
 2024-09-22 12:54:39,998 INFO mapred.LocalJobRunner:
 2024-09-22 12:54:39,999 INFO mapred.MapTask: Starting flush of map output
 2024-09-22 12:54:39,999 INFO mapred.MapTask: Spilling map output
 2024-09-22 12:54:39,999 INFO mapred.MapTask: bufstart = 0; bufend = 46; bufvoid = 104857600
 2024-09-22 12:54:39,999 INFO mapred.MapTask: kvstart = 26214396(104857584); kvend = 26214384(104857536); length = 13/6553600
 2024-09-22 12:54:40,112 INFO mapred.LocalJobRunner: Finishing task: attempt_local1009338515_0001_r_000000_0
 2024-09-22 12:54:40,112 INFO mapred.LocalJobRunner: reduce task executor complete.
 2024-09-22 12:54:40,926 INFO mapreduce.Job: Job job_local1009338515_0001 running in uber mode : false
 2024-09-22 12:54:40,928 INFO mapreduce.Job: map 100% reduce 100%
 2024-09-22 12:54:40,929 INFO mapreduce.Job: Job job_local1009338515_0001 completed successfully
 2024-09-22 12:54:40,936 INFO mapreduce.Job: Counters: 30
 File System Counters
 FILE: Number of bytes read=846793
 FILE: Number of bytes written=3029614
 FILE: Number of read operations=0
 FILE: Number of large read operations=0
 FILE: Number of write operations=0
 Map-Reduce Framework
 Map input records=2
 Map output records=7
 Map output bytes=80
 Map output materialized bytes=106
 Input split bytes=264
 Combine input records=7
 Combine output records=7
 Reduce input groups=7
 Reduce shuffle bytes=106
 Reduce input records=7
 Reduce output records=7
 Spilled Records=14
 Shuffled Maps =2
 Failed Shuffles=0
 Merged Map outputs=2
 GC time elapsed (ms)=4
 Total committed heap usage (bytes)=663748608
 Shuffle Errors
 BAD_ID=0
 CONNECTION=0
 IO_ERROR=0
 WRONG_LENGTH=0
 WRONG_MAP=0
 WRONG_REDUCE=0
 File Input Format Counters
 Bytes Read=52
 File Output Format Counters
 Bytes Written=78
一旦 MapReduce 作業結束, part-r-00000文字檔案將在output目錄中創建,其中包含單字及其出現次數:
hadoop dfs -cat /output/part-r-00000
這是文件的內容:
Apache
 1
 Hadoop
 1
 Introduction
 1
 Job
 1
 MapReduce
 1
 Running
 1
 to
 1
同樣,我們可以查看其他示例,例如**TerraSort來執行大規模數據排序**, RandomTextWriter生成對基準測試和測試有用的隨機文本數據,以及 Grep 來在hadoop-mapreduce-examples-3.4.0 jar 檔案。
5.3.管理 YARN 上的服務
現在,讓我們來看看在 Hadoop 上管理服務的一些操作。例如,以下是檢查節點狀態的命令:
yarn node -list
同樣,我們可以列出所有正在運行的應用程式:
yarn application -list
以下是我們部署服務的方法:
yarn deploy service service_definition.json
同樣,我們可以啟動一個已經註冊的服務:
yarn app -launch service_name
然後,我們可以分別啟動、停止、銷毀服務:
yarn app -start service_name
 yarn app -stop service_name
 yarn app -destroy service_name
此外,還有一些有用的 YARN 管理命令,例如用於檢查守護程序日誌daemonlog 、用於啟動節點管理器nodemanager 、用於啟動 Web 代理伺服器的proxyserver以及用於啟動時間軸伺服器的timelineserver 。
6.Hadoop生態系統
Hadoop 儲存和處理大型資料集,需要支援工具來完成攝取、分析和資料擷取等任務。讓我們列出 Hadoop 生態系統中的一些重要工具:
- Apache Ambari:基於 Web 的叢集管理工具,可簡化 Hadoop 叢集的部署、管理和監控
 - Apache HBase:用於即時應用程式的分散式、面向列的資料庫
 - Apache Hive:資料倉儲基礎設施,允許類似 SQL 的查詢來管理和分析大型資料集
 - Apache Pig:一種高階腳本語言,可輕鬆實現資料分析任務
 - Apache Spark:用於批次、串流和機器學習的叢集運算框架
 - Apache ZooKeeper:為大規模分散式系統提供可靠、高效能、分散式協調服務的服務
 
七、結論
在本文中,我們探討了 Apache Hadoop,這是一個為管理和處理大數據提供可擴展且高效的解決方案的框架,這在當今數據驅動的世界中至關重要。
我們首先討論其核心元件,包括 HDFS、YARN 和 MapReduce,然後介紹設定 Hadoop 叢集的步驟。
最後,我們熟悉了框架內的基本操作,為進一步探索打下了堅實的基礎。