文章目錄
- 前言
- 一、創建 Ubuntu 用戶
- 二、安裝 Java
- 2.1、查看本地 Java 版本
- 2.2、驗證 Java 在本地的配置情況
- 三、安裝 ssh 服務
- 3.1、安裝 openssh-server
- 3.2、查看 ssh 服務是否啟動
- 四、Hadoop 偽分布式安裝
- 4.1、Hadoop 下載
- 4.2、進入下載安裝包的目錄
- 4.3、Hadoop 解壓
- 4.3.1、解壓命令 tar zxvf 中 zxvf 分別是什么意思?
- 4.3.2、查看 Hadoop 解壓后目錄文件
- 4.3.3、轉移 Hadoop 安裝路徑
- 4.4、檢查 Hadoop 目錄所有者權限
- 4.5、修改 Hadoop 目錄所有者權限
- 4.5、查看 Hadoop 目錄結構
- 4.6、Hadoop 約定目錄結構分析
- 4.7、Hadoop 中的配置文件分析
- 4.8、設置 Hadoop 環境變量
- 五、準備啟動 Hadoop 集群
- 5.1、啟動 Hadoop 集群的準備工作
- 5.2、Hadoop 腳本的用法文檔
- 5.3、查看 Hadoop 的版本信息
- 六、偽分布式操作
- 6.1、修改配置文件
- 6.2、執行 NameNode 初始化
- 6.3、開啟 NameNode 和 DataNode 守護進程
- 6.4、查看所有的 Java 進程
- 七、訪問 Web 界面來查看 Hadoop 的信息
- 八、關閉 Hadoop
- 總結
前言
本文為大數據基礎系列 4:偽分布式 Hadoop 在 Ubuntu 上的安裝流程完整步驟及易錯點分析,以 ubuntu-18.04.3、hadoop-3.2.1-tar.gz 為例。本系列的其他文章可以移步本人大數據專欄進行查看。對于本篇文章,我個人是很有自信的,一篇文章掌握一門課程核心技術點。一、創建 Ubuntu 用戶
關于創建 Ubuntu 用戶的內容這里不做詳細敘述了,需要的同學請參考我之前的文章:Ubuntu 答疑:Ubuntu 添加和刪除用戶具體步驟及進程被占用的解決方式。
二、安裝 Java
對于 Ubuntu 本身,系統可能已經預裝了Java,它的 JDK 版本類型為 openjdk,路徑為"/usr/lib/jvm/default-java",之后配置 JAVA_HOME 環境變量我們可設置為該值。其具體位置如下圖所示:
Apache Hadoop 的 2.7 版和更高版本需要 Java 7。它是在 OpenJDK 和 Oracle(HotSpot)的 JDK / JRE 上構建和測試的。早期版本(2.6 和更早版本)支持 Java 6。
2.1、查看本地 Java 版本
我們輸入 java -version
查看本地 jdk 版本號,沒安裝的話輸入同樣指令,可以根據提示下載需要版本,具體如下圖所示:
2.2、驗證 Java 在本地的配置情況
輸入 javac
,顯示命令參數列表,說明配置成功,不顯示請根據提示安裝,具體如下圖所示:
三、安裝 ssh 服務
需要具體安裝 SSH 無密碼登陸參考的同學可以看我之前的文章: ssh 配置:在 Linux 中 ssh 配置無密碼登陸完整步驟以及易錯點分析。
對于 Hadoop 的偽分布式和全分布式而言,Hadoop 的名稱節點(NameNode)需要啟動集群中所有機器的 Hadoop 的守護進程,這個過程可以通過 SSH 登陸來實現。Hadoop 并沒有提供 SSH 輸入密碼登陸的形式,因此為了能夠順利登陸每臺機器,需要將所有機器配置為名稱節點可以無密碼登陸的形式。
3.1、安裝 openssh-server
安裝 openssh-server,在終端輸入如下代碼:
sudo apt install openssh-server
本人已經安裝,具體如下圖所示:
3.2、查看 ssh 服務是否啟動
輸入如下代碼:
sudo ps -e|grep ssh
回車,有 sshd,說明 ssh 服務已經啟動,具體如下圖所示:
如果沒有啟動,輸入sudo service ssh start
,回車,ssh 服務就會啟動。
四、Hadoop 偽分布式安裝
偽分布式安裝是指在一臺機器上模擬一個小的集群,但是集群只有一個節點。
4.1、Hadoop 下載
在 Linux 系統/Ubuntu 上打開自帶火狐瀏覽器,輸入地址 https://hadoop.apache.org/,打開 Hadoop 的頁面,點擊 Download 進行下載,具體如下圖所示:
我們選擇所需版本的 binary 鏈接,進入,具體如下圖所示:
點擊第一個鏡像鏈接,進入下載頁面,具體如下圖所示:
4.2、進入下載安裝包的目錄
cd /home/bailu/下載
這里根據自己目錄輸入,我的如下圖所示:
4.3、Hadoop 解壓
對下載的 Hadoop 壓縮包執行解壓命令如下:
sudo tar -zxvf hadoop-3.2.1.tar.gz
4.3.1、解壓命令 tar zxvf 中 zxvf 分別是什么意思?
- x : 從 tar 包中把文件提取出來。
- z : 表示 tar 包是被 gzip 壓縮過的,所以解壓時需要用 gunzip 解壓。
- v : 顯示詳細信息。
- f xxx.tar.gz : 指定被處理的文件是 xxx.tar.gz。
4.3.2、查看 Hadoop 解壓后目錄文件
輸入 ll
查看下載目錄下的文件和目錄,會看到多了一個目錄 hadoop-3.2.1,這是安裝包解壓后的目錄,具體如下圖所示:
4.3.3、轉移 Hadoop 安裝路徑
在下載目錄下輸入如下命令,將 hadoop-3.2.1 目錄轉移到 usr/local/hadoop 中:
sudo mv hadoop-3.2.1 /usr/local/hadoop
目標文件夾如下圖所示:
4.4、檢查 Hadoop 目錄所有者權限
我們進入 Hadoop目錄,可能會發現文件帶鎖,輸入 ll
查看所有者不是本人,具體如下圖所示:
4.5、修改 Hadoop 目錄所有者權限
這時我們就需要將 Hadoop 目錄的所有者更改,根目錄輸入如下命令:
sudo chown bailu:bailu -R /usr/local/hadoop
具體如下圖所示:
修改之后我們可以看到所有者已經更改,具體如下圖所示:
4.5、查看 Hadoop 目錄結構
根目錄輸入 cd /usr/local/hadoop
進入 Hadoop 目錄,輸入 ll
查看 Hadoop 下目錄結構,具體如下圖所示:
4.6、Hadoop 約定目錄結構分析
- bin:Hadoop 最基本的管理腳本和使用腳本所在目錄,這些腳本是 sbin 目錄下管理腳本的基礎實現,用戶可以直接使用這些腳本管理和使用 Hadoop。
- etc:Hadoop 配置文件所在目錄,包括 core-site.xml,hdfs-site.xml,mapred-site.xml 等從 hadoop 1.0 繼承而來的配置文件和 yarn-site.xml 等 hadoop 2.0 新增的配置文件。
- include:對外提供的編程庫頭文件(具體動態庫和靜態庫在 lib 目錄中),這些頭文件均是用 c++ 定義的,通常用于 c++ 程序訪問 hdfs 或者編寫 mapreduce 程序。
- lib:該目錄包含了 Hadoop 對外提供的的編程動態庫和靜態庫,與 include 目錄中的頭文件結合使用。
- libexec:各個服務對應的 shell 配置文件所在目錄,可用于配置日志輸出目錄,啟動參數(比如 JVM 參數)等基本信息。
- sbin:Hadoop 管理腳本所在目錄,主要包含 HDFS 和 YARN 中各類服務的啟動/關閉腳本。
- share:Hadoop 各個模塊編譯后的 jar 包所在目錄。
4.7、Hadoop 中的配置文件分析
文件名稱 | 格式 | 描述 |
---|---|---|
hadoop-env.sh | Bash 腳本 | 記錄配置 Hadoop 運行所需的環境變量,以運行 Hadoop |
core-site.xml | Hadoop 配置 XML | Hadoop core 的配置項,如 HDFS 和 MapReduce 常用的 I/O 設置等 |
hdfs-site.xml | Hadoop 配置 XML | Hadoop 守護進程的配置項,包括 NameNode、Secondary NameNode 和 DataNode 等 |
mapred-site.xml | Hadoop 配置 XML | MapReduce 守護進程的配置項,包括 JobTracker 和 TaskTracker |
masters | 純文本 | 運行 SecondaryNameNode 的機器列表(每行一個) |
slaves | 純文本 | 運行 DataNode 和 TaskTracker 的機器列表(每行一個) |
hadoop-metrics.properties | Java 屬性 | 控制 metrics 在 Hadoop 上如何發布的屬性 |
4.8、設置 Hadoop 環境變量
接下來我們需要設置 Hadoop 環境變量,編輯 ~/.bashrc,任意目錄下輸入如下代碼:
sudo gedit ~/.bashrc
具體如下圖所示:
讓環境變量立即生效,輸入命令: source ~/.bashrc
,具體如下圖所示:
五、準備啟動 Hadoop 集群
5.1、啟動 Hadoop 集群的準備工作
在任意目錄下輸入如下代碼:
sudo gedit /usr/local/hadoop/hadoop-3.2.1/etc/hadoop/hadoop-env.sh
編輯 etc/hadoop/hadoop-env.sh 以定義一些參數,將原文本文件中的 JAVA_HOME 設置成真實的 JDK 地址,具體如下所示:
#設置為 Java 安裝的根目錄export JAVA_HOME =/usr/java/latest
5.2、Hadoop 腳本的用法文檔
嘗試以下命令:Hadoop 根目錄下輸入 bin/hadoop
這將顯示 Hadoop 腳本的用法文檔,具體如下圖所示:
5.3、查看 Hadoop 的版本信息
這時我們可以查看 Hadoop 的版本信息,輸入如下命令:
./bin/hadoop version
具體如下圖所示:
六、偽分布式操作
6.1、修改配置文件
對于偽分布式,僅需修改 core-site.xml、hdfs-site.xml 文件,詳細修改如下。
對于 etc/hadoop/core-site.xml,輸入命令如下:
sudo gedit /usr/local/hadoop/hadoop-3.2.1/etc/hadoop/core-site.xml
修改之后如下圖所示:
說明:
<name>
標簽設置配置項的名字,<value>
設置配置項的值。- 對于 core-site.xml 文件,只需在其中指定 HDFS 的地址和端口號,端口號按照官方文檔設置為 9000 即可。
對于 etc/hadoop/hdfs-site.xml,輸入命令如下:
sudo gedit /usr/local/hadoop/hadoop-3.2.1/etc/hadoop/hdfs-site.xml
修改之后如下圖所示:
說明:
- 對于 hdfs-site.xml 文件,我們設置 replication 值為 1,這也是 Hadoop 運行的默認最小值,它限制了 HDFS 文件系統中同一份數據的副本數量。
- 這里采用偽分布式,在集群中只有一個節點,因此副本數量 replication 的值也只能設置為 1。
6.2、執行 NameNode 初始化
在配置完成后,首先需要初始化文件系統。由于 Hadoop 的很多工作是在自帶的 HDFS 文件系統上完成的,因此需要將文件系統初始化之后才能進一步執行計算任務。
在 Hadoop 根目錄執行 NameNode 初始化的命令如下:
./bin/hdfs namenode -format
具體如下圖所示:
遇到這一步,繼續執行,具體如下圖所示:
成功的話,會看到"successfully formatted"和"Exitting with status"的提示,若為"Exitting with status 1"則是出錯。
如果出現啟動錯誤,則可以在日志中查看錯誤原因,具體如下圖所示:
對于控制臺報錯請注意:
- 每一次的啟動日志都是追加在日志文件之后,所以對于錯誤要拉到最后面看,對比下記錄的時間就知道了。
- 一般出錯的提示在最后面,通常是寫著 Fatal、Error、Warning 或者 Java Exception 的地方。
6.3、開啟 NameNode 和 DataNode 守護進程
輸入如下命令:
./sbin/start-dfs.sh
具體如下圖所示:
6.4、查看所有的 Java 進程
運行之后,輸入 jps 指令可以查看所有的 Java 進程。在正常啟動時,可以得到如下類似結果,具體如下圖所示:
說明:jps(Java Virtual Machine Process Status Tool)是 java 提供的一個顯示當前所有 Java 進程 pid 的命令,適合在 linux/unix 平臺上簡單察看當前 Java 進程的一些簡單情況。很多人都是用過 unix 系統里的 ps 命令,這個命令主要是用來顯示當前系統的進程情況,有哪些進程以及進程 id。
jps 也是一樣,它的作用是顯示當前系統的 Java 進程情況及進程 id。我們可以通過它來查看我們到底啟動了幾個 Java 進程(因為每一個 Java 程序都會獨占一個 Java 虛擬機實例)。
七、訪問 Web 界面來查看 Hadoop 的信息
此時,可以通過 Linux 本地瀏覽器訪問 Web 界面(http://localhost:9870)來查看 Hadoop 的信息,具體如下圖所示:
如果存在 DataNode 啟動異常時或者沒有啟動的問題,請查看:Apache Hadoop 答疑:解決 Apache Hadoop 啟動時 DataNode 啟動異常的問題。具體如下圖所示:
八、關閉 Hadoop
若要關閉 Hadoop,則在 Hadoop 根目錄下運行如下命令:
./sbin/stop-dfs.sh
具體如下圖所示:
總結
本文是本專欄文章的第四篇,也是做重要的一篇,后期的 Hadoop 生態體系均是圍繞本文展開,同時補充了一些 linux 系統操作的相關知識,對于鞏固 linux 系統也是有一定的幫助。簡而言之,如果你切實掌握了本文的內容,那么你后期學大數據的其他組成部分也就輕車熟路了。我是白鹿,一個不懈奮斗的程序猿。望本文能對你有所裨益,歡迎大家的一鍵三連!若有其他問題、建議或者補充可以留言在文章下方,感謝大家的支持!