自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

數(shù)倉(cāng) Hive HA 介紹與實(shí)戰(zhàn)操作

大數(shù)據(jù) Hadoop
Hive是建立在Hadoop生態(tài)系統(tǒng)之上的一種數(shù)據(jù)倉(cāng)庫(kù)解決方案,用于處理大規(guī)模數(shù)據(jù)的查詢和分析。為了確保Hive服務(wù)的連續(xù)性和可用性,特別是在出現(xiàn)硬件故障、軟件問(wèn)題或其他中斷情況時(shí),實(shí)施Hive的高可用性解決方案非常重要。

一、概述

在數(shù)據(jù)倉(cāng)庫(kù)中,Hive HA(High Availability) 是指為 Apache Hive 這個(gè)數(shù)據(jù)倉(cāng)庫(kù)查詢和分析工具提供高可用性的架構(gòu)和解決方案。Hive是建立在Hadoop生態(tài)系統(tǒng)之上的一種數(shù)據(jù)倉(cāng)庫(kù)解決方案,用于處理大規(guī)模數(shù)據(jù)的查詢和分析。為了確保Hive服務(wù)的連續(xù)性和可用性,特別是在出現(xiàn)硬件故障、軟件問(wèn)題或其他中斷情況時(shí),實(shí)施Hive的高可用性解決方案非常重要。

Hive HA通常涉及以下幾個(gè)方面:

  • 元數(shù)據(jù)存儲(chǔ)的高可用性 : 元數(shù)據(jù)存儲(chǔ)在Hive Metastore中,其中包括表的結(jié)構(gòu)、分區(qū)信息、表的位置等。為了確保元數(shù)據(jù)的高可用性,可以使用數(shù)據(jù)庫(kù)復(fù)制、備份和恢復(fù)策略。常見(jiàn)的數(shù)據(jù)庫(kù)選擇包括MySQL、PostgreSQL等。
  • 查詢引擎的高可用性: Hive的查詢引擎可以采用多種方式實(shí)現(xiàn)高可用性,例如使用Hadoop的YARN資源管理器來(lái)管理查詢作業(yè),或者通過(guò)部署多個(gè)Hive Server來(lái)實(shí)現(xiàn)負(fù)載均衡和故障轉(zhuǎn)移。
  • 數(shù)據(jù)存儲(chǔ)的冗余備份: 在Hadoop HDFS中存儲(chǔ)的數(shù)據(jù)可以通過(guò)數(shù)據(jù)冗余備份來(lái)確保數(shù)據(jù)的可靠性和高可用性。HDFS通常使用副本機(jī)制來(lái)保存多個(gè)數(shù)據(jù)副本,以防止單個(gè)節(jié)點(diǎn)故障導(dǎo)致數(shù)據(jù)丟失。
  • 自動(dòng)故障切換: Hive HA解決方案應(yīng)該能夠自動(dòng)檢測(cè)到故障,并在需要時(shí)進(jìn)行故障切換。這意味著當(dāng)一個(gè)節(jié)點(diǎn)或服務(wù)出現(xiàn)問(wèn)題時(shí),系統(tǒng)能夠迅速將請(qǐng)求路由到可用的節(jié)點(diǎn)或服務(wù)上,從而減少中斷時(shí)間。
  • 監(jiān)控和告警系統(tǒng): 為了實(shí)現(xiàn)高可用性,監(jiān)控和告警系統(tǒng)對(duì)于及時(shí)發(fā)現(xiàn)和處理故障非常重要。這些系統(tǒng)可以監(jiān)視Hive服務(wù)的運(yùn)行狀態(tài),及時(shí)發(fā)出警報(bào)并采取必要的措施來(lái)應(yīng)對(duì)潛在的問(wèn)題。

總的來(lái)說(shuō),Hive HA旨在通過(guò)冗余、備份、自動(dòng)故障切換和監(jiān)控系統(tǒng)等方式,確保在各種情況下都能夠保持Hive服務(wù)的正常運(yùn)行,從而提供持續(xù)的數(shù)據(jù)查詢和分析能力。具體的實(shí)施方式可能因組織的需求和技術(shù)棧而異。

圖片圖片

二、Hive MetaStore HA 介紹與配置

Hive MetaStore HA(High Availability)是為了保證Hive元數(shù)據(jù)存儲(chǔ)的高可用性而采取的一系列措施和配置。Hive元數(shù)據(jù)存儲(chǔ)在MetaStore中,包括表的定義、分區(qū)、表的屬性等信息。確保Hive MetaStore的高可用性是保障整個(gè)Hive系統(tǒng)可靠性和穩(wěn)定性的重要一步。

常規(guī)連接原理:

圖片圖片

高可用原理:

圖片圖片

以下是一個(gè)示例,將 ZooKeeper 地址配置到 hive.metastore.uris 中:

<configuration>
  <property>
 	<name>hive.server2.thrift.bind.host</name>
  	<value>metastore1_host</value>
  </property>
  
  <!-- 啟用 ZooKeeper 用于 HA -->
  <property>
    <name>hive.metastore.uris</name>
    <value>
      thrift://metastore1_host:9083,
      thrift://metastore2_host:9083
    </value>
  </property>
  <!-- 其他配置項(xiàng) -->
</configuration>

在這個(gè)示例中,你需要將 metastore1_host、metastore2_host、metastore3_host 替換為你的 Hive MetaStore 實(shí)例的主機(jī)地址。使用逗號(hào)分隔來(lái)指定多個(gè)地址。這樣,當(dāng)連接到一個(gè)實(shí)例時(shí)出現(xiàn)問(wèn)題,Hive 將嘗試連接到下一個(gè)地址,以實(shí)現(xiàn)故障切換和冗余。

三、Hive HiveServer2 HA 介紹與配置

HiveServer2 HA(High Availability)是為了確保Apache Hive的查詢服務(wù)HiveServer2的高可用性而采取的一系列措施和配置。HiveServer2是Hive的一個(gè)查詢引擎,允許用戶通過(guò)多種方式(如JDBC、ODBC等)提交和執(zhí)行Hive查詢。通過(guò)配置HiveServer2的高可用性,可以確保在出現(xiàn)硬件故障、軟件問(wèn)題或其他中斷情況時(shí)仍然能夠提供持續(xù)的查詢服務(wù)。

圖片圖片

以下是一個(gè)示例HiveServer2的高可用性配置,使用Apache ZooKeeper來(lái)實(shí)現(xiàn)故障切換。請(qǐng)注意,這只是一個(gè)簡(jiǎn)化的示例,實(shí)際配置可能會(huì)因環(huán)境和需求而有所不同。

  1. 安裝和配置ZooKeeper:確保你已經(jīng)安裝和配置了一個(gè)ZooKeeper集群。你需要知道ZooKeeper服務(wù)器的主機(jī)名或IP地址以及端口號(hào)。
  2. 編輯Hive Site配置:打開(kāi)Hive的配置文件 hive-site.xml,添加以下屬性來(lái)配置HiveServer2的高可用性和與ZooKeeper的集成:
<configuration>
  <!-- 啟用ZooKeeper用于HA -->
  <property>
    <name>hive.server2.zookeeper.namespace</name>
    <value>hiveserver2</value>
  </property>
  <property>
    <name>hive.zookeeper.client.port</name>
    <value>2181</value>
  </property>
  <property>
    <name>hive.zookeeper.quorum</name>
    <value>zk1_host:2181,zk2_host:2181,zk3_host:2181</value>
  </property>
  <property>
    <name>hive.server2.support.dynamic.service.discovery</name>
    <value>true</value>
  </property>
  <!-- 其他配置項(xiàng) -->
</configuration>

將zk1_host、zk2_host、zk3_host替換為你的ZooKeeper主機(jī)地址和端口號(hào)。

四、環(huán)境部署

這里為了快速部署環(huán)境,就使用k8s 環(huán)境部署Hadoop了。關(guān)于 hadoop on k8s 教程,可以參考我這篇文章:Hadoop HA on k8s 編排部署進(jìn)階篇

hive-site.xml 完整配置如下:

<?xml versinotallow="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<!-- 配置hdfs存儲(chǔ)目錄 -->
	<property>
			<name>hive.metastore.warehouse.dir</name>
			<value>/user/hive_remote/warehouse</value>
	</property>

	<property>
			<name>hive.metastore.local</name>
			<value>false</value>
	</property>

	<!-- 所連接的 MySQL 數(shù)據(jù)庫(kù)的地址,hive_local是數(shù)據(jù)庫(kù),程序會(huì)自動(dòng)創(chuàng)建,自定義就行 -->
	<property>
			<name>javax.jdo.option.ConnectionURL</name>
			<value>jdbc:mysql://192.168.182.110:13306/hive_metastore?createDatabaseIfNotExist=true&useSSL=false&serverTimeznotallow=Asia/Shanghai</value>
	</property>

	<!-- MySQL 驅(qū)動(dòng) -->
	<property>
			<name>javax.jdo.option.ConnectionDriverName</name>
			<!--<value>com.mysql.cj.jdbc.Driver</value>-->
			<value>com.mysql.jdbc.Driver</value>
	</property>

	<!-- mysql連接用戶 -->
	<property>
			<name>javax.jdo.option.ConnectionUserName</name>
			<value>root</value>
	</property>

	<!-- mysql連接密碼 -->
	<property>
			<name>javax.jdo.option.ConnectionPassword</name>
			<value>123456</value>
	</property>

	<!--元數(shù)據(jù)是否校驗(yàn)-->
	<property>
			<name>hive.metastore.schema.verification</name>
			<value>false</value>
	</property>

	<property>
			<name>system:user.name</name>
			<value>root</value>
			<description>user name</description>
	</property>

	<property>
			<name>hive.metastore.uris</name>
			<value>thrift://{{ include "hadoop.fullname" . }}-hive-metastore-0.{{ include "hadoop.fullname" . }}-hive-metastore:{{ .Values.service.hive.metastore.port }},{{ include "hadoop.fullname" . }}-hive-metastore-1.{{ include "hadoop.fullname" . }}-hive-metastore:{{ .Values.service.hive.metastore.port }}</value>
	</property>

	<!-- host -->
	<property>
			<name>hive.server2.thrift.bind.host</name>
			<value>0.0.0.0</value>
			<description>Bind host on which to run the HiveServer2 Thrift service.</description>
	</property>

	<!-- hs2端口 默認(rèn)是10000-->
	<property>
			<name>hive.server2.thrift.port</name>
			<value>{{ .Values.service.hive.hiveserver2.port }}</value>
	</property>
	
	<!-- 啟用ZooKeeper用于HA -->
	<!--設(shè)置hiveserver2的命名空間-->
	<property>
			<name>hive.server2.zookeeper.namespace</name>
			<value>hiveserver2</value>
	</property>

	<!--指定zk的端口,這個(gè)其實(shí)是否可以去掉,因?yàn)閔ive.server2.zookeeper.quorum 配置里有配置端口的-->
	<property>
			<name>hive.zookeeper.client.port</name>
			<value>2181</value>
	</property>

	<!--設(shè)置zk集群的客戶端地址-->
	<property>
			<name>hive.zookeeper.quorum</name>
			<value>{{ include "hadoop.fullname" . }}-zookeeper-0.{{ include "hadoop.fullname" . }}-zookeeper.{{ .Release.Namespace }}.svc.cluster.local:2181,{{ include "hadoop.fullname" . }}-zookeeper-1.{{ include "hadoop.fullname" . }}-zookeeper.{{ .Release.Namespace }}.svc.cluster.local:2181,{{ include "hadoop.fullname" . }}-zookeeper-2.{{ include "hadoop.fullname" . }}-zookeeper.{{ .Release.Namespace }}.svc.cluster.local:2181</value>
	</property>

	<!-- 用于啟用或禁用 HiveServer2 動(dòng)態(tài)服務(wù)發(fā)現(xiàn)功能。-->
	<property>
			<name>hive.server2.support.dynamic.service.discovery</name>
			<value>true</value>
	</property>

</configuration>

【溫馨提示】如果不是使用 hadoop on k8s 方式部署,記得修改 javax.jdo.option.ConnectionURL、hive.metastore.uris、hive.server2.zookeeper.quorum 這幾個(gè)配置的值。

開(kāi)始部署

cd hadoop-ha-on-kubernetes
#mkdir -p /opt/bigdata/servers/hadoop/{nn,jn,dn,zk}/data/data{1..3}
#chmod 777 -R /opt/bigdata/servers/hadoop/
# 安裝
helm install hadoop-ha ./ -n hadoop-ha --create-namespace

# 查看
kubectl get pods,svc -n hadoop-ha -owide

# 更新
# helm upgrade hadoop-ha ./ -n hadoop-ha

# 卸載
# helm uninstall hadoop-ha -n hadoop-ha
#rm -fr /opt/bigdata/servers/hadoop/*

圖片圖片

五、測(cè)試驗(yàn)證

1)hive metastore 測(cè)試驗(yàn)證

hive_pod_name=`kubectl get pods -n hadoop-ha|grep 'hiveserver2'|head -1 |awk '{print $1}'`

# 登錄pod 
kubectl exec -it $hive_pod_name -n hadoop-ha -- bash

# 啟動(dòng)命令,
hive 

create database test2023;
create table test2023.person_local_1(id int,name string,age int) row format delimited fields terminated by ',';
# 查看表結(jié)構(gòu)
show create table test2023.person_local_1;

drop table test2023.person_local_1;
drop database test2023;

# 指定具體metastore,不指定就是查詢可用的metastore服務(wù)
# 交互式
SET hive.metastore.uris=thrift://hadoop-ha-hadoop-hive-metastore-0.hadoop-ha-hadoop-hive-metastore:9083;

# 非交互式
hive --hiveconf hive.metastore.uris=thrift://hadoop-ha-hadoop-hive-metastore-0.hadoop-ha-hadoop-hive-metastore:9083 -e "show databases;"

2)hive hiveserver2 測(cè)試驗(yàn)證

hive_pod_name=`kubectl get pods -n hadoop-ha|grep 'hiveserver2'|head -1 |awk '{print $1}'`

# 登錄pod 
kubectl exec -it $hive_pod_name -n hadoop-ha -- bash

# 非交互式,這里我使用svc訪問(wèn),當(dāng)然你也可以展開(kāi),寫(xiě)具體的pod或IP
beeline -u "jdbc:hive2://hadoop-ha-hadoop-zookeeper.hadoop-ha:2181/;serviceDiscoveryMode=zookeeper;zookeeperNamespace=hiveserver2/default" -n hadoop -e "select version();"

# 交互式操作
beeline -u "jdbc:hive2://hadoop-ha-hadoop-zookeeper.hadoop-ha:2181/;serviceDiscoveryMode=zookeeper;zookeeperNamespace=hiveserver2/default" -n hadoop

--- 1、創(chuàng)建表
create table person_local_1(id int,name string,age int) row format delimited fields terminated by ',';
create table person_hdfs_1(id int,name string,age int) row format delimited fields terminated by ',';
show tables;

--- 2、 從local加載數(shù)據(jù),這里的local是指hs2服務(wù)所在機(jī)器的本地linux文件系統(tǒng)
load data local inpath '/opt/bigdata/hadoop/data/hive-data' into table person_local_1;

--- 3、查詢
select * from person_local_1;

--- 4、從hdfs中加載數(shù)據(jù),這里是移動(dòng),會(huì)把hdfs上的文件mv到對(duì)應(yīng)的hive的目錄下
load data inpath '/person_hdfs.txt'  into table person_hdfs_1;

--- 5、查詢
select * from person_hdfs_1;

責(zé)任編輯:武曉燕 來(lái)源: 大數(shù)據(jù)與云原生技術(shù)分享
相關(guān)推薦

2023-03-02 07:37:53

2023-03-27 07:43:35

2023-09-05 07:02:25

開(kāi)源工具應(yīng)用程序

2020-12-07 14:01:20

數(shù)倉(cāng)Flume數(shù)據(jù)

2010-07-01 14:52:42

Linux grep命

2023-03-08 07:50:57

企業(yè)數(shù)據(jù)治理

2011-04-11 09:48:36

2022-08-30 15:29:51

crictlnerdctl命令

2022-08-22 17:46:56

虛擬數(shù)倉(cāng)Impala

2025-04-15 10:10:00

數(shù)據(jù)倉(cāng)庫(kù)大數(shù)據(jù)數(shù)據(jù)

2021-01-31 23:54:23

數(shù)倉(cāng)模型

2023-01-03 17:43:39

網(wǎng)易郵箱數(shù)倉(cāng)

2021-01-04 05:42:48

數(shù)倉(cāng)模型設(shè)計(jì)

2022-07-26 15:38:58

數(shù)據(jù)倉(cāng)數(shù)據(jù)治理數(shù)據(jù)團(tuán)隊(duì)

2023-01-26 23:59:24

Ansibleplaybook列表

2022-01-02 23:02:16

數(shù)據(jù)中臺(tái)選型

2023-02-03 08:18:01

2023-11-23 16:53:56

數(shù)據(jù)倉(cāng)庫(kù)大數(shù)據(jù)

2022-02-18 09:02:04

數(shù)據(jù)倉(cāng)庫(kù)治理

2022-01-13 10:45:48

數(shù)倉(cāng)對(duì)象主題域
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)