Hadoop 部署之 Hive (五)
1、什麽是 Hive
- Hive 由 Facebook 實現並開源,是基於 Hadoop 的一個數據倉庫工具,可以將結構化的數據映射為一張數據庫表,並提供 HQL(Hive SQL)查詢功能,底層數據是存儲在 HDFS 上。
- Hive 的本質是將 SQL 語句轉換為 MapReduce 任務運行,使不熟悉 MapReduce 的用戶很方便地利用 HQL 處理和計算 HDFS 上的結構化的數據,適用於離線的批量數據計算。
- Hive 依賴於 HDFS 存儲數據,Hive 將 HQL 轉換成 MapReduce 執行,所以說 Hive 是基於 Hadoop 的一個數據倉庫工具,實質就是一款基於 HDFS 的 MapReduce 計算框架,對存儲在 HDFS 中的數據進行分析和管理。
2、為什麽使用 Hive
直接使用 MapReduce 所面臨的問題:
1、人員學習成本太高
2、項目周期要求太短
3、MapReduce實現復雜查詢邏輯開發難度太大
為什麽要使用 Hive:
1、更友好的接口:操作接口采用類 SQL 的語法,提供快速開發的能力
2、更低的學習成本:避免了寫 MapReduce,減少開發人員的學習成本
3、更好的擴展性:可自由擴展集群規模而無需重啟服務,還支持用戶自定義函數
3、Hive 的特點
- 優點:
1、可擴展性,橫向擴展,Hive 可以自由的擴展集群的規模,一般情況下不需要重啟服務 橫向擴展:通過分擔壓力的方式擴展集群的規模 縱向擴展:一臺服務器cpu i7-6700k 4核心8線程,8核心16線程,內存64G => 128G
2、延展性,Hive 支持自定義函數,用戶可以根據自己的需求來實現自己的函數
3、良好的容錯性,可以保障即使有節點出現問題,SQL 語句仍可完成執行
- 缺點:
1、Hive 不支持記錄級別的增刪改操作,但是用戶可以通過查詢生成新表或者將查詢結 果導入到文件中(當前選擇的 hive-2.3.2 的版本支持記錄級別的插入操作)
2、Hive 的查詢延時很嚴重,因為 MapReduce Job 的啟動過程消耗很長時間,所以不能 用在交互查詢系統中。
3、Hive 不支持事務(因為不沒有增刪改,所以主要用來做 OLAP(聯機分析處理),而 不是 OLTP(聯機事務處理),這就是數據處理的兩大級別)。
4、Hive 的架構
二、Hive 安裝
1、MySQL 安裝(datanode01)
Hive 的元數據存儲在 RDBMS 中,除元數據外的其它所有數據都基於 HDFS 存儲。默認情 況下,Hive 元數據保存在內嵌的 Derby 數據庫中,只能允許一個會話連接,只適合簡單的 測試。實際生產環境中不適用,為了支持多用戶會話,則需要一個獨立的元數據庫,使用 MySQL 作為元數據庫,Hive 內部對 MySQL 提供了很好的支持。
yum install mariadb-server
2、MySQL 啟動
啟動數據庫
systemctl start mariadb
systemctl enable mariadb
3、Hive 下載安裝
# 下載安裝包
wget https://mirrors.aliyun.com/apache/hive/hive-2.3.3/apache-hive-2.3.3-bin.tar.gz
# 解壓安裝包
tar xf apache-hive-2.3.3-bin.tar.gz
mv apache-hive-2.3.3-bin /usr/local/hive
# 創建目錄
mkdir -p /home/hive/{log,tmp,job}
4、配置 Hive 環境變量
編輯文件/etc/profile.d/hive.sh
,修改為如下內容:
# HIVE ENV
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
使HIVE環境變量生效。
source /etc/profile.d/hive.sh
三、Hive 配置
1、配置 metastore
mysql> grant all privileges on *.* to ‘hive‘@‘%‘ identified by ‘hive123456‘ with grant option;
mysql> grant all privileges on *.* to ‘hive‘@‘datanode01‘ identified by ‘hive123456‘ with grant option;
mysql> grant all privileges on *.* to ‘thbl_prd_hive‘@‘%‘ identified by ‘hive123456‘ with grant option;
mysql> grant all privileges on *.* to ‘hive‘@‘localhost‘ identified by ‘hive123456‘ with grant option;
mysql> grant all privileges on *.* to ‘thbl_prd_hive‘@‘localhost‘ identified by ‘hive123456‘ with grant option;
mysql> flush privileges;
2、配置 jdbc
wget http://mirrors.163.com/mysql/Downloads/Connector-J/mysql-connector-java-5.1.45.tar.gz tar xf mysql-connector-java-5.1.45.tar.gz
cp mysql-connector-java-5.1.45/mysql-connector-java-5.1.45-bin.jar /usr/local/hive/lib/
3、備份template配置文件
cd /usr/local/hive/conf
mkdir template
mv *.template template
# 安排配置文件
cp template/hive-exec-log4j2.properties.template hive-exec-log4j2.properties
cp template/hive-log4j2.properties.template hive-log4j2.properties
cp template/hive-default.xml.template hive-default.xml
cp template/hive-env.sh.template hive-env.sh
4、配置 hive-env.sh
編輯文件/usr/local/hive/conf/hive-env.sh
,修改內容如下:
HADOOP_HOME=/usr/local/hadoop
export HIVE_CONF_DIR=/usr/local/hive/conf
export HIVE_AUX_JARS_PATH=/usr/local/hive/lib
5、配置數據倉庫 hive-site.xml
編輯文件/usr/local/hive/conf/hive-site.xml
,修改內容為如下:
<configuration>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/home/hive/job</value>
<description>hive的本地臨時目錄,用來存儲不同階段的map/reduce的執行計劃</description>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/home/hive/tmp/${hive.session.id}_resources</value>
<description>hive下載的本地臨時目錄</description>
</property>
<property>
<name>hive.querylog.location</name>
<value>/home/hive/log/${system:user.name}</value>
<description>hive運行時結構化日誌路徑</description>
</property>
<property>
<name>hive.hwi.war.file</name>
<value>lib/hive-hwi-2.1.1.war</value>
<description>HWI war文件路徑, 與 ${HIVE_HOME}相關. </description>
</property>
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/home/hive/log/${system:user.name}/operation_logs</value>
<description>日誌開啟時的,操作日誌路徑</description>
</property>
<!--遠程mysql元數據庫-->
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
<description>啟動時自動創建必要的schema</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/hive/warehouse</value>
<description>Hive數據倉庫在HDFS中的路徑</description>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://datanode01:9083</value>
<description>遠程metastore的 Thrift URI,以供metastore客戶端連接metastore服務端</description>
</property>
<!--mysql元數據庫配置-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>JDBC驅動名</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://datanode01:3306/hive_db?createDatabaseIfNotExist=true</value>
<description>JDBC連接名</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>連接metastore數據庫的用戶名</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive12345</value>
<description>連接metastore數據庫的密碼</description>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<description>強制metastore schema的版本一致性</description>
</property>
</configuration>
6、配置權限
scp /usr/local/hive/conf/* datanode01:/usr/local/hive/conf/
chmod 755 /usr/local/hive/conf/*
四、Hive 啟動
1、在namenode01,啟動hiveserver2
hive --service hiveserver2 &
2、在datanode01,啟動metastore
hive --service metastore &
五、Hive 檢查
1、JPS
[root@namenode01 ~]# jps
14512 NameNode
14786 ResourceManager
21348 RunJar
15894 HMaster
22047 Jps
[root@datanode01 ~]# jps
3509 DataNode
3621 NodeManager
1097 QuorumPeerMain
9930 RunJar
3935 HRegionServer
10063 Jps
2、hive shell
[root@namenode01 ~]# hive
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Logging initialized using configuration in file:/usr/local/hive/conf/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive> show tables;
OK
Time taken: 0.833 seconds
Hadoop 部署之 Hive (五)