介紹
Hadoop是一個基于Java的程式設計架構,支援在廉價機器叢集上處理和存儲極大資料集。它是大資料競争領域的第一個主要開源項目,由Apache Software Foundation贊助。
Hadoop由四個主要層組成:
- Hadoop Common是支援其他Hadoop子產品的實用程式和庫的集合。
- HDFS代表Hadoop分布式檔案系統,負責将資料儲存到磁盤。
- YARN是Yet Another Resource Negotiator的縮寫,是HDFS的“作業系統”。
- MapReduce是Hadoop叢集的原始處理模型。它在叢集或映射中配置設定工作,然後将節點的結果組織并減少為對查詢的響應。許多其他處理模型可用于3.x版本的Hadoop。
Hadoop叢集的設定相對複雜,是以該項目包含一個獨立模式,适用于學習Hadoop,執行簡單操作和調試。
在本教程中,我們将以獨立模式安裝Hadoop,并運作其中包含的示例示例MapReduce程式之一來驗證安裝。
準備
要學習本教程,您需要:
- 具有sudo權限的非root使用者的Ubuntu 18.04伺服器。沒有伺服器的同學可以在這裡購買,不過我個人更推薦您使用免費的騰訊雲開發者實驗室進行試驗,學會安裝後再購買伺服器。
完成此準備後,您就可以安裝Hadoop及其依賴項了。
第1步 - 安裝Java
首先,我們将更新我們的包清單:
sudo apt update
複制
接下來,我們将在Ubuntu 18.04上安裝OpenJDK,這是預設的Java Development Kit:
sudo apt install default-jdk
複制
安裝完成後,讓我們檢查一下版本。
java -version
複制
openjdk 10.0.1 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 10.0.1+10-Ubuntu-3ubuntu1, mixed mode)
複制
此輸出驗證是否已成功安裝OpenJDK。
第2步 - 安裝Hadoop
有了Java,我們将通路Apache Hadoop Releases頁面以查找最新的穩定版本。
導航到您要安裝的發行版的二進制檔案。在本指南中,我們将安裝Hadoop 3.0.3。

在下一頁上,右鍵單擊并将連結複制到釋出二進制檔案。
在伺服器上,我們将用
wget
來擷取它:
wget http://www-us.apache.org/dist/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz
複制
注意: Apache網站将動态引導您通路最佳鏡像,是以您的URL可能與上面的URL不比對。
為了確定我們下載下傳的檔案沒有被更改,我們将使用SHA-256進行快速檢查。傳回版本頁面,然後右鍵單擊并将連結複制到您下載下傳的釋出二進制檔案的校驗和檔案:
再次,我們将在我們的伺服器上使用
wget
下載下傳檔案:
wget https://dist.apache.org/repos/dist/release/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz.mds
複制
然後運作驗證:
shasum -a 256 hadoop-3.0.3.tar.gz
複制
db96e2c0d0d5352d8984892dfac4e27c0e682d98a497b7e04ee97c3e2019277a hadoop-3.0.3.tar.gz
複制
将此值與
.mds
檔案中的SHA-256值進行比較:
cat hadoop-3.0.3.tar.gz.mds
複制
...
/build/source/target/artifacts/hadoop-3.0.3.tar.gz:
SHA256 = DB96E2C0 D0D5352D 8984892D FAC4E27C 0E682D98 A497B7E0 4EE97C3E 2019277A
...
複制
您可以放心地忽略大小寫和空格的差別。我們針對從鏡像下載下傳的檔案運作的指令輸出應該與我們從apache.org下載下傳的檔案中的值相比對。
現在我們已經驗證檔案沒有被破壞或更改,我們将使用帶有
-x
标志的
tar
指令來提取,
-z
l來解壓縮,
-v
來獲得詳細輸出,而
-f
指定我們從檔案中提取。使用tab-completion或在下面的指令中替換正确的版本号:
tar -xzvf hadoop-3.0.3.tar.gz
複制
最後,我們将提取的檔案移動到
/usr/local
本地安裝軟體的适當位置。如果需要,請更改版本号以比對您下載下傳的版本。
sudo mv hadoop-3.0.3 /usr/local/hadoop
複制
有了這個軟體,我們就可以配置它的環境了。
第3步 - 配置Hadoop的Java Home
Hadoop要求您将路徑設定為Java,可以是環境變量,也可以是Hadoop配置檔案。
Java的路徑
/usr/bin/java
是一個與
/etc/alternatives/java
的符号連結,它是一個符号連結到預設的Java二進制檔案。我們将使用有
-f
标志的
readlink
以遞歸方式跟蹤路徑的每個部分中的每個符号連結。然後,我們将使用
sed
從輸出中調整
bin/java
為我們提供
JAVA_HOME
的正确的值。
查找預設Java路徑
readlink -f /usr/bin/java | sed "s:bin/java::"
複制
/usr/lib/jvm/java-11-openjdk-amd64/
複制
您可以複制此輸出以将Hadoop的Java主目錄設定為此特定版本,這可確定如果預設Java更改,此值不會更改。或者,您可以在檔案中動态使用
readlink
指令,以便Hadoop将自動使用設定為系統預設值的任何Java版本。
首先,打開
hadoop-env.sh
:
sudo nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh
複制
然後,選擇以下選項之一:
選項1:設定靜态值
. . .
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
. . .
複制
選項2:使用Readlink動态設定值
. . .
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
. . .
複制
注意:對于Hadoop,
hadoop-env.sh
中的
JAVA_HOME
值将覆寫環境中
/etc/profile
或使用者配置檔案中設定的任何值。
第4步 - 運作Hadoop
現在我們應該能夠運作Hadoop:
/usr/local/hadoop/bin/hadoop
複制
Usage: hadoop [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
or hadoop [OPTIONS] CLASSNAME [CLASSNAME OPTIONS]
where CLASSNAME is a user-provided Java class
OPTIONS is none or any of:
--config dir Hadoop config directory
--debug turn on shell script debug mode
--help usage information
buildpaths attempt to add class files from build tree
hostnames list[,of,host,names] hosts to use in slave mode
hosts filename list of hosts to use in slave mode
loglevel level set the log4j level for this command
workers turn on worker mode
SUBCOMMAND is one of:
. . .
複制
幫助意味着我們已成功配置Hadoop以獨立模式運作。我們将通過運作它附帶的示例MapReduce程式來確定它正常運作。為此,請在我們的主目錄中建立一個目錄
input
,并将Hadoop的配置檔案複制到其中,以将這些檔案用作我們的資料。
mkdir ~/input
cp /usr/local/hadoop/etc/hadoop/*.xml ~/input
複制
接下來,我們可以使用以下指令來運作MapReduce
hadoop-mapreduce-examples
程式,這是一個包含多個選項的Java歸檔檔案。我們将調用它的
grep
程式,
hadoop-mapreduce-examples
中包括的許多示例之一,後跟輸入目錄
input
和輸出目錄
grep_example
。MapReduce grep程式将計算文字或正規表達式的比對。最後,我們将提供正規表達式
allowed[.]*
以在陳述句的内部或末尾查找單詞
allowed
的出現。表達式區分大小寫,是以如果在句子開頭大寫,我們就找不到該單詞:
/usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar grep ~/input ~/grep_example 'allowed[.]*'
複制
任務完成後,它會提供已處理内容和遇到的錯誤的摘要,但這不包含實際結果。
. . .
File System Counters
FILE: Number of bytes read=1330690
FILE: Number of bytes written=3128841
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=2
Map output bytes=33
Map output materialized bytes=43
Input split bytes=115
Combine input records=0
Combine output records=0
Reduce input groups=2
Reduce shuffle bytes=43
Reduce input records=2
Reduce output records=2
Spilled Records=4
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=3
Total committed heap usage (bytes)=478150656
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=147
File Output Format Counters
Bytes Written=34
複制
注意:如果輸出目錄已經存在,程式将失敗,而不是看到摘要,輸出将類似于:
. . .
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.apache.hadoop.util.RunJar.run(RunJar.java:244)
at org.apache.hadoop.util.RunJar.main(RunJar.java:158)
複制
結果存儲在輸出目錄中,可以通過
cat
在輸出目錄上運作來檢查:
cat ~/grep_example/*
複制
19 allowed.
1 allowed
複制
MapReduce任務發現19個單詞
allowed
出現後跟一個句點,一個出現不出現。運作示例程式已驗證我們的獨立安裝正常運作,并且系統上的非特權使用者可以運作Hadoop進行探索或調試。
結論
在本教程中,我們以獨立模式安裝了Hadoop,并通過運作它提供的示例程式對其進行了驗證。
想要了解更多關于以獨立模式安裝Hadoop的相關教程,請前往騰訊雲+社群學習更多知識。
參考文獻:《How to Install Hadoop in Stand-Alone Mode on Ubuntu 18.04》