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 叢集的步驟。
最後,我們熟悉了框架內的基本操作,為進一步探索打下了堅實的基礎。