實驗一:Hadoop集羣搭建

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集羣中的從節點爲SparkWorker1SparkWorker2
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克隆另兩臺機器

  • 修改其中一臺機器的HostnameSparkWoker1
  • 修改另外一臺機器的HostnameSparkWoker2
  • 修改SparkWorker1IP192.168.80.132
  • 修改SparkWorker2IP192.168.80.132

設置三臺機器之間SSH免密登錄

  • 通過ipconfig檢查各機器的IP地址。
  • 三臺機器之間互相ping檢查IP是否配置成功。
  • 設置免密登錄,生成私鑰和公鑰。
ssh-keygen -t rsa -P ""

/root/.ssh中會生成兩個文件id_rsaid_rsa.pub,其中id_rsa爲私鑰,id_rsa.pub爲公鑰。

  • 將公鑰追加到authorized_keys中去。
cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys
  • SparkWorker1SparkWorker2id_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
  • SparkMasterauthorized_keys複製到SparkWorker1SparkWorker2.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上啓動了NameNodeSecondaryNameNode
  • 並且在SparkWorker1SparkWorker2上均啓動了DataNode
  • 每次使用hadoop namenode -formate命令格式化文件系統的時候會出現一個新的nameNodeId,需要把自定義的dfs文件夾的dataname文件夾的內容清空。SparkWorker1SparkWorker2的也要刪掉。
  • 打開瀏覽器訪問http://192.168.80.131:50070,登錄web可以查看HDFS集羣的狀況。
    在這裏插入圖片描述

3. 啓動 yarn 集羣

./start-yarn.sh
  • 使用 jps命令可以發現 SparkMaster 機器上啓動了 ResourceManager 進程。
    在這裏插入圖片描述
  • 而在 SparkWorker1SparkWorker2 上則分別啓動了 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:19888Web 控制檯上看到 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 控制檯可以發現成功上傳了文件。
    在這裏插入圖片描述
  • 也可以通過 HadoopHDFS 命令終端查看信息:
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 集羣構

點擊以查看實驗二

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章