1 Hive概述
Apache Hive是一個開源的數(shù)據(jù)倉庫查詢和分析工具,最初由Facebook開發(fā),并后來捐贈給Apache軟件基金會。Hive允許用戶使用SQL語言來查詢和分析存儲在Hadoop分布式文件系統(tǒng)(HDFS)中的大規(guī)模數(shù)據(jù)集。它的設(shè)計目標是使非技術(shù)用戶能夠輕松地在Hadoop集群上執(zhí)行數(shù)據(jù)查詢和分析任務(wù),而無需編寫復雜的MapReduce代碼。
以下是Hive的主要特點和概述:
- SQL-Like查詢語言: Hive提供了一種類似于SQL的查詢語言,稱為HiveQL(Hive Query Language),它允許用戶使用熟悉的SQL語法來查詢和操作數(shù)據(jù)。這使得數(shù)據(jù)庫管理員和分析師能夠更容易地利用Hadoop集群進行數(shù)據(jù)分析。
- 元數(shù)據(jù)存儲: Hive維護了一個元數(shù)據(jù)存儲,其中包含有關(guān)數(shù)據(jù)表、分區(qū)、列、數(shù)據(jù)類型和表之間關(guān)系的信息。這使得用戶可以在不了解底層數(shù)據(jù)存儲結(jié)構(gòu)的情況下查詢數(shù)據(jù)。
- 擴展性: Hive是高度可擴展的,可以處理大規(guī)模數(shù)據(jù)集。它允許用戶將數(shù)據(jù)表分成分區(qū),并支持分區(qū)級別的操作,從而提高了查詢性能。
- UDF(用戶定義函數(shù)): Hive允許用戶編寫自定義函數(shù),以滿足特定的數(shù)據(jù)處理需求。這些自定義函數(shù)可以使用Java或Python編寫,并與HiveQL一起使用。
- 集成: Hive可以與其他Hadoop生態(tài)系統(tǒng)工具集成,如Hadoop MapReduce、Apache HBase、Apache Spark等。這意味著用戶可以在不同的工具之間共享數(shù)據(jù)并執(zhí)行復雜的數(shù)據(jù)處理任務(wù)。
- 可視化工具: 雖然Hive本身是一個命令行工具,但也有許多可視化工具和商業(yè)智能平臺(如Tableau、QlikView)支持Hive,使用戶能夠使用圖形界面進行數(shù)據(jù)分析和報告生成。
- 安全性: Hive提供了基于SQL標準的權(quán)限管理機制,以確保只有授權(quán)的用戶可以訪問和修改數(shù)據(jù)。
- 數(shù)據(jù)格式支持: Hive支持多種數(shù)據(jù)格式,包括文本、Parquet、ORC(Optimized Row Columnar)等,可以根據(jù)需求選擇最適合的格式。
Hive通常用于數(shù)據(jù)倉庫、數(shù)據(jù)分析、報告生成和數(shù)據(jù)ETL(抽取、轉(zhuǎn)換、加載)等用例,特別是對于那些需要在Hadoop集群上處理大規(guī)模數(shù)據(jù)的組織。它提供了一種方便的方式來查詢和分析分布式存儲的數(shù)據(jù),使更多的人能夠從大數(shù)據(jù)中獲得有價值的見解。
Apache Hive是一個開源的數(shù)據(jù)倉庫查詢和分析工具,最初由Facebook開發(fā),并后來捐贈給Apache軟件基金會。Hive允許用戶使用SQL語言來查詢和分析存儲在Hadoop分布式文件系統(tǒng)(HDFS)中的大規(guī)模數(shù)據(jù)集。它的設(shè)計目標是使非技術(shù)用戶能夠輕松地在Hadoop集群上執(zhí)行數(shù)據(jù)查詢和分析任務(wù),而無需編寫復雜的MapReduce代碼。
以下是Hive的主要特點和概述:
- SQL-Like查詢語言: Hive提供了一種類似于SQL的查詢語言,稱為HiveQL(Hive Query Language),它允許用戶使用熟悉的SQL語法來查詢和操作數(shù)據(jù)。這使得數(shù)據(jù)庫管理員和分析師能夠更容易地利用Hadoop集群進行數(shù)據(jù)分析。
- 元數(shù)據(jù)存儲: Hive維護了一個元數(shù)據(jù)存儲,其中包含有關(guān)數(shù)據(jù)表、分區(qū)、列、數(shù)據(jù)類型和表之間關(guān)系的信息。這使得用戶可以在不了解底層數(shù)據(jù)存儲結(jié)構(gòu)的情況下查詢數(shù)據(jù)。
- 擴展性: Hive是高度可擴展的,可以處理大規(guī)模數(shù)據(jù)集。它允許用戶將數(shù)據(jù)表分成分區(qū),并支持分區(qū)級別的操作,從而提高了查詢性能。
- UDF(用戶定義函數(shù)): Hive允許用戶編寫自定義函數(shù),以滿足特定的數(shù)據(jù)處理需求。這些自定義函數(shù)可以使用Java或Python編寫,并與HiveQL一起使用。
- 集成: Hive可以與其他Hadoop生態(tài)系統(tǒng)工具集成,如Hadoop MapReduce、Apache HBase、Apache Spark等。這意味著用戶可以在不同的工具之間共享數(shù)據(jù)并執(zhí)行復雜的數(shù)據(jù)處理任務(wù)。
- 可視化工具: 雖然Hive本身是一個命令行工具,但也有許多可視化工具和商業(yè)智能平臺(如Tableau、QlikView)支持Hive,使用戶能夠使用圖形界面進行數(shù)據(jù)分析和報告生成。
- 安全性: Hive提供了基于SQL標準的權(quán)限管理機制,以確保只有授權(quán)的用戶可以訪問和修改數(shù)據(jù)。
- 數(shù)據(jù)格式支持: Hive支持多種數(shù)據(jù)格式,包括文本、Parquet、ORC(Optimized Row Columnar)等,可以根據(jù)需求選擇最適合的格式。
核心的功能:
- 元數(shù)據(jù)管理
- SQL解析
2 Hive部署
2.1 規(guī)劃
Hive 是單機工具,只需要部署在一臺服務(wù)器即可。
Hive 雖然是單機的,但是它可以提交分布式運行的
MapReduce 程序運行。
規(guī)劃
我們知道 Hive 是單機工具后,就需要準備一臺服務(wù)器供 Hive 使用即可。
同時 Hive 需要使用元數(shù)據(jù)服務(wù),即需要提供一個關(guān)系型數(shù)據(jù)庫,我們也選擇一臺服務(wù)器安裝關(guān)系型數(shù)據(jù)庫即可
機器 | 服務(wù) |
---|---|
node1 | Hive |
node1 | Mysql |
2.2 安裝軟件
步驟1:安裝Mysql5.7
# 更新秘鑰
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# 安裝mysql yum庫
rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm
# yum安裝mysql
yum -y install mysql-community-server
# 啟動mysql
systemctl start mysqld
# 設(shè)置msyql開機自啟
systemctl enable mysqld
# 檢查Mysql服務(wù)狀態(tài)
systemctl status mysqld
# 第一次啟動mysql會在日志文件中生成root用戶的一個隨機密碼
cat /var/log/mysqld.log | grep "password"
- 連接mysql 我們是做實驗用,設(shè)置簡單密碼(生成中不要這樣子搞)
set global validate_password_policy=LOW;
set global validate_password_length=4;
alter user 'root'@'localhost' identified by '123456';
grant all privileges on *.* to root@"%" identified by '123456' with grant option;
flush privileges;
步驟2:配置Hadoop
Hive的運行依賴Hadoop(HDFS、MapReduce、YARN都依賴),同時涉及到HDFS文件系統(tǒng)的訪問,所有要配置Hadoop的代理用戶,即設(shè)置Hadoop用戶允許代理(模擬)其他用戶。
配置如下內(nèi)容在Hadoop的core-site.xml中,并分發(fā)到其他節(jié)點,且重啟HDFS集群
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
步驟3:下載解壓Hive
-
node1切換到hadoop用戶
su - hadoop
-
下載Hive安裝包或者本地上傳
http://archive.apache.org/dist/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
-
解壓
tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /export/server/
-
設(shè)置軟連接
ln -s /export/server/apache-hive-3.1.3-bin.tar.gz /export/server/hive
步驟4:提供Mysql 驅(qū)動包
-
下載或者上傳Mysql驅(qū)動包
https:// repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.34/mysql-connector-java-5.1.34.jar
-
將下載好的Mysql驅(qū)動包移入Hive安裝目錄下lib目錄內(nèi)
mv mysql-connector-java-5.1.34.jar /export/server/hive/lib/
步驟5:配置Hive
- 在 Hive 的 conf 目錄內(nèi),新建 hive-env.sh 文件,填入以下環(huán)境變量內(nèi)容:
export HADOOP_HOME=/export/server/hadoop
export HIVE_CONF_DIR=/export/server/hive/conf
export HIVE_AUX_JARS_PATH=/export/server/hive/lib
-
在 Hive 的 conf 目錄內(nèi),新建 hive-site.xml 文件,填入以下內(nèi)容
<configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> </property> <property> <name>hive.server2.thrift.bind.host</name> <value>node1</value> </property> <property> <name>hive.metastore.uris</name> <value>thrift://node1:9083</value> </property> <property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> </property> </configuration>
- 現(xiàn)在使用的是5.1.34 Mysq驅(qū)動包,配置的連接驅(qū)動也是舊版廢棄的
步驟6:初始化元數(shù)據(jù)庫
-
在Mysql數(shù)據(jù)庫中新建數(shù)據(jù)庫:hive
create database hive charset utf8;
-
執(zhí)行元數(shù)據(jù)庫初始化命令
cd /export/server/hive bin/schematool -initSchema -dbType mysql -verbos
打印
Initialization script completed schemaTool completed
初始化完成
步驟7:啟動Hive
-
當前用戶為hadoop
-
確保Hive文件夾所屬為hadoop用戶
-
創(chuàng)建hive日志文件夾
mkdir /export/server/hive/logs
-
啟動元數(shù)據(jù)管理服務(wù)
# 前臺啟動 bin/hive --service metastore # 后臺啟動 nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
-
啟動客戶端,二選一(當前簡單測試選擇 Hive Shell)
-
Hive Shell方式:可以直接寫SQL
/bin/hive
-
Hive ThriftServer:不可以直接寫SQL,需要外部客戶端鏈接使用
bin/hive --service hiveserver2
-
3 Hive體驗
首先確保啟動了metastore服務(wù),可以執(zhí)行
bin/hive
進入hive shell環(huán)境中,可以執(zhí)行SQL語句,如下圖所示:
-
創(chuàng)建表
create table test(id int,name string,gender string);
-
插入數(shù)據(jù)
insert into test values(1, '愛因斯坦', '男'),(2, '麥克斯韋', '男'),(3, '居里夫人', '女');
-
查詢數(shù)據(jù)
select gender, count(*) cnt from test group by gender;
-
驗證Hive的數(shù)據(jù)存儲:Hive的數(shù)據(jù)存儲在HDFS的:
/user/hive/warehouse
,如下圖所示
- 驗證SQL語句啟動的MapReduce程序:打開YARN的WEB UI頁面查看任務(wù)情況-
http://node1:8088
,如下圖所示
4 Hive客戶端
4.1 HiveServer2 服務(wù)
在啟動 Hive 的時候,除了必備的 Metastore 服務(wù)外,我們前面提過有 2 種方式使用 Hive :
? 方式 1 : bin/hive 即 Hive 的 Shell 客戶端,可以直接寫 SQL
? 方式 2 : bin/hive --service hiveserver2
后臺執(zhí)行腳本:
nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &
bin/hive --service metastore ,啟動的是元數(shù)據(jù)管理服務(wù)
bin/hive --service hiveserver2 ,啟動的是 HiveServer2 服務(wù)
HiveServer2 是 Hive 內(nèi)置的一個 ThriftServer 服務(wù),提供 Thrift 端口供其它客戶端鏈接
可以連接 ThriftServer 的客戶端有:
? Hive 內(nèi)置的 beeline 客戶端工具(命令行工具)
? 第三方的圖形化 SQL 工具,如 DataGrip 、 DBeaver 、 Navicat 等
# 先啟動 metastore 服務(wù) 然后啟動 hiveserver2 服務(wù)
nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &
4.2 DataGrip
我們這里以DataGrip為例,其他客戶端自行測試。
步驟1:創(chuàng)建工程文件夾
E:\gaogzhen\projects\bigdata\DataGripProjects\hive-demo
步驟2:DataGrip創(chuàng)建新工程并關(guān)聯(lián)本地文件夾
步驟3:DataGrip連接Hive
1693897609904)
步驟4:配置Hive JDBC驅(qū)動
連接成功,如下圖所示:
5 問題集
5.1 Could not open client transport with JDBC Uri
-
報錯內(nèi)容
Error: Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=EXECUTE , inode="/tmp":hadoop:supergroup:drwx------
-
解決方案參考下面連接4,修改hdfs /tmp訪問權(quán)限,前面我們配置了hadoop用戶代理,不知道為啥沒生效
結(jié)語
如果小伙伴什么問題或者指教,歡迎交流。
?QQ:806797785
參考鏈接:
[1]大數(shù)據(jù)視頻[CP/OL].2020-04-16.
[2]0102阿里云配置3臺ECS服務(wù)器-大數(shù)據(jù)學習[CP/OL].
[3]0201hdfs集群部署-hadoop-大數(shù)據(jù)學習[CP/OL].文章來源:http://www.zghlxwxcb.cn/news/detail-696106.html
[4]beeline連接hive2報錯Permission denied[CP/OL].文章來源地址http://www.zghlxwxcb.cn/news/detail-696106.html
到了這里,關(guān)于0401hive入門-hadoop-大數(shù)據(jù)學習.md的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!