云原生大數(shù)據(jù)組件研究(Hive+Hadoop)
前言
網(wǎng)上的找的文檔大多殘缺不靠譜,所以我整理了一份安裝最新版本的hive4..0.0+hadoop3.3.4的學(xué)習(xí)環(huán)境,可以提供大家安裝一個(gè)完整的hive+hadoop的環(huán)境供學(xué)習(xí)。
由于在公司擔(dān)任大數(shù)據(jù)的培訓(xùn)工作后續(xù)還會(huì)更新一些基礎(chǔ)的文章,希望能幫助到大家。
一、安裝Hadoop3.3.4
前置:集群規(guī)劃
機(jī)器信息 |
Hostname |
k8s-master |
k8s-node1 |
k8s-node2 |
外網(wǎng)IP |
||||
內(nèi)網(wǎng)IP |
||||
NameNode |
Y |
N |
N |
|
SecondaryNameNode |
N |
Y |
N |
|
HDFS |
DataNode |
Y |
Y |
Y |
YARN |
ResourceManager |
Y |
N |
N |
NodeManager |
Y |
Y |
Y |
PS:部署前請(qǐng)修改好格機(jī)器的hostname 并配置好/etc/hosts文件。
step1 安裝前準(zhǔn)備
- 確保 Selinux是禁用狀態(tài)
#查看是否是禁用狀態(tài) 若不是則通過(guò) vi 命令進(jìn)行修改
cat /etc/selinux/config
|
- 設(shè)置各臺(tái)機(jī)器的免密登錄
2.1 切換到k8s-master機(jī)器上操作
#進(jìn)入秘鑰存放目錄(后續(xù)操作一路回車)
ssh-keygen -t rsa
#進(jìn)入秘鑰目錄
#rm -rf .ssh
cd ~/.ssh
#將秘鑰導(dǎo)入
cat id_rsa.pub >>authorized_keys
#分發(fā)秘鑰 格式【ssh-copy-id 主機(jī)名】
#分發(fā)到node1(后續(xù)操作需要輸入 node2密1)
ssh-copy-id k8s-node1
#分發(fā)到node2(后續(xù)操作需要輸入 node2密碼)
ssh-copy-id k8s-node2
#驗(yàn)證node1的免密登錄
ssh k8s-node1
exit
#驗(yàn)證node2的免密登錄
ssh k8s-node2
exit
- 安裝JDK1.8 并配置環(huán)境變量(各臺(tái)機(jī)器都需要執(zhí)行)
#查看jdk安裝支持包
yum -y list java*
#安裝jdk1.8
yum install java-1.8.0-openjdk.x86_64
#查看jdk版本
java -version
#查看jdk目錄
ls /usr/lib/jvm/
#向 /etc/profile 文件追加如下內(nèi)容
echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64/jre" >> /etc/profile
echo "export CLASS_PATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar:\$JAVA_HOME/lib" >> /etc/profile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile
#修改配置文件
#cat /etc/profile
#使得配置文件生效
source /etc/profile
#查看變量名是否正常生效
echo $JAVA_HOME
echo $CLASS_PATH
echo $PATH
#安裝openjdk-devel包 否則無(wú)法使用jps
yum install java-1.8.0-openjdk-devel.x86_64
- 安裝hadoop
下載 hadoop-3.3.4.tar.gz 編譯好的版本
鏈接: 百度網(wǎng)盤(pán) 請(qǐng)輸入提取碼 提取碼: i4a8
#新建用于存放安裝包的目錄
mkdir -p /home/install/hadoop/
#新建用于存放壓縮后組件的目錄
mkdir -p /home/module/hadoop/
#進(jìn)入安裝包目錄 上傳 hadoop-3.3.4.tar.gz
cd /home/install/hadoop/
#解包目錄
tar -zxvf /home/install/hadoop/hadoop-3.3.4.tar.gz -C /home/module/hadoop/
#已經(jīng)解壓到 /home/module/hadoop/hadoop-3.3.4
#賦予目錄全執(zhí)行權(quán)限
chmod 777 -R /home/module/hadoop
#向 /etc/profile 文件追加如下內(nèi)容
echo "export HADOOP_HOME=/home/module/hadoop/hadoop-3.3.4" >> /etc/profile
echo "export PATH=:\$PATH:\${HADOOP_HOME}/bin:\${HADOOP_HOME}/sbin" >> /etc/profile
#使得配置文件生效
source /etc/profile
#查看安裝是否生效
hadoop version
step2 集群部署
PS:特別注意之后 如果配置發(fā)生變更需要將變更的配置文件,還是要分發(fā)到各臺(tái)機(jī)器!
修改配置文件
#進(jìn)入hadoop中的配置文件目錄 (注意所需修改的所有配置文件都在 解壓后 /etc/hadoop 目錄下 )
cd /home/module/hadoop/hadoop-3.3.4/etc/hadoop
#顯示當(dāng)前目錄位置
pwd
|
該目錄下有我們所需修改文件 core-site.xml 、hdfs-site.xml 、mapred-site.xml、yarn-site.xml 。
修改配置文件
- hadoop-env.sh
該文件是hadoop環(huán)境變量讀取文件,我們執(zhí)行下面的內(nèi)內(nèi)容將配置追加到文件末尾
#進(jìn)入hadoop中的配置文件目錄 (注意所需修改的所有配置文件都在 解壓后 /etc/hadoop 目錄下 )
cd /home/module/hadoop/hadoop-3.3.4/etc/hadoop
#執(zhí)行命令 追加到 hadoop-env.sh
echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64/jre" >> hadoop-env.sh
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> hadoop-env.sh
echo "export HDFS_NAMENODE_USER=root" >> hadoop-env.sh
echo "export HDFS_DATANODE_USER=root" >> hadoop-env.sh
echo "export HDFS_SECONDARYNAMENODE_USER=root" >> hadoop-env.sh
echo "export YARN_RESOURCEMANAGER_USER=root" >> hadoop-env.sh
echo "export YARN_NODEMANAGER_USER=root" >> hadoop-env.sh
#查看追加結(jié)果
cat hadoop-env.sh
!無(wú)需執(zhí)行?。ㄒ部梢允褂胿i來(lái)添加下面內(nèi)容)
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64/jre
export PATH=$PATH:$JAVA_HOME/bin
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
- core-site.xml
#編輯文件 修改<configuration></configuration>中的內(nèi)容
vi core-site.xml
<configuration>
<!--1.指定Hadoop的文件系統(tǒng)的 NameNode URI -->
<property>
<name>fs.defaultFS</name>
<!--格式<value>hdfs://主機(jī)名:8020 </value>-->
<value>hdfs://k8s-master:8020</value>
</property>
<!--2.指定hadoop 數(shù)據(jù)的存儲(chǔ)目錄默認(rèn)為/tmp/hadoop-${user.name} -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/server/hadoopDatas/tempDatas</value>
</property>
<!--hive.hosts 允許 root 代理用戶訪問(wèn) Hadoop 文件系統(tǒng)設(shè)置 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!--hive.groups 允許 Hive 代理用戶訪問(wèn) Hadoop 文件系統(tǒng)設(shè)置 -->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<!-- 配置 HDFS 網(wǎng)頁(yè)登錄使用的靜態(tài)用戶為 root -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!--配置緩存區(qū)的大小,實(shí)際可根據(jù)服務(wù)器的性能動(dòng)態(tài)做調(diào)整-->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<!--開(kāi)啟hdfs垃圾回收機(jī)制,可以將刪除數(shù)據(jù)從其中回收,單位為分鐘-->
<property>
<name>fs.trash.interval</name>
<value>10080</value>
</property>
</configuration>
PS:hadoop.proxyuser.root.groups hadoop.proxyuser.root.groups 必須設(shè)置不然 hiveServer2啟動(dòng)會(huì)失敗。 |
報(bào)錯(cuò)如下: java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://k8s-master:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate anonymous |
- hdfs-site.xml
#編輯文件 修改<configuration></configuration>中的內(nèi)容
vi hdfs-site.xml
<configuration>
<!-- 配置 hdfs 文件切片的副本數(shù) -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--設(shè)置HDFS文件權(quán)限-->
<property>
<name>dfs.permission</name>
<value>false</value>
</property>
<!--設(shè)置一個(gè)文件切片的大小:128M-->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<!-- NameNode web 端訪問(wèn)地址(主機(jī)名:端口號(hào)) -->
<property>
<name>dfs.namenode.http-address</name>
<value>k8s-master:9870</value>
</property>
<!-- 指定SecondaryNameNode web 端訪問(wèn)地址(主機(jī)名:端口號(hào)) -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>k8s-node1:9868</value>
</property>
<!--指定namenode元數(shù)據(jù)的存放位置-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///export/server/hadoopDatas/namenodeDatas</value>
</property>
<!--指定datanode數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)位置-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///export/server/hadoopDatas/datanodeDatas</value>
</property>
<!--指定namenode的edit文件存放位置-->
<property>
<name>dfs.namenode.edits.dir</name>
<value>file:///export/server/hadoopDatas/nn/edits</value>
</property>
<!--指定檢查點(diǎn)目錄-->
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///export/server/hadoopDatas/snn/name</value>
</property>
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>file:///export/server/hadoopDatas/dfs/snn/edits</value>
</property>
</configuration>
- mapred-site.xml
是MapReduce的核心配置文件
#編輯文件 修改<configuration></configuration>中的內(nèi)容
vi mapred-site.xml
<configuration>
<!--指定mapreduce運(yùn)行的框架yarn-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--開(kāi)啟mapreduce最小任務(wù)模式-->
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>
<!-- 配置 mapreduce 的歷史記錄 組件的內(nèi)部通信地址即 RPC 地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<!--格式<value>主機(jī)名:端口</value>-->
<value>k8s-master:10020</value>
</property>
<!-- 配置 mapreduce 歷史記錄服務(wù)的 web 管理地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>k8s-master:19888</value>
</property>
<!-- 配置 mapreduce 已 完成的 job 記錄在 HDFS 上的存放地址 -->
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/history/done</value>
</property>
<!-- 配置 mapreduce 正在執(zhí)行的 job 記錄在 HDFS 上的存放地址 -->
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/history/done_intermediate</value>
</property> <!-- 為 MR 程序主進(jìn)程添加環(huán)境變量 -->
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/home/module/hadoop/hadoop-3.3.4</value>
</property>
<!-- 為 Map 添加環(huán)境變量 -->
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/home/module/hadoop/hadoop-3.3.4</value>
</property>
<!-- 為 Reduce 添加環(huán)境變量 -->
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/home/module/hadoop/hadoop-3.3.4</value>
</property>
</configuration>
- yarn-site.xml
#編輯文件 修改<configuration></configuration>中的內(nèi)容
vi yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!--指 定 resourcemanager 所啟動(dòng)服務(wù)的主機(jī)名 |IP(yarn主節(jié)點(diǎn)位置)-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>k8s-master</value>
</property>
<!--指 定 mapreduce的shuffle 處理數(shù)據(jù)方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 配置 resourcemanager 內(nèi)部通訊地址 -->
<property>
<name>yarn.resourcemanager.address</name>
<value>k8s-master:8032</value>
</property>
<!-- 配置 resourcemanager 的 scheduler 組件的內(nèi)部通信地址 -->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>k8s-master:8030</value>
</property>
<!-- 配置 resource-tracker 組件的內(nèi)部通信地址 -->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>k8s-master:8031</value> </property>
<!-- 配置 resourcemanager 的 admin 的內(nèi)部通信地址 -->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>k8s-master:8033</value>
</property>
<!-- 配置 yarn 的 web 管理地址 -->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>k8s-master:8088</value>
</property>
<!--yarn 的日志聚合是否開(kāi)啟 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 聚合日志在 hdfs 的存儲(chǔ)路徑 -->
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/tmp/logs</value>
</property>
<!-- 聚合日志在 hdfs的 保存時(shí)長(zhǎng),單位 S ,默認(rèn) 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<!-- 聚合日志的檢查時(shí)間段 -->
<property>
<name>yarn.log-aggregation.retain-check-interval-seconds</name>
<value>3600</value>
</property>
<!-- 設(shè) 置日志聚合服務(wù)器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://k8s-master:19888/jobhistory/logs</value>
</property>
<!-- 環(huán)境變量的繼承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
</property>
</configuration>
- workers
重新配置workers
cat > workers << EOF
k8s-master
k8s-node1
k8s-node2
EOF
創(chuàng)建配置文件中涉及的數(shù)據(jù)目錄
#創(chuàng)建hadoop.tmp.dir對(duì)應(yīng)目錄
mkdir -p /export/server/hadoopDatas/tempDatas
#創(chuàng)建dfs.namenode.name.dir對(duì)應(yīng)目錄
mkdir -p /export/server/hadoopDatas/namenodeDatas
#創(chuàng)建dfs.datanode.data.dir對(duì)應(yīng)目錄
mkdir -p /export/server/hadoopDatas/datanodeDatas
#創(chuàng)建dfs.namenode.edits.dir對(duì)應(yīng)目錄
mkdir -p /export/server/hadoopDatas/nn/edits
#創(chuàng)建dfs.namenode.checkpoint.dir對(duì)應(yīng)目錄
mkdir -p /export/server/hadoopDatas/snn/name
#創(chuàng)建dfs.namenode.checkpoint.edits.dir對(duì)應(yīng)目錄
mkdir -p /export/server/hadoopDatas/dfs/snn/edits
chmod 777 -R /export/server/hadoopDatas
step4 分發(fā)節(jié)點(diǎn)
1.切換到k8s-node1和k8s-node2 分別執(zhí)行
1.1 追加環(huán)境變量(各臺(tái)機(jī)器均需要執(zhí)行)
#向 /etc/profile 文件追加如下內(nèi)容
echo "export HADOOP_HOME=/home/module/hadoop/hadoop-3.3.4" >> /etc/profile
echo "export PATH=:\$PATH:\${HADOOP_HOME}/bin:\${HADOOP_HOME}/sbin" >> /etc/profile
#使得配置文件生效
source /etc/profile
1.2 創(chuàng)建目錄(各臺(tái)機(jī)器均需要執(zhí)行)
mkdir -p /home/module/hadoop/
chmod 777 -R /home/module/hadoop/
2.切換到k8s-master執(zhí)行
2.1 copy配置好的hadoop
#復(fù)制到k8s-node1
scp -r /home/module/hadoop/hadoop-3.3.4 root@k8s-node1:/home/module/hadoop/
#復(fù)制到k8s-node2
scp -r /home/module/hadoop/hadoop-3.3.4 root@k8s-node2:/home/module/hadoop/
2.2 格式化Namenode(僅能格式化一次)
首次啟動(dòng)HDFS需要對(duì)其進(jìn)行格式化操作,做清理和準(zhǔn)備
hadoop namenode -format
|
|
|
2.3 啟動(dòng) hadoop服務(wù)
cd /home/module/hadoop/hadoop-3.3.4/sbin
start-all.sh
#關(guān)閉命令(無(wú)需執(zhí)行)
#stop-all.sh
|
附錄:分階段一鍵啟動(dòng)命令(無(wú)需執(zhí)行)
#一鍵啟動(dòng)HDFS
#start-dfs.hs
#一鍵啟動(dòng)Yarn
#start-yarn.sh
#啟動(dòng)歷史服務(wù)進(jìn)程(這必須單獨(dú)啟動(dòng))
#mr-jobhistory-daemon.sh start historyserver
2.4. 檢查進(jìn)程運(yùn)行情況
jps
|
step5 通過(guò)web端查看 hdfs集群情況
HDFS查看地址:http://[你機(jī)器機(jī)器ip]:9870/
|
yarn查看地址:http://[你機(jī)器機(jī)器ip]:8088/
|
HDFS:公網(wǎng)IP:9870
yarn:公網(wǎng)IP:8088
錯(cuò)誤解決集合
1. no YARN_RESOURCEMANAGER_USER defined.
|
解決方法:該文件是hadoop環(huán)境變量讀取文件,我們執(zhí)行下面的內(nèi)內(nèi)容將配置追加到文件末尾
即可解決該問(wèn)題
#進(jìn)入hadoop中的配置文件目錄 (注意所需修改的所有配置文件都在 解壓后 /etc/hadoop 目錄下 )
cd /home/module/hadoop/hadoop-3.3.4/etc/hadoop
#執(zhí)行命令 追加到 hadoop-env.sh
echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b08-1.el7_9.x86_64/jre" >> hadoop-env.sh
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> hadoop-env.sh
echo "export HDFS_NAMENODE_USER=root" >> hadoop-env.sh
echo "export HDFS_DATANODE_USER=root" >> hadoop-env.sh
echo "export HDFS_SECONDARYNAMENODE_USER=root" >> hadoop-env.sh
echo "export YARN_RESOURCEMANAGER_USER=root" >> hadoop-env.sh
echo "export YARN_NODEMANAGER_USER=root" >> hadoop-env.sh
#查看追加結(jié)果
cat hadoop-env.sh
2
#如果找不到 chattr 命令需要重裝下
yum remove e2fsprogs
yum install e2fsprogs
cd ~/.ssh
lsattr authorized_keys
#顯示
#-----a-------e-- authorized_keys
lsattr authorized_keys2
#顯示
#-----a-------e-- authorized_keys2
chattr -a -e authorized_keys
chattr -a -e authorized_keys2
rm -rf authorized_keys
rm -rf authorized_keys2
2.【漏洞】 Hadoop Yarn RPC未授權(quán)訪問(wèn)漏洞
參考文獻(xiàn) |
【漏洞預(yù)警】Hadoop Yarn RPC未授權(quán)訪問(wèn)漏洞 |
Hadoop Yarn RPC服務(wù)未授權(quán)訪問(wèn)漏洞 - 網(wǎng)安 |
Hadoop Yarn RPC未授權(quán)訪問(wèn)漏洞存在于Hadoop Yarn中負(fù)責(zé)資源管理和任務(wù)調(diào)度的ResourceManager,成因是該組件為用戶提供的RPC服務(wù)默認(rèn)情況下無(wú)需認(rèn)證即可訪問(wèn),因此把RPC服務(wù)暴露在公網(wǎng)上是非常危險(xiǎn)的。
RPC服務(wù)利用這一問(wèn)題會(huì)影響到部分有安全意識(shí)的用戶。一部分用戶基于過(guò)去幾年中基于多種利用Hadoop的歷史蠕蟲(chóng)已經(jīng)意識(shí)到RESTful API的風(fēng)險(xiǎn),通過(guò)配置開(kāi)啟了基于HTTP的認(rèn)證,或通過(guò)防火墻/安全組封禁了RESTful API對(duì)應(yīng)的8088端口,但由于他們沒(méi)有意識(shí)到Hadoop同時(shí)提供RPC服務(wù),并且訪問(wèn)控制機(jī)制開(kāi)啟方式跟REST API不一樣,導(dǎo)致用戶Hadoop集群中RPC服務(wù)所在的8032端口仍然可以未授權(quán)訪問(wèn)。
經(jīng)測(cè)試可知,對(duì)于8032暴露在互聯(lián)網(wǎng)且未開(kāi)啟kerberos的Hadoop Yarn ResourceManager,編寫(xiě)應(yīng)用程序調(diào)用yarnClient.getApplications()即可查看所有應(yīng)用信息
解決方案
1、Apache Hadoop 官方建議用戶開(kāi)啟 Kerberos 認(rèn)證
2、設(shè)置 Hadoop RPC 服務(wù)所在端口僅對(duì)可信地址開(kāi)放
或者只在【內(nèi)網(wǎng)】開(kāi)放8032端口,注意由于這個(gè)漏洞不能對(duì)外開(kāi)放8032!
- 容器方式安裝mysql8.0-作為元數(shù)據(jù)庫(kù)
這個(gè)是作為hive的元數(shù)據(jù)庫(kù)的,如果自己有mysql可以跳過(guò)這個(gè)步驟
前置:數(shù)據(jù)規(guī)劃
用戶名 |
密碼 |
root |
【你自己的密碼】 |
chenjia |
【你自己的密碼】 |
1創(chuàng)建目錄
若之前用本文檔安裝輕用這個(gè)命令清理 #rm -rf /home/mysql
cd /home
mkdir mysql
mkdir -p /home/mysql/conf
mkdir -p /home/mysql/data
mkdir -p /home/mysql/logs
chmod -R 777 /home/mysql
2創(chuàng)建一個(gè)臨時(shí)的mysql鏡像復(fù)制其配置文件
docker run -d -p 3306:3306 --privileged=true --restart=always \ -e MYSQL_ROOT_PASSWORD=123456 \ --name mysql01 mysql \ --lower-case-table-names=1 |
#復(fù)制配置文件 掛載出去方便以后修改
docker cp -a mysql01:/etc/mysql/my.cnf /home/mysql/conf/my.cnf
#刪除臨時(shí)鏡像
docker rm -f mysql01
3修改/home/mysql/conf/my.cnf 配置文件
vim /home/mysql/conf/my.cnf
在最后一行增加最大連接數(shù)設(shè)置
max_connections=2000
:wq 保存
4正式啟動(dòng)mysql環(huán)境
注意:需要使用大小寫(xiě)不敏感配置 (--lower-case-table-names=1 )
如果之前安裝過(guò)請(qǐng)先執(zhí)行此命令刪除 #docker rm -f mysql01
mysql8.0 安裝命令 |
docker run -d -p 3306:3306 --privileged=true --restart=always \ -v /home/mysql/conf/my.cnf:/etc/mysql/my.cnf \ -v /home/mysql/data:/var/lib/mysql \ -v /home/mysql/logs:/logs -e MYSQL_ROOT_PASSWORD=123456 \ --name mysql01 mysql \ --lower-case-table-names=1 |
5為mysql創(chuàng)建一個(gè)可以遠(yuǎn)程訪問(wèn)的用戶
以下是創(chuàng)建一個(gè)用戶名為 chenjia 密碼為 【你自己的密碼】 的管理員賬號(hào)
docker exec -it mysql01 /bin/bash
mysql -u root -p
create user chenjia@'%' identified by '【你自己的密碼】';
grant all privileges on *.* to chenjia@'%' with grant option;
flush privileges;
alter user 'chenjia'@'%' identified with mysql_native_password by '【你自己的密碼】';
#將簡(jiǎn)單密碼改成復(fù)雜的【你自己的密碼】 以免收到攻擊
alter user 'root'@'%' identified with mysql_native_password by '【你自己的密碼】';
#alter user 'root'@'%' identified with mysql_native_password by '【你自己的密碼】';
6查看與臨時(shí)修改mysql最大連接數(shù)
docker exec -it mysql01 /bin/bash
mysql -u root -p
show variables like 'max_connections';
set global max_connections=1000;
exit
技巧:Docker鏡像中安裝vim命令的方法
docker exec -it mysql01 /bin/bash
apt-get update
apt-get install vim
三、安裝hive4.0.0
版本選用
對(duì)于 Hadoop 3.3.4,建議使用與之兼容的最新版本的 Hive,即 Hive 4.0.0。這是因?yàn)?Hive 4.0.0 是與 Hadoop 3.3.x 兼容的最新版本,可以充分利用 Hadoop 3.3.4 中的新特性和改進(jìn)。
Hive 3.1.3。 Hive 3.1.3 也與 Hadoop 3.3.x 兼容,并且是 Hive 3.x 系列中的最新版本,它在功能和性能方面與 Hive 4.0.0 相當(dāng)接近。
前置已經(jīng)安裝項(xiàng)目:
Hadoop3.3.4
MySql8.0
安裝Hive
1.下載安裝包
下載 apache-hive-4.0.0-alpha-2-bin.tar.gz
下載方式1:官方網(wǎng)站
下載方式2: https://pan.baidu.com/s/1hPas2f3PU81SXdtvB4_zbQ?pwd=81lv 提取碼: 81lv
2.設(shè)置安裝目錄和環(huán)境變量
#建立目錄
mkdir -p /home/install/hive
#上傳apache-hive-4.0.0-alpha-2-bin.tar.gz
#創(chuàng)建hive安裝目錄
mkdir -p /home/module/hive
chmod 777 /home/module/hive
#解壓hive到 安裝目錄
tar -zxvf /home/install/hive/apache-hive-4.0.0-alpha-2-bin.tar.gz -C /home/module/hive
#進(jìn)入hive安裝目錄
cd /home/module/hive/
#修改名稱為 hive-4.0.0
mv apache-hive-4.0.0-alpha-2-bin hive-4.0.0
#進(jìn)入hive的安裝目錄
cd /home/module/hive/hive-4.0.0
#向 /etc/profile 文件追加如下內(nèi)容
echo "export HIVE_HOME=/home/module/hive/hive-4.0.0" >> /etc/profile
echo "export PATH=\$PATH:\$HIVE_HOME/bin" >> /etc/profile
#查看配置是否被寫(xiě)到最后
cat /etc/profile
#使得配置文件生效
source /etc/profile
#驗(yàn)證環(huán)境變量
echo $HIVE_HOME
echo $PATH
解決日志jar包沖突
#在系統(tǒng)重查找所有的 SLF4J 綁定的 JAR 文件
find / -name "*slf4j*.jar"
[root@k8s-master lib]# find / -name "*slf4j*.jar" find: ‘/proc/13287’: 沒(méi)有那個(gè)文件或目錄 find: ‘/proc/13288’: 沒(méi)有那個(gè)文件或目錄 find: ‘/proc/13289’: 沒(méi)有那個(gè)文件或目錄 find: ‘/proc/13291’: 沒(méi)有那個(gè)文件或目錄 find: ‘/proc/13292’: 沒(méi)有那個(gè)文件或目錄 /home/module/hadoop/hadoop-3.3.4/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar /home/module/hadoop/hadoop-3.3.4/share/hadoop/common/lib/slf4j-api-1.7.36.jar /home/module/hadoop/hadoop-3.3.4/share/hadoop/common/lib/jul-to-slf4j-1.7.36.jar /home/module/hive/hive-4.0.0/lib/log4j-slf4j-impl-2.18.0.jar /home/module/hive/hive-4.0.0/hcatalog/share/webhcat/svr/lib/jul-to-slf4j-1.7.30.jar |
#刪除
mv $HIVE_HOME/lib/log4j-slf4j-impl-2.18.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.18.0.bak
#恢復(fù) 方法
#mv $HIVE_HOME/lib/log4j-slf4j-impl-2.18.0.bak $HIVE_HOME/lib/log4j-slf4j-impl-2.18.0.jar
3.上載mysql連接驅(qū)動(dòng)
鏈接: https://pan.baidu.com/s/1dvCqt77D1wOKbtBUrAILkA?pwd=7kni 提取碼: 7kni
#mysql8.0 的最新驅(qū)動(dòng)到lib目錄
cd /home/module/hive/hive-4.0.0/lib
4.在mysql中創(chuàng)建metastore數(shù)據(jù)庫(kù)
#進(jìn)入容器內(nèi)容
docker exec -it mysql01 /bin/bash
#登錄
mysql -u root -p
#輸入密碼 123456 (本地可用)
#創(chuàng)建 metastore 數(shù)據(jù)庫(kù):
CREATE DATABASE metastore;
#創(chuàng)建hiveruser 為其設(shè)置密碼
CREATE USER 'hiveuser'@'%' IDENTIFIED BY '【你自己的密碼】';
#授予metastore數(shù)庫(kù)的所有訪問(wèn)權(quán)限
GRANT ALL PRIVILEGES ON metastore.* TO 'hiveuser'@'%';
#退出mysql終端
exit
#退出docker環(huán)境
exit
5.修改配置文件
1.hive-site.xml
#進(jìn)入配置文件夾
cd /home/module/hive/hive-4.0.0/conf
#rm -rf hive-site.xml
#創(chuàng)建配置文件
vi hive-site.xml
復(fù)制下面內(nèi)容到文件中用wq保存
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://k8s-master:3306/metastore?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hiveuser</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>【你自己的數(shù)據(jù)庫(kù)密碼】</value>
</property>
<!-- 指定存儲(chǔ)元數(shù)據(jù)要連接的地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://k8s-master:9083</value>
<description>URI for client to connect to metastore server</description>
</property>
<!-- 指定hiveserver2連接的host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>k8s-master</value>
</property>
<!-- 指定hiveserver2連接的端口號(hào) -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<!-- hiveserver2的高可用參數(shù),如果不開(kāi)會(huì)導(dǎo)致了開(kāi)啟tez session導(dǎo)致hiveserver2無(wú)法啟動(dòng) -->
<property>
<name>hive.server2.active.passive.ha.enable</name>
<value>true</value>
</property>
<!--解決Error initializing notification event poll問(wèn)題-->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
</configuration>
配置文件解釋:
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://<hostname>:<port>/<database>?useSSL=false&allowPublicKeyRetrieval=true</value> </property> |
參數(shù)說(shuō)明: jdbc:mysql://<hostname>:<port>/<database>?useSSL=false&allowPublicKeyRetrieval=true 應(yīng)該設(shè)置為實(shí)際使用的數(shù)庫(kù)連接字符串 |
<property> <name>javax.jdo.option.ConnectionUserName</name> <value><username></value> </property> |
參數(shù)說(shuō)明: <username>參數(shù)應(yīng)改為實(shí)際上的數(shù)據(jù)庫(kù)的用戶 |
<property> <name>javax.jdo.option.ConnectionPassword</name> <value><password></value> </property> |
參數(shù)說(shuō)明: <password> 參數(shù)應(yīng)改為實(shí)際上的數(shù)據(jù)庫(kù)的密碼。 |
<property> <name>hive.metastore.uris</name> <value>thrift://<hostname>:9083</value> <description>URI for client to connect to metastore server</description> </property> |
參數(shù)說(shuō)明: <hive.metastore.uris> 參數(shù)是連接到 Hive 元數(shù)據(jù)存儲(chǔ)服務(wù)的必要參數(shù)。如果沒(méi)有正確配置該參數(shù),當(dāng)您嘗試連接到 Hive 時(shí),會(huì)遇到類似于 "No current connection" 的錯(cuò)誤消息。,<hostname> 應(yīng)該被替換為運(yùn)行 Hive Metastore Server 的主機(jī)名或 IP 地址。如果 Hive Metastore Server 運(yùn)行在非默認(rèn)端口上,那么您需要相應(yīng)地更改端口號(hào)。 |
6.初始化 元數(shù)據(jù) 數(shù)據(jù)庫(kù)命令
#執(zhí)行初始化元數(shù)據(jù)
schematool -dbType mysql -initSchema -verbose
#查看日志
cat /tmp/root/hive.log
PS:元數(shù)據(jù)庫(kù)初始化日志的目錄路徑取決于我們配置的 Hive 元數(shù)據(jù)庫(kù)日志目錄位置。默認(rèn)情況下,Hive 元數(shù)據(jù)庫(kù)日志存儲(chǔ)在 ${java.io.tmpdir}/${user.name}/hive.log 中,其中 ${java.io.tmpdir} 是 Java 系統(tǒng)屬性中的臨時(shí)目錄路徑,${user.name} 是當(dāng)前用戶的名稱。如果您使用的是默認(rèn)值,則可以在 /tmp/your-username/ 目錄下找到日志文件
|
7. 配置hive啟動(dòng)所需服務(wù)
在Hive 4.0.0中,Hive CLI已經(jīng)被棄用,取而代之的是Beeline。所以,當(dāng)你啟動(dòng)Hive 4.0.0時(shí),你會(huì)默認(rèn)進(jìn)入Beeline命令行界面,而不是Hive CLI。如果你想使用Hive CLI,你可以考慮降低Hive的版本,或者在Hive 4.0.0中使用Beeline命令行。
使用Beeline命令行連接Hive服務(wù)之前,需要確保以下服務(wù)已經(jīng)啟動(dòng)和配置:
服務(wù) |
說(shuō)明 |
執(zhí)行命令 |
Hadoop |
Hive需要依賴Hadoop服務(wù)來(lái)運(yùn)行,因此需要確保Hadoop服務(wù)已經(jīng)啟動(dòng),并且配置文件中的相關(guān)參數(shù)正確。 |
start-all.sh |
Hive Metastore |
Hive Metastore是Hive的元數(shù)據(jù)存儲(chǔ)服務(wù),需要確保Metastore服務(wù)已經(jīng)啟動(dòng),并且在Beeline的配置文件中正確配置了Metastore的地址。 |
hive --service metastore |
HiveServer2 |
HiveServer2是Hive的查詢服務(wù),需要確保HiveServer2服務(wù)已經(jīng)啟動(dòng),并且在Beeline的配置文件中正確配置了HiveServer2的地址。 |
hive --service hiveserver2 |
查看日志文件位置(可用于后續(xù)排除錯(cuò)誤)
#在 Hive 的 conf/ 目錄下 有一個(gè)hive-log4j2.properties 指定了日志的位置
#默認(rèn)是記錄在 hive.log中的 可以找下這個(gè)文件的位置
find / -name "*hive*.*log*"
#找到日志后可以使用下面的方法查看日志 排除錯(cuò)誤
#持續(xù)查看日志
tail -f /tmp/root/hive.log
#查看100行
tail -n 100 /tmp/root/hive.log
按順序啟動(dòng)各基礎(chǔ)服務(wù)
# 為演示效果 打開(kāi)一個(gè)新的shell窗口 啟動(dòng)后窗口不再操作
start-all.sh
# 為演示效果 打開(kāi)一個(gè)新的shell窗口 啟動(dòng)后窗口不再操作
hive --service metastore -n hive -p hivis250ha
netstat -anp | grep 9083
# 為演示效果 打開(kāi)一個(gè)新的shell窗口 啟動(dòng)后窗口不再操作
hive --service hiveserver2
netstat -anp | grep 10000
#為演示效果 打開(kāi)一個(gè)新的shell窗口 用jps -m 查看
jps -m
下面是這些語(yǔ)句分別的執(zhí)行結(jié)果:
|
|
|
進(jìn)行Hive的連接測(cè)試
方式1: 執(zhí)行beeline 命令
#最后嘗試連接
beeline -u jdbc:hive2://k8s-master:10000 --verbose=true
結(jié)果如下:
|
方式2: 執(zhí)行hive命令
#1.執(zhí)行hive
hive
#2.輸入建立連接的命令
!connect jdbc:hive2://k8s-master:10000
#3.輸入用戶名 root 密碼 隨意例如:chenjia
#4.執(zhí)行SQL命令
show tables;
|
到此已經(jīng)完成 hive+hadoop的安裝。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-461383.html
到了這里,關(guān)于(最新版本)hive4.0.0 + hadoop3.3.4 集群安裝(無(wú)坑版)-大數(shù)據(jù)學(xué)習(xí)系列(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!