偽分散式叢集搭建
在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