1、關于虛擬機的復制
新建一臺虛擬機,系統為CentOS7,再克隆兩臺,組成一個三臺機器的小集群。正常情況下一般需要五臺機器(一個Name節點,一個SecondName節點,三個Data節點。)
?此外,為了使網絡生效,需要注意以下幾點:
1> ?編輯網絡配置文件
/etc/sysconfig/network-scripts/ifcfg-eno16777736
先前的版本需要刪除mac地址行,注意不是uuid,而是hwaddr,這一點新的CentOS不再需要
2> 刪除網卡和mac地址綁定文件??
rm -rf /etc/udev/rules.d/70-persistent-net.rules
3> 重啟動系統
此外,mapreduce在運行的時候可能會隨機開放端口,在CentOS7中,可以使用下面的命令將防火墻關閉
systemctl stop firewalld
或者使用下面的命令,使在集群中的機器可以不受限制的互相訪問
#把一個源地址加入白名單,以便允許來自這個源地址的所有連接
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.1.215" accept' --permanent firewall-cmd --reload
?
2、將IP地址設置為靜態
準備了三個IP地址
192.168.1.215
192.168.1.218
192.168.1.219
?在CentOS7下,修改ip地址的文件為/etc/sysconfig/network-scripts/ifcfg-eno16777736
主要作如下設置,其他的不需要變
# none或static表示靜態 OOTPROTO=static # 是否隨網絡服務啟動 ONBOOT=yes IPADDR=192.168.1.215 # 子網掩碼 NETMASK=255.255.255.0 # 網關,設置自己的 GATEWAY=192.168.0.1 # dns DNS1=202.106.0.20
3、修改hostname與hosts文件
這兩個文件均處于系統根目錄的etc文件夾之中
下圖顯示了映射后的機器名稱以及對應的ip地址(#localhost.localdomain這一行多余,僅master剛剛好)
主節點master,兩個數據節點data1,data2
?
4、添加用戶與組
需要為Hadoop軟件系統設置單獨的用戶和組,本例中新添加的用戶和所屬組的名稱均為hadoop??
adduser hadoop passwd hadoop
?5、利用ssh實現免密碼登錄
注意,目的是使Hadoop系統的所屬用戶在集群之間實現免密碼登錄,而不是root用戶(除非Hadoop系統的所有者root,但一般不建議這么做)。這一點非常重要。
在本例中,軟件所有者是上面新建的hadoop用戶,密鑰也要由hadoop用戶來生成。
1> 更改配置文件
需要對sshd_config文件進行修改,主要是以下三項,取消注釋即可?
vim /etc/ssh/sshd_config
?
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
之后,執行以下命令重啟sshd服務
service sshd restart
2> 生成密鑰并分發相關文件
簡單的方法,密鑰生成后,使用直接使用 ssh-copy-id 命令把密鑰追加到遠程主機的 .ssh/authorized_key 上,如下:
# 生成密鑰
ssh-keygen -t rsa
# 密鑰追加到遠程主機
ssh-copy-id -i ~/.ssh/id_rsa.pub? hadoop@192.168.1.218
ssh-copy-id -i ~/.ssh/id_rsa.pub? hadoop@data2
復雜的方法,不再推薦,具體實現步驟如下:
a> 將三臺計算機(master、data1、data2)分別切換到hadoop用戶下,并分別cd到hadoop用戶的家目錄,然后執行 ssh-keygen -t rsa?命令,這樣的結果,是在各自家目錄的.ssh文件夾中生成了對應的id_rsa.pub?與id_rsa 密鑰對。
b> 將data1(192.168.1.218),data2(192.168.1.219)兩臺計算機中的公鑰文件復制到master(192.168.1.215)中,并重命名為id_rsa.pub218,id_rsa.pub219,置于hadoop用戶家目錄下的.ssh文件夾下。命令參考如下:?
scp id_rsa.pub hadoop@master:~/.ssh/id_rsa.pub218 scp id_rsa.pub hadoop@master:~/.ssh/id_rsa.pub219
?hadoop@master表示用master中的hadoop用戶登錄master
這樣以來,master主機hadoop用戶的.ssh文件夾就有了以下三個公鑰文件:
d_rsa.pub、d_rsa.pub218、d_rsa.pub218
c> 在master中,將以上三個文件以追加的形式寫入authorized_keys文件,這些文件均位于hadoop用戶.ssh文件夾中。?
cat id_rsa.pub >> authorized_keys cat id_rsa.pub218 >> authorized_keys cat id_rsa.pub219 >> authorized_keys
?d> 更改?authorized_keys?文件的權限。這一步也可在分發后單獨進行。?
chmod 600 authorized_keys
?e> 分發authorized_keys?文件到data1,data2中hadoop用戶的.ssh文件中,并再次檢查權限。?
scp authorized_keys hadoop@data1:~/.ssh/authorized_keys scp authorized_keys hadoop@data2:~/.ssh/authorized_keys
?之后就可以在小集群中使用hadoop用戶實現免密碼登錄了。
注意的是,如果使用的linux登錄用戶不是root用戶,需要修改以下.ssh文件夾以及authorized_key文件的權限,否則是無法實現免密碼登錄的
chmod 700 .ssh cd .ssh/ chmod 600 authorized_keys
?6、安裝jdk?
先在master中安裝,之后分發,這里使用的是jdk-8u112-linux-x64.tar.gz
?1> 解壓安裝
?首先需要切換到root用戶?
su root cd /usr mkdir java tar -zxvf jdk-8u112-linux-x64.tar.gz ./java ln -s jdk1.8.0_112/ jdk
?2> 分發
scp -r /usr/java root@data2:/usr/ scp -r /usr/java root@data2:/usr/
3> 設置環境變量,三臺都要設置
vim /etc/profile
export JAVA_HOME=/usr/java/jdk export JRE_HOME=/usr/java/jdk/jre export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
source /etc/profile
?7、安裝hadoop
先在master下安裝,再分發
安裝的版本為2.6.5解壓安裝到/usr/Apache/目錄下,并建立軟連接
Hadoop所有配置文件的目錄位于/usr/Apache/hadoop-2.6.5/etc/hadoop下,由于建立了一個軟連接,所以/usr/Apache/hadoop/etc/hadoop是一樣的
在hadoop軟件目錄的dfs文件夾中創建三個子文件夾name、data、tmp,下面屬性的設置會用到,注意其所有者和所屬組。
以下是配置文件的設置:
1> hdfs.site.xml?
<property><name>dfs.namenode.name.dir</name><value>file:/usr/Apache/hadoop/dfs/name</value> </property> <property><name>dfs.datanode.data.dir</name><value>file:/usr/Apache/hadoop/dfs/data</value> </property> <property><name>dfs.replication</name><value>3</value> </property> <property><name>dfs.namenode.secondary.http-address</name><value>master:50090</value> </property> <property><name>dfs.webhdfs.enabled</name><value>true</value> </property>
2> mapred-site.xml
<property><name>mapreduce.framework.name</name><value>yarn</value> </property> <property><name>mapreduce.jobhistory.address</name><value>master:10020</value> </property> <property><name>mapreduce.jobhistory.webapp.address</name><value>master:19888</value> </property>
3> yarn-site.xml
設置如下:?
<property>?<name>yarn.nodemanager.aux-services</name>?<value>mapreduce_shuffle</value>? </property>? <property>?<name>yarn.resourcemanager.address</name>? <value>master:8032</value>? </property>? <property>? <name>yarn.resourcemanager.scheduler.address</name>? <value>master:8030</value>? </property>? <property>? <name>yarn.resourcemanager.resource-tracker.address</name>?<value>master:8031</value>? </property>? <property>?<name>yarn.resourcemanager.admin.address</name>?<value>master:8033</value>? </property>? <property>?<name>yarn.resourcemanager.webapp.address</name>?<value>master:8088</value>? </property>?
?4> slaves配置文件
master
data1
data2
注:本例將master也作為了一個數據節點
5> hadoop-env.sh和yarn-env.sh
這是兩個相當重要的環境變量配置文件,由于目前僅安裝Hadoop,所以僅設置jdk即可,其他默認。
export JAVA_HOME=/usr/java/jdk
6> core-site.xml
<property> <name>hadoop.tmp.dir</name><value>/usr/Apache/hadoop/tmp</value><description>A base for other temporary directories.</description> </property> <property><name>fs.defaultFS</name><value>hdfs://master:9000</value> </property>
?
7> 將Apache文件夾分發到data1,data2對應的目錄下
# 分發 scp -r ./Apache root@data1:/usr/ scp -r ./Apache root@data2:/usr/# 這里使用了root用戶,記得分發后要改所有者與所屬組 chown -R hadoop:hadoop Apache/
注意jdk是不需要改所有者與所屬組的,因為通用?
8> 三臺機器分別配置hadoop用戶的.bashrc文件,設置環境變量
su hadoop vim ~/.bashrc
export $HADOOP_HOME=/usr/Apache/hadoop export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_YARN_HOME=$HADOOP_HOME export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export CLASSPATH=.:$HADOOP_HOME/lib:$CLASSPATH export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source ~/.bashrc
8、開啟與結束
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
yarn-daemon.sh start historyserver?
#####
stop-dfs.sh
stop-yarn.sh
mr-jobhistory-daemon.sh stop historyserver
yarn-daemon.sh stop historyserver
9、運行結果
相關進程
?
??
??
All Applications
http://192.168.1.215:8088
JobHistory?
http://192.168.1.215:19888
Master
http://192.168.1.215:50070
?
?