資料准備
參考博客
Hbase快速單機部署和偽分布式部署,完全分布式部署這里面寫了Hbase配置的作用挺詳細的
全分布式下安裝hbase(使用hbase自帶的zookeeper)
使用到的文件
onedrive下載地址(不限速)
VMware和XshellXftp可以用我的,其他的你有別的版本也可以用自己的
清華鏡像
Hbase文檔
版本適配
官網搬運的
綠色就可用
黃色是沒測試,可能可以、可能不可以
紅色就是沒法用
我這里直接用的比較新的Hadoop3.1.3+Hbase2.2.4
安裝VMware
提供的文件里把這個下下來,然后安裝。
一路裝下去就好,安裝完畢,第一次打開會讓你輸入密鑰
用這個生成密鑰復制粘貼即可XD
VMware網絡設置
打開控制面板
之后一路雙擊
這里要勾選然后雙擊
然后這樣設置
然后打開VMware
找到這里
先給權限
按照我給順序一路設置好
弄好之后一路確定
這樣VMware網絡就設置好了
安裝Ubuntu(后面配置比較麻煩就不推薦了,還是老老實實用CentOS)
之前都是用的centOS感覺安裝很麻煩,這次試試Ubuntu。
先創建一個虛擬機
選擇你的鏡像文件路徑
這里隨便寫記住密碼就好了,全名是你系統登錄時的名字,用戶名是你終端的名字,這里我填填反了哈哈哈
虛擬機起名master
位置隨意
這樣設置
自定義
這樣設置比較好
接下來等他自己安裝就好了XD,等了有幾十分鍾吧,回來的時候卡住了,但是重啟一下虛擬機就好了。Ubuntu真的省事不知道后面會不會出啥問題
root密碼
好吧第一個問題它的root密碼默認不啟動,是自動生成的每次登錄都不一樣
解決辦法:打開終端輸入
sudo passwd root
然后輸入在創建虛擬機時我叫你記住的密碼
一路走下來就OK了,Linux密碼不回顯的跟着提示做就好了
中文設置
系統自帶英文,中文需要下載語言包。這個我就不寫了吧,百度一下就好了。
寫到這里,再往后寫我發現Ubuntu和CentOS差異太大,網絡配置之類的區別很大,練得研究了。還是用回CentOS吧T^T
安裝CentOS 8(7也可以自己找教程哦)
創建虛擬機
自定義
以下除了我列出來的全部直接下一步
VMware暫不支持CentOS8故先選擇Red Had Linux 8
名字填master位置隨意
剩下的一直點下一步即可
編輯虛擬機選擇鏡像位置
確定后開啟虛擬機
選擇安裝
語言翻到最下面選中文,你要是會別的也行hhh
我選的最小安裝,你也可以安裝GUI不過可能會裝的久點,記住到網絡和主機名里把網連上(右上角有個滑塊,點擊就打開了)
安裝界面可以設置root密碼和添加用戶等,這里我已經添加好了,靜待安裝完成。
重啟
輸入用戶名和密碼(這里也可以直接輸入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,選擇克隆
用同樣方法克隆slave1
完成后
slave0和slave1的網絡配置
首先打開slave0登錄root賬戶
輸入vi /etc/sysconfig/network-scripts/ifcfg-ens160
最后一個字段是你的網卡名,具體是啥自己改呀。可以先進入/etc/sysconfig/network-scripts
再ls即可看到
修改ip地址即可,改為192.168.56.111
同樣的方法更改slave1的ip地址為192.168.56.112
同步時間
關閉三台虛擬機
將三台機器都設置成這樣
Xshell5的安裝與使用
Xshell可以連接多台服務器,並進行命令操作
1、安裝
雙擊
位置隨意
其余的直接下一步就行了
2、Xshell5的使用
名字最好和虛擬機相同,ip地址對應好就行
master:192.168.56.110
slave0:192.168.56.111
slave1:192.168.56.112
首次連接要輸入用戶名和密碼,記得點保存
雙擊
記住用戶名
記住密碼
出現如下字樣就成功了
其它兩台從機同樣的操作
這之后只需要打開虛擬機,Xshell里輸入命令就好了,Xshell里可以復制粘貼(終於不用手敲命令了yes!!!)
Xftp5的安裝與使用
Xftp5的作用
可以同時連接多台服務器,將多台服務器連接在一台機器上操作,這樣就不用在每台服務器上進行操作,方便遠程操作服務器;主要是對服務器進行文件傳輸操作
Xftp5的安裝
雙擊
后面隨意就好了
Xftp5的使用
如果FTP協議不行就換SFTP
防止亂碼
slave0和slave1用同樣的方法連上
關閉防火牆
首先打開並登陸master服務器
先查看防火牆狀態
systemctl status firewalld.service
綠色部分不表示防火牆已打開
關閉防火牆
systemctl stop firewalld.service
已關閉
防止重啟服務器防火牆啟動
systemctl disable firewalld.service
這樣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
然后按四次回車,出現下面內容
然后輸入下面命令進入ssh文件夾
cd ~/.ssh
輸入下面命令可以看文件夾里面的內容
ls -l
然后輸入下面命令把公鑰文件發送到自己和其它服務器
發送給自己
ssh-copy-id -i id_rsa.pub root@master
輸入yes
輸入密碼
成功后顯示如下內容
然后再分別發送給slave0和slave1
驗證是否成功
在master服務器輸入下面的命令,都不需要輸入密碼,就說明成功了,注意每執行完一條命令都用exit退出一下再執行下一條
ssh master
ssh slave0
ssh slave1
安裝JDK
首先在master服務器的usr/local目錄下新建一個java文件夾,用下面命令就可以完成
mkdir /usr/local/java
然后用Xftp連接master服務器,打開usr/local/java這個目錄,把jdk-8u162-linux-x64.tar復制進去
接着用下面的命令進入到該目錄
cd /usr/local/java
接着用下面的命令進行解壓
tar -zxvf jdk-8u162-linux-x64.tar.gz
然后就解壓好了
接下來開始配置環境變量,先用cd命令回到總目錄
輸入下面命令開始配置
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環境
這樣就安裝好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
然后在slave0中輸入下面內容使環境變量生效
source /root/.bash_profile
java -version
驗證下
這樣 slave0中的jdk就安裝成功了,slave1,與slave0類似,這里不做演示
Hadoop安裝與環境配置
先用下面的命令給opt文件夾中新建一個hapoop文件夾
mkdir /opt/hadoop
把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
使用下面命令把hadoop-2.7.5文件夾重命名成hadoop
mv hadoop-3.1.3 hadoop
配置hadoop-env.sh
該文件設置的是Hadoop運行時需要的環境變量。JAVA_HOME是必須設置的,即使我們當前的系統設置了JAVA_HOME,它也是不認識的,因為Hadoop即使是在本機上執行,它也是把當前執行的環境當成遠程服務器。所以這里設置的目的是確保Hadoop能正確的找到jdk。
先用cd回到主目錄
然后輸入下面命令進入該文件所在的文件夾
cd /opt/hadoop/hadoop/etc/hadoop
用ls就可以看到該文件
然后輸入下面命令打開該文件
vi hadoop-env.sh
然后修改成下面的內容
export JAVA_HOME=/usr/local/java/jdk1.8.0_162/
配置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>
配置hdfs-site.xml
hdfs-site.xml所在的目錄和上面的目錄一樣,所以直接使用下面命令打開該文件即可
vi hdfs-site.xml
接着把下面命令寫入
<!-- 指定HDFS副本的數量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
配置yarn-site.xml
yarn-site.xml所在的目錄和上面的目錄一樣,所以直接使用下面命令打開該文件即可
vi yarn-site.xml
接着把下面命令寫入
<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>
配置mapred-site.xml
然后用下面命令打開該文件
vi mapred-site.xml
接着把下面命令寫入
<!-- 指定mr運行時框架,這里指定在yarn上,默認是local -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
配置slaves(3.0以上變為workers)
slaves所在的目錄和上面的目錄一樣,所以直接使用下面命令打開該文件即可
vi slaves(workers)
把下面代碼寫進去(刪掉localhost)
master
slave0
slave1
配置Hadoop環境變量
先用cd命令回到總目錄
輸入下面命令開始配置
vi /root/.bash_profile
把下面命令輸入進去
export HADOOP_HOME=/opt/hadoop/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
然后保存退出輸入下面內容使環境變量生效
source /root/.bash_profile
新建Hadoop運行時產生文件的儲存目錄
先用cd命令回到總目錄
接着用下面命令新建目錄
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
報錯(如問題指南中最后一個問題)
解決后重新啟動,各個結點顯示如下信息
在瀏覽器中輸入
192.168.56.110:9870
可通過web端查看
關閉Hadoop
只需要在master服務器輸入下面命令即可
stop-all.sh
Hbase安裝與配置
master節點
新建hbase文件夾
mkdir /opt/hbase
把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
在~/.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
配置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也可)
大功告成!!!!
問題指南
無法連接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頁面
打開日志
報錯
hbase-site.xml添加配置
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>