運用虛擬機搭建本地Hadoop環境
實驗環境
- 本機操作系統:Windows 10
- 虛擬機軟體:VMware Workstation Pro 14
- 虛擬機系統:Ubuntu 16.04
準備工作
- 安裝好虛擬機軟體 VMware。
- 在虛擬機軟體中將建立一個虛擬機,運行 Ubuntu 操作系統。
建房子當然需要先打好地基,同樣配置我們的 Hadoop 環境也是。最基本的當然是虛擬機軟體的安裝,我這裡使用的是 VMware Workstation Pro 14。緊接著自然而然的就是安裝 Linux 操作系統,我這裡使用的是 Ubuntu 16.04 LTS,可以直接使用 VMware 提供的建議安裝一鍵安裝就行了。另外,建立安裝 Ubuntu 的時候內存最好分配 2G 及以上,否則會比較卡。
在完成了操作系統的安裝之後就要安裝基本的Hadoop語言環境了。由於Hadoop是一個基於Java開發的一個大數據平台,自然少不了Java運行環境的安裝了,當然使用hadoop不一定需要java語言,hadoop的開發支持很多種語言。
JDK安裝
Java的安裝非常簡單,我們直接從 Oracle 的官網 隨便選擇一個 JDK 版本就行,我這裡選擇的 8u171,選擇 Ubuntu 對應的 .tar.gz 後綴的版本下載即可。
下載完成中,解壓對相應的地址下。我這裡打算把 JDK 安裝到用戶主目錄下,所以就將 extract 後的結果移動到這個地址下面:
mv jdk1.8.0_171/ ~/java
這樣,我解壓後的 JDK 地址就是 ~/java 了。
然後,我就要設置 JDK 的環境變數,在 /etc/profile 最後加上:
export JAVA_HOME=/home/hadoop/javaexport JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=${JAVA_HOME}/bin:$PATH
使用 source /etc/profile 命令來執行修改。
最終通過 java -version 來驗證我們的 JDK 環境是否設置正確,如果正確應像下圖一樣顯示 JDK 的版本信息:
Hadoop安裝
安裝 JDK 的目的當然是為了安裝我們的 Hadoop 。所以安裝完 JDK 就要安裝 Hadoop 了。
Hadoop 下載地址:http://mirrors.hust.edu.cn/apache/hadoop/common/
我這裡下載的是 Hadoop 2.7.6 版本。我為什麼不用 3.0 版本呢?因為 3.0 以後版本目前的網路資源太少,我怕踩坑,而且老師讓我們用的是 2.0 版本的。QAQ
其安裝步驟和 JDK 的安裝是一樣的,下載 .tag.gz 版本的壓縮包,加壓後,我們提取到用戶主目錄下即可。
mv hadoop-2.7.6/ ~/hadoop
同樣在 /etc/profile 中配置其環境變數:
export HADOOP_INSTALL=/home/hadoop/hadoopexport PATH=${HADOOP_INSTALL}/bin:${HADOOP_INSTALL}/sbin:$PATH
接著通過使用 source 命令使其修改生效。
然後可以通過 hadoop version 來進行查看。
能夠正確顯示版本信息,說明安裝正確了。
Hadoop配置之運行賬戶創建
首先,我們需要創建一個用戶組,並添加一個管理員用戶到這個用戶組中。
這裡,我們建立一個名叫 hadoop 的用戶組,然後設定一個用戶同樣叫做 hadoop。 1、添加 hadoop用戶組:sudo groupadd hadoop
2 、添加名叫 hadoop 的用戶,並添加到 hadoop 組中。
sudo useradd -s /bin/bash -d /home/hadoop/ -m hadoop -g hadoop
3、賦予 hadoop 用戶管理員許可權
sudo adduser hadoop sudo
4、最後,切換登陸帳戶到剛才設定的 hadoop 賬戶中:
su hadoop
Hadoop配置之偽分散式配置
我們主要有以下這麼5個文件需要進行配置:
主要有這4個文件需要修改:
***/etc/hadoop/hadoop-env.sh***/etc/hadoop/core-site.xml***/etc/hadoop/hdfs-site.xml***/etc/hadoop/mapred-site.xml***/etc/hadoop/slaves
這裡,我用 *** 來代替了 hadoop 文件的地址,在我的設置中 *** 表示的是 /home/hadoop 。
首先需要修改 hadoop-env.sh,添加java安裝的地址,保存退出即可。
其次,需要修改的是 core-site.cml ,修改如下:
<configuration> <property> <name>fs.default.name</name> <value>hdfs://master:9000</value> <final>true</final> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/hadoop/tmp/</value> <description>A base for other temporary directories</description> </property></configuration>
在這裡,第一個 fs.default.name 設置 master 機為 namenode 。第二個 hadoop.tmp.dir配置 Hadoop 的一個臨時目錄,用來存放每次運行的作業的信息。
修改後的效果如下,只有在 <configuration>
和 </configuration>
之間進行修改即可,後面的修改也是一樣的。
然後,就是 hdfs-site.xml 的修改:
<configuration> <property> <name>dfs.name.dir</name> <value>/home/hadoop/hadoop/name</value> <final>true</final> </property> <property> <name>dfs.data.dir</name> <value>/home/hadoop/hadoop/data</value> <final>true</final> </property> <property> <name>dfs.replication</name> <value>2</value> <final>true</final> </property> <property> <name>dfs.permissions</name> <value>false</value> </property></configuration>
其中,dfs.name.dir 是 namenode 存儲永久性的元數據的目錄列表。這個目錄會創建在master機上。dfs.data.dir 是 datanode 存放數據塊的目錄列表,這個目錄在 slave1 和slave2 機都會創建。 dfs.replication 設置文件副本數,這裡兩個 datanode ,所以設置副本數為2。
接下來需要修改的是 mapred-site.xml :
<configuration> <property> <name>mapred.job.tracker</name> <value>master:9001</value> </property></configuration>
這裡設置的是運行 jobtracker 的伺服器主機名和埠,也就是作業將在 master 主機的9001埠執行。
最後需要修改的就是 slaves 文件:
這裡將兩台從主機的主機名node1和node2加進去就可以了。
關於主機的名的修改和設定,我之後會講,這裡你需要做的就是先取號兩個 datanode 從機的名字就行了。
創建從機
在對主機完成 Hadoop 的基本配置之後,我們就要創建兩個 datanode 從機了,創建的方式非常簡單,就是只用使用 VMware 的克隆功能就行了。
克隆完成後,我們需要對三個機子的主機名都進行修改,修改的方式很簡單,指令如下:
vim /etc/hostname
在裡面設定你的主機名即可。
比如,在這裡我設定的我的主機名是 master ,兩個從機名分別為 slave1 和 slave2。
SSH配置及免密登陸
在進行SSH操作前,首先要對三台虛擬機的IP地址進行記錄,可以通過 ifconfig 指令來進行查詢,其中的 inet addr就是這台虛擬機的ip地址。
同樣記錄,兩台從機的IP地址。然後對三台主機的 hosts 文件都進行修改:
vim /etc/hosts
在這裡添加三台主機的IP地址和主機名就行了。
要記住的是,要在三台主機下都進行修改。
然後進行ssh的配置,但要先確保三台機器都裝了ssh。
輸入以下命令查看安裝的ssh:
dpkg --list|grep ssh
如果已經安裝了就會顯示這樣的6個條目:
如果沒有安裝 ssh 就可以通過如下指令進行安裝:
sudo apt-get install openssh-server
安裝完畢之後開始配置 ssh。
1、首先,我們需要在 master 主機上輸入以下命令,生成master機的一對公鑰和私鑰:
ssh-keygen -t rsa -P -f ~/.ssh/id_rsa
以下命令進入認證目錄可以看到, id\_rsa 和 id\_rsa.pub 這兩個文件,就是我們剛剛生成的公鑰和私鑰。
然後,下面的命令將公鑰加入到已認證的 key 中:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
再次進入生成目錄,可以看到多出authorized_keys這個文件。由於我之前已經操作過了,所以我前面的截圖中已經包含了該文件了。
然後輸入ssh localhost
登錄本機命令,第一次提示輸入密碼,輸入exit
退出,再次輸入ssh localhost
不用輸入密碼就可以登錄本機成功,則本機ssh免密碼登錄已經成功。
2 、之後,我們就要在兩個從機上進行操作了。首先是 slave1 這個從機。
將 master 主機上的 is_rsa.pub複製到slave1 主機上,命名為 slave1_rsa.pub。slave2主機進行同樣的操作。
scp hadoop@master:~/.ssh/id_rsa.pub ~/.ssh/slave1_rsa.pub
同樣需要將該公鑰加入到已認證的 key 中:
cat ~/.ssh/slave1_rsa.pub >> ~/.ssh/authorized_keys
之後,我們需要回到 master 主機進行驗證。同樣第一次需要密碼,之後 exit 退出,再 ssh slave1 就不需要密碼登錄成功,說明 ssh 免密碼登錄配置成功!
要記住的是,要對 slave2 同樣進行該操作,不要遺忘了 slave2 。
格式化及啟動集群
接下來需要格式化 namenode ,注意只需要在 master 主機上進行格式化。格式化命令如下:
hdfs namenode -format
沒有看到 ERROR 應該就沒有問題了。
接下來啟動集群:
start-dfs.sh
啟動完畢,使用 jps 命令檢查下啟動情況: master 主機看到四個開啟的進程,slave1 和slave2 看到三個開啟的進程表示啟動成功。
然後在瀏覽器中輸入 http://localhost:50070,通過 Web UI 查看相關信息,截圖如下,可以看到我已經連接了從機的2個 datanode:
此時的存儲空間也已經變成三台設備的空閑存儲空間之和:
運行 WordCount 示例
在我們的 hadoop 安裝目錄下有一個 LINCENSE.txt 文件,我們可以之間用這個文件作為我們的測試用例。
就在我們的 hadoop 安裝目錄下,輸入命令來創建一個 input 目錄:
hadoop fs -mkdir /input
然後將 LICENSE.txt 放到 input 目錄下:
hadoop fs -put LICENSE.txt /input
可以通過命令看到 license.txt 已經存在 input 目錄下了:
hadoop fs -ls /input
如圖:
接下來只需要將 /input 通過 hadoop 自帶示常式序 wordcount 計算出其中各字母出現的次數便可,命令為:
hadoop jar /home/hadoop/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount /input /output
這部分不同的 hadoop 版本和 hadoop 安裝目錄命令可能不一樣。
然後我們可以通過$hadoop fs -ls /
命令看到 HDFS 系統下多了個/output 目錄。在 /output 目錄下有兩個文件:
這說明已經運行成功了,直接打開 part-r-00000 就可以查看結果了:
hadoop fs -cat /output/part-r-00000
結果如下:
推薦閱讀:
- hadoop學習通過虛擬機安裝hadoop完全分散式集群-大數據學習-about雲開發-活到老 學到老
- Hadoop分散式集群搭建hadoop2.6+Ubuntu16.04 - Easen.Cai - 博客園
- 第一篇:Ubuntu下安裝Hadoop(2.7.3)詳解 - CSDN博客
- Ubuntu16.04+hadoop2.7.3環境搭建 - dark_saber - 博客園
- hadoop自帶示例wordcount - CSDN博客
推薦閱讀:
※如何連續執行兩段MapReduce?
※Hadoop搭建
※五分鐘深入 Hadoop 內核
※《Machine Learning:Clustering & Retrieval》課程第3章KMeans之並行化
※大數據SRE的總結(9)-- 漫談hadoop安全治理-上