環境:
CentOS7+SunJDK1.8@VMware12。
NameNode虛擬機節點主機名:master,IP規划:192.168.23.101,職責:Name node,Secondary name node,Resource manager。
DataNode虛擬機節點主機名:slave1,IP規划:192.168.23.102,職責:Data node,Node manager。
每個虛擬機分配資源:CPU單顆,內存2GB,硬盤20GB。
過程概要:
- 創建2個虛擬機,主機名分別為:master(做NameNode、JobTracker)、slave1(做DataNode、TaskTracker),分配固定ip。
- 每個虛擬機都創建一個hadoop用戶,並擁有sudo權限。
- 解壓hadoop包,並把其所屬用戶及組改為hadoop、hadoop。
- 生成openssh密鑰對,使master、slave之間的ssh訪問免輸密碼。
過程詳細:
- VMware中建立兩個CentOS7主機,創建上述兩個主機名和固定IP(VMware CentOS固定IP設置參見http://www.centoscn.com/CentOS/config/2014/1028/4009.html)。
以master節點為例:
修改/etc/hosts為(注意:要把集群所有節點的ip跟主機名映射全加進來):
修改:/etc/sysconfig/network-scripts/ifcfg-eno16777736為(經測試,此種方法可能會被系統再次動態增加一個IP地址,變成雙IP。因此不如圖形界面的方法可靠):
或者在CentOS7的圖形界面下,點擊網絡圖標,IP改為手動,設置IP地址、掩碼、網關、DNS(推薦)
上述為master節點。slave節點類似修改。確保雙方IP能互相ping通。
- 創建hadoop用戶,並賦予sudo權限:
命令:su root (切換到root用戶)
命令:chmod u+w /etc/sudoers (給sudoers增加寫權限)
命令:vi /etc/sudoers (修改sudoers文件)
執行命令后會進入sudoers文件的查看模式,該模式下按“i”進入文件修改模式,
然后在root ALL=(ALL) ALL下方增加hadoop ALL=(ALL)NOPASSWD:ALL 按 “esc”鍵推出修改模式,大寫模式下,按兩次“z”保存退出。
命令:chmod u-w /etc/sudoers (撤銷sudoers文件的寫權限)。
改后的/etc/sudoers文件內容如下:
把hadoop-2.6.4.tar.gz拷貝到/usr/下,解壓:tar zxvf hadoop-2.6.4.tar.gz ,並用chmod、chgrp命令將其所屬用戶、用戶組都改為hadoop(重要!否則hadoop無法在其中新建臨時目錄和日志)。效果如下:
- 創建ssh免密碼登錄:
Master機器上生成密碼對。命令:ssh-keygen –t rsa (生成其無密碼密鑰對,一路回車鍵,生成的密鑰對:id_rsa和id_rsa.pub,默認存儲在"/home/hadoop/.ssh"目錄)
命令:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys (把id_rsa.pub追加到授權的key里面去)
命令:chmod 600 ~/.ssh/authorized_keys(修改文件"authorized_keys"權限,這步驟很重要,很多莫名其妙的錯誤有可能就是權限的問題)
命令:sudo vi /etc/ssh/sshd_config (修改SSH配置文件"/etc/ssh/sshd_config"),修改如下內容:
RSAAuthentication yes # 啟用 RSA 認證 PubkeyAuthentication yes # 啟用公鑰私鑰配對認證方式 AuthorizedKeysFile .ssh/authorized_keys # 公鑰文件路徑(和上面生成的文件同)
命令:service sshd restart(重新啟動服務)
命令:ssh localhost (測試是否成功)
下面是把公鑰復制到所有的slave節點上去:
命令:scp ~/.ssh/id_rsa.pub hadoop@192.168.239.129:~/(記得改成自己的ip,這個是我的slave1的ip,就是把master節點的公鑰發送到了slave1的根目錄下了)
- 卸載openjdk,安裝sun-jdk8(過程不贅述),安裝后效果如下:
- 關閉CentOS7的防火牆:
-
systemctl stop firewalld.service #停止 systemctl disable firewalld.service #禁用 之前的版本: service iptables stop #停止 chkconfig iptables off #禁用
- 修改幾個重要的配置文件:
添加環境變量
在 /etc/profile
里添加
export HADOOP_HOME=/usr/hadoop-2.6.4/ export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
修改 Hadoop 配置文件
在 hadoop 解壓路徑下面,/etc/hadoop/hadoop-env.sh 增加下面兩行
export JAVA_HOME=/usr/java/jdk1.8.0_101 export HADOOP_PREFIX=/usr/hadoop-2.6.4
在 hadoop 解壓路徑下面,/etc/hadoop/core-site.xml增加下面內容:
<configuration>
<property> <name>fs.defaultFS</name> <value>hdfs://master:9000/</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/hadoop-2.6.4/tmp</value> </property> </configuration>
在 hadoop 解壓路徑下面,/etc/hadoop/hdfs-site.xml 增加下面內容:
<configuration> <property> <name>dfs.replication</name> <value>2</value> </property> </configuration>
這里設置成2,表示數據有2個副本(數值不大於DataNode數)。
在 hadoop 解壓路徑下面,/etc/hadoop/mapred-site.xml 增加下面內容:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
在 hadoop 解壓路徑下面,/etc/hadoop/yarn-env.sh 增加下面,增加JAVA_HOME 配置:
export JAVA_HOME=/usr/java/jdk1.8.0_101
在 hadoop 解壓路徑下面,/etc/hadoop/yarn-site.xml 增加下面內容:
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <description>The address of the applications manager interface in the RM.</description> <name>Yarn.resourcemanager.address</name> <value>master:18040</value> </property> <property> <description>The address of the scheduler interface.</description> <name>Yarn.resourcemanager.scheduler.address</name> <value>master:18030</value> </property> <property> <description>The address of the RM web application.</description> <name>Yarn.resourcemanager.webapp.address</name> <value>master:18088</value> </property> <property> <description>The address of the resource tracker interface.</description> <name>Yarn.resourcemanager.resource-tracker.address</name> <value>master:8025</value> </property> </configuration>
這里添加的一些端口號,方便從遠程通過瀏覽器查看集群情況,推薦按照這樣添加。
在 hadoop 解壓路徑下面,/etc/hadoop/slaves 增加下面內容:
master slave1
按照上面流程,把 slaver1上的環境變量添加好,然后直接:
scp -r /hadoop2.6.4 hadoop@slave1:/usr/
復制到 slave1下面。
啟動 hadoop 集群:
格式化文件系統:
hdfs namenode -format
啟動 NameNode 和 DateNode:
/usr/hadoop-2.6.4/sbin , 運行:
start-dfs.sh
使用 jps 命令查看 master 上的Java進程,我的進程如下:
jps 命令也可以查看 slave1上的 Java 進程。應該可以看到DataNode啟動。如:
[hadoop@slave1 hadoop]# jps 6130 DataNode 1264 Jps
查看 NameNode 和 NameNode 信息:
master的瀏覽器輸入:
localhost:50070/dfshealth.html#tab-datanode
可以看到DataNode啟動成功。
啟動 ResourceManager 和 NodeManager
運行 start-yarn.sh , jps查看進程如下:
切換到 slave1,jps查看進程:
[hadoop@slave1 hadoop]# jps 27130 DataNode 12379 Jps 28916 NodeManager
成功了
Hadoop 集群就已經啟動了。
----------------------------------------------------------------------------------------------------------------------------------------
最后,參考文章:
配置sudoer權限、創建免密碼登錄:http://blog.sina.com.cn/s/blog_95b63fc90102vrvy.html
修改hadoop配置文件、進程查看:http://blog.csdn.net/sa14023053/article/details/51952534