1. 程式人生 > >偽分散式叢集搭建

偽分散式叢集搭建

在B站找的搭建Hadoop的視訊,以下是步驟

感覺很簡練,有一篇部落格講的更加詳細

1.準備好jar包和Hadoop包

相容情況如下:

hadoop版本>=2.7:要求Java 7(openjdk/oracle)

hadoop版本<=2.6:要求Java 6(openjdk/oracle)

2.上傳jar包以及配置環境變數

我的在安裝系統時勾選了安裝java,通過java -version直接看到1.7.0_45,似乎可以省略這一步

後面發現還是不能省,上傳到/usr/local解壓之後,在/etc/profile裡修改環境變數

在最後面加上兩行

export JAVA_HOME=/usr/local/jdk1.8.0_191

export PATH=$PATH:$JAVA_HOME/bin

3.上傳Hadoop包並解壓

我找同學拷的2.9.1版本,用rz上傳到/usr/local/hadoop資料夾 然後tar -xzvf

在centos下使用rz 首先要通過yum安裝 

網路連線問題

據說這個是因為虛擬機器沒有連上外網,解決中。

看了無數個虛擬機器網路配置的部落格,眼花繚亂,還是找不到解決的路子。

終於通過一個部落格 用ifconfig看了下,發現沒有網絡卡eth0,參照https://www.imooc.com/qadetail/59155,發現我的eth0中沒有IP地址,當執行service network restart會報錯fail,猜測可能是dhcp沒有自動為她分配,參考他的分配區間192.168.138.128-192.168.138.255之間,用ifconfig eth0 192.168.138.128手動配置了eth0的IP地址,再service network restart就成功聯網了!

但是rz下載之後執行,報錯waiting to receive...網上說因為沒有端到端,所以跳不出圖形介面

所以我用bitvise連線虛擬機器,ip為剛才設定的,埠號22

4.建立無密碼的公鑰

原理:NameNode是通過SSH(Secure Shell)來啟動和停止各個DataNode上的各種守護程序的。這就必須在節點之間執行指令的時候是不需要輸入密碼的形式,故我們需要配置SSH運用無密碼公鑰認證的形式,這樣NameNode使用SSH無密碼登入並啟動DataName程序,同樣原理,DataNode上也能使用SSH無密碼登入到NameNode。


操作如下:

ssh-keygen -t dsa -P ' ' -f ~/.ssh/id_dsa

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

測試:ssh localhost

第一次詢問要輸入yes,下一次就可以直接輸出了

(1)注意:master無密碼登入本機已經設定完畢,接下來的事兒是把公鑰複製所有的Slave機器上,用scp命令

然後在slave這邊執行

則master可以通過ssh無密碼登入slave

(2)配置所有Slave無密碼登入Master

和上面同理,把Slave的公鑰追加到Master的".ssh"資料夾下的"authorized_keys,不過是調換過來

5.修改主機名和ip

vi /etc/hostname 改為Master或者slave (後面namenode格式化時發現並沒有修改成功,可能因為當時我開啟 /etc/hostname 這個檔案是空的和視訊裡不同,後來換了種方法更改主機名,即在/etc/sysconfig/network下更改,不過需要重啟後才生效,可通過hostname命令檢視主機名)

vi /etc/hosts  註釋掉原有的,新增上對映,譬如 192.168.50.154 Master (改成自己對應IP)

注意:要進行多項對映,進行這項之後master和slave之間是否可以ping通

6.建立資料夾(之後會用到)

mkdir /usr/local/hadoop/tmp

mkdir -p /usr/local/hadoop/hdfs/name

mkdir -p /usr/local/hadoop/hdfs/data

7.修改環境變數

vi ~/.bash_profile

原有基礎上新增三行:

HADOOP_HOME=/usr/local/hadoop/hadoop-2.9.1(自己版本號)

PATH=$PATH:$HADOOP_HOME/bin

export HADOOP_HOME PATH

source ~/.bash_profile 使得環境變數生效

8.配置Hadoop

(1)找到Hadoop etc目錄下的Hadoop下的hadoop-env.sh

註釋掉裡面的export JAVA_HOME=$JAVA_HOME

添上export JAVA_HOME=/usr/local/jdk1.8.0_191   jdk在的目錄 

通過java -verbose查詢位置

後面證明了這個路徑是錯誤的

https://www.cnblogs.com/YatHo/p/7526852.html 重新更換java版本

(2)同一個目錄下 yarn-env.sh 同樣添上export JAVA_HOME=/usr/local/jdk1.8.0_191   jdk在的目錄(在 some Java parameters後面添上就行)

(3)core-site.xml

放入<configuration></configuration>裡面(前面不需要空格之類的)

   <property>

       <name>fs.defaultFS</name>

       <value>hdfs://Master:9000</value>

   </property>

   <property>

       <name>hadoop.tmp.dir</name>

       <value>/usr/local/hadoop/tmp</value>

 </property>

在slave中換成了這個,應該是主機名+埠號

(4)hdfs-site.xml

 <property>

       <name>dfs.namenode.name.dir</name>

       <value>file:/usr/hadoop/dfs/name</value>

   </property>

   <property>

       <name>dfs.datanode.data.dir</name>

       <value>file:/usr/hadoop/dfs/data</value>

   </property>

<property>

       <name>dfs.replication</name>

       <value>1</value> #設定副本個數

   </property>

4)配置mapred-site.xml檔案

(如果只有mapred.xml.template檔案,可以用 cp mapred-site.xml.template mapred-site.xml進行重新命名) 

首先在 mapred-site.xml中新增(不用property標籤)

<name>mapreduce.framework.name</name>

<value>yarn</value>

然後在yarn-site.xml中新增:

<property>

       <name>yarn.nodemanager.aux-services</name>

       <value>mapreduce_shuffle</value>

   </property>

(各處標註的配置檔案修改方法不盡相同,我這裡是參照視訊寫的)

9.格式化namenode

進入hadoop 2.9.1的 bin目錄下  ./hdfs namenode -format

這裡報了錯,後來發現是jdk路徑問題,找了半天搞不清楚自帶的這個jdk路徑是哪,故重新裝了jdk1.8.0_191,

更改了前面三處java_home的路徑

10.啟動Hadoop

退出,進入hadoop 2.9.1下的sbin目錄中 ./start-all.sh

jps檢視是否啟動成功,如下圖就可以

 

之前只顯示jps resoure/node manager三個,把主機名修改成功後,就沒有問題啦!

在瀏覽器中輸入192.168.138.130:8080 看是否能訪問(ip是前面設的),如果不能,可能是防火牆的問題

注意:

11.檢視防火牆狀態 firewall -cmd --state

如果顯示running的話可以用 systemctl stop firewalld.service關掉防火牆

然後應該就也可以訪問了 或者訪問192.168.50.154:8080/cluster或者192.168.50.154:50070