目錄
一.使用VMvare創建三個虛擬機,我使用的是ubuntu16.04版本的,並關閉全部虛擬機的防火牆
需要的安裝包:
1.jdk壓縮包
2.hadoop壓縮包
請前往百度雲上上下載相關安裝包(密碼:8op1)
開始搭建hadoop集羣
一.使用VMvare創建三個虛擬機,我使用的是ubuntu16.04版本的,並關閉全部虛擬機的防火牆
1.因爲默認的虛擬機主機名都是ubuntu,所以爲了便於虛擬機的識別,創建完成虛擬機後我們對虛擬機名進行修改,我們把用於主節點的虛擬機名稱設爲master(按自己的喜好創建),把用於從節點的虛擬機名稱設爲slave1
修改主機名的命令:sudo gedit /etc/hostname
把原主機名ubuntu改爲master(在從主機上則改爲slave1)
2.爲了虛擬機之間能ping通,需要修改虛擬機的ip地址(這裏以在master機器操作爲例子,從節點的虛擬機也要進行一致的操作)
命令:sudo gedit /etc/hosts
把/etc/hosts中yangcx-virtual-machine修改爲剛剛改過的主機名master,同時將前面的ip地址改爲實際的ip地址
怎麼知道自己虛擬機的ip地址?
命令:ifconfig -a
上圖紅框標記的就是虛擬機的真實ip地址,因此我們把/etc/hosts中的內容修改爲:
slave1的ip地址就是從虛擬機slave1的真實ip地址。同樣,我們在slave1虛擬機上也要進行這一步操作。
3.關閉虛擬機的防火牆
一般來說,ubuntu默認都是安裝防火牆軟件ufw的,使用命令 sudo ufw version,如果出現ufw的版本信息,則說明已有ufw
使用命令 sudo ufw status查看防火牆開啓狀態:如果是active則說明開啓,如果是inactive則說明關閉
開啓/關閉防火牆 (默認設置是’disable’)
sudo ufw enable|disable
我們使用sudo ufw disble來關閉防火牆,並再次用sudo ufw status 查看防火牆是否關閉
二.安裝jdk(所有虛擬機都要安裝配置)
將jdk的壓縮文件拖進master和slave1虛擬機中,壓縮(右鍵文件,extract here),或者用命令行
tar -zxvf jdk1.8.0_161.tar.gz(使用自己的壓縮文件名)
配置環境jdk環境:
命令:sudo gedit /etc/profile
將jdk的路徑添加到文件後面(根據自己的文件路徑來,我這裏jdk1.8.0_161文件夾的路徑是/home/hadoop/java)
export JAVA_HOME=/home/hadoop/java/jdk1.8.0_161
export JRE_HOME=/home/hadoop/java/jdk1.8.0_161/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH
保存退出,爲了使配置立即生效,鍵入命令:source /etc/profile,或者重啓虛擬機,命令:shutdown -r now
檢查路徑jdk是否安裝成功,鍵入命令:java -version
如果出現了版本信息,則恭喜配置成功;
三.安裝SSH服務
1.首先確保虛擬機能連上網
2.更新源列表:sudo apt-get update
3.安裝ssh:輸入"sudo apt-get install openssh-server"-->回車-->輸入"y"-->回車-->安裝完成。
4.查看ssh服務是否啓動
打開"終端窗口",輸入"sudo ps -ef |grep ssh"-->回車-->有sshd,說明ssh服務已經啓動,如果沒有啓動,輸入"sudo service ssh start"-->回車-->ssh服務就會啓動。
四、建立ssh無密碼登錄本機
ssh生成密鑰有rsa和dsa兩種生成方式,默認情況下采用rsa方式。
- ssh-keygen -t rsa -P "" //(P是要大寫的,後面跟"")
(注:回車後會在~/.ssh/下生成兩個文件:id_rsa和id_rsa.pub這兩個文件是成對出現的)
2、進入~/.ssh/目錄下,將id_rsa.pub追加到authorized_keys授權文件中,開始是沒有authorized_keys文件的
- cd ~/.ssh
2. cat id_rsa.pub >> authorized_keys
完成後就可以無密碼登錄本機了。
3、登錄localhost
1. ssh localhost
( 注:當ssh遠程登錄到其它機器後,現在你控制的是遠程的機器,需要執行退出命令才能重新控制本地主機。)
4、執行退出命令
- exit
1~4步在master、slave1和slave2三臺虛擬機上都是這樣配。
5.配置master無密碼登陸slave1
mater主機中輸入命令複製一份公鑰到home中
cp .ssh/id_rsa.pub ~/id_rsa_master.pub
把master的home目錄下的id_rsa_master.pub拷到slave1的home下(我的做法是先拖到windows桌面上,在拖進slave1虛擬機中)
slave1的home目錄下分別輸入命令
cat id_rsa_master.pub >> ~/.ssh/authorized_keys
至此實現了mater對slave1的無密碼登陸。
以下的步驟只在master上進行
五.安裝hadoop
1.將hadoop壓縮包拖進master虛擬機中,解壓(我這裏解壓的路徑是/home/hadoop/hadoop-2.7.3)
2.在hadoop-2.7.3文件夾裏面先創建4個文件夾:
- hadoop-2.7.3/hdfs
- hadoop-2.7.3/hdfs/tmp
- hadoop-2.7.3/hdfs/name
- hadoop-2.7.3/hdfs/data
3.配置 hadoop的配置文件
先進入配置文件的路徑:cd /home/hadoop/hadoop-2.7.3/etc/hadoop(再次強調,使用自己的路徑)
查看該路徑下的文件列表
被紅框框住的文件是我們要進程配置的文件
1.首先配置core-site.xml文件(配置Service的URL地址、Hadoop集羣臨時目錄)
sudo gedit core-site.xml
在<configuration></configuration>中加入以下代碼:
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop-2.7.3/hdfs/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
注意:第一個屬性中的value和我們之前創建的/hadoop-2.7.3/hdfs/tmp路徑要一致。
2.配置 hadoop-env.sh文件
sudo gedit hadoop-env.sh
將JAVA_HOME文件配置爲本機JAVA_HOME路徑
3.配置 yarn-env.sh
sudo gedit yarn-env.sh
將其中的JAVA_HOME修改爲本機JAVA_HOME路徑(先把這一行的#去掉)
4.配置hdfs-site.xml(配置Hadoop集羣的HDFS別名、通信地址、端口等)
sudo gedit hdfs-site.xml
在<configuration></configuration>中加入以下代碼
<!-- 指定DataNode冗餘份數 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop-2.7.3/hdfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop-2.7.3/hdfs/data</value>
<final>true</final>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
注意(其中第二個dfs.namenode.name.dir和dfs.datanode.data.dir的value和之前創建的/hdfs/name和/hdfs/data路徑一致)
5 .複製mapred-site.xml.template文件,並命名爲mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
6.配置yarn-site.xml
sudo gedit yarn-site.xml
<property>
<name>yarn.resourcemanager.address</name>
<value>master:18040</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:18030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:18088</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:18141</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
7.配置slaves 文件
sudo gedit slaves
把原本的localhost刪掉,改爲slave1
8.配置hadoop的環境,就像配置jdk一樣
sudo gedit /etc/profile
根據hadoop文件夾的路徑配置,以我的路徑/home/hadoop/hadoop-2.7.3 爲例
export HADOOP_HOME=/home/hadoop/hadoop-2.7.3
export PATH="$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH"
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
鍵入命令 source /etc/profile 使配置立即生效
9.接下來,將hadoop傳到slave1、slave2虛擬機上面去
scp -r hadoop-2.7.1 hadoop@slave1:~/
注意:hadoop是虛擬機的用戶名,創建slave1時設定的
傳過去後,在slave1上面同樣對hadoop進行路徑配置,和第8步一樣
9.初始化hadoop
hdfs namenode -format
10.開啓hadoop
兩種方法:(在mater主機執行)
- start-all.sh
- 先start-dfs.sh,再start-yarn.sh
如果在mater上面鍵入jps後看到
在slave1上鍵入jps後看到
在slave2上鍵入jps後看到
六:最後用自帶的樣例測試hadoop集羣能不能正常跑任務
使用命令
hadoop jar /home/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar pi 10 10
用來求圓周率,pi是類名,第一個10表示Map次數,第二個10表示隨機生成點的次數(與計算原理有關)
最後出現結果
則,恭喜你,hadoop集羣搭建完成。
注意:
1、至少的三個虛擬機,zk的搭建最少的三臺主機。
2、HDFS格式化錯誤 SHUTDOWN_MSG: Shutting down NameNode at java.net.UnknownHostException(解決)