標籤:

運用虛擬機搭建本地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 下載地址:mirrors.hust.edu.cn/apa

我這裡下載的是 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 看到三個開啟的進程表示啟動成功。

然後在瀏覽器中輸入 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 &amp; Retrieval》課程第3章KMeans之並行化
大數據SRE的總結(9)-- 漫談hadoop安全治理-上

TAG:Hadoop | Linux |