1 下載程序包:
http://hadoop.apache.org/releases.html
我們使用的是hadoop-2.7.1.tar.gz
2 安裝hadoop
(1) 將hadoop-2.7.1.tar.gz拖拽到ubuntu桌面
(2) mkdir /usr/local/hadoop #在/usr/local/中創建hadoop目錄用來存放程序文件
(3) cp -rf Desktop/hadoop-2.7.1.tar.gz /usr/local/hadoop/ #將hadoop的壓縮文件拷貝到(2)中新建的/usr/local/hadoop目錄
(4) 進入/user/local/Hadoop 解壓剛纔拷貝過來的壓縮包,查看解壓的壓縮包,並刪除原壓縮包
cd /usr/local/Hadoop
tar –zxf Hadoop-2.7.1.tar.gz
3 配置hadoop爲單機模式
(1) 配置java信息
vim /usr/local/hadoop/hadoop-2.7.1/etc/hadoop/hadoop-env.sh
在文件hadoop-env.sh的最後一行添加如下信息:
exportJAVA_HOME=/usr/lib/java/jdk1.7.0_80
使修改的配置信息立即生效:
source /usr/local/hadoop/hadoop-2.7.1/etc/hadoop/hadoop-env.sh
(2) 爲了方便使用hadoop命令的方便,我們將hadoop相關命令添加進/etc/profile
vim /etc/profile
添加以下信息(注意分割符是“:”而不是“;”):
exportHADOOP_INSTALL=/usr/local/hadoop/hadoop-2.7.1
exportHADOOP_CONF_DIR=${HADOOP_INSTALL}/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_INSTALL}/lib/native
exportHADOOP_OPTS="-Djava.library.path=${HADOOP_INSTALL}/lib"
exportPATH=${JAVA_HOME}/bin:${HADOOP_INSTALL}/bin:${HADOOP_INSTALL}/sbin:$PATH
(3) source /etc/profile #使修改的配置立即生效
(4) 測試hadoop是否安裝正確
Hadoop version
4 在單機模式下執行wordcount程序
(1) 準備數據,我們就統計下hadoop的etc目錄下xml文件中相同的單詞數量
在/usr/local/hadoop目錄建立input用來存入輸入數據
將/usr/local/hadoop/hadoop-2.1.1/etc/hadoop/下的xml文件都拷貝到input中
(2) 運行hadoop自帶的wordcount程序來統計單詞(注輸出文件不能存在,這樣設計的目的防止,原始磁盤數據被覆蓋)
hadoop jar /usr/local/hadoop/hadoop-2.7.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jarwordcount input output
執行結束:
(3) 查看運行結果:
結果:
單機模式的構建、配置和運行成功
5 配置hadoop爲僞分佈式
(1) 僞分佈式需要配置的信息
A. Hadoop的核心配置文件core-site.xml,主要配置HDFS的地址和端口
B. Hadoop中hdfs的配置文件hdfs-site.xml,主要配置replication
(2) 配置core-site.xml
先在/usr/local/hadoop/hadoop-2.7.1下建立tmp,hdfs,hdfs/data,hdfs/name四個目錄
先備份core-site.xml爲core-site.xml.bak
配置文件core-site.xml,添加如下內容
(3) 配置hdfs-site.xml
先備份hdfs-site.xml爲hdfs-site.xml.bak
在配置文件添加如下內容:
(4) 重啓虛擬機
(5) 把namenode進行格式化
Hadoop namenode –format
格式化完成(格式化完成後namenode自動關閉):
(6) 啓動hadoop
start-dfs.sh
(7) 使用jps查看
(8) 驗證
http://localhost:50070/
我們的僞分佈式搭建成功.
6 在僞分佈式上運行wordcount程序
(1) 在fs中創建input目錄
hadoop fs –mkdir input
(2) 將我們的數據放在fs上
hadoop fs -copyFromLocal/usr/local/hadoop/input/* /input
在網頁中查看複製到fs上的文件
(3) 運行wordcount程序
hadoop jar/usr/local/hadoop/hadoop-2.7.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jarwordcount /input output
結束:
可以在網頁上查到fs上生成了一個文件:
(4) 查看執行結果
hadoop fs -cat/user/root/output/part-r-00000
7 配置YARN
配置mapred-site.xml 和yarn-site.xml中
(1) 配置mapred-site.xml
因爲已經有了mapred-site.xml.template作爲備份文件,因此我們在建立一個內容和mapred-sit.xml.template一樣的mapred-site.xml
在配置文件中添加以下內容,將mapreduce執行過程中的資源控制權交給YARN:
(2) 配置yarn-site.xml
先備份yarn的配置文件
copy –rf yarn-site.xml yarn-site.xml.bak
在配置文件中添加以下信息:
(3) 啓動yarn 否則mapreduce在執行過程中找不到資源
start-yarn.sh
可以發現多了ResourceManager資源管理器的進程和NodeManager的進程
(4) 驗證yarn
在瀏覽器中輸入:http://localhost:8088/
成功配置yarn將會出現如下信息
8 配置YARN後執行wordcount程序
執行過程:
執行結束:
9 配置hadoop爲完全分佈式
9.1 準備操作系統
(1) 先移除虛擬機中的鏡像
(2) 查看我們安裝好的僞分佈式Ubuntu文件大小,實際使用大概5G,默認分配了30G
我們的分佈式選擇三臺系統,這裏我們在虛擬機中建立三個Ubuntu系統(有條件的話還是放在真實物理機器上吧),我們需要90G來存儲這三個Ubuntu系統
(3) 在本地操作系統複製三份鏡像,根據磁盤的大小將鏡像放在同一個盤符或者不同的盤符
我們在E盤已經有個鏡像文件,我們把E盤的鏡像文件給F盤複製一份,G盤複製一份
並且把E盤的鏡像命名爲master作爲namenode和datanode節點,把F盤和G盤的鏡像分別命名爲slave1和slave2分別作爲datanode節點
(4) 在虛擬機中加載系統
打開虛擬機->文件->打開
隨後我們可以看到在虛擬機中加載到了一臺Ubuntu系統
我們把E盤鏡像在虛擬機中的名字改爲:master
我們在用同樣的方法將f盤和G盤的鏡像加載進虛擬機分別命名爲slave1和slave2
啓動每臺虛擬機:
開機時選擇我已複製該虛擬機。
9.2 前期準備
(1) 修改主機名
分別將E,F,G盤對應的主機名改爲master,slave1,slave2,因爲E盤的主機名已經是master,現在我們就用F盤爲例修改主機名:
修改前:
vim /etc/hostname #打開文件後我們發現默認名稱爲master
修改爲:slave1並保存,並且重啓.
同樣修改G盤的主機名爲slave2
(2) 配置主機名和ip的對應的關係
查看本機ip地址:
Ifconfig
分別查看master,slave1,slave2的地址
master: 192.168.189.130
slave1: 192.168.189.131
slave2: 192.168.189.132
配置每臺機器的/etc/hosts文件如下:
在每臺機器上ping以下每個ip看是否通
9.3 使用ssh無密碼互相訪問
A. ssh 公鑰私鑰相同,當然可以直接訪問,現在我們就是這種方式
B. 每臺機器的公鑰和私鑰都不同,下面我們主要講這種方法:
a) 我們先刪除每臺機器原公鑰私鑰信息
rm –rf ~/.ssh/*
b) 再在每臺機器上分別生成公鑰信息和私鑰信息
公鑰和私鑰存放的路徑爲~/.ssh/下
在將自己的公鑰存放在authorized_keys中(重要)
c) 把slave1和slave2的公鑰id_rsa.pub分別重命名爲id_rsa.pubs1,id_rsa.pubs2並且傳給master 在拷貝過程需要master的密碼
Slave2
在master上查看會有如下文件,證明成功將文件傳送過來
d) 在master上合併公鑰
e) 將合併後的公鑰文authorized_keys件發送給slave1和slave2
f) 互相測試用ssh無密碼登錄
9.4 修改配置文件
(1) 修改所有機器core-site.xml和mapred-site.xml中的localhost爲master
我們先修改master機器
(2) 修改所有機器hdfs-site.xml中的df.replication的value值爲3
我們先修改master機器