Copyright © 2019 Linyer. All Rights Reserved
目錄
先準備好以下包(點擊以下載):
hadoop-2.6.5.tgz
實驗一:基於三臺CentOS虛擬機構建Hadoop分佈式集羣
先不急於創建三臺虛擬機,先創建SparMaster一臺機器,然後克隆虛擬機。
配置機器的 IP,hosts,hostname
- 在SparkMaster的
/etc/hostname
中將主機名改爲SparkMaster。 - 修改
/etc/sysconfig/network-scripts/ifcfg-ens33
文件內容
BOOTPROTO=static
ONBOOT=yes
並在最後添加
IPADDR=192.168.80.131
NETMASK=255.255.255.0
GATEWAY=192.168.80.2
DNS1=192.168.80.2
DNS2=8.8.4.4
其中網關可在虛擬機的 編輯–>虛擬機網絡編輯器–>NAT設置中查看。
-
在
/etc/hosts
中添加如下IP與機器名稱的對應關係:192.168.80.131 SparkMaster
192.168.80.132 SparkWorker1
192.168.80.133 SparkWorker2 -
可通過
ipconfig
查看IP地址。
上傳Hadoop包,創建目錄
- 創建目錄
mkdir /usr/lib/hadoop
- 上傳 hadoop-2.6.5.tar.gz 至
/usr/lib/hadoop
目錄下 - 運行以下命
cd /usr/lib/hadoop
tar -zxvf hadoop-2.6.5.tar.gz
cd hadoop-2.6.5
mkdir dfs
cd dfs
mkdir name
mkdir data
cd ..
mkdir tmp
配置Java環境
這裏默認JDK已安裝。
vi ~/.bashrc
- 在最後添加
export JAVA_HOME=(JAVA路徑)
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export HADOOP_HOME=(Hadoop路徑)
export HADOOP_COMMON_LIBNATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export PATH=${HADOOP_HOME}/bin:${JAVA_HOME}/bin:$PATH
- 運行以下命令使配置生效
source ~/.bashrc
配置Hadoop環境
- 進入Hadoop配置文件區
cd /usr/lib/hadoop/hadoop-2.6.5/etc/hadoop
- 修改配置文件yarn-env.sh,加入JAVA_HOME
#The java implementation to use
export JAVA_HOME=(JAVA路徑)
- 修改配置文件yarn-env.sh,加入JAVA_HOME
#some Java parameters
export JAVA_HOME=(JAVA路徑)
if ["$JAVA_HOME" != ""];then
#echo "run java in $JAVA_HOME"
JAVA_HOME = $JAVA_HOME
fi
- 修改配置文件mapred-env.sh,加入JAVA_HOME
#export JAVA_HOME=/home/y/libexec/jdk1.6.0
export JAVA_HOME=(JAVA路徑)
export HADOOP_JOB_HISTORYSEVER_HEAPSIZE=1000
export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA
- 修改配置文件salaves,設置Hadoop集羣中的從節點爲SparkWorker1和SparkWorker2
SparkWorker1
SparkWorker2
- 修改配置文件core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://SparkMaster:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>.../tmp</value>
<description>A base for other temporary directories.</description>
</property>
</configuration>
- 修改配置文件hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>.../dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>.../dfs/data</value>
</property>
</configuration>
- 修改配置文件mapred-site.xml
<configuration>
<property>
<name>mapreduce.ramework.name</name>
<value>yarn</value>
</property>
</configuration>
- 修改配置文件yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>SparkMaster</value>
</property>
<property>
<name>yarn.nodecemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
用SparkMaster克隆另兩臺機器
- 修改其中一臺機器的Hostname爲SparkWoker1。
- 修改另外一臺機器的Hostname爲SparkWoker2。
- 修改SparkWorker1的IP爲192.168.80.132。
- 修改SparkWorker2的IP爲192.168.80.132。
設置三臺機器之間SSH免密登錄
- 通過
ipconfig
檢查各機器的IP地址。 - 三臺機器之間互相
ping
檢查IP是否配置成功。 - 設置免密登錄,生成私鑰和公鑰。
ssh-keygen -t rsa -P ""
在/root/.ssh中會生成兩個文件id_rsa和id_rsa.pub,其中id_rsa爲私鑰,id_rsa.pub爲公鑰。
- 將公鑰追加到authorized_keys中去。
cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys
- 將SparkWorker1、SparkWorker2的id_rsa.pub傳給SparkMaster。
- 使用
scp
命令進行復制: - SparkWorker1上:
scp ~/.ssh/id_rsa.pub root@SparkMaster:~/.ssh/id_rsa.pub.SparkWorker1
- SparkWorker2上:
scp ~/.ssh/id_rsa.pub root@SparkMaster:~/.ssh/id_rsa.pub.SparkWorker2
- 在SparkMaster上將公鑰添加到它的authorized_keys中。
cat id_rsa.pub.SparkWorker1>>authorized_keys
cat id_rsa.pub.SparkWorker2>>authorized_keys
- 將SparkMaster的authorized_keys複製到SparkWorker1、SparkWorker2的.ssh目錄下。
scp authorized_keys root@SparkWorker1:~/.ssh/authorized_keys
scp authorized_keys root@SparkWorker2:~/.ssh/authorized_keys
- SS免密登錄設置完畢,嘗試登錄。
ssh SparkMaster
ssh SparkWorker1
ssh SparkWorker2
啓動並驗證Hadoop分佈式集羣
1. 格式化 hdfs 文件系統。
SparkMaster上:
cd /.../hadoop/hadoop-2.6.5/bin
hadoop namenode -formate
2. 進入 sbin 中啓動 hdfs
cd /.../hadoop/hadoop-2.6.5/sbin
./start-dfs.sh
- 此時SparkMaster上啓動了NameNode和SecondaryNameNode。
- 並且在SparkWorker1和SparkWorker2上均啓動了DataNode。
- 每次使用
hadoop namenode -formate
命令格式化文件系統的時候會出現一個新的nameNodeId,需要把自定義的dfs文件夾的data和name文件夾的內容清空。SparkWorker1和SparkWorker2的也要刪掉。 - 打開瀏覽器訪問
http://192.168.80.131:50070
,登錄web可以查看HDFS集羣的狀況。
3. 啓動 yarn 集羣
./start-yarn.sh
- 使用
jps
命令可以發現 SparkMaster 機器上啓動了 ResourceManager 進程。
- 而在 SparkWorker1 和 SparkWorker2 上則分別啓動了 NodeManager 進程。
- 訪問網頁
http://192.168.80.131:8088
可以通過 web 控制檯查看 ResourceManager 運行狀態。
- 訪問
http://192.168.80.132:8042
可以通過 web 控制檯查看 SparkWorker1 上的 NodeManager 運行狀態。
- 接下來啓動 JobHistory Server:
./mr-jobhistory-daemon.sh start historyserver
- 啓動後通過
http://192.168.80.131:19888
在 Web 控制檯上看到 JobHistory 中的任務執行歷史信息。
- 結束 historyserver 的命令如下:
./mr-jobhistory-daemon.sh stop historyserver
4. 驗證 Hadoop 分佈式集羣
- 首先在 hdfs 文件系統上創建兩個目錄,創建過程如下所示:
#進入bin目錄下
cd ..
cd bin
#開始創建
hadoop fs -mkdir -p /sata/wordcount
hadoop fs -mkdir -p /output
- hdfs 中的
/data/wordcount
用來存放 Hadoop 自帶的 WordCount 例子的數據文件,程序運行的結果輸出到/optput/wordcount
目錄中,通過 Web 控制檯可以發現成功創建了兩個文件夾。
- 接下將本地文件的數據上傳到 HDFS 文件夾中:
hadoop fs -put $HADOOP_HOME/etc/hadoop/*.xml /data/wordcount
- 通過 Web 控制檯可以發現成功上傳了文件。
- 也可以通過 Hadoop 的 HDFS 命令終端查看信息:
hadoop fs -ls /data/wordcount
- 運行 Hadoop 自帶的 WordCount 例子,執行如下命令:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /data/wordcount /output/wordcount
- 在運行作業的過程中可以查看 Web 控制檯的信息。
- 程序運行結束後可以執行以下命令查看運行結果:
hadoop fs -cat /output/wordcount/part-r-00000 |head
- 可以通過 Web 控制檯查看 JobHistory 歷史記錄。
- 可以通過 Web 控制檯查看運行結果,如下圖所示。可以看到,成功運行了 WordCount 作業。至此,成功構建了Hadoop 分佈式集羣並完成了測試!
下接實驗二:Spark 集羣構
(點擊以查看實驗二)