VMware下Hbases完全分布式安裝-1master+2slave


資料准備

參考博客

Hadoop完全分布式

Hbase完全分布式安裝

Hbase快速單機部署和偽分布式部署,完全分布式部署這里面寫了Hbase配置的作用挺詳細的

全分布式下安裝hbase(使用hbase自帶的zookeeper)

使用到的文件

onedrive下載地址(不限速)

https://mailszpteducn-my.sharepoint.com/:f:/g/personal/15020739_mail_szpt_edu_cn/Eh0lYpfEn2ZAga928a9A3HUBtIU4qwzJEN3rzjId1tApyA?e=OB68NP

VMware和XshellXftp可以用我的,其他的你有別的版本也可以用自己的

清華鏡像

Hadoop

Hbase文檔

中文文檔

官方文檔

版本適配

官網搬運的

綠色就可用

黃色是沒測試,可能可以、可能不可以

紅色就是沒法用

我這里直接用的比較新的Hadoop3.1.3+Hbase2.2.4

安裝VMware

提供的文件里把這個下下來,然后安裝。

image-20200506195233435

一路裝下去就好,安裝完畢,第一次打開會讓你輸入密鑰

image-20200506195503406

用這個生成密鑰復制粘貼即可XD

VMware網絡設置

打開控制面板

之后一路雙擊

image-20200506195807230

image-20200506195852303

image-20200506195927847

這里要勾選然后雙擊

然后這樣設置

然后打開VMware

找到這里

先給權限

按照我給順序一路設置好

弄好之后一路確定

這樣VMware網絡就設置好了

安裝Ubuntu(后面配置比較麻煩就不推薦了,還是老老實實用CentOS)

之前都是用的centOS感覺安裝很麻煩,這次試試Ubuntu。

先創建一個虛擬機

選擇你的鏡像文件路徑

這里隨便寫記住密碼就好了,全名是你系統登錄時的名字,用戶名是你終端的名字,這里我填填反了哈哈哈

虛擬機起名master

位置隨意

這樣設置

自定義

這樣設置比較好

接下來等他自己安裝就好了XD,等了有幾十分鍾吧,回來的時候卡住了,但是重啟一下虛擬機就好了。Ubuntu真的省事不知道后面會不會出啥問題

root密碼

好吧第一個問題它的root密碼默認不啟動,是自動生成的每次登錄都不一樣

解決辦法:打開終端輸入sudo passwd root

然后輸入在創建虛擬機時我叫你記住的密碼

一路走下來就OK了,Linux密碼不回顯的跟着提示做就好了

中文設置

系統自帶英文,中文需要下載語言包。這個我就不寫了吧,百度一下就好了。

寫到這里,再往后寫我發現Ubuntu和CentOS差異太大,網絡配置之類的區別很大,練得研究了。還是用回CentOS吧T^T

安裝CentOS 8(7也可以自己找教程哦)

創建虛擬機

image-20200506210239369

自定義

以下除了我列出來的全部直接下一步

VMware暫不支持CentOS8故先選擇Red Had Linux 8

名字填master位置隨意

剩下的一直點下一步即可

編輯虛擬機選擇鏡像位置

確定后開啟虛擬機

選擇安裝

語言翻到最下面選中文,你要是會別的也行hhh

我選的最小安裝,你也可以安裝GUI不過可能會裝的久點,記住到網絡和主機名里把網連上(右上角有個滑塊,點擊就打開了)

安裝界面可以設置root密碼和添加用戶等,這里我已經添加好了,靜待安裝完成。

重啟

image-20200506233043176

輸入用戶名和密碼(這里也可以直接輸入root 和root密碼進入管理員)

這樣就登錄成功了

Master網絡配置

輸入cd /etc/sysconfig/network-scripts(這里告訴大家一個小技巧alt+tab可以補全命令自己試試吧)

進入該目錄后輸入ls查看配置文件名

輸入vi ifcfg-ens160出現以下內容

改成這樣

按i編輯

按esc進入普通(命令)模式

按“shift+:”進入命令行模式,此時輸入wq即可保存並退出

重啟網絡service network restart

此時會報錯:Failed to restart network.service: Unit network.service not found.

出現這個錯誤的原因是CentOS8已經廢棄network.service。只能通過其他方法進行網絡配置包括NM命令工具集

可以參考:https://www.cnblogs.com/RXDXB/p/11660184.html

這里我已經完成了網絡的配置,此時只需要使用這個命令使其生效即可(別問我我也不知道啥是NM)

nmcli c reload

如果還是不行先輸入service NetworkManager start開啟NetworkManager

想要開機自啟NetworkManager 輸入chkconfig NetworkManager on

NetworkManager(NetworManager)是檢測網絡、自動連接網絡的程序。無論是無線還是有線連接,它都可以令您輕松管理。對於無線網絡,網絡管理器可以自動切換到最可靠的無線網絡。利用網絡管理器的程序可以自由切換在線和離線模式。網絡管理器可以優先選擇有線網絡,支持 VPN。網絡管理器最初由 Redhat 公司開發,現在由 GNOME 管理。
————————————————
版權聲明:本文為CSDN博主「xtggbmdk」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xtggbmdk/java/article/details/80921606

ping 一下自己

ping 192.168.56.110

這樣就成功了。Ctrl c停止

然后輸入shutdown now關機為下一步做准備

從master克隆slave0和slave1

右擊master,選擇克隆

image-20200507132815330

image-20200507141713543

image-20200507141814282

用同樣方法克隆slave1

完成后

image-20200507142636837

slave0和slave1的網絡配置

首先打開slave0登錄root賬戶

輸入vi /etc/sysconfig/network-scripts/ifcfg-ens160最后一個字段是你的網卡名,具體是啥自己改呀。可以先進入/etc/sysconfig/network-scripts再ls即可看到

修改ip地址即可,改為192.168.56.111

image-20200507143456174

image-20200507143719803

同樣的方法更改slave1的ip地址為192.168.56.112

image-20200507144304328

同步時間

關閉三台虛擬機

image-20200507144442814

image-20200507144613003

將三台機器都設置成這樣

image-20200507144825635

Xshell5的安裝與使用

Xshell可以連接多台服務器,並進行命令操作

1、安裝

雙擊

image-20200507145405702

image-20200507145458266

位置隨意

image-20200507145610765

其余的直接下一步就行了

2、Xshell5的使用

image-20200507145754170

名字最好和虛擬機相同,ip地址對應好就行

master:192.168.56.110

slave0:192.168.56.111

slave1:192.168.56.112

image-20200507150155831

首次連接要輸入用戶名和密碼,記得點保存

雙擊

image-20200507152706488

記住用戶名

image-20200507152755726

記住密碼

image-20200507152826345

出現如下字樣就成功了

image-20200507152905988

其它兩台從機同樣的操作

這之后只需要打開虛擬機,Xshell里輸入命令就好了,Xshell里可以復制粘貼(終於不用手敲命令了yes!!!)

Xftp5的安裝與使用

Xftp5的作用

可以同時連接多台服務器,將多台服務器連接在一台機器上操作,這樣就不用在每台服務器上進行操作,方便遠程操作服務器;主要是對服務器進行文件傳輸操作

Xftp5的安裝

雙擊

image-20200605150243358

image-20200605150456205

image-20200605150518195

后面隨意就好了

Xftp5的使用

image-20200605150907193

image-20200605151032367

如果FTP協議不行就換SFTP

防止亂碼

image-20200605151121369

slave0和slave1用同樣的方法連上

關閉防火牆

首先打開並登陸master服務器

先查看防火牆狀態

systemctl status firewalld.service

image-20200605161347558

綠色部分不表示防火牆已打開

關閉防火牆

systemctl stop firewalld.service

image-20200605161626746

已關閉

防止重啟服務器防火牆啟動

systemctl disable firewalld.service

image-20200605161804798

這樣master的防火牆就關閉了,另外兩台操作相同

設置主機名

先在master服務器上操作’,輸入下面命令

vi /etc/sysconfig/network

按 i 編輯,輸入如下代碼,按esc>shift+:>wq

# Created by anaconda
NETWORKING=yes
HOSTNAME=master//另外兩台改成slave0和slave1

這樣從起后又會變成localhost

修改靜態主機名

vi /etc/hostname

刪掉原來的改為

maser

重啟主機,就發現主機名變了,另外兩台同理

hosts設置

如果要使用計算機名進行網絡訪問,需要修改hosts文件的主機名IP地址對照表,(root用戶下操作)

輸入

vi /etc/hosts

再輸入

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.56.110 master
192.168.56.111 slave0
192.168.56.112 slave1

三台都需要這樣設置

免密鑰登陸配置

首先在master服務器輸入下面命令

ssh-keygen -t rsa

然后按四次回車,出現下面內容

image-20200605170544966

然后輸入下面命令進入ssh文件夾

cd ~/.ssh

輸入下面命令可以看文件夾里面的內容

ls -l

image-20200605170706851

然后輸入下面命令把公鑰文件發送到自己和其它服務器

發送給自己

ssh-copy-id -i id_rsa.pub root@master

輸入yes

image-20200605170900345

輸入密碼

image-20200605170918538

成功后顯示如下內容

image-20200605171047116

然后再分別發送給slave0和slave1

image-20200605171155057

image-20200605171232377

驗證是否成功

在master服務器輸入下面的命令,都不需要輸入密碼,就說明成功了,注意每執行完一條命令都用exit退出一下再執行下一條

ssh master
ssh slave0
ssh slave1

image-20200605171407604

安裝JDK

首先在master服務器的usr/local目錄下新建一個java文件夾,用下面命令就可以完成

mkdir /usr/local/java

然后用Xftp連接master服務器,打開usr/local/java這個目錄,把jdk-8u162-linux-x64.tar復制進去

image-20200605182309254

接着用下面的命令進入到該目錄

cd /usr/local/java

接着用下面的命令進行解壓

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

然后就解壓好了

image-20200605183315649

接下來開始配置環境變量,先用cd命令回到總目錄

img

輸入下面命令開始配置

vi /root/.bash_profile

按照我的配置來

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
export JAVA_HOME=/usr/local/java/jdk1.8.0_162
export PATH=$JAVA_HOME/bin:$PATH

然后保存退出輸入下面內容使環境變量生效

source /root/.bash_profile

然后輸入java、javac和java -version驗證,如果都出現一大堆代碼說明配置成功了,如果其中有一個或多個出現不是內部或外部命令,也不是可運行的程序或批處理文件等類似語句,就說明配置失敗了,需要重新配置jdk環境

image-20200605184135102

這樣就安裝好master服務器的jdk了,但是還沒有安裝好slave0和slave1的jdk,我們可以用下面命令把master中的jdk復制到slave0上面

scp -r /usr/local/java root@slave0:/usr/local

這時已經把jdk復制到slave0了,但是slave0的環境變量還沒有配置,我們同樣可以使用下面命令來復制環境變量

scp -r /root/.bash_profile root@slave0:/root

img

然后在slave0中輸入下面內容使環境變量生效

source /root/.bash_profile
java -version

驗證下

這樣 slave0中的jdk就安裝成功了,slave1,與slave0類似,這里不做演示

Hadoop安裝與環境配置

先用下面的命令給opt文件夾中新建一個hapoop文件夾

mkdir /opt/hadoop

image-20200605190027193

把hadoop-3.1.3.tar.gz復制到hadoop文件夾(從左邊本地拖過去即可)

使用下面命令進入到hadoop文件夾

cd /opt/hadoop

使用下面命令把hadoop-3.1.3.tar.gz進行解壓

tar -zxvf hadoop-3.1.3.tar.gz

image-20200605190907924

使用下面命令把hadoop-2.7.5文件夾重命名成hadoop

mv hadoop-3.1.3 hadoop

image-20200605191005437

配置hadoop-env.sh

該文件設置的是Hadoop運行時需要的環境變量。JAVA_HOME是必須設置的,即使我們當前的系統設置了JAVA_HOME,它也是不認識的,因為Hadoop即使是在本機上執行,它也是把當前執行的環境當成遠程服務器。所以這里設置的目的是確保Hadoop能正確的找到jdk。

先用cd回到主目錄

img

然后輸入下面命令進入該文件所在的文件夾

cd /opt/hadoop/hadoop/etc/hadoop

img

用ls就可以看到該文件

image-20200605191317728

然后輸入下面命令打開該文件

vi hadoop-env.sh

然后修改成下面的內容

export JAVA_HOME=/usr/local/java/jdk1.8.0_162/

image-20200605191823053

配置core-site.xml

core-site.xm所在的目錄和上面的目錄一樣,所以直接使用下面命令打開該文件即可

vi core-site.xml

接着把下面命令寫入 中,注釋不用寫

<!-- 指定Hadoop所使用的文件系統schema(URL),HDFS的老大(NameNode)的地址 -->
<property>
	<name>fs.defaultFS</name>
	<value>hdfs://master:9000</value>
</property>
<!-- 指定Hadoop運行時產生文件的儲存目錄,默認是/tmp/hadoop-${user.name} -->
<property>
	<name>hadoop.tmp.dir</name>
	<value>/opt/hadoop/hadoopdata</value>
</property>

image-20200605192135194

配置hdfs-site.xml

hdfs-site.xml所在的目錄和上面的目錄一樣,所以直接使用下面命令打開該文件即可

vi hdfs-site.xml

接着把下面命令寫入 中,注釋不用寫

<!-- 指定HDFS副本的數量 -->
<property>
	<name>dfs.replication</name>
	<value>1</value>
</property>

img

配置yarn-site.xml

yarn-site.xml所在的目錄和上面的目錄一樣,所以直接使用下面命令打開該文件即可

vi yarn-site.xml

img

接着把下面命令寫入 中,里面自帶的注釋不用刪除

<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>
<property>
	<name>yarn.resourcemanager.address</name>
	<value>master:18040</value>
</property>
<property>
	<name>yarn.resourcemanager.scheduler.address</name>
	<value>master:18030</value>
</property>
<property>
	<name>yarn.resourcemanager.resource-tracker.address</name>
	<value>master:18025</value>
</property>
<property>
	<name>yarn.resourcemanager.admin.address</name>
	<value>master:18141</value>
</property>
<property>
	<name>yarn.resourcemanager.webapp.address</name>
	<value>master:18088</value>
</property>

image-20200605192836598

配置mapred-site.xml

然后用下面命令打開該文件

vi mapred-site.xml

接着把下面命令寫入 中,注釋不用寫

<!-- 指定mr運行時框架,這里指定在yarn上,默認是local -->
<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>

img

配置slaves(3.0以上變為workers)

img

slaves所在的目錄和上面的目錄一樣,所以直接使用下面命令打開該文件即可

vi slaves(workers)

把下面代碼寫進去(刪掉localhost)

master
slave0
slave1

配置Hadoop環境變量

先用cd命令回到總目錄

img

輸入下面命令開始配置

vi /root/.bash_profile

image-20200605194010429

把下面命令輸入進去

export HADOOP_HOME=/opt/hadoop/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

image-20200605194116048

然后保存退出輸入下面內容使環境變量生效

source /root/.bash_profile

新建Hadoop運行時產生文件的儲存目錄

先用cd命令回到總目錄

img

接着用下面命令新建目錄

mkdir /opt/hadoop/hadoopdata

給slave0和slave1復制Hadoop

用下面命令就可以把master的Hadoop復制到slave0

scp -r /opt/hadoop root@slave0:/opt

用下面命令把master的Hadoop復制到slave1

scp -r /opt/hadoop root@slave1:/opt

接着用下面命令把master的環境變量復制到slave0上

scp -r /root/.bash_profile root@slave0:/root

然后在slave0中輸入下面內容使環境變量生效

source /root/.bash_profile

slave1與slave0類似,這里不做演示

格式化文件系統

在master中輸入下面命令格式化文件系統,其余倆台服務器不用,注意該命令只能使用一次

hadoop namenode -format

啟動Hadoop

在master服務器上,先用下面命令進入Hadoop的sbin目錄

cd /opt/hadoop/hadoop/sbin

然后輸入下面命令啟動

start-all.sh

報錯(如問題指南中最后一個問題)

解決后重新啟動,各個結點顯示如下信息

image-20200605231008241

image-20200605231908256

image-20200605231049710

在瀏覽器中輸入

192.168.56.110:9870

可通過web端查看

image-20200606091840717

關閉Hadoop

只需要在master服務器輸入下面命令即可

stop-all.sh

Hbase安裝與配置

master節點

新建hbase文件夾

mkdir /opt/hbase

image-20200606100937731

把hbase-2.2.4-bin.tar.gz復制到hbase文件夾(從左邊本地拖過去即可)

使用下面命令進入到hadoop文件夾

cd /opt/hbase

使用下面命令把hbase-2.2.4-bin.tar.gz進行解壓

tar -zxvf hbase-2.2.4-bin.tar.gz

重命名文件夾

mv hbase-2.2.4 hbase

image-20200606104551477

~/.bash-profile中配置環境變量

vi /root/.bash_profile
//添加下面兩個參數
export HBASE_HOME=/opt/hbase/hbase
export PATH=$HBASE_HOME/bin:$PATH

配置生效

source /root/.bash_profile

配置hbase-env.sh

cd /opt/hbase/hbase/conf
vi hbase-env.sh

然后修改成c下面的內容

export JAVA_HOME=/usr/local/java/jdk1.8.0_162/
#使用自帶zk,false為使用外部zk
export HBASE_MANAGES_ZK=true

image-20200606105124111

配置hbase-site.xml

新建zookeeper數據文件夾

cd /opt/hbase
mkdir hbasedata
cd hbasedata
mkdir zookeeper

{$HBASE_HOME}/conf/hbase-site.xml

cd /opt/hbase/hbase/conf
vi hbase-site.xml
<!--將本地文件系統更改為HDFS實例的地址,即hbase產生的數據將位於hdfs集群上 -->
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://master:9000/hbase</value>
  </property>
 <!--hbase依賴於zookeeper,指定zookeeper產生的數據位置 -->
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/opt/hbase/hbasedata/zookeeper</value>
  </property>
   <property>
        <name>hbase.master</name>
        <value>master</value>
  </property>
 
  <!--該屬性默認為true -->
  <!--指示HBase以分布式模式運行 -->
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
<!--指示使用zk的主機地址,奇數個 -->
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>master,slave0,slave1</value>
  </property>
<property>
  <name>hbase.unsafe.stream.capability.enforce</name>
  <value>false</value>
</property>

配置regionservers

修改{$HBASE_HOME}/conf/regionservers,原文件內容為localhost

vi regionservers
slave0
slave1

配置高可用備份master(可以不配)

在conf下創建backup-masters文件並添加備用master節點信息

slave0

配置zookeeper服務所在的節點,在hbase-site.xml下添加

  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>master,slave0,slave1</value>
  </property>

給slave0和slave1復制Hbase

用下面命令就可以把master的Hbase復制到slave0

scp -r /opt/hbase root@slave0:/opt

用下面命令就可以把master的Hbase復制到slave1

scp -r /opt/hbase root@slave1:/opt

接着用下面命令把master的環境變量復制到slave0上

scp -r /root/.bash_profile root@slave0:/root

然后在slave0中輸入下面內容使環境變量生效

source /root/.bash_profile

slave1與slave0類似,這里不做演示

啟動Hbase

先啟動hdfs

vi /opt/hadoop/hadoop/sbin/start-dfs.sh

再啟動Hbase

cd /opt/hbase/hbase/bin
start-hbase.sh

訪問web頁面

192.168.56.110:16010(master:16010也可)

image-20200606142512401

大功告成!!!!

問題指南

無法連接Xshell或者Xftp

如果Xshell或者Xftp連接不上,看看虛擬機ping自己能不能連上,不行的話需要重啟網絡

先輸入第一個命令,能ping通就好,不行就再輸入下面兩個應該就可以了

nmcli c reload
nmcli networking off
nmcli networking on

Hadoop 3.0的坑

1、hdfs的web頁面默認端口是9870 yarn的web頁面端口是8088
2、配置文件中的slaves文件沒了,變成了workers文件,在里面配置datanode節點
3、在進行namenode格式化是有幾個Fail,不要因此懷疑自己,只要common.Storage: Storage directory /usr/local/hadoop-3.0.2/hdfs/name has been successfully formatted. 這個提醒是存在的就沒有問題
4、在啟動時,start-dfs.sh start-yarn.sh時報錯

Starting namenodes on [namenode]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [datanode1]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
Starting resourcemanager
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
Starting nodemanagers
ERROR: Attempting to operate on yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation.

解決辦法:

進入sbin目錄

cd /opt/hadoop/hadoop/sbin

在里面修改四個文件

vi start-dfs.sh
vi stop-dfs.sh
vi start-yarn.sh
vi stop-yarn.sh

注意是在文件開始空白處
對於start-dfs.sh和stop-dfs.sh中:

#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

對於start-yarn.sh和stop-yarn.sh文件,添加下列參數:

#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

這樣就解決了

Hmaster先打開又關閉,導致無法訪問web頁面

打開日志

報錯

image-20200606140320949

hbase-site.xml添加配置

    <property>
      <name>hbase.unsafe.stream.capability.enforce</name>
      <value>false</value>
    </property>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM