叢集搭建通用過程及一些注意點
叢集搭建通用過程及一些注意點
0.設定靜態ip(vim /etc/sysconfig/network-scripts/ifcfg-eth0 中配置靜態ip),ip不變有利於後面的操作,但其實變了也只需要修改hosts檔案即可,這就是用計算機名的好處。
關於修改網路,當虛擬機器是克隆的時候會出現一個網路不通問題,原因是原來的機器本身有一個eth0的配置資訊,克隆後的機器啟動連線網絡卡後會生成的網絡卡名稱就會為eth1,而且在配置檔案中並沒有ifcfg-eth1檔案
解決方式:需要將eth1–>eth0
vi /etc/udev/rules.d/70-persistent-net.rules ----》將原來老的eth0刪掉,將生成的新的eth1修改為eth0,然後記錄該mac地址用於後面的ifcfg-eth0檔案的配置使用
# This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key. # PCI device 0x8086:0x100f (e1000) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:f1:7d:32", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
vi /etc/sysconfig/network-scripts/ifcfg-eth0 --》修改mac地址為剛才記錄的mac地址
並且去掉UUID這行(或者重新生成UUID加入到這裡來),否則啟動網絡卡會失敗。
某個網絡卡的UUID改錯了或者刪除了,重新配置的時候需要UUID怎麼辦
在Linux或CentOS中,可以通過如下命令獲取網絡卡的uuid資訊:
[[email protected] ~]# uuidgen eth1
07d07031-eb0f-4691-8606-befb46645433
獲取到eth1網絡卡的uuid,即可完成對ifcfg-eth1配置檔案的修改,最後通過service network restart命令重啟網絡卡,OK。
DEVICE=eth0
HWADDR=00:0c:29:f1:7d:32
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.222.132
PREFIX=24
GATEWAY=192.168.222.2
DNS1=114.114.114.114
DNS2=8.8.8.8
因為每臺主機與網路間,每個區域網與外網間都存在防火牆,會攔截一些命令
跨主機和跨網路通訊的時候需要關閉防火牆:
chkconfig iptables off 關閉防火牆-》重啟後生效
service iptables status 檢視防火牆的狀態
service iptables stop 臨時停止防火牆
一塊運用可以避免重啟
1.為了配置後面的檔案需要知道計算機名 (hostname) 或者 修改計算機名(vim /etc/sysconfig/network ) 或者 直接打算用ip都可以(ifconfig檢視ip)
注意:它不會立即生效,在從下次重啟後才開始生效,可以配合 hostname + 新名字 來避免重啟,這條命令是臨時有效,重啟就按照檔案中的恢復了
2.一般都用計算機名(因為不同環境下ip可能會變,但是計算機名一般不變,利於修改),這時候就需要配置hosts檔案(/etc/hosts)
格式:ip + 計算機名 加在檔案最後面就行,一條一行
3.ssh免密登入,避免節點間通訊需要不斷的輸入密碼,自己與自己的ssh連線也需要免密,否則也要輸入密碼。
免密的過程(例如用A去ssh連線其餘的節點):
1). A端先生成一個私鑰和一個公鑰
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
2). 將A端的公鑰傳送到其餘電腦的~/.ssh/authorized_keys檔案中,其實就是將公鑰檔案中的內容拷貝到authorized_keys
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
4.先在一臺機器上安裝jdk,並加入系統環境變數(/etc/profile)然後source /etc/profile使生效
export JAVA_HOME=/home/jdk1.8.0 <!-- 你的JDK安裝目錄 -->
export PATH=$JAVA_HOME/bin:$PATH <!-- 將java配置到path的前面,放前面的優先 -->
5.先在一臺機器上安裝hadoop,並加入系統環境變數(/etc/profile),也可以加入使用者的環境變數(~/.bashrc),然後source /etc/profile使生效
export HADOOP_HOME=/home/hadoop-2.7.5 <!-- 你的hadoop 安裝路徑 -->
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
6.對hadoop包中etc的配置檔案的配置
這三個檔案依據搭建的分散式模式不同會有所不同
hdfs-site.xml
core-site.xml
slaves–>配置所有的從節點,一個從節點佔一行
hadoop-env.sh–>配置完 source hadoop-env.sh 生效
# The java implementation to use. 否則會報JAVA_HOME沒找到的錯誤
export JAVA_HOME=/home/jdk1.8.0
# 在hadoop-env.sh 配置一條hadoop配置檔案所在目錄,否則可能會在報/tmp/...找不到配置檔案的錯誤
export HADOOP_CONF_DIR=/home/hadoop-2.7.5/etc/hadoop
7.第4,5步如果不是偽分散式,也就是說不是在一臺機器上,那麼
①你就得使用
scp -r hadoop-2.7.5 [email protected]:`pwd` 這個pwd會解析成當前路徑,你也可以寫具體的路徑
來將檔案包以及環境變數的配置檔案傳送到其餘的電腦上。
注意:前提是這個目錄在對面的機器上也要存在,否則會丟失一層頂級目錄
②另一方面還需要各臺機器時間同步(否則時間相差太多會使資訊失效,例如差1年,那麼這個資訊1年後到達就沒有了時效性)
首先在各個節點上使用yum install ntp安裝ntp命令
執行ntpdate ntp1.aliyun.com來同步時間(這裡使用阿里雲伺服器的時間)
③每個機器的hosts檔案中,自己的配置是必須的,而且還要有主namenode的,因為需要通訊,所以為了方便,直接配置好了所有的ip+計算機名 ,然後將這個/etc/hosts檔案用scp命令直接傳送到其餘電腦上,就省去了慢慢配置了。例如完全分散式的secondaryNamenode沒有啟動,有可能是沒有配置hosts,報無法找到node01(主namenode的計算機名)的錯誤
8.對一些節點進行格式化操作,以及啟動操作,注意根據模式不同,所需要的節點也會有所不同,那麼啟動以及格式化的時候一定要注意啟動的順序,因為有些節點之間是有依賴關係的(需要分不同的模式詳細來說)
啟動hdfs的命令 start-dfs.sh
停止hdfs的命令 stop-dfs.sh
9.通過jps命令,來檢視java程序的啟動情況
通過kill -9 程序號 來強制殺死一些程序