【重製版】全網最詳細ubuntu虛擬機器搭建hadoop+spark+zookeeper+hbase+kafka大資料環境

szk171848581發表於2020-11-06

全網最詳細ubuntu虛擬機器搭建hadoop+spark+zookeeper+hbase+kafka大資料環境

一、必要準備工作

  1. 虛擬機器軟體+啟用金鑰(筆者推薦使用VMware 15以上版本,莫名其妙的錯較少)
  2. ubuntu虛擬機器映象,桌面版,命令版都可(筆者使用:ubuntu-20.04.1-live-server-amd64.iso)
  3. JDK 8以上(筆者使用:jdk-8u141-linux-x64.tar)
  4. xshell --> 本機可以連線虛擬機器,可選擇其他
  5. hadoop --> 搭建hadoop環境
  6. spark --> 搭建spark環境
  7. zookeeper --> 搭建zookeeper環境
  8. hbase --> 搭建hbase環境
  9. kafka --> 搭建kafka環境
    在這裡插入圖片描述

在這裡插入圖片描述

二、非必要準備工作(提升效率的準備)

1.notepad++ && NppFTP外掛 --> 請自行百度

2.sudo 命令免密碼

sudo vim /etc/sudoers

在檔案的 root ALL=(ALL:ALL) ALL 下面增加以下程式碼(筆者使用者名稱為:lq)

lq(你的使用者名稱)	ALL=(ALL)NOPASSWD: ALL

3.將使用者設定到 root組(筆者使用者名稱為:lq)

usermod -g root lq(你的使用者名稱)

說明:若命令列或者notepad++修改檔案不被允許,請使用 sudo chmod xxx 檔名,賦予讀寫執行等許可權。

三、ubuntu虛擬機器的安裝

1.參考連結

--->  https://ywnz.com/linuxaz/3696.html
--->  https://www.cnblogs.com/pam-sh/p/13204321.html

四、用命令設定網路

1.使用ifconfig檢視網路的名稱

ifconfig

圖4.1.01

2.修改檔案讓網路裝置自動獲取ip (也可以手動設定靜態ip,請自行百度)

sudo vim /etc/network/interfaces

內容如下:

auto ens33
iface ens33 inet dhcp

3.然後點選虛擬機器軟體的‘編輯’–>‘虛擬網路編輯器’,點選‘更改設定’,選擇‘VMnet8’,點選‘還原預設設定’

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

4.安裝 ssh --> 使xshell能夠連線到虛擬機器

sudo apt install ssh

5.安裝 lrzsz --> 使xhell能夠與虛擬機器上傳/下載檔案

sudo apt install lrzsz

五、整體環境配置說明

主機名與ip對應
192.168.121.xx0  ---  master
192.168.121.xx1  ---  slave1
192.168.121.xx2  ---  slave2

目錄說明
/usr/local/env/app  --- 軟體安裝目錄
/usr/local/env/software  --- 軟體壓縮安裝包
/usr/local/env/datas  --- 以後可能用到的資料上傳儲存目錄
/usr/local/env/temp  --- 臨時目錄,可以存放jar包,或許用不到
/usr/local/env/work  --- namenode & datanode 建立時按要求建立

所有環境變數設定檔案目錄為: /etc/bash.bashrc

注:有需要的軟體會在安裝目錄下新建 logs 或 xxx-log 資料夾,對應配置檔案中的 log-dir 屬性

1.涉及操作如下

1.1新建以上相關資料夾 (一行為一條命令,筆者使用者名稱為:lq)

1. cd /usr/local
2. sudo mkdir env
3. sudo chown lq -R env/
4. cd env
5. mkdir app
6. mkdir software
7. mkdir datas
8. mkdir temp
9. mkdir work
10. ll

1.2結果

圖5.1.2

2.xshell多次使用rz命令上傳軟體安裝包到software對應目錄

1.cd /usr/local/env/software
2.rz 
3.(選擇檔案)等待完成
4.rz
5.(選擇檔案)等待完成
.....

1.結果

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述

六、克隆虛擬機器

1.完整克隆出另外兩臺從機,過程如下

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

克隆之後可能會出現的問題,請移步最後的問題集錦。

2.分別更改兩臺從機的hostname

sudo vim /etc/hostname

slave1內容如下

slave1

slave2內容如下

slave2

3.分別更改三臺主機的hosts(前提是三臺機器的ip已經知道,或者ifconfig檢視到,且三臺機器ip必須不同)

sudo chmod 664 /etc/hosts (預設沒有讀寫許可權,執行此行命令)

sudo vim /etc/hosts

在適當的地方新增以下內容

192.168.121.xx0 master
192.168.121.xx1 slave1
192.168.121.xx2 slave2

3.更改三臺主機的hosts(效率方法)

3.1 三臺主機分別執行以下程式碼

sudo chmod 664 /etc/hosts

3.2 用notepad++連線master主機並在 /etc/hosts 增加以下內容

192.168.121.xx0 master
192.168.121.xx1 slave1
192.168.121.xx2 slave2

3.3 用xshell連線master主機,使用以下命令

下面的命令是把master主機的 /etc/hosts 檔案複製給slave1和slave2,減少重複操作,之後教程中涉及到三臺主機都要修改某個相同檔案時,都將採取這種辦法

1. scp -rp /etc/hosts lq@slave1:/etc
2. scp -rp /etc/hosts lq@slave2:/etc

注:克隆之後用ifconfig命令檢視一下三臺機器的ip,若出現ip一樣,則移步到最後的問題集錦

4.設定主從機之間相互無密碼ssh

4.1 設定 master 無密碼自登陸

主要有三步:①生成公鑰和私鑰、②匯入公鑰到認證檔案、③更改許可權

1. ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
2. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3. chmod 700 ~/.ssh
4. chmod 600 ~/.ssh/*

測試,第一次登入可能需要 yes 確認,之後就可以直接登入了:

ssh localhost

對於 slave1 、 slave2 和 slave3,進行無密碼自登陸設定,操作同上。

4.2 設定主機->從機的無密碼登入

執行如下命令(lq 為筆者的使用者名稱):

cat ~/.ssh/id_rsa.pub | ssh lq@slave1 'cat - >> ~/.ssh/authorized_keys'
cat ~/.ssh/id_rsa.pub | ssh lq@slave2 'cat - >> ~/.ssh/authorized_keys'

測試:

ssh slave1
ssh slave2

4.3 設定從機->主機的無密碼登入

分別在 slave1、slave2 上執行:

cat ~/.ssh/id_rsa.pub | ssh lq@master 'cat - >> ~/.ssh/authorized_keys'

------------ 下面進入大資料軟體安裝部分講解 ---------------

安裝軟體的總體過程介紹:

1.將軟體的壓縮包解壓到指定目錄(相當於win的安裝)

2.配置軟體到環境變數

3.軟體本身的配置

4.測試

七、安裝JDK

1.將 /usr/local/env/software 下的JDK壓縮包解壓到/usr/local/env/app (注意命令執行的路徑,只提醒一次,之後直接貼命令)

sudo tar -zxvf /usr/local/env/software/jdk-8u141-linux-x64.tar.gz -C /usr/local/env/app

2.將jdk配置到環境變數裡(a.使用notepad++ 或 b.使用vim編輯。)

sudo vim /etc/bash.bashrc

在檔案最後新增內容如下:

#java conf
export JAVA_HOME=/usr/local/env/app/jdk1.8.0_141
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH

注:前幾個軟體配置環境時會用vim講解,之後的軟體配置都採用notepad++的NppFTP外掛,以提高效率。

3.測試

使用scp命令將 /etc/bash.bashrc 檔案和配置好的 jdk1.8.0_141 檔案傳遞給slave1和slave2.

java -version

在這裡插入圖片描述

八、安裝 hadoop

1.將 /usr/local/env/software 下的hadoop壓縮包解壓到/usr/local/env/app (注意命令執行的路徑,再提醒一次,之後直接貼命令)

lq@master:/usr/local/env/software$ sudo tar -axvf hadoop-2.7.7.tar.gz -C /usr/local/env/app/

2.配置環境變數

sudo vim /etc/bash.bashrc

增加內容如下:

#hadoop conf
export HADOOP_HOME=/usr/local/env/app/hadoop-2.7.7
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop

注:前幾個軟體配置環境時會用vim講解,之後的軟體配置都採用notepad++的NppFTP外掛,以提高效率。

3.軟體本身的配置

3.1 修改/usr/local/env/app/hadoop-2.7.7/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/usr/local/env/app/jdk1.8.0_141

3.2 修改/usr/local/env/app/hadoop-2.7.7/etc/hadoop/core-site.xml

<configuration>
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://master:9000</value>
	</property>
	<property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/env/app/hadoop-2.7.7/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
</configuration>

3.3 修改/usr/local/env/app/hadoop-2.7.7/etc/hadoop/hdfs-site.xml

<configuration>
	<property>
		<name>dfs.http.address</name>
		<value>master:50070</value>
		<descriptipn>配置 HDFS 的 http 的訪問位置</descriptipn>
	</property>
	<property>
		<name>dfs.namenode.secondary.http-address</name>
		<value>master:50090</value>
	</property>
	<property>
		<name>dfs.replication</name>
		<value>2</value>
		<descriptipn>配置檔案塊的副本數,不能大於從機的個數</descriptipn>
	</property>
	<property>
		<name>dfs.namenode.name.dir</name>
		<value>file:///usr/local/env/work/name</value>
		<descriptipn>名位元組點訪問位置</descriptipn>
	</property>
	<property>
		<name>dfs.datanode.data.dir</name>
		<value>file:///usr/local/env/work/data</value>
		<descriptipn>資料節點訪問位置</descriptipn>
	</property>										
</configuration>

3.4 修改Slaves

master
slave1
slave2

3.5 修改yarn-env.sh

export JAVA_HOME=/usr/local/env/app/jdk1.8.0_141

3.6 修改yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
	<property>
		<name>yarn.resourcemanager.webapp.address</name>
		<value>master:8088</value>
	</property>
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>master</value>
	</property>

</configuration>

3.7 修改mapred-site.xml(複製一份模板檔案,再修改)

<configuration>
	<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>

</configuration>

3.8 測試

使用scp命令將 /etc/bash.bashrc 檔案和配置好的 hadoop-2.7.7 檔案傳遞給slave1和slave2.

對namenode節點進行格式化處理,如下命令。

cd /usr/local/env/app/hadoop-2.7.7/bin

./hdfs namenode -format

在這裡插入圖片描述

之後再執行

cd /usr/local/env/app/hadoop-2.7.7/sbin

./start-dfs.sh

在master檢視:(slave等也可檢視)

在這裡插入圖片描述
之後接著執行

./start-yarn.sh

在master檢視:(slave等也可檢視)

在這裡插入圖片描述

九、安裝spark

1. 解壓壓縮包到/usr/local/env/app

sudo tar -zxvf /usr/local/env/software/spark+(Tab匹配) -C /usr/local/env/app

2. 配置環境變數

sudo vim /etc/bash.bashrc

配置內容如下:

#spark conf
export SPARK_HOME=/usr/local/env/app/spark-2.4.5-bin-hadoop2.7
export PATH=${SPARK_HOME}/bin:${SPARK_HOME}/sbin:$PATH

3. 軟體本身的配置

切換到spark的安裝目錄的‘conf’資料夾下,將‘spark-env.sh.template ’複製重名命‘spark-env.sh’,然後使用‘sudo vim spark-env.sh’ 進行相應配置。

cp /usr/local/env/app/spark-2.4.5-bin-hadoop2.7/conf/spark-env.sh.template /usr/local/env/app/spark-2.4.5-bin-hadoop2.7/conf/spark-env.sh

使用vim配置spark環境(效率用notepad++)

sodu vim /usr/local/spark/conf/spark-env.sh

配置內容如下:

#java conf
	export JAVA_HOME=/usr/local/env/app/jdk1.8.0_141
	#hadoop conf
	export HADOOP_HOME=/usr/local/env/app/hadoop-2.7.7
	export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
	#hbase conf
	export HBASE_HOME=/usr/local/env/app/hbase-2.1.9
	
	export SPARK_MASTER_IP=master
	export SPARK_MASTER_PORT=7077
	export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${HADOOP_HOME}/lib/native
	export SPARK_DIST_CLASSPATH=$(/usr/local/env/app/hadoop-2.7.7/bin/hadoop classpath)

修改 slaves(先複製模板檔案再修改)為以下內容:

slave1
slave2

4. 測試

4.1 使用scp命令將 /etc/bash.bashrc 檔案和配置好的 spark-2.4.5-bin-hadoop2.7 檔案傳遞給slave1和slave2.

4.2 在master節點執行

cd /usr/local/env/app/spark-2.4.5-bin-hadoop2.7/sbin
./start-all.sh

4.3 檢視執行結果

在master節點上:(會有Master)

在這裡插入圖片描述
在slave節點上:(會有Worker)

在這裡插入圖片描述

十、zookeeper安裝

1. 解壓壓縮包到/usr/local/env/app

sudo tar -zxvf /usr/local/env/software/zookeeper+(Tab匹配) -C /usr/local/env/app

2. 配置環境變數

sudo vim /etc/bash.bashrc

配置內容如下:

#zookeeper conf
export ZOOKEEPER_HOME=/usr/local/env/app/zookeeper-3.5.8-bin
export PATH=${ZOOKEEPER_HOME}/bin:$PATH

3. 軟體本身的配置

cd /usr/local/env/app/zookeeper-3.5.8/conf
sudo cp zoo_sample.cfg zoo.cfg
sudo vim zoo.cfg

(叢集模式搭建)內容如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/env/app/zookeeper-3.5.8/zkData
dataLogDir=/usr/local/env/app/zookeeper-3.5.8/logs
clientPort=2181
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

在/usr/local/env/app/zookeeper-3.5.8/zkData新建myid檔案,各個主機對應的內容是不同的,master 的內容是 1,slave1 的內容是 2,slave2 的內容是3,分別對應 server.x 中的 x

sudo vim myid

注:

tickTime:是 zookeeper 的最小時間單元的長度,它被用來設定心跳檢測和會話最小超時時間
initLimit:初始化連線時能容忍的最長 tickTime 個數
syncLimit:follower 用於同步的最長 tickTime 個數
dataDir:伺服器儲存 資料快照 的目錄
dataLogDir:伺服器儲存 事務日誌 的目錄
clientPort:用於 client 連線的 server 的埠
其中需要注意的是 dataDir 和 dataLogDir,要保證這兩個目錄已經被建立並且使用者擁有這兩個目錄的許可權。

4. 測試

使用scp命令將 /etc/bash.bashrc 檔案和配置好的 zookeeper-3.5.8 檔案傳遞給slave1和slave2.

分別在master和slave上執行以下命令:

cd /usr/local/env/app/zookeeper-3.5.8/bin 
./zkServer.sh start

在master上檢視:(會有QuorumPeerMain)

在這裡插入圖片描述

在slave1上檢視:(會有QuorumPeerMain)

在這裡插入圖片描述

相關命令:
在這裡插入圖片描述

十一、hbase安裝

1. 解壓壓縮包到/usr/local/env/app

sudo tar -zxvf /usr/local/env/software/hbase+(Tab匹配) -C /usr/local/env/app

2. 配置環境變數

sudo vim /etc/bash.bashrc

配置內容如下:

#hbase conf
export HBASE_HOME=/usr/local/env/app/hbase-2.1.9
export PATH=${HBASE_HOME}/bin:$PATH

3. 軟體本身的配置

三臺機器上完全一樣,只需要配置完成一臺機器,再用scp命令複製到其餘兩臺機器上即可。檔案全在$HBASE_HOME/conf 下。

cd /usr/local/hbase-2.1.9/conf

在 ‘hbase-env.sh’中修改如下

#java conf and zk
export JAVA_HOME=/opt/jdk1.8.0_141
export HBASE_MANAGES_ZK=false #使用獨立的 Zookeeper 而不使用內建的

在 ‘hbase-site.xml’ 中修改如下

<configuration>
	<property>
		<name>hbase.rootdir</name>
		<value>hdfs://master:9000/hbase</value>
	</property>
	<property>
		<name>hbase.cluster.distributed</name>
		<value>true</value>
	</property>
</configuration>

在 ‘regionservers’ 中修改如下(根據實際機器修改)

master
slave1
slave2

配置 backup Master,在 conf/目錄下建立 backup-masters ,新增內容為

新建檔案

sudo vim backup-masters

內容

slave1

4. 測試

使用scp命令將 /etc/bash.bashrc 檔案和配置好的 hbase-2.1.9 檔案傳遞給slave1和slave2.
在啟動 HBase 之前,必須將 Hadoop 和 Zookeeper 都啟動起來,才可以起啟動 HBase。

cd /usr/local/env/app/hbase-2.1.9/bin
./start-hbase.sh

在master節點檢視:(會有HMaster)
在這裡插入圖片描述
在slave1節點檢視:(會有HMaster 和 HRegionServer)

在這裡插入圖片描述

在slave2節點檢視:(會有HRegionServer)

在這裡插入圖片描述

還可以在hbase環境裡進行建表等測試。

hbase shell
list
create 'test','info'
list

十二、kafka安裝

1. 解壓壓縮包到/usr/local/env/app

sudo tar -zxvf /usr/local/env/software/kafka+(Tab匹配) -C /usr/local/env/app

2. 配置環境變數

sudo vim /etc/bash.bashrc

配置內容如下:

#kafka conf
export KAFKA_HOME=/usr/local/env/app/kafka_2.11-2.4.1
export PATH=${KAFKA_HOME}/bin:$PATH

3. 軟體本身的配置

4. 測試

kafka啟動之前要確保zookeeper先啟動成功。

如圖所示:(涉及的命令在後面講解)

  1. 三臺機器在kafka安裝目錄執行以下命令。
    在這裡插入圖片描述
  2. 建立topics
    在這裡插入圖片描述
  3. 選擇一臺機器作為訊息生產者(傳送者)
    在這裡插入圖片描述
    傳送訊息,一行表示一條訊息。(有 > 標識)
    在這裡插入圖片描述
  4. 選擇機器作為訊息消費者(接收者)

在這裡插入圖片描述

5. 涉及的命令

//#守護程式模式 (   !*!*!==>     要在kafka的安裝目錄下執行下面的啟動命令  涉及到資料夾目錄的指定   )
bin/kafka-server-start.sh -daemon config/server.properties > logs/kafkaserver-boot.log 2>&1 &

bin/kafka-server-start.sh config/server.properties > logs/kafkaserver-boot.log 2>&1 &

//#建立 topics   partitions:分割槽   replication-factor:副本,要小於叢集的機器數
bin/kafka-topics.sh --create --zookeeper master:2181,slave1:2181,slave2:2181 --topic test01 --replication-factor 2 --partitions 3

bin/kafka-topics.sh --create --zookeeper master-s:2181,slave1-s:2181,slave2-s:2181 --topic test01 --replication-factor 2 --partitions 3

//#檢視 topics
bin/kafka-topics.sh --list --zookeeper master:2181,slave1:2181,slave2:2181
bin/kafka-topics.sh --describe --zookeeper master:2181,slave1:2181,slave2:2181 --topic TestCase

//#傳送 訊息
bin/kafka-console-producer.sh --broker-list master:9092 --topic test01
bin/kafka-console-producer.sh --broker-list master:9092,slave1:9092,slave2:9092 --topic test01

bin/kafka-console-producer.sh --broker-list master-s:9092 --topic test01


This is a message
This is another message
it is successful that producer send message

//#消費 訊息
bin/kafka-console-consumer.sh --bootstrap-server master:9092,slave1:9092,slave2:9092 --topic test01 --from-beginning
bin/kafka-console-consumer.sh --bootstrap-server master:9092,slave1:9092,slave2:9092 --topic TestCase --from-beginning 

//#delete topics (最好先檢視一下)
bin/kafka-topics.sh --delete --zookeeper master:2181,slave1:2181,slave2:2181 --topic xxx

//#結束

zkServer.sh stop
bin/kafka-server-stop.sh

十三、補充:

在這裡插入圖片描述

問題集錦:

1.克隆虛擬機器之後,三臺主機的ip地址一樣.

[ 方法一 ] 再進行【四、3】中的網路設定還原。然後分別再次啟動三臺主機。使用ifconfig命令檢視三臺主機的ip,並在 /etc/hosts 中修改對應ip。
[ 方法二 ] 在克隆出來的機器上,使用 sudo netplan apply 命令,然後關機(不是重啟),再開機,用 ifconfig 檢視三臺機器的ip,並在 /etc/hosts 中修改對應ip。
[ 方法三 ] 手動設定靜態ip,請自行百度。

相關文章