2015年12月9日 星期三

CentOS 建置 HDFS 注意事項 different from Ubuntu

最近用CentOS 建置 HDFS 時,遇到了在Ubuntu沒過到的問題,在此記錄一下

1. Install JDK
    如果安裝後,在~/.bashrc下加入了Java_Home & PATH後
即使 source ~/.bashrc後,java路徑仍是舊的路徑時,應該使用
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_51/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_51/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_51/bin/javaws" 1
sudo update-alternatives --set java /usr/local/java/jdk1.8.0_51/bin/java
sudo update-alternatives --set javac /usr/local/java/jdk1.8.0_51/bin/javac
sudo update-alternatives --set javaws /usr/local/java/jdk1.8.0_51/bin/javaws
2. SSH issue
    一般來說 在 Ubuntu 是用指令
  1. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  2. 但是在 CentOS 雖然上面指令可以執行,但實際卻無法 work, ssh登入別台仍需password

應改為使用 ssh-copy-id hadooop@yourhostname 
該指令一樣會將 public key 寫入一個自動新增的 authorized_key 檔案

3.即使整個 HDFS  Conf 都設置無誤後,在  start-dfs.sh 及 start-yarn.sh 後
雖然 每台的 service 均有啟動(使用 jps monitor),但卻發生 datanode can't connect server(NameNode)

首先在  NameNode使用 指令

netstat -ntulp | grep java

確定 Hadoop 的 IPC service 是否有啟動,一般預設為9000 or 8020(Cloudera),請觀察你的  core-site.xml 
 此時 binding 的 IP 應該為 yourIP 而不是 0.0.0.0. or 127.0.0.1
如果確定 服務是有啟動的且IP為真實的IP,則很有可能是firewall的問題,
因為 CentOS Linux 預設 firewall 是啟動的 ,請下指令試著將 firewall 關閉

service iptables stop

PS:使用 hdfs put file 至 DataNode時,DataNode的  firewall 也需關掉

如果每次都要改覺得麻煩的話,請至

vi /etc/rc.d/rc.local
新增 service iptables stop

#此設定會在開機時去關閉firewall

當然 更好的做法是,你會設定firewall ,讓 hdfs 彼此溝通的 port 可以 pass就好

如此一來,NameNode在 http://yourIP:50070 應該可以Monitor到你的  DataNode 了





沒有留言:

張貼留言