在安裝 Hadoop 3.3.6 前,需要滿足以下前置條件:
-
Java Development Kit (JDK):Hadoop 是用 Java 編寫的,因此需要安裝并配置適當版本的 JDK。Hadoop 3.3.6 建議使用 JDK 8 或更高版本。確保正確安裝 JDK,并設置 JAVA_HOME 環(huán)境變量。
-
SSH:Hadoop 集群中的節(jié)點需要通過 SSH 進行通信和管理。確保在所有節(jié)點上安裝和配置了 SSH,并且可以通過 SSH 無密碼登錄到集群的各個節(jié)點。
-
網(wǎng)絡設置:確保 Hadoop 集群的所有節(jié)點能夠相互通信。節(jié)點之間應該具有穩(wěn)定的網(wǎng)絡連接,并且可以通過主機名或 IP 地址進行互相訪問。
-
硬件要求:根據(jù)實際需求,為 Hadoop 集群中的節(jié)點分配足夠的計算資源(CPU、內存、磁盤空間等)。確保每個節(jié)點都具備足夠的硬件資源來支持預期的工作負載。
-
操作系統(tǒng):Hadoop 3.3.6 支持運行在多種操作系統(tǒng)上,包括 Linux、Windows 和 macOS。選擇適合你環(huán)境的操作系統(tǒng),并滿足相應的操作系統(tǒng)要求。
-
配置管理工具(可選):為了更方便地管理和配置 Hadoop 集群,你可以選擇使用一些配置管理工具,如 Apache ZooKeeper、Apache Ambari 等。這些工具可以簡化集群配置和管理的過程。
一、安裝JDK和MySQL
可以參考此處,進行安裝JDK和MySQL。必須要在Master和Slave節(jié)點上都要安裝JDK和MySQL才可以。
注意:在hadoop用戶下按照前面教程在.bashrc文件中設置JAVA_HOME。
二、創(chuàng)建hadoop用戶并賦予root權限
可以參考此處,新建一個名為 hadoop的 用戶,同時為 hadoop 用戶增加管理員權限,方便部署,避免一些對新手來說比較棘手的權限問題。
在安裝Debian系統(tǒng)的時候,一般會設置一個特權賬號root,和一個非特權賬戶(我的是hongpon316),但為了方便后續(xù)的操作。此處再新建一個名為“hadoop”的用戶,后續(xù) hadoop用 戶專門用來實現(xiàn)無密碼SSH登錄。
新建用戶完成之后,需要測試 hadoop 用戶是否具有了超級管理員權限。
二、安裝SSH、配置SSH無密碼登陸
因為 Hadoop 集群的各個節(jié)點需要通過 SSH 進行通信和管理,例如啟動和停止服務、復制文件等操作。因此,必須要讓Master節(jié)點可以SSH無密碼登錄到各個Slave節(jié)點上。
集群、單節(jié)點模式都需要用到 SSH 登陸(類似于遠程登陸,你可以登錄某臺 Linux 主機,并且在上面運行命令),Debian 默認已安裝了 SSH client,此外還需要安裝 SSH server:
apt-get update
apt-get install openssh-server
在安裝了以后就可以使用?ssh localhost?登陸到本機,但是會出現(xiàn)讓輸入密碼的過程。
但這樣登陸是需要每次輸入密碼的,我們需要配置成SSH無密碼登陸比較方便。
首先退出剛才的 ssh(exit),就回到了我們原先的終端窗口,然后利用 ssh-keygen 生成密鑰,并將密鑰加入到授權中:
exit # 退出剛才的 ssh localhost
cd ~/.ssh/ # 若沒有該目錄,請先執(zhí)行一次ssh localhost
ssh-keygen -t rsa # 會有提示,都按回車就可以
cat ./id_rsa.pub >> ./authorized_keys # 加入授權
~的含義: 在 Linux 系統(tǒng)中,~ 代表的是用戶的主文件夾,即 "/home/用戶名" 這個目錄,如你的用戶名為 hadoop,則 ~ 就代表 "/home/hadoop/"。 此外,命令中的 # 后面的文字是注釋,只需要輸入前面命令即可。?
三、網(wǎng)絡設置
四、安裝Hadoop3.3.6
4.1 Hadoop的安裝
官網(wǎng)下載Hadoop3.3.6的安裝包,點擊此處。
下載成功后使用xftp,將文件傳到Debian系統(tǒng)中的software目錄下備用?。
使用命令:sudo?tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local/,將該文件解壓到/usr/local/文件夾下面。
切換到/usr/local后,使用命令:sudo chown -R hadoop ./hadoop-3.3.6 ,用來將目錄?./hadoop-3.3.6
?及其所有子目錄和文件的所有權賦予用戶?hadoop
?。
使用命令:?
cd /usr/local/hadoop-3.3.6/
./bin/hadoop version
如果 Hadoop 安裝正確并設置了正確的環(huán)境變量,它將顯示 Hadoop 的版本信息,請必須確保你位于正確的 Hadoop 安裝目錄下,并且具有執(zhí)行權限來運行?hadoop
?命令。
4.2?相對路徑和絕對路徑
請務必注意命令中的相對路徑與絕對路徑,本文后續(xù)出現(xiàn)的?./bin/...
,./etc/...
?等包含 ./ 的路徑,均為相對路徑,以 /usr/local/hadoop 為當前目錄。
例如在 /usr/local/hadoop 目錄中執(zhí)行?./bin/hadoop version
?等同于執(zhí)行?/usr/local/hadoop/bin/hadoop version
??梢詫⑾鄬β窂礁某山^對路徑來執(zhí)行,但如果你是在主文件夾 ~ 中執(zhí)行?./bin/hadoop version
,執(zhí)行的會是?/home/hadoop/bin/hadoop version
,就不是我們所想要的了。?
4.3 Hadoop的PATH變量配置
為了可以使系統(tǒng)能夠在任何目錄下都能直接運行Hadoop的可執(zhí)行文件,即hadoop、hdfs等命令,需要完成PATH變量配置。
具體而言,export
命令用于設置環(huán)境變量,PATH
是一個特殊的環(huán)境變量,用于指定系統(tǒng)在哪些目錄中查找可執(zhí)行文件。通過將Hadoop所在的bin
和sbin
目錄添加到PATH
中,系統(tǒng)就能夠在運行命令時自動搜索并找到Hadoop的可執(zhí)行文件。
cd ~
vim ~/.bashrc
然后在該文件的最上面輸入以下的內容:?
export HADOOP_HOME=/usr/local/hadoop-3.3.6
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
最后一行是在原有配置JAVA_HOME的PATH路徑(在上面JDK的配置中的PATH配置)的基礎上,增加了$HADOOP_HOME/bin:$HADOOP_HOME/sbin:的路徑,然后保存退出:?
?保存后執(zhí)行命令“source ~/.bashrc”,使配置生效。
source ~/.bashrc
echo $PATH | tr ':' '\n' # 查看所有的PATH配置
參數(shù)說明:
-
export HADOOP_HOME=/usr/local/hadoop-3.3.6
:設置HADOOP_HOME
環(huán)境變量,將其指向Hadoop安裝的根目錄。 -
export HADOOP_MAPRED_HOME=$HADOOP_HOME
:設置HADOOP_MAPRED_HOME
環(huán)境變量,指向Hadoop MapReduce組件的安裝目錄,這里與HADOOP_HOME
相同。 -
export HADOOP_COMMON_HOME=$HADOOP_HOME
:設置HADOOP_COMMON_HOME
環(huán)境變量,指向Hadoop Common組件的安裝目錄,這里與HADOOP_HOME
相同。 -
export HADOOP_HDFS_HOME=$HADOOP_HOME
:設置HADOOP_HDFS_HOME
環(huán)境變量,指向Hadoop HDFS組件的安裝目錄,這里與HADOOP_HOME
相同。 -
export YARN_HOME=$HADOOP_HOME
:設置YARN_HOME
環(huán)境變量,指向Hadoop YARN組件的安裝目錄,這里與HADOOP_HOME
相同。 -
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
:設置HADOOP_COMMON_LIB_NATIVE_DIR
環(huán)境變量,指向Hadoop本地庫文件的路徑,這里是Hadoop安裝目錄下的lib/native
目錄。 -
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
:設置HADOOP_OPTS
環(huán)境變量,用于配置Hadoop的Java虛擬機選項。這里將java.library.path
屬性設置為Hadoop安裝目錄下的lib
目錄,以便Java虛擬機能夠正確加載Hadoop所需的本地庫文件。 -
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
:將Hadoop和Java的可執(zhí)行文件路徑添加到PATH
環(huán)境變量中,以便系統(tǒng)可以在任意位置執(zhí)行Hadoop和Java的命令。這里包括Java的bin
和jre/bin
目錄,以及Hadoop的bin
和sbin
目錄。
?五、Hadoop的配置
5.1 Hadoop的單機配置(非分布式)
Hadoop 的單機模式是一種在單個節(jié)點上運行 Hadoop 的模式,是Hadoop 默認模式,用于本地開發(fā)、測試和學習目的。
在單機模式下,Hadoop 不會構建分布式集群,而是在單個節(jié)點上模擬分布式環(huán)境,無需進行額外的配置即可運行 Hadoop。非分布式即單 Java 進程,方便進行調試。
運行Hadoop單機實例
現(xiàn)在我們可以執(zhí)行例子來感受下 Hadoop 的運行。Hadoop 附帶了豐富的例子(運行?./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar
?可以看到所有例子),包括 wordcount、terasort、join、grep 等。
在此我們選擇其中的一個實例來運行即可(grep) ,我們將 input 文件夾中的所有文件作為輸入,篩選當中符合正則表達式 dfs[a-z.]+ 的單詞并統(tǒng)計出現(xiàn)的次數(shù),最后輸出結果到 output 文件夾中。
cd /usr/local/hadoop-3.3.6
mkdir ./input
cp ./etc/hadoop/*.xml ./input # 將配置文件作為輸入文件復制到input文件夾中
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/* # 查看運行結果
注意,Hadoop 默認不會覆蓋結果文件,因此如果想再次運行上面實例會提示出錯,需要先將?./output
?刪除。
rm -r ./output
5.2 Hadoop的偽分布式配置
Hadoop 可以在單節(jié)點上以偽分布式的方式運行,Hadoop 進程以分離的 Java 進程來運行,節(jié)點既作為 NameNode 也作為 DataNode,同時,讀取的是 HDFS 中的文件。
Hadoop 的配置文件位于 /usr/local/hadoop-3.3.6/etc/hadoop/ 中,偽分布式需要修改2個配置文件?core-site.xml?和?hdfs-site.xml?。Hadoop的配置文件是 xml 格式,每個配置以聲明 property 的 name 和 value 的方式來實現(xiàn)。
切換目錄到:cd?/usr/local/hadoop-3.3.6/etc/hadoop/
①修改core-site.xml
原始core-site.xml
修改后的core-site.cml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop-3.3.6/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
參數(shù)說明:
-
hadoop.tmp.dir
:指定了 Hadoop 臨時目錄的路徑。臨時目錄被設置為?/usr/local/hadoop-3.3.6/tmp
。臨時目錄用于存儲 Hadoop 運行時產生的臨時文件,如本地數(shù)據(jù)塊、中間結果等。 -
fs.defaultFS
:指定了默認的文件系統(tǒng)的 URI。文件系統(tǒng) URI 被設置為?hdfs://localhost:9000
,表示使用 Hadoop 分布式文件系統(tǒng)(HDFS)作為默認文件系統(tǒng),并且 HDFS 的 Namenode 服務器運行在本地主機的端口 9000 上。
②修改hdfs-site.xml 文件
原始的hdfs-site.xml文件
修改后的hdfs-site.xml文件
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop-3.3.6/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop-3.3.6/tmp/dfs/data</value>
</property>
</configuration>
Hadoop的配置文件說明?
Hadoop 的運行方式是由配置文件決定的(運行 Hadoop 時會讀取配置文件),因此如果需要從偽分布式模式切換回非分布式模式,需要刪除 core-site.xml 中的配置項。
此外,偽分布式雖然只需要配置 fs.defaultFS 和 dfs.replication 就可以運行(官方教程如此),不過若沒有配置 hadoop.tmp.dir 參數(shù),則默認使用的臨時目錄為 /tmp/hadoo-hadoop,而這個目錄在重啟時有可能被系統(tǒng)清理掉,導致必須重新執(zhí)行 format 才行。所以我們進行了設置,同時也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否則在接下來的步驟中可能會出錯。
③配置完成后,執(zhí)行 NameNode 的格式化
cd /usr/local/hadoop-3.3.6/
./bin/hdfs namenode -format
如果成功則會顯示如下的內容:
如果顯示如下的內容:
?如果在這一步時提示?Error: JAVA_HOME is not set and could not be found.?的錯誤,則說明之前設置 JAVA_HOME 環(huán)境變量那邊就沒設置好,請按教程先設置好 JAVA_HOME 變量,否則后面的過程都是進行不下去的。
如果已經按照前面教程在.bashrc文件中設置了JAVA_HOME,還是出現(xiàn)?Error: JAVA_HOME is not set and could not be found.?的錯誤,那么,請到hadoop的安裝目錄修改配置文件“/usr/local/hadoop-3.3.6/etc/hadoop/hadoop-env.sh”,在里面找到“export JAVA_HOME=${JAVA_HOME}”這行,然后,把它修改成JAVA安裝路徑的具體地址,比如,“export JAVA_HOME=/usr/lib/jvm/default-java”,然后,再次啟動Hadoop。?
④開啟 NameNode 和 DataNode 守護進程
以上的日志中包含一個警告:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 表示無法加載與自己的平臺兼容的本機Hadoop庫。不過,Hadoop將使用內置的Java類來代替。 WARN 提示可以忽略,并不會影響正常使用。
現(xiàn)在,Hadoop分布式文件系統(tǒng)已經成功啟動,可以使用Hadoop進行數(shù)據(jù)處理和分析。
成功啟動后,可以訪問 Web 界面?http://localhost:9870?查看 NameNode 和 Datanode 信息,還可以在線查看 HDFS 中的文件。此處的localhost替換為自己虛擬機系統(tǒng)的地址即可。
運行Hadoop偽分布式實例??
在上面的單機模式實例中,grep 例子讀取的是本地數(shù)據(jù)。而偽分布式讀取的則是 HDFS 上的數(shù)據(jù)。要想使用 HDFS,首先需要在 HDFS 中創(chuàng)建用戶目錄:
①創(chuàng)建用戶目錄
cd /usr/local/hadoop-3.3.6 # 切換目錄
./bin/hdfs dfs -mkdir -p /user/hadoop # 在HDFS中創(chuàng)建用戶目錄
./bin/hdfs dfs -ls /user # 查看是否創(chuàng)建成功
注意: 教材《大數(shù)據(jù)技術原理與應用》的命令是以"./bin/hadoop dfs"開頭的Shell命令方式,實際上有三種shell命令方式。
- hadoop fs
- hadoop dfs
- hdfs dfs
hadoop fs:適用于任何不同的文件系統(tǒng),比如本地文件系統(tǒng)和HDFS文件系統(tǒng)
hadoop dfs:只能適用于HDFS文件系統(tǒng)
hdfs dfs:跟hadoop dfs的命令作用一樣,也只能適用于HDFS文件系統(tǒng)。
?hadoop fs
、hadoop dfs
?和?hdfs dfs
?命令實際上是指相同的命令,用于與 Hadoop 分布式文件系統(tǒng)(HDFS)進行交互。這些命令是 Hadoop 提供的命令行工具,用于管理和操作 HDFS 上的文件和目錄。
在早期版本的 Hadoop 中,hadoop fs
?和?hadoop dfs
?是等效的,都用于執(zhí)行文件系統(tǒng)操作。后來,為了更好地反映操作對象是分布式文件系統(tǒng),官方推薦使用?hdfs dfs
?命令來代替。
所以,hadoop fs
?和?hadoop dfs
?可以視為過時的命令,而?hdfs dfs
?是推薦的用于與 HDFS 交互的命令。
②將 ./etc/hadoop 中的 xml 文件作為輸入文件復制到分布式文件系統(tǒng)中
即將 /usr/local/hadoop-3.3.6/etc/hadoop 復制到分布式文件系統(tǒng)中的 /user/hadoop/input 中。我們使用的是 hadoop 用戶,并且已創(chuàng)建相應的用戶目錄 /user/hadoop ,因此在命令中就可以使用相對路徑如 input,其對應的絕對路徑就是 /user/hadoop/input:
cd /usr/local/hadoop-3.3.6/ # 切換目錄
./bin/hdfs dfs -mkdir input # 創(chuàng)建 "input" 的目錄
./bin/hdfs dfs -put ./etc/hadoop/*.xml input # 復制到目標目錄input
./bin/hdfs dfs -ls input # 列出input中的信息
?偽分布式運行 MapReduce 作業(yè)的方式跟單機模式相同,區(qū)別在于偽分布式讀取的是HDFS中的文件(可以將單機步驟中創(chuàng)建的本地 input 文件夾,輸出結果 output 文件夾都刪掉來驗證這一點)。
③執(zhí)行
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output 'dfs[a-z.]+'
?④查看運行結果?
查看的是位于 HDFS 中的輸出結果
./bin/hdfs dfs -cat output/*
?結果如上所示,注意到剛才因為我們已經更改了配置文件,所以運行結果和在單機實例中的略有不同。
⑤可以將運行結果取回到本地
rm -r ./output # 先刪除本地的 output 文件夾(如果存在)
./bin/hdfs dfs -get output ./output # 將 HDFS 上的 output 文件夾拷貝到本機
cat ./output/*
如果想要再次執(zhí)行相同的命令??./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output 'dfs[a-z.]+' ,就會產生錯誤。
Hadoop 運行程序時,輸出目錄不能存在,否則會提示錯誤 "org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists" ,因此若要再次執(zhí)行,需要執(zhí)行如下命令刪除 output 文件夾:?
./bin/hdfs dfs -rm -r output # 刪除 output 文件夾
運行程序時,輸出目錄不能存在: 運行 Hadoop 程序時,為了防止覆蓋結果,程序指定的輸出目錄(如 output)不能存在,否則會提示錯誤,因此運行前需要先刪除輸出目錄。在實際開發(fā)應用程序時,可考慮在程序中加上如下代碼,能在每次運行時自動刪除輸出目錄,避免繁瑣的命令行操作:
Configuration conf = new Configuration();
Job job = new Job(conf);
/* 刪除輸出目錄 */
Path outputPath = new Path(args[1]);
outputPath.getFileSystem(conf).delete(outputPath, true);
若要關閉 Hadoop,則運行.
./sbin/stop-dfs.sh
注意: 下次啟動 hadoop 時,無需進行 NameNode 的初始化,只需要運行?./sbin/start-dfs.sh
?就可以!
在平時的學習中,我們使用偽分布式就足夠了。如果需要安裝 Hadoop 集群,請查看文章來源:http://www.zghlxwxcb.cn/news/detail-735816.html
參考資料
Hadoop3.3.5安裝教程_單機/偽分布式配置_Hadoop3.3.5/Ubuntu22.04(20.04/18.04/16.04)_廈大數(shù)據(jù)庫實驗室博客 (xmu.edu.cn)文章來源地址http://www.zghlxwxcb.cn/news/detail-735816.html
到了這里,關于Hadoop(01) Hadoop3.3.6安裝教程,單機/偽分布式配置的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!