非生產(chǎn)環(huán)境,就使用一個(gè)新一點(diǎn)的版本,提前先踩踩坑,版本的選型真是一個(gè)頭疼的問(wèn)題,先看一下apache的官網(wǎng)的測(cè)試圖:
偽分布式看這里:
配置之前:若是用偽分布式時(shí),在本機(jī)必須生成key-gen 與ssh-copy-id到本機(jī),且hosts中必須加入127.0.0.1 ?本機(jī)名并關(guān)閉防火墻這幾步才可以,否則會(huì)報(bào)
ryan.pub: ssh: connect to host ryan.pub port 22: No route to host
ryan.pub: Warning: Permanently added 'ryan.pub' (ECDSA) to the list of known hosts.
先選好Spark:3.0.1
對(duì)應(yīng)的Hadoop:3.2和2.7中選一個(gè),綜合上面的圖,2.7無(wú)法使用HBase,只能選3.2了
#hadoop軟件:
http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1-src.tar.gz
#spark軟件:
http://archive.apache.org/dist/spark/spark-3.0.1/spark-3.0.1-bin-hadoop3.2.tgz
#spark源碼
http://archive.apache.org/dist/spark/spark-3.0.1/spark-3.0.1.tgz
#hadoop源碼
http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
HBase:2.3.3
http://archive.apache.org/dist/hbase/2.3.3/hbase-2.3.3-bin.tar.gz
Hive: 3.1.2
http://archive.apache.org/dist/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
ZooKeeper: 3.5.5
http://archive.apache.org/dist/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz
Kafka:2.6-scala2.12
http://mirror.bit.edu.cn/apache/kafka/2.6.0/kafka_2.12-2.6.0.tgz
Flume:1.9
http://mirror.bit.edu.cn/apache/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz
集群環(huán)境配置:
主機(jī)名稱/IP | spark | hadoop | mysql | hbase | hive | zookeeper | flume | kafka | redis |
linux01.pub/192.168.10.10 | 1 | 1 | 1 | 1 | 1 | ||||
linux02.pub/192.168.10.11 | 1 | 1 | 1 | ||||||
linux03.pub/192.168.10.12 | 1 | 1 | 1 | ||||||
linux04.pub/192.168.10.13 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||
linux05.pub/192.168.10.14 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||
linux06.pub/192.168.10.15 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
一、基礎(chǔ)環(huán)境配置
1、先在linux01上安裝mysql
千萬(wàn)記住,安裝前一定要?jiǎng)h除本機(jī)所有的Mysql或Mariadb
#!/bin/bash
service mysql stop 2>/dev/null
service mysqld stop 2>/dev/null
rpm -qa | grep -i mysql | xargs -n1 rpm -e --nodeps 2>/dev/null
rpm -qa | grep -i mariadb | xargs -n1 rpm -e --nodeps 2>/dev/null
rm -rf /var/lib/mysql
rm -rf /usr/lib64/mysql
rm -rf /etc/my.cnf
rm -rf /usr/my.cnf
直接參照此前寫(xiě)過(guò)的這篇,不再重復(fù)
https://blog.csdn.net/qq_36269641/article/details/109641947
檢查,mysql是否安裝成功,可以用netstat, 如果沒(méi)有可以用以下命令安裝
# 安裝網(wǎng)絡(luò)工具
yum install -y net-tools
# 查看端口或程序
netstat -nltp |grep mysqld ?#或 3306
?2、網(wǎng)絡(luò)改成靜態(tài)地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
注:網(wǎng)卡名稱可能不一致,ifcfg-ens**(*為數(shù)字)即是配置文件??梢允褂迷谶M(jìn)入該文件夾后查看所有文件,符合名稱的即為網(wǎng)卡配置文件或使用 ip addr查看。
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static ? ? ? ? ?//將原文件里的改為此處,使用靜態(tài)ip
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes ? ? ? ? ? ? ? //將原文件里的改為此處,默認(rèn)打開(kāi)網(wǎng)卡
NETMASK=255.255.255.0 ? ?//新增:此處為子網(wǎng)掩碼
GATEWAY=192.168.**.* ? ? //新增:此處為網(wǎng)關(guān)
IPADDR=192.168.**.* ? ?//新增:此處為ip地址,需與子網(wǎng)保持在一個(gè)網(wǎng)段內(nèi),最后一位隨意(1~254)
DNS1=114.114.114.114 ? ? //新增:域名解析服務(wù)器
DNS2=119.29.29.29 ? ? ? ?//新增:域名解析服務(wù)器
保存后,重啟網(wǎng)卡服務(wù)即可(systemctl ?restart network)。測(cè)試主機(jī)與虛擬機(jī)互 ping 以及虛擬機(jī) ping 百度。
3、安裝必要插件
sudo yum install -y epel-release
sudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git
4.修改主機(jī)名
主機(jī)名分別為:
hostnamectl ?set-hostname ?hadoop-master(主機(jī)名)
?vim /etc/hosts #加上以下內(nèi)容
192.168.29.151 cluster01?? ?#第一臺(tái)機(jī)器的ip和主機(jī)名
192.168.29.152 cluster02?? ?#第二臺(tái)機(jī)器的ip和主機(jī)名
192.168.29.153 cluster03?? ?#第三臺(tái)機(jī)器的ip和主機(jī)名
192.168.29.154 cluster04?? ?#第四臺(tái)機(jī)器的ip和主機(jī)名
192.168.29.155 cluster05?? ?#第五臺(tái)機(jī)器的ip和主機(jī)名
?
5.關(guān)閉防火墻
# 禁止開(kāi)機(jī)啟動(dòng)
systemctl disable firewalld
# 關(guān)閉防火墻
systemctl stop firewalld
?
6、創(chuàng)建atguigu用戶,并修改atguigu用戶的密碼
?useradd atguigu
?passwd atguigu
?
1)配置atguigu用戶具有root權(quán)限,方便后期加sudo執(zhí)行root權(quán)限的命令
?vim /etc/sudoers
修改/etc/sudoers文件,在%wheel這行下面添加一行,如下所示:
\## Allow root to run any commands anywhere
root ? ALL=(ALL) ? ALL
\## Allows people in group wheel to run all commands
%wheel ?ALL=(ALL) ? ?ALL
atguigu ?ALL=(ALL) ? NOPASSWD:ALL
?
注意:atguigu這一行不要直接放到root行下面,因?yàn)樗杏脩舳紝儆趙heel組,你先配置了atguigu具有免密功能,但是程序執(zhí)行到%wheel行時(shí),該功能又被覆蓋回需要密碼。所以atguigu要放到%wheel這行下面。
2)在/opt目錄下創(chuàng)建文件夾,并修改所屬主和所屬組
(1)在/opt目錄下創(chuàng)建module、software文件夾
?mkdir /opt/module
?mkdir /opt/software
?
? (2)修改module、software文件夾的所有者和所屬組均為atguigu用戶
? chown atguigu:atguigu /opt/module?
? chown atguigu:atguigu /opt/software
(3)查看module、software文件夾的所有者和所屬組
?cd /opt/
?ll
6)卸載自帶的jdk
? 注意:如果你的虛擬機(jī)是最小化安裝不需要執(zhí)行這一步。
?rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps?
? rpm -qa:查詢所安裝的所有rpm軟件包
? grep -i:忽略大小寫(xiě)
? xargs -n1:表示每次只傳遞一個(gè)參數(shù)
? rpm -e –nodeps:強(qiáng)制卸載軟件
1)卸載現(xiàn)有的JDK
注意:安裝JDK前,一定確保提前刪除了虛擬機(jī)自帶的JDK。
2)用XShell傳輸工具將JDK導(dǎo)入到opt目錄下面的software文件夾下面
3)在Linux系統(tǒng)下的opt目錄中查看軟件包是否導(dǎo)入成功
?ls /opt/software/
看到如下結(jié)果:
jdk-8u212-linux-x64.tar.gz
4)解壓JDK到/opt/module目錄下
?tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
5)配置JDK環(huán)境變量
? (1)新建/etc/profile.d/my_env.sh文件
?sudo vim /etc/profile.d/my_env.sh
添加如下內(nèi)容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
? (3)source一下/etc/profile文件,讓新的環(huán)境變量PATH生效?source /etc/profile
6)測(cè)試JDK是否安裝成功
[atguigu@hadoop102 ~]$ java -version
如果能看到以下結(jié)果,則代表Java安裝成功。
注意:重啟(如果java -version可以用就不用重啟)
? reboot
?
7.配置ssh無(wú)密登錄配置
① 生成公匙和私匙
ssh-keygen -t rsa
然后敲(三個(gè)回車),查看/root/.ssh/目錄,可以看到會(huì)生成兩個(gè)文件id_rsa(私鑰)、id_rsa.pub(公鑰)
cd /root/.ssh/
② 將公鑰拷貝到要免密登錄的目標(biāo)機(jī)器上
將所有主機(jī)的公鑰分別追加到主機(jī)的~/.ssh/authorized_keys,在登錄三臺(tái)主機(jī)后都執(zhí)行以下三條命令
ssh-copy-id -i ~/.ssh/id_rsa.pub ceson@ceson01
ssh-copy-id -i ~/.ssh/id_rsa.pub ceson@ceson02
ssh-copy-id -i ~/.ssh/id_rsa.pub ceson@ceson03
# 時(shí)間同步?
yum install ntpdate -y?
ntpdate time.windows.com
或者
下載時(shí)間同步模塊
yum -y install ntpdate
連接遠(yuǎn)程服務(wù)器
ntpdate -u time1.aliyun.com
修改文件
ntpdate -u ntp.api.bz
date 查看系統(tǒng)時(shí)間
hwclock --show 查看硬件時(shí)間
hwclock -w 永久保存
date 查看 成功
二、hadoop的集群配置
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/software
#修改解壓文件默認(rèn)名字(名字過(guò)于長(zhǎng),所以建議修改一下)
mv ?hadoop-3.1.3/ hadoop313?? ??? ?#將hadoop改為hadoop313
#配置環(huán)境變量
vim /etc/profile.d/myenv.sh
# jdk
export JAVA_HOME=/opt/software/java/jdk180?? ?#自己的jdk路徑
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# hadoop
export HADOOP_HOME=/opt/software/hadoop313?? ?#自己的hadoop路徑
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
保存退出,通過(guò)命令 source /etc/profile 激活
輸入 java -version 如果實(shí)現(xiàn)jdk的版本信息就是激活成功了
3、文件復(fù)制
將jdk、hadoop、環(huán)境配置文件復(fù)制到其他機(jī)器上 ,其他機(jī)器上必須創(chuàng)建所需的文件夾
scp ? -r ? ?$pdir/$fname ? ? ? ? ? ?$user@$host:$pdir/$fname
命令 遞歸 ? ?要拷貝的文件路徑/名稱 ? 目的地用戶@主機(jī):目的地路徑/名稱
#下面是我將jdk、環(huán)境變量配置文件、hadoop 拷貝到cluster02上,同樣的方式復(fù)制到其他機(jī)器上?
#注:拷貝到其他機(jī)器的環(huán)境變量配置文件需要激活一下 source /etc/profile 再通過(guò) java -version 來(lái)驗(yàn)證是否激活
scp -r /opt/software/java/ root@cluster02:/opt/software/
scp -r /etc/profile.d/myenv.sh root@cluster02:/etc/profile.d/
scp -r /opt/software/hadoop313/ root@cluster02:/opt/software/
三、hadoop的集群配置
以上步驟配置完成,就需要進(jìn)行集群配置了
1、集群的配置介紹
NameNode 和 SecondaryNameNode 不要安裝在同一臺(tái)服務(wù)器
ResourceManager 也很消耗內(nèi)存,不要和 NameNode、SecondaryNameNode 配置在同一臺(tái)機(jī)器上
cluster01 | cluster02 | cluster03 | cluster04 | cluster05 | cluster06 | |
HDFS | NameNode | SecondaryNameNode | ||||
DataNode | DataNode | DataNode | DataNode | DataNode | DataNode | DataNode |
YARN | ResourceManager | |||||
NodeManager | NodeManager | NodeManager | NodeManager | NodeManager | NodeManager | NodeManager |
2、4個(gè)xml文件的配置
1、core-site.xml
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.29.151:8020</value>
</property>
<!-- 指定 hadoop 數(shù)據(jù)的存儲(chǔ)目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/software/hadoop313/data</value>
</property>
<!-- 配置 HDFS 網(wǎng)頁(yè)登錄使用的靜態(tài)用戶為 root -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
2、hdfs-site.xml
<!-- nn web 端訪問(wèn)地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>cluster01:9870</value>
</property>
<!-- 2nn web 端訪問(wèn)地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>cluster03:9868</value>
</property>
3、yarn-site.xml
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>cluster02</value>
</property>
<!-- 環(huán)境變量的繼承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
4、mapred-site.xml
<!-- 指定 MapReduce 程序運(yùn)行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
5、配置workers
配置workers,增加五個(gè)主機(jī)名
注意:該文件中添加的內(nèi)容結(jié)尾不允許有空格,文件中不允許有空行
vim /opt/software/hadoop313/etc/hadoop/workers
cluster01
cluster02
cluster03
cluster04
cluster05
將配置好的4個(gè)xml文件和workers文件覆蓋到其他4個(gè)機(jī)器上去(同文件替換)
四、啟動(dòng)集群
1、NameNode初始化
#如果集群是第一次啟動(dòng),需要在cluster01節(jié)點(diǎn)格式化 NameNode
[root@cluster01 hadoop313]# hdfs namenode -format
2、啟動(dòng) HDFS、YARN
#啟動(dòng) HDFS
[root@cluster01 hadoop313]# sbin/start-dfs.sh
#在配置了 ResourceManager 的節(jié)點(diǎn)(cluster02)啟動(dòng) YARN
[root@cluster02 hadoop313]# sbin/start-yarn.sh
3、驗(yàn)證是否成功啟動(dòng)
Web 端查看 HDFS 的 NameNode
瀏覽器中輸入:http://192.168.29.151:9870
查看 HDFS 上存儲(chǔ)的數(shù)據(jù)信息
Web 端查看 YARN 的 ResourceManager
瀏覽器中輸入:http://192.168.29.152:8088
查看 YARN 上運(yùn)行的 Job 信息
以上界面如果能正常打開(kāi),恭喜你!集群搭建成功了!
2、開(kāi)始安裝Spark:3.0.1與Hadoop3.2.1生態(tài)
之前寫(xiě)過(guò)一篇Hadoop3.1.1的:https://blog.csdn.net/qq_36269641/article/details/108986498
為了保險(xiǎn)還是重新再來(lái)一遍
2.1 開(kāi)始安裝Hadoop3.2.1
hdfs是一切的基礎(chǔ),所以在所有機(jī)器上配置:namenode:linux01.pub ? secondary namenode:linux02.pub datanade:linux01~06.pub
#解壓
tar -zxf hadoop-3.2.1.tar.gz ?-C /opt/apps/
2.1.1 配置環(huán)境變量,增加路徑與登錄用戶:
vim /etc/profile
# JDK1.8.0_191
export JAVA_HOME=/opt/jdk1.8.0_191
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt/jar:$JAVA_HOME/lib/tools.jar
#keeper-3.5.7
export ZOOKEEPER_HOME=/database/hadoop/bigdata/zookeeper-3.5.7
export PATH=$PATH:${ZOOKEEPER_HOME}/bin
#hadoop-3.1.3
export HADOOP_HOME=/database/hadoop/bigdata/hadoop-3.1.3
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
#export HDFS_DATANODE_USER=root
#export HDFS_DATANODE_SECURE_USER=root
#export HDFS_NAMENODE_USER=root
#export HDFS_SECONDARYNAMENODE_USER=root
#export YARN_RESOURCEMANAGER_USER=root
#export YARN_NODEMANAGER_USER=root
# spark 3.0.1配置
export ?SPARK_HOME=/database/hadoop/bigdata/spark-3.0.0-bin-hadoop3.2
export ?PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
# hbase配置
export ?HBASE_HOME=/database/hadoop/bigdata/hbase-2.0.5
export ?PATH=$PATH:$HBASE_HOME/bin
# hive配置
export ?HIVE_BASE=/database/hadoop/bigdata/hive-3.1.2
export ?PATH=$PATH:$HIVE_BASE/bin
source /etc/profile
hadoop version
創(chuàng)建目錄:臨時(shí)文件目錄、HDFS 元數(shù)據(jù)目錄、HDFS數(shù)據(jù)存放目錄,以后opt下的所有目錄要全部分發(fā)到1-6臺(tái)主機(jī)上去,所以統(tǒng)一在opt下創(chuàng)建
mkdir -p /opt/data/hdfs/name /opt/data/hdfs/data /opt/log/hdfs /opt/tmp
切換到配置文件目錄下,開(kāi)始配置hadoop
cd /opt/apps/hadoop-3.2.1/etc/hadoop
core-site.xml?? ?核心配置文件
dfs-site.xml?? ?hdfs存儲(chǔ)相關(guān)配置
apred-site.xml?? ?MapReduce相關(guān)的配置
arn-site.xml?? ?yarn相關(guān)的一些配置
workers?? ?用來(lái)指定從節(jié)點(diǎn),文件中默認(rèn)是localhost
hadoop-env.sh?? ?配置hadoop相關(guān)變量
先修改hadoop-env.sh,加入java_home的變量,防止出錯(cuò):
export JAVA_HOME=/home/apps/jdk1.8.0_212
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export HDFS_ZKFC_USER=root
2.1.2 開(kāi)始配置core: core-site.xml
?
<configuration>
? ? ? ? <!-- hdfs地址,ha模式中是連接到nameservice ?-->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>fs.defaultFS</name>
? ? ? ? ? ? ? ? <value>hdfs://cluster</value>
? ? ? ? </property>
? ? ? ? <!-- 這里的路徑默認(rèn)是NameNode、DataNode、JournalNode等存放數(shù)據(jù)的公共目錄,也可以單獨(dú)指定 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>hadoop.tmp.dir</name>
? ? ? ? ? ? ? ? <value>/database/data/hdfs/tmp</value>
? ? ? ? </property>
? ? ? ? <!-- 指定ZooKeeper集群的地址和端口。注意,數(shù)量一定是奇數(shù),且不少于三個(gè)節(jié)點(diǎn)-->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>ha.zookeeper.quorum</name>
? ? ? ? ? ? ? ? <value>hadoop-node3:2181,hadoop-node4:2181,hadoop-node5:2181</value>
? ? ? ? </property>
</configuration>
?
2.1.3 配置HDFS:hdfs-site.xml
指定備用地址,副本數(shù),元數(shù)據(jù),數(shù)據(jù)位置,以及web網(wǎng)絡(luò)訪問(wèn)
?
<configuration>
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.namenode.name.dir</name>
? ? ? ? ? ? ? ? <value>file:/database/data/hdfs/name</value>
? ? ? ? </property>
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.datanode.data.dir</name>
? ? ? ? ? ? ? ? <value>file:/database/data/hdfs/data</value>
? ? ? ? </property>
? ? ? ? <!-- 指定副本數(shù),不能超過(guò)機(jī)器節(jié)點(diǎn)數(shù) ?-->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.replication</name>
? ? ? ? ? ? ? ? <value>6</value>
? ? ? ? </property>
? ? ? ? <!-- 為namenode集群定義一個(gè)services name -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.nameservices</name>
? ? ? ? ? ? ? ? <value>hadoop-master寫(xiě)成各自節(jié)點(diǎn)名字</value>?
? ? ? ? </property>
? ? ? ? <!-- nameservice 包含哪些namenode,為各個(gè)namenode起名 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.ha.namenodes</name>
? ? ? ? ? ? ? ? <value>hadoop-master,hadoop-node1,hadoop-node2,hadoop-node3,hadoop-node4,hadoop-node5</value>
? ? ? ? </property>
? ? ? ? <!-- 名為 nn1 的namenode的rpc地址和端口號(hào),rpc用來(lái)和datanode通訊 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.namenode.rpc-address.hadoop-master</name>
? ? ? ? ? ? ? ? <value>hadoop-master:9000</value>
? ? ? ? </property>
? ? ? ? <!-- 名為 nn2 的namenode的rpc地址和端口號(hào),rpc用來(lái)和datanode通訊 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.namenode.rpc-address.hadoop-node1</name>
? ? ? ? ? ? ? ? <value>hadoop-node1:9000</value>
? ? ? ? </property>
? ? ? ? <!-- 名為 nn3 的namenode的rpc地址和端口號(hào),rpc用來(lái)和datanode通訊 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.namenode.rpc-address.hadoop-node2</name>
? ? ? ? ? ? ? ? <value>hadoop-node2:9000</value>
? ? ? ? </property>
? ? ? ? <!-- 名為 nn4 的namenode的rpc地址和端口號(hào),rpc用來(lái)和datanode通訊 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.namenode.rpc-address.hadoop-node3</name>
? ? ? ? ? ? ? ? <value>hadoop-node3:9000</value>
? ? ? ? </property>
? ? ? ? <!-- 名為 nn5 的namenode的rpc地址和端口號(hào),rpc用來(lái)和datanode通訊 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.namenode.rpc-address.hadoop-node4</name>
? ? ? ? ? ? ? ? <value>hadoop-node4:9000</value>
? ? ? ? </property>
? ? ? ? <!-- 名為 nn6 的namenode的rpc地址和端口號(hào),rpc用來(lái)和datanode通訊 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.namenode.rpc-address.hadoop-node5</name>
? ? ? ? ? ? ? ? <value>hadoop-node5:9000</value>
? ? ? ? </property>
? ? ? ? <!--名為 nn1 的namenode的http地址和端口號(hào),用來(lái)和web客戶端通訊 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.namenode.http-address.hadoop-master</name>
? ? ? ? ? ? ? ? <value>hadoop-master:50070</value>
? ? ? ? </property>
? ? ? ? <!-- 名為 nn2 的namenode的http地址和端口號(hào),用來(lái)和web客戶端通訊 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.namenode.http-address.hadoop-node1</name>
? ? ? ? ? ? ? ? <value>hadoop-node1:50070</value>
? ? ? ? </property>
? ? ? ? <!--名為 nn3 的namenode的http地址和端口號(hào),用來(lái)和web客戶端通訊 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.namenode.http-address.hadoop-node2</name>
? ? ? ? ? ? ? ? <value>hadoop-node2:50070</value>
? ? ? ? </property>
? ? ? ? <!-- 名為 nn4 的namenode的http地址和端口號(hào),用來(lái)和web客戶端通訊 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.namenode.http-address.hadoop-node3</name>
? ? ? ? ? ? ? ? <value>hadoop-node3:50070</value>
? ? ? ? </property>
? ? ? ? <!-- 名為 nn5 的namenode的http地址和端口號(hào),用來(lái)和web客戶端通訊 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.namenode.http-address.hadoop-node4</name>
? ? ? ? ? ? ? ? <value>hadoop-node4:50070</value>
? ? ? ? </property>
? ? ? ? <!-- 名為 nn6 的namenode的http地址和端口號(hào),用來(lái)和web客戶端通訊 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.namenode.http-address.hadoop-node5</name>
? ? ? ? ? ? ? ? <value>hadoop-node5:50070</value>
? ? ? ? </property>
? ? ? ? <!-- namenode間用于共享編輯日志的journal節(jié)點(diǎn)列表 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.namenode.shared.edits.dir</name>
? ? ? ? ? ? ? ? <value>qjournal://hadoop-master:8485;hadoop-node1:8485;hadoop-node2:8485;hadoop-node3:8485;hadoop-node4:8485;hadoop-node5:8485/cluster</value>
? ? ? ? </property>
? ? ? ? <!-- 指定該集群出現(xiàn)故障時(shí),是否自動(dòng)切換到另一臺(tái)namenode -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.ha.automatic-failover.enabled</name>
? ? ? ? ? ? ? ? <value>true</value>
? ? ? ? </property>
? ? ? ? <!-- journalnode 上用于存放edits日志的目錄 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.journalnode.edits.dir</name>
? ? ? ? ? ? ? ? <value>/database/data/hdfs/tmp/data/dfs/journalnode</value>
? ? ? ? </property>
? ? ? ? <!-- 客戶端連接可用狀態(tài)的NameNode所用的代理類 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.client.failover.proxy.provider</name>
? ? ? ? ? ? ? ? <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
? ? ? ? </property>
? ? ? ? <!-- 一旦需要NameNode切換,使用ssh方式進(jìn)行操作 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.ha.fencing.methods</name>
? ? ? ? ? ? ? ? <value>
? ? ? ? ? ? ? ? sshfence
? ? ? ? ? ? ? ? shell(/bin/true)
? ? ? ? ? ? ? ? </value>
? ? ? ? </property>
? ? ? ? <!-- 如果使用ssh進(jìn)行故障切換,使用ssh通信時(shí)用的密鑰存儲(chǔ)的位置 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.ha.fencing.ssh.private-key-files</name>
? ? ? ? ? ? ? ? <value>/root/.ssh/id_rsa</value>
? ? ? ? </property>
? ? ? ? <!-- 啟用webhdfs -->
? ? <property>
? ? ? ? ? ? ? ? <name>dfs.webhdfs.enabled</name>
? ? ? ? ? ? ? ? <value>true</value>
? ? </property>
? ? ? ? <property>
? ? ? ? <name>dfs.journalnode.http-address</name>
? ? ? ? <value>0.0.0.0:8480</value>
? ? </property>
? ? <property>
? ? ? ? <name>dfs.journalnode.rpc-address</name>
? ? ? ? <value>0.0.0.0:8485</value>
? ? </property>
? ? ? ? <!-- connect-timeout超時(shí)時(shí)間 -->
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>dfs.ha.fencing.ssh.connect-timeout</name>
? ? ? ? ? ? ? ? <value>30000</value>
? ? ? ? </property>
</configuration>
?
2.1.4 配置YARN: yarn-site.xml?
vim yarn-site.xml
<configuration>
?? ?<!-- Site specific YARN configuration properties -->
?? ?<!-- 啟用HA高可用性 -->
?? ?<property>
?? ??? ?<name>yarn.resourcemanager.ha.enabled</name>
?? ??? ?<value>true</value>
?? ?</property>
?? ?<!-- 指定resourcemanager的名字 -->
?? ?<property>
?? ??? ?<name>yarn.resourcemanager.cluster-id</name>
?? ??? ?<value>yrc</value>
?? ?</property>
?? ?<!-- 使用了2個(gè)resourcemanager,分別指定Resourcemanager的地址 -->
?? ?<property>
?? ??? ?<name>yarn.resourcemanager.ha.rm-ids</name>
?? ??? ?<value>rm1,rm2</value>
?? ?</property>
??
?? ?<!-- 指定rm1的地址 -->
?? ?<property>
?? ??? ?<name>yarn.resourcemanager.hostname.rm1</name>
?? ??? ?<value>ceson01</value>
?? ?</property>
??
?? ?<!-- 指定rm2的地址 ?-->
?? ?<property>
?? ??? ?<name>yarn.resourcemanager.hostname.rm2</name>
?? ??? ?<value>ceson02</value>
?? ?</property>
??
?? ?<!-- 指定當(dāng)前機(jī)器ceson01作為rm1 -->
?? ?<property>
?? ??? ?<name>yarn.resourcemanager.ha.id</name>
?? ??? ?<value>rm1</value>
?? ?</property>
??
?? ?<!-- 指定zookeeper集群機(jī)器 -->
?? ?<property>
?? ??? ?<name>yarn.resourcemanager.zk-address</name>
?? ??? ?<value>ceson01:2181,ceson02:2181,ceson03:2181</value>
?? ?</property>
??
?? ?<!-- NodeManager上運(yùn)行的附屬服務(wù),默認(rèn)是mapreduce_shuffle -->
?? ?<property>
?? ??? ?<name>yarn.nodemanager.aux-services</name>
?? ??? ?<value>mapreduce_shuffle</value>
?? ?</property>
</configuration>
?
2.1.5 配置MapReduce:mapred-site.xml
指定mr使用的yarn模式,節(jié)點(diǎn)linux01.pub和類路徑
vim mapred-site.xml
<configuration>
?? ?<!-- 采用yarn作為mapreduce的資源調(diào)度框架 -->
?? ?<property>
?? ??? ?<name>mapreduce.framework.name</name>
?? ??? ?<value>yarn</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>yarn.app.mapreduce.am.env</name>
?? ??? ?<value>HADOOP_MAPRED_HOME=/home/ceson/wechat_env/hadoop-3.1.2</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>mapreduce.map.env</name>
?? ??? ?<value>HADOOP_MAPRED_HOME=/home/ceson/wechat_env/hadoop-3.1.2</value>
?? ?</property>
?? ?<property>
?? ??? ?<name>mapreduce.reduce.env</name>
?? ??? ?<value>HADOOP_MAPRED_HOME=/home/ceson/wechat_env/hadoop-3.1.2</value>
?? ?</property>
</configuration>
?
2.1.6 指定所有的datanode: workders
linux01.pub
linux02.pub
linux03.pub
linux04.pub
linux05.pub
linux06.pub
2.1.7 集群分發(fā)
將linux01中/opt下的所有文件分發(fā)到其它主機(jī),并將/etc/profile也一起分發(fā)下去
?scp -r /opt linux02.pub:$PWD
?scp -r /opt linux03.pub:$PWD
?scp -r /opt linux04.pub:$PWD
?scp -r /opt linux05.pub:$PWD
?scp -r /opt linux06.pub:$PWD
2.1.8 集群一鍵啟動(dòng)與一鍵停止
在start-dfs.sh 和stop-dfs.sh中加入以下啟動(dòng)配置
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
2.1.9 在linux01.pub上初始化namenode:-format
hadoop ?namenode ?-format
出現(xiàn)這個(gè)信息時(shí),表示已經(jīng)初始化成功:
2020-11-26 21:03:07,909 INFO common.Storage: Storage directory /opt/data/hdfs/name has been successfully formatted.
2.1.10 啟動(dòng)hadoop并進(jìn)行測(cè)試
主節(jié)點(diǎn)上啟動(dòng)HDFS:
start-dfs.sh
?namenode上的進(jìn)程:
datanode上的進(jìn)程:
HDFS測(cè)試namenode:
打開(kāi):http://linux01.pub:9870/
start-all.sh
啟動(dòng)HDFS和yarn:
http://linux01.pub:8088/
上傳一個(gè)文件到HDFS:
hdfs dfs -put ./hadoop-3.2.1.tar.gz /
可以看到文件已經(jīng)被分塊存放到不同的服務(wù)器上了:
或者
主機(jī)初次運(yùn)行需要格式化hdfs,后面運(yùn)行就不需要步驟
每個(gè)hadoop節(jié)點(diǎn)啟動(dòng)journalnode
hdfs --daemon start journalnode
# 在節(jié)點(diǎn)ceson01上手動(dòng)輸入[hdfs namenode –format]
hdfs namenode –format
#格式化 zk(在ceson01 手動(dòng)輸入)
hdfs zkfc –formatZK
#啟動(dòng) ceson01 namenode?
hadoop-daemon.sh start namenode
#ceson02上同步ceson01 namenode元數(shù)據(jù)?
hdfs namenode -bootstrapStandby
?啟動(dòng)Hadoop集群環(huán)境
start-all.sh
或者啟動(dòng)
start-dfs.sh
start-yarn.sh
2.7 主備節(jié)點(diǎn)啟動(dòng)狀況查看
ceson@ceson01:~$ hdfs haadmin -getServiceState nn1
active
ceson@ceson01:~$ hdfs haadmin -getServiceState nn2
standby
?驗(yàn)證hadoop
50070端口是Hadoop管理頁(yè)面,切到Datanodes選項(xiàng)卡可以看到集群所有Datanode的情況
8088端口是YARN管理頁(yè)面,可以看到集群節(jié)點(diǎn)運(yùn)行任務(wù)的情況
http://ceson01:50070/
http://ceson01:8088/
或者jsp命令 主備master節(jié)點(diǎn)一般都會(huì)駐留以下進(jìn)程,非master節(jié)點(diǎn)只有以下部分進(jìn)程
21776 DataNode
22725 ResourceManager
21271 NameNode
22919 NodeManager
21005 JournalNode
22302 DFSZKFailoverController
?
第六臺(tái)上的數(shù)據(jù)信息:
主節(jié)點(diǎn)上的元數(shù)據(jù)信息:
?
2.2 開(kāi)始安裝Spark3.0.1
上傳解壓到指定文件夾
2.2.1 配置系統(tǒng)變量:
# spark 3.0.1配置
export ?SPARK_HOME=/opt/apps/spark-3.0.1-bin-hadoop3.2
export ?PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
2.2.2 修改配置文件
將所有.template文件復(fù)制一份出來(lái),去掉后綴名:
for i in *.template; do cp ${i} ${i%.*}; done
再建立一個(gè)目錄將原文件移到里面
修改spark-env.sh 加入:
vim spark-env.sh
#加入以下配置
export JAVA_HOME=/home/apps/jdk1.8.0_212
export HADOOP_CONF_DIR=/opt/apps/hadoop-3.2.1/etc/hadoop
export SPARK_MASTER_HOST=linux01.pub
export SPARK_MASTER_PORT=7077
export SPARK_LOCAL_DIRS=/opt/apps/spark-3.0.1-bin-hadoop3.2
在slaves中加入:
linux01.pub
linux02.pub
linux03.pub
linux04.pub
linux05.pub
linux06.pub
2.2.3 分發(fā)到其它5臺(tái)電腦上
?scp -r /opt/apps/spark-3.0.1-bin-hadoop3.2/ linux02.pub:$PWD
scp -r /opt/apps/spark-3.0.1-bin-hadoop3.2/ ?linux03.pub:$PWD
scp -r /opt/apps/spark-3.0.1-bin-hadoop3.2/ ?linux04.pub:$PWD
scp -r /opt/apps/spark-3.0.1-bin-hadoop3.2/ ?linux05.pub:$PWD
scp -r /opt/apps/spark-3.0.1-bin-hadoop3.2/ ?linux06.pub:$PWD
scp -r /opt/apps/spark-3.0.1-bin-hadoop3.2/ ?linux06.pub:$PWD
2.2.4 運(yùn)行spark:
進(jìn)入spark目錄下的sbin下,
./start-all.sh
為了區(qū)分開(kāi)hadoop 中的start-all.sh 可以將此名改個(gè)名稱,以后用這個(gè)名稱來(lái)啟動(dòng)就不會(huì)和hadoop相互沖突了,但實(shí)際也很少同時(shí)都啟動(dòng),平時(shí)hadoop也只是啟動(dòng)其中的hdfs,即start-dfs.sh而已
?cp start-all.sh ?spark-start-all.sh
此時(shí)每一臺(tái)分機(jī)上都啟動(dòng)了一個(gè)worker進(jìn)程
網(wǎng)頁(yè)查看:http://linux01.pub:8080/
至此,spark搭建就已經(jīng)完成了,相對(duì)比較簡(jiǎn)單。
3、安裝ZooKeeper
安裝到:linux04; linux05; linux06;
3.1 解壓、添加環(huán)境變量
tar -zxf apache-zookeeper-3.5.5-bin.tar.gz -C /opt/apps/
mv apache-zookeeper-3.5.5-bin/ zookeeper3.5.5
cd /opt/apps/zookeeper3.5.5
?vim /etc/profile
# Zookeeper配置
export ?ZK_HOME=/opt/apps/zookeeper3.5.5
export ?PATH=$PATH:$ZK_HOME/bin
?source /etc/profile
3.2 配置文件
在linux04\05\06.pub上各新建一個(gè)目錄來(lái)存放zk的數(shù)據(jù):
mkdir -p /opt/data/zkdata
并配置id:
在linux04.pub上: echo 1 > /opt/data/zkdata/myid
在linux05.pub上: echo 2 > /opt/data/zkdata/myid
在linux06.pub上: echo 3 > /opt/data/zkdata/myid
此處id與下面zoo.cfg中的server.1/2/3要相對(duì)應(yīng)
?cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
dataDir=/opt/data/zkdata
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the?
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1i
server.1=linux04.pub:2888:3888
server.2=linux05.pub:2888:3888
server.3=linux06.pub:2888:3888
3.3 啟動(dòng)腳本紡編寫(xiě)
bin/zk-startall.sh
#!/bin/bash
? if [ $# -eq 0 ]
? then
? ? echo "please input param: start stop"
? else
? ? for i in {4..6}
? ? do
? ? ?echo "${i}ing linux0${i}.pub"
? ? ?ssh linux0${i}.pub "source /etc/profile;/opt/apps/zookeeper3.5.5/bin/zkServer.sh ${1}"
? ? done
? ? if [ $1 = start ]
? ? then
? ? ?sleep 3
? ? ?for i in {4..6}
? ? ?do
? ? ? ?echo "checking linux0${i}.pub"
? ? ? ?ssh linux0${i}.pub "source /etc/profile;/opt/apps/zookeeper3.5.5/bin/zkServer.sh status"
done fi
fi?
授權(quán)執(zhí)行:chmod +x ./zk-startall.sh
3.4 分發(fā)到linux05、06.pub上
scp -r ./zookeeper3.5.5/ linux05.pub:$PWD
scp -r ./zookeeper3.5.5/ linux06.pub:$PWD
3.5 運(yùn)行與測(cè)試
zk-startall.sh
4、開(kāi)始安裝HBase
4.1 環(huán)境變量
# hbase 配置
export ?HBASE_HOME=/opt/apps/hbase-2.3.3
export ?PATH=$PATH:$HBASE_HOME/bin
4.2 配置hbase
先安裝scala2.12.12
https://downloads.lightbend.com/scala/2.12.12/scala-2.12.12.tgz
解壓后并配置scala與hbase系統(tǒng)變量
# java scala ?mysql 配置
export ?JAVA_HOME=/home/apps/jdk1.8.0_212
export ?SCALA_HOME=/home/apps/scala-2.12.12
export ?PATH=$PATH:$JAVA_HOME/bin:/usr/local/mysql/bin:$SCALA_HOME/bin
?
?
# hbase配置
export ?HBASE_HOME=/opt/apps/hbase-2.3.3
export ?PATH=$PATH:$HBASE_HOME/bin
4.2.1 將hadoop下的core-site.xml和hdfs-site.xml復(fù)制到hbase/conf/下
cp /opt/apps/hadoop-3.2.1/etc/hadoop/core-site.xml /opt/apps/hadoop-3.2.1/etc/hadoop/hdfs-site.xml /opt/apps/hbase-2.3.3/conf
4.2.2 配置hbase-env.sh
export HBASE_MANAGES_ZK=false
export ?JAVA_HOME=/home/apps/jdk1.8.0_212
4.2.3 配置hbase-site.xml
<configuration>
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>hbase.rootdir</name>
? ? ? ? ? ? ? ? <value>hdfs://linux01.pub:9000/hbase</value>
? ? ? ? </property>
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>hbase.cluster.distributed</name>
? ? ? ? ? ? ? ? <value>true</value>
? ? ? ? </property>
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>hbase.master</name>
? ? ? ? ? ? ? ? <value>linux01.pub:60000</value>
? ? ? ? </property>
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>hbase.zookeeper.quorum</name>
? ? ? ? ? ? ? ? <value>linux04.pub,linux05.pub,linux06.pub</value>
? ? ? ? </property>
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>hbase.zookeeper.property.dataDir</name>
? ? ? ? ? ? ? ? <value>/opt/data/hbase</value>
? ? ? ? </property>
? ? ? ? <property>
? ? ? ? ? ? ? ? <name>hbase.unsafe.stream.capability.enforce</name>
? ? ? ? ? ? ? ? <value>false</value>
? ? ? ? </property>
</configuration>
4.2.4 regionservers配置
linux01.pub
linux02.pub
linux03.pub
linux04.pub
linux05.pub
linux06.pub
4.2.5 解決日志沖突
#在hbase/lib/client-facing-thirdparty 下
mv /opt/apps/hbase-2.3.3/lib/client-facing-thirdparty/slf4j-log4j12-1.7.30.jar slf4j-log4j12-1.7.30.jar.bak
#將hbase的slf4j文件改名但不刪除,作備份作用,以免和hadoop的日志沖突
4.3 分發(fā)軟件包
分發(fā)目錄、分發(fā)profile、分發(fā)hbase目錄到linux02.pub~linux06.pub上,已經(jīng)做過(guò)多次,省略
4.4 啟動(dòng)并測(cè)試
啟動(dòng):start-hbase.sh ?停止:stop-hbase.sh
#測(cè)試進(jìn)入shell: hbase shell
create 't1', {NAME => 'f1', VERSIONS => 5}
增加網(wǎng)頁(yè)訪問(wèn):vim hbase-site.xml
<!-- 新增的web訪問(wèn)配置 -->
<property>
<name>hbase.master.info.port</name>
<value>60010</value>
</property>
訪問(wèn):http://linux01.pub:60010
檢查與zk的集成:
檢查與hadoop的集成:
5、開(kāi)始安裝Hive
上傳解壓
5.1 下載mysql connector
https://dev.mysql.com/downloads/connector/j/
5.2 檢查mysql是否啟動(dòng)
5.3、將connector放到hive安裝目錄下的lib中
[root@linux01 home]# tar -zxf mysql-connector-java-5.1.49.tar.gz -C /opt/apps/hive3.1.2/lib/
[root@linux01 home]# cd /opt/apps/hive3.1.2/lib/
[root@linux01 lib]# mv mysql-connector-java-5.1.49/*.jar ./
[root@linux01 lib]# rm -rf mysql-connector-java-5.1.49
5.4 將Hadoop下lib中的guava-27.0-jre.jar 復(fù)制到lib下,將原guava-19.0.jar直接刪除
[root@linux01 lib]# ls /opt/apps/hadoop-3.2.1/share/hadoop/common/lib/guava-*
/opt/apps/hadoop-3.2.1/share/hadoop/common/lib/guava-27.0-jre.jar
[root@linux01 lib]# cp /opt/apps/hadoop-3.2.1/share/hadoop/common/lib/guava-27.0-jre.jar ./
[root@linux01 lib]# rm -rf ./guava-19.0.jar
5.5 配置hive
5.5.1 配置環(huán)境變量
# hive配置
export ?HIVE_BASE=/opt/apps/hive3.1.2
export ?PATH=$PATH:$HIVE_BASE/bin
5.5.2 配置hive-env.sh
創(chuàng)建hive-env.sh 文件,復(fù)制hive-env.sh.template并更名為hive-env.sh:
# hadoop安裝目錄
export HADOOP_HOME=/opt/apps/hadoop-3.2.1
# Hive 配置文件目錄
export HIVE_CONF_DIR=/opt/apps/hive3.1.2/conf
# Hive 信賴jar包目錄
export HIVE_AUX_JARS_PATH=/opt/apps/hive3.1.2/lib
5.5.3 配置hive-site.xml
hive-site.xml 文件,復(fù)制hive-default.xml.template并更名為hive-site.xml:
刪除3210行處的特殊字符:
啟動(dòng)HADOOP:start-all.sh
創(chuàng)建兩個(gè)hdfs文件夾:
[root@linux01 ~]# hdfs dfs -mkdir -p /user/hive/warehouse; hdfs dfs -mkdir -p /tmp/hive
[root@linux01 ~]# hdfs dfs -chmod -R 777 /user/hive/warehouse; hdfs dfs -chmod -R 777 ?/tmp/hive
[root@linux01 ~]# hdfs dfs -ls /
Found 3 items
drwxr-xr-x ? - root supergroup ? ? ? ? ?0 2020-11-27 00:58 /hbase
drwxr-xr-x ? - root supergroup ? ? ? ? ?0 2020-11-27 11:57 /tmp
drwxr-xr-x ? - root supergroup ? ? ? ? ?0 2020-11-27 11:57 /user
修改system:java.io.tmp.dir與system:user.name,改為自己創(chuàng)建的臨時(shí)文件夾與自己的帳號(hào)
143、149、1848、4407行
快捷修改VIM:
:%s#${system:java.io.tmpdir}#/opt/tmp/hive#g
:%s#${system:user.name}#root#g
配置數(shù)據(jù)庫(kù):
585行:javax.jdo.option.ConnectionURL ? value改為:jdbc:mysql://linux01.pub:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8
1104行:javax.jdo.option.ConnectionDriverName values改為:com.mysql.jdbc.Driver ? (如果是8.0的com.mysql.cj.jdbc.Driver
1131:javax.jdo.option.ConnectionUserName value改為:你的數(shù)據(jù)庫(kù)用戶名稱
571行:javax.jdo.option.ConnectionPassword value改變:你的密碼
800行:hive.metastore.schema.verification value改為:false
5.5.4 創(chuàng)建日志配置文件:hive-log4j2.properties
#將template去掉:
[root@linux01 conf]# cp hive-log4j2.properties.template hive-log4j2.properties
[root@linux01 conf]# vim hive-log4j2.properties
# 創(chuàng)建日志目錄:
property.hive.log.dir = /opt/log/hive
大坑:hive中的日志jar包與hadoop中的日志jar包沖突,而出現(xiàn)SLF4J: Class path contains multiple SLF4J bindings.
解決方法也很簡(jiǎn)單:它下面會(huì)有提示是哪一個(gè)jar,這個(gè)必須給開(kāi)發(fā)一個(gè)雞腿,直接把hive中的jar刪除就解決了。
5.6 啟動(dòng)hive并測(cè)試
初始化:schematool -initSchema -dbType mysql
啟動(dòng):hive
測(cè)試:show tables;
6、安裝Flume
6.1、利用模板文件創(chuàng)建conf下的env與conf文件
6.2、在env中加入export java_home
6.3、i測(cè)試:進(jìn)入bin下:.\flume-ng version
6.4、分發(fā)到5、6機(jī)器上即完成
?
7、安裝Kafka
7.1 啟動(dòng)zookeeper
使用我們自己的腳本:zk-startall.sh start
7.2 修改conf下的server.properties
修改brokerid:
linux04.pub: brokerid-->0
linux05.pub: brokerid-->1
linux06.pub: brokerid-->2
修改綁定的IP:listeners=PLAINTEXT://linux04.pub:9092
修改日志目錄:新建一個(gè)目錄:log.dirs=/opt/log/kafka
修改zk集群:zookeeper.connect=linux04.pub:2181,linux05.pub:2181,linux06.pub:2181
7.3 分發(fā)到其它分機(jī):
改brokerid, 改IP, 建目錄并改日志目錄、配置環(huán)境
# Kafka配置
export ?KAFKA_HOME=/opt/apps/kafka_2in.12-2.6.0
export ?PATH=$PATH:$KAFKA_HOME/bin
修改id ? ip
7.4 編寫(xiě)一鍵啟動(dòng)腳本
#!/bin/bash
if [ $# -eq 0 ]
? then
? echo "please input param: start stop"
? else
? if [ $1 = start ]
? then
? for i in {4..6}
? do
? echo "${1}ing linux0${i}.pub"
? ssh linux0${i}.pub "source /etc/profile;/opt/apps/kafka_2.12-2.6.0/bin/kafka-server-start.sh -daemon /opt/apps/kafka_2.12-2.6.0/config/server.properties"
? done
? fi
? if [ $1 = stop ]
? then
? for i in {4..6}
? do
? ssh linux0${i}.pub "source /etc/profile;/opt/apps/kafka_2.12-2.6.0/bin/kafka-server-stop.sh"
? done
? fi
fi
啟動(dòng)并測(cè)試:
8、安裝Redis
8.1 下載解壓編譯
https://redis.io/
下載最新版本
unstable就不考慮了
安裝gcc:
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile
source /etc/profile
?編譯:
make && make install PREFIX=/opt/apps/redis6
8.2 配置環(huán)境變量
#redis配置
export ?REDIS_HOME=/opt/apps/redis6
export ?PATH=$PATH:$REDIS_HOME/bin
8.3 配置redis
將源碼包中的redis.conf復(fù)制到安裝目錄下:
cp /opt/jars/redis-6.0.9/redis.conf ./
修改bind為本機(jī)名稱:bind linux04.pub
修改后臺(tái)運(yùn)行:daemonize yes
8.4 啟動(dòng)測(cè)試
redis-server ./redis.conf
客戶端連接:
redis-cli -h linux04.pub -p 6379
8.5 分發(fā)到5和6,并修改綁定主機(jī)名稱與環(huán)境變量
?
9 Redis集群搭建
(暫時(shí)不搭了,抄一下別人的,用到時(shí)再來(lái)搭)
https://blog.csdn.net/qq_42815754/article/details/82912130
9.1、Redis Cluster(Redis集群)簡(jiǎn)介
redis是一個(gè)開(kāi)源的key value存儲(chǔ)系統(tǒng),受到了廣大互聯(lián)網(wǎng)公司的青睞。redis3.0版本之前只支持單例模式,在3.0版本及以后才支持集群,我這里用的是redis3.0.0版本;
redis集群采用P2P模式,是完全去中心化的,不存在中心節(jié)點(diǎn)或者代理節(jié)點(diǎn);
redis集群是沒(méi)有統(tǒng)一的入口的,客戶端(client)連接集群的時(shí)候連接集群中的任意節(jié)點(diǎn)(node)即可,集群內(nèi)部的節(jié)點(diǎn)是相互通信的(PING-PONG機(jī)制),每個(gè)節(jié)點(diǎn)都是一個(gè)redis實(shí)例;
為了實(shí)現(xiàn)集群的高可用,即判斷節(jié)點(diǎn)是否健康(能否正常使用),redis-cluster有這么一個(gè)投票容錯(cuò)機(jī)制:如果集群中超過(guò)半數(shù)的節(jié)點(diǎn)投票認(rèn)為某個(gè)節(jié)點(diǎn)掛了,那么這個(gè)節(jié)點(diǎn)就掛了(fail)。這是判斷節(jié)點(diǎn)是否掛了的方法;
那么如何判斷集群是否掛了呢? -> 如果集群中任意一個(gè)節(jié)點(diǎn)掛了,而且該節(jié)點(diǎn)沒(méi)有從節(jié)點(diǎn)(備份節(jié)點(diǎn)),那么這個(gè)集群就掛了。這是判斷集群是否掛了的方法;
那么為什么任意一個(gè)節(jié)點(diǎn)掛了(沒(méi)有從節(jié)點(diǎn))這個(gè)集群就掛了呢? -> 因?yàn)榧簝?nèi)置了16384個(gè)slot(哈希槽),并且把所有的物理節(jié)點(diǎn)映射到了這16384[0-16383]個(gè)slot上,或者說(shuō)把這些slot均等的分配給了各個(gè)節(jié)點(diǎn)。當(dāng)需要在Redis集群存放一個(gè)數(shù)據(jù)(key-value)時(shí),redis會(huì)先對(duì)這個(gè)key進(jìn)行crc16算法,然后得到一個(gè)結(jié)果。再把這個(gè)結(jié)果對(duì)16384進(jìn)行求余,這個(gè)余數(shù)會(huì)對(duì)應(yīng)[0-16383]其中一個(gè)槽,進(jìn)而決定key-value存儲(chǔ)到哪個(gè)節(jié)點(diǎn)中。所以一旦某個(gè)節(jié)點(diǎn)掛了,該節(jié)點(diǎn)對(duì)應(yīng)的slot就無(wú)法使用,那么就會(huì)導(dǎo)致集群無(wú)法正常工作。
綜上所述,每個(gè)Redis集群理論上最多可以有16384個(gè)節(jié)點(diǎn)。
9.2、集群搭建需要的環(huán)境
2.1 Redis集群至少需要3個(gè)節(jié)點(diǎn),因?yàn)橥镀比蒎e(cuò)機(jī)制要求超過(guò)半數(shù)節(jié)點(diǎn)認(rèn)為某個(gè)節(jié)點(diǎn)掛了該節(jié)點(diǎn)才是掛了,所以2個(gè)節(jié)點(diǎn)無(wú)法構(gòu)成集群。
2.2 要保證集群的高可用,需要每個(gè)節(jié)點(diǎn)都有從節(jié)點(diǎn),也就是備份節(jié)點(diǎn),所以Redis集群至少需要6臺(tái)服務(wù)器。因?yàn)槲覜](méi)有那么多服務(wù)器,也啟動(dòng)不了那么多虛擬機(jī),所在這里搭建的是偽分布式集群,即一臺(tái)服務(wù)器虛擬運(yùn)行6個(gè)redis實(shí)例,修改端口號(hào)為(7001-7006),當(dāng)然實(shí)際生產(chǎn)環(huán)境的Redis集群搭建和這里是一樣的。
2.3 安裝ruby
? ? 9.3、集群搭建具體步驟如下(注意要關(guān)閉防火墻)
3.1 在usr/local目錄下新建redis-cluster目錄,用于存放集群節(jié)點(diǎn)
3.2 把redis目錄下的bin目錄下的所有文件復(fù)制到/usr/local/redis-cluster/redis01目錄下,不用擔(dān)心這里沒(méi)有redis01目錄,會(huì)自動(dòng)創(chuàng)建的。操作命令如下(注意當(dāng)前所在路徑):
?cp -r redis/bin/ redis-cluster/redis01
3.3 刪除redis01目錄下的快照文件dump.rdb,并且修改該目錄下的redis.cnf文件,具體修改兩處地方:一是端口號(hào)修改為7001,二是開(kāi)啟集群創(chuàng)建模式,打開(kāi)注釋即可。分別如下圖所示:
刪除dump.rdb文件
修改端口號(hào)為7001,默認(rèn)是6379
將cluster-enabled yes 的注釋打開(kāi)
3.4 將redis-cluster/redis01文件復(fù)制5份到redis-cluster目錄下(redis02-redis06),創(chuàng)建6個(gè)redis實(shí)例,模擬Redis集群的6個(gè)節(jié)點(diǎn)。然后將其余5個(gè)文件下的redis.conf里面的端口號(hào)分別修改為7002-7006。分別如下圖所示:
創(chuàng)建redis02-06目錄
分別修改redis.conf文件端口號(hào)為7002-7006
3.5 接著啟動(dòng)所有redis節(jié)點(diǎn),由于一個(gè)一個(gè)啟動(dòng)太麻煩了,所以在這里創(chuàng)建一個(gè)批量啟動(dòng)redis節(jié)點(diǎn)的腳本文件,命令為start-all.sh,文件內(nèi)容如下:
cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..
?
3.6 創(chuàng)建好啟動(dòng)腳本文件之后,需要修改該腳本的權(quán)限,使之能夠執(zhí)行,指令如下:
chmod +x start-all.sh
1
3.7 執(zhí)行start-all.sh腳本,啟動(dòng)6個(gè)redis節(jié)點(diǎn)
3.8 ok,至此6個(gè)redis節(jié)點(diǎn)啟動(dòng)成功,接下來(lái)正式開(kāi)啟搭建集群,以上都是準(zhǔn)備條件。大家不要覺(jué)得圖片多看起來(lái)冗長(zhǎng)所以覺(jué)得麻煩,其實(shí)以上步驟也就一句話的事情:創(chuàng)建6個(gè)redis實(shí)例(6個(gè)節(jié)點(diǎn))并啟動(dòng)。
要搭建集群的話,需要使用一個(gè)工具(腳本文件),這個(gè)工具在redis解壓文件的源代碼里。因?yàn)檫@個(gè)工具是一個(gè)ruby腳本文件,所以這個(gè)工具的運(yùn)行需要ruby的運(yùn)行環(huán)境,就相當(dāng)于java語(yǔ)言的運(yùn)行需要在jvm上。所以需要安裝ruby,指令如下:
yum install ruby
然后需要把ruby相關(guān)的包安裝到服務(wù)器,我這里用的是redis-3.0.0.gem,大家需要注意的是:redis的版本和ruby包的版本最好保持一致。
將Ruby包安裝到服務(wù)器:需要先下載再安裝,如圖
安裝命令如下:
gem install redis-3.0.0.gem
?
3.9 上一步中已經(jīng)把ruby工具所需要的運(yùn)行環(huán)境和ruby包安裝好了,接下來(lái)需要把這個(gè)ruby腳本工具復(fù)制到usr/local/redis-cluster目錄下。那么這個(gè)ruby腳本工具在哪里呢?之前提到過(guò),在redis解壓文件的源代碼里,即redis/src目錄下的redis-trib.rb文件。
3.10 將該ruby工具(redis-trib.rb)復(fù)制到redis-cluster目錄下,指令如下:
cp redis-trib.rb /usr/local/redis-cluster
?
然后使用該腳本文件搭建集群,指令如下:
./redis-trib.rb create --replicas 1 47.106.219.251:7001 47.106.219.251:7002 47.106.219.251:7003 47.106.219.251:7004 47.106.219.251:7005 47.106.219.251:7006
?
注意:此處大家應(yīng)該根據(jù)自己的服務(wù)器ip輸入對(duì)應(yīng)的ip地址!
中途有個(gè)地方需要手動(dòng)輸入yes即可
至此,Redi集群搭建成功!大家注意最后一段文字,顯示了每個(gè)節(jié)點(diǎn)所分配的slots(哈希槽),這里總共6個(gè)節(jié)點(diǎn),其中3個(gè)是從節(jié)點(diǎn),所以3個(gè)主節(jié)點(diǎn)分別映射了0-5460、5461-10922、10933-16383solts。
3.11 最后連接集群節(jié)點(diǎn),連接任意一個(gè)即可:
redis01/redis-cli -p 7001 -c?
?
注意:一定要加上-c,不然節(jié)點(diǎn)之間是無(wú)法自動(dòng)跳轉(zhuǎn)的!如下圖可以看到,存儲(chǔ)的數(shù)據(jù)(key-value)是均勻分配到不同的節(jié)點(diǎn)的:
9.4、結(jié)語(yǔ)
呼~(yú)~~長(zhǎng)舒一口氣…終于搭建好了Redis集群。
整個(gè)過(guò)程其實(shí)挺簡(jiǎn)單,本篇主要正對(duì)入門(mén)級(jí)別的小伙伴,插入了很多圖片,所以顯得冗長(zhǎng),希望大家多多理解,如果不當(dāng)之處,還望及時(shí)指正~
最后,加上兩條redis集群基本命令:
1.查看當(dāng)前集群信息
cluster info
2.查看集群里有多少個(gè)節(jié)點(diǎn)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-435711.html
cluster nodes
————————————————
版權(quán)聲明:本文為CSDN博主「pub.ryan」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_36269641/article/details/110187059文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-435711.html
到了這里,關(guān)于spark 基于物理機(jī)centos7環(huán)境搭建分布式集群的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!