1. 程式人生 > >微信棋牌原始碼虛擬機器搭建Hadoop叢集

微信棋牌原始碼虛擬機器搭建Hadoop叢集

虛擬機器搭建Hadoop叢集

安裝包準備

作業系統:ubuntu-16.04.3-desktop-amd64.iso

軟體包:VirtualBox

安裝包:hadoop-3.0.0.tar.gz,jdk-8u161-linux-x64.tar.gz

1. 環境準備

使用VirtualBox和下載的ubuntu映象檔案新建三個Ubuntu操作環境,具體配置如下:

使用者記憶體(G)磁碟空間(G)
hadoop011.510
hadoop021.510
hadoop031.510

2. 網路環境準備

       點選VirtualBox右側“全域性工具->主機網路管理器”,點選新建,並且勾選DHCP伺服器中的啟用伺服器,其餘的按照預設配置點選應用即可,這個過程相當於在VirtualBox中建立了一個名稱為vboxnet0的路由器:

netbox

       關閉建立的每一臺虛擬機器,然後分別選中每一臺虛擬機器,點選“設定->網路->網絡卡2”,啟用網路連線,並且選擇連線方式為“僅主機(Host-Only)網路”,介面名稱為剛剛建立的vboxnet0。

       這裡需要注意一定要在關閉虛擬機器的狀態下配置網絡卡2,因為在執行過程中的虛擬機器是不允許配置網絡卡的。另外,這裡網絡卡1和網絡卡2的區別在於網絡卡1用於供給虛擬機器連線外部網路的,虛擬機器通過網絡卡1連線VirtualBox,再通過VirtualBox連線外網;網絡卡2則相當於提供了一個路由器,供給三臺虛擬機器相互之間以及與主機之間進行連線的。

       開啟一臺虛擬機器,執行以下命令安裝vim(預設情況下,Ubuntu是不帶vim的):

sudo apt-get install -y vim

執行以下命令檢視當前網路地址:

ifconfig

將如下配置新增到/etc/network/interfaces檔案中,為當前虛擬機器配置靜態ip:

auto enp0s8
iface enp0s8 inet static
address 192.168.56.4
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 202.120.111.3

如此按照上述方式對另外兩臺虛擬機器配置網路環境即可。

這裡三臺虛擬機器的使用者與ip分別配置如下:

使用者ip
hadoop01192.168.56.4
hadoop02192.168.56.3
hadoop03192.168.56.8

3. SSH免密登入

由於Ubuntu沒有ssh客戶端,可以執行如下命令為每臺虛擬機器安裝ssh客戶端:

sudo apt-get install -y openssh-server

安裝完成後執行如下命令生成ssh公鑰:

ssh-keygen -t rsa

該命令執行期間一直按回車即可。公鑰生成後會在使用者目錄~下生成一個.ssh資料夾,裡面包含id_rsaid_rsa.pub兩個檔案。

將三臺虛擬機器生成的id_rsa.pub檔案中的內容都複製到同一個檔案中,命名為authorized_keys,並且將該檔案在每臺虛擬機器的.ssh資料夾下都建立一份,該檔案相當於為其中的每個公鑰所指代的機器提供ssh登入的許可權,由於三臺虛擬機器的authorized_keys都有各自的公鑰,因而其相互之間可以通過ssh免密登入。示例authorized_keys檔案如下:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFez1asGIktruVI53uJHT3s8UZHoIi3X98G5mFV/7+MAs8xXeXV7HbHfi2FfJnMl/qTY/W4VZWdoFLizDBrtUDHTtigVxs5uK4re8qlvSApmqy9Xi0c+qpLKHSeFBpCSqKgngrwE/+DOFnkkTSH/hv6bIpGPTYArpOXdY203vyt6/MM/HKed0WeAcDbCdfKjke4Q2IHi6APghwjML3oD1N0rNGU28SRc8iGdg+vGp6Ajkr034VZCx7fY/BmjYhxPvJ6c5hnVSwqik05xdw2Dh+6eLkiOOnO1LknFw7KdFqa1435sOxxHhar8+ELiKu/mYzVcZMizN0AiPQGxjP96fl hadoop01@hadoop01
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDCXKskhH0VFzh8KrJt3PmbR/Yxbgv5le4iEdvIPWWXAC7XDuPGrz1XH/ZYlZWauyV/LsMN3qjbeHzyfeuuNuV6Skpy/lofsIO88/XH0NFYcAxQtIQfSLwbOGVWziibOPY+gI8Bnzeb7hAYk10V2cI26hKWMpEHxOu/lCxcNuM5Y+CBs2kx2KzzvwgUjF12P6Jz4+SguCERi+Cz1JQ0YuXHBRLXGgwXMRyYUlC3KxIvyeZzI0+Gpew4nTFFXBoDIEaWn9Ma8+AcHNm9ejnO9ChSCN3zXJf7nnaXKUmi5jyQu88e+qmhDt2Pzj0E/kaKRkxso7e+sgHMBp8eXpJu/eT hadoop02@hadoop02
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCm4yk0TVpfhU0jSf4PMH60fOhMYrxCI9DeG/tcs0LTAUHGatuY3XRd6X3B5tShUlCvr9M1DVRgszk0Nz9VOzgqFsIXUxJLAir4dQIj+nVY0QcyTwzwbqm93YDZfaoYrO9xgEriZ6XVK78bWc8bMWpc9z35Kp4U6ytTQUufVwnsVXgAcBN6rQ/ZZFiJvCwnsZDtNsT/zVNWdrnVMKFbm+0rQHzt+jQEgfunwQeEkj8G21iPMpG9MxuHLmzOx+7XaxNLl/P2oHto8lQJgm0DYLJy6JLPa3rkd+NuBxYoqRxr1A1eC/7f3480bz+HHym5e0dSh8HuG3XJihIoR1SLm1Sd hadoop03@hadoop03

按照上述配置完成之後,可使用如下命令在一臺虛擬機器上登入另外兩臺虛擬機器(這裡hadoop02和hadoop03為目標機器的使用者,@符號後的內容為目標機器的ip地址):

ssh hadoop02@192.168.56.3
ssh haddop03@192.168.56.8

這裡需要注意,如此配置之後即可按照上述方式使用ssh登入免密登入其他機器,但是這種配置還不完全夠,因為在後續使用hive和hbase的過程中,其叢集內部是使用如下方式登入的:

ssh hadoop02
ssh hadoop03
Host hadoop02
 hostname 192.168.56.3
 user hadoop02

Host hadoop03
 hostname 192.168.56.8
 user hadoop03

4. jdk和Hadoop安裝

需要說明的是如下jdk和hadoop安裝只是一臺虛擬機器上的配置,其餘兩臺虛擬機器的配置方式與其類似。

將下載的jdk和Hadoop安裝包使用tar命令解壓,如:

tar -zxvf jdk-8u161-linux-x64.tar.gz

使用ln命令為jdk和hadoop解壓包建立軟連線,建立軟連線的優點在於如果後續需要更改jdk或者Hadoop的版本,只需要把軟連線指向新的解壓目錄即可,而不需要到處更改配置的環境變數,因為環境變數都是基於軟連線配置的:

ln -s jdk1.8.0_161 jdk
ln -s hadoop-3.0.0 hadoop

建立軟連線之後的目錄結構如下所示:

drwxrwxr-x  5 hadoop01 hadoop01 4096 223 17:46 ./
drwxr-xr-x 19 hadoop01 hadoop01 4096 223 20:46 ../
lrwxrwxrwx  1 hadoop01 hadoop01   12 222 22:24 hadoop -> hadoop-3.0.0/
drwxr-xr-x 12 hadoop01 hadoop01 4096 223 10:24 hadoop-3.0.0/
lrwxrwxrwx  1 hadoop01 hadoop01   12 222 22:06 jdk -> jdk1.8.0_161/
drwxr-xr-x  8 hadoop01 hadoop01 4096 1220 08:24 jdk1.8.0_161/

編輯使用者目錄下的.profile檔案,在其中加上如下內容:

export JAVA_HOME=/home/hadoop01/xufeng.zhang/jdk
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

export HADOOP_HOME=/home/hadoop01/xufeng.zhang/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_CLIENT_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

儲存之後,使用如下source命令才能使編輯的環境變數生效:

source ~/.profile

使用java -version命令檢視配置的Java執行環境是否正常:

hadoop01@hadoop01:~/xufeng.zhang$ java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

使用hadoop version命令檢視Hadoop是否配置正確:

hadoop01@hadoop01:~/xufeng.zhang$ hadoop version
Hadoop 3.0.0
Source code repository https://git-wip-us.apache.org/repos/asf/hadoop.git -r c25427ceca461ee979d30edd7a4b0f50718e6533
Compiled by andrew on 2017-12-08T19:16Z
Compiled with protoc 2.5.0
From source with checksum 397832cb5529187dc8cd74ad54ff22
This command was run using /home/hadoop01/xufeng.zhang/hadoop-3.0.0/share/hadoop/common/hadoop-common-3.0.0.jar

對於另外兩臺虛擬機器,可以按照上述方式進行類似的配置即可。

5. Hadoop叢集環境的搭建

Hadoop叢集的配置,主要有如下幾個檔案需要修改:

core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
hadoop-env.sh
core-site.xml的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://192.168.56.3:9000</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/hadoop01/xufeng.zhang/hadoop/tmp</value>
  </property>
  <property>
    <name>fs.trash.interval</name>
    <value>10080</value>
  </property>
</configuration>
hdfs-site.xml的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
  <property>
    <name>dfs.permissions.enabled</name>
    <value>false</value>
  </property>
  <property>
    <name>dfs.http.address</name>
    <value>192.168.56.3:50070</value>
  </property>
  <property>
    <name>dfs.secondary.http.address</name>
    <value>192.168.56.4:50090</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/home/hadoop01/xufeng.zhang/hadoop/data/namenode</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/home/hadoop01/xufeng.zhang/hadoop/data/datanode</value>
  </property>
</configuration>
mapred-si