做業要求:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3223html
本文是基於已經安裝好的ubuntu環境上搭建僞分佈式hadoop,在virtualbox安裝ubuntu能夠參考小編的java
」virtualbox安裝ubuntu16.04 LTS及其配置「node
-默認狀況下,Hadoop即處於該模式,用於開發和調式。linux
-不對配置文件進行修改。
-使用本地文件系統,而不是分佈式文件系統。
-Hadoop不會啓動NameNode、DataNode、JobTracker、TaskTracker等守護進程,Map()和Reduce()任務做爲同一個進程的不一樣部分來執行的。
-用於對MapReduce程序的邏輯進行調試,確保程序的正確。apache
-Hadoop的守護進程運行在本機機器,模擬一個小規模的集羣 ubuntu
-在一臺主機模擬多主機。
-Hadoop啓動NameNode、DataNode、JobTracker、TaskTracker這些守護進程都在同一臺機器上運行,是相互獨立的Java進程。
-在這種模式下,Hadoop使用的是分佈式文件系統,各個做業也是由JobTraker服務,來管理的獨立進程。在單機模式之上增長了代碼調試功能,容許檢查內存使用狀況,HDFS輸入輸出,vim
以及其餘的守護進程交互。相似於徹底分佈式模式,所以,這種模式經常使用來開發測試Hadoop程序的執行是否正確。
-修改3個配置文件:core-site.xml(Hadoop集羣的特性,做用於所有進程及客戶端)、hdfs-site.xml(配置HDFS集羣的工做屬性)、mapred-site.xml(配置MapReduce集羣的屬性)
-格式化文件系統服務器
-Hadoop的守護進程運行在一個集羣上 網絡
-Hadoop的守護進程運行在由多臺主機搭建的集羣上,是真正的生產環境。
-在全部的主機上安裝JDK和Hadoop,組成相互連通的網絡。
-在主機間設置SSH免密碼登陸,把各從節點生成的公鑰添加到主節點的信任列表。
-修改3個配置文件:core-site.xml、hdfs-site.xml、mapred-site.xml,指定NameNode和JobTraker的位置和端口,設置文件的副本等參數
-格式化文件系統oracle
在終端上輸入ifconfig -a命令查看網卡名,個人主機有三個網絡接口,分別是enp0s3(橋接網卡),enp0s8(NAT),lo(動態獲取ip)
# ifconfig -a
對/etc/network/interfaces文件進行編輯,如下是在終端上執行的命令:
sudo vim /etc/network/interfaces
上圖是ubuntu的/etc/network/interfaces文件默認的內容,默認動態獲取方法的配置。
可是在業務上須要給ubuntu主機配置靜態ip網絡,在這裏我只對enp0s3進行修改,如下是靜態分配的配置方法(根據本身的需求改):
auto enp0s3 iface enp0s3 inet static address 192.168.87.138 netmask 255.255.255.0 gateway 192.168.87.254
接下來須要添加域名服務器,編輯/etc/resolv.conf文件,添加域名服務器,在這裏我選擇了全球通用的DNS域名服務器,國內用戶推薦使用,速度較快!
sudo vim /etc/resolv.conf
nameserver 114.114.114.114
或者
nameserver 8.8.8.8
配置已經完成了,接下來須要重啓網絡,網絡重啓有多種方法,在這裏只列出兩種方法,二選一便可。
1. 重啓網卡
/etc/init.d/networking restart
2. 這兩條命令是重啓某個網絡接口,一個系統可能有多個網絡接口
# ifdown enp0s3
# ifup enp0s3
檢查網絡配置參數是否正確:
# ifconfig
檢查是否能ping通:
ping www.qq.com
已成功ping通,靜態網絡已配置好了。
查看主機名:
# hostname
修改/etc/hosts文件:
# vim /etc/hosts
/etc/hosts文件默認是上圖所示,修改文件爲如下內容,註釋127.0.1.1,添加主機靜態地址與主機名:
單機配置ssh免密登錄的話,輸入如下的命令便可:
提示輸入信息,一直回車按默認便可。
# ssh-keygen -t rsa # cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # chmod 600 ~/.ssh/authorized_keys
完成以後,以 root 用戶登陸,修改 ssh 配置文件:
vim /etc/ssh/sshd_config
把文件中的下面幾條信息的註釋去掉,如圖所示:
RSAAuthentication yes # 啓用RSA認證 PubkeyAuthentication yes # 啓用公鑰私鑰配對認證方式 AuthorizedKeysFile .ssh/authorized_keys #公鑰文件路徑(和上面生成的文件同)
而後重啓服務:
# service sshd restart
輸入ssh localhost驗證出現以下界面,中間不須要輸入密碼,即配置完成。
# ssh localhost
2. 解壓tar包,指定解壓/usr/local/目錄
# tar -zxvf jdk-8u211-linux-x64.tar.gz -C /usr/local/
3. 配置環境變量
# vim /etc/profile
而後添加如下配置在文件尾:
export JAVA_HOME=/usr/local/jdk1.8.0_211 export PATH=$PATH:$JAVA_HOME/bin export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
保存退出便可。
4. 測試jdk配置成功否
刷新環境變量:
# source /etc/profile
輸入java -verion,如配置成功,有下圖的java版本在終端上顯示:
到此,hadoop須要的系統環境已經搭建完畢了,接下來開始搭建僞分佈式hadoop集羣~
從官網下載hadoop3.1.2,解壓hadoop安裝包到/usr/local/目錄下:
# tar -zxvf hadoop-3.1.2.tar.gz -C /usr/local
在環境變量配置hadoop:
# vim /etc/profile
而後添加如下配置在文件尾:
export HADOOP_HOME=/usr/local/hadoop-3.1.2 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HADOOP_HDFS_HOME=/usr/local/hadoop-3.1.2 export HADOOP_CONF_DIR=/usr/local/hadoop-3.1.2/etc/hadoop
使用source /etc/profile刷新環境變量後,用hadoop version命令測試是否安裝成功:
# source /etc/profile # hadoop version
hadoop的配置文件統一放在$HADOOP_HOME/etc/hadoop目錄下,在這裏咱們只須要修改5個文件,分別是hadoop-env.sh,core-site.xml,mapred-site.xml,yarn-site.xml,yarn-site.xml。
1. hadoop-env.sh
在文件中修改以下:
export JAVA_HOME=/usr/local/jdk1.8.0_211 export HADOOP_HOME=/usr/local/hadoop-3.1.2
2. core-site.xml
<configuration>
<property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000/</value> </property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/data/</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>file:///usr/local/hadoop/data/dfs/namesecondary</value>
</property>
</configuration>
3. hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.http.address</name> <value>luengmingbiao:50070</value> </property></configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/local/hadoop/data/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/local/hadoop/data/dfs/data</value>
</property>
4. mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
5. yarn-site.xml
<configuraion>
<property> <name>yarn.resourcemanager.hostname</name> <value>luengmingbiao</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.application.classpath</name> <value>/usr/local/hadoop-3.1.2/etc/hadoop:/usr/local/hadoop-3.1.2/share/hadoop/common/lib/*:/usr/local/hadoop-3.1.2/share/hadoop/common/*:/usr/local/hadoop-3.1.2/share/hadoop/hdfs:/usr/local/hadoop-3.1.2/share/hadoop/hdfs/lib/*:/usr/local/hadoop-3.1.2/share/hadoop/hdfs/*:/usr/local/hadoop-3.1.2/share/hadoop/mapreduce/lib/*:/usr/local/hadoop-3.1.2/share/hadoop/mapreduce/*:/usr/local/hadoop-3.1.2/share/hadoop/yarn:/usr/local/hadoop-3.1.2/share/hadoop/yarn/lib/*:/usr/local/hadoop-3.1.2/share/hadoop/yarn/*</value> </property> </configuraion>
注: 「yarn.application.classpath「能夠經過在終端上輸入以下命令獲取:
# hadoop classpath
對hdfs(Hadoop Distributed File System)進行格式化,hdfs是用來存儲數據的分佈式文件系統。
# hdfs namenode -format
出現上述圖所示,表明成功格式化。
Hadoop3.x以上版本在啓動上有一個坑,不添加如下配置啓動進程的時候會報如下的錯並打印到終端上:
解決方案(能夠只針對ERROR出現的變量進行定義,若是不行再配置所有):
# vim $HADOOP_HOME/sbin/start-dfs.sh
# vim $HADOOP_HOME/sbin/stop-dfs.sh
# vim $HADOOP_HOME/sbin/start-yarn.sh
# vim $HADOOP_HOME/sbin/stop-yarn.sh
1. 啓動HDFS
# hdfs --daemon start namenode # hdfs --daemon start datanode
# hdfs --daemon start secondarynamenode
或
# start-dfs.sh
2. 啓動YARN集羣
# yarn --daemon start resourcemanager # yarn --daemon start nodemanager
或
# start-yarn.sh
3. jps命令查看是否啓動成功
4. HDFS和YARN集羣都有默認的Web可視化頁面
HDFS: http://主機ip:50070
YARN:http://主機ip:8088
創建測試文件:
# vim test.txt
而後輸入以下數據:
hello hadoop hello World Hello Java Hey man i am a programmer
將測試文件放到測試目錄中:
# hdfs dfs -mkdir hdfs:///hadoop # hdfs dfs -mkdir hdfs:///hadoop/input # hdfs dfs -put ./test.txt hdfs:///hadoop/input
執行hadoop自帶的wordcount程序:
# hadoop jar /usr/local/hadoop-3.1.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount hdfs:///hadoop/input hdfs:///output
而後在命令行輸入 hdfs dfs -cat hdfs:///output/part-r-00000 查看詞頻統計結果:
# hdfs dfs -cat hdfs:///output/part-r-00000