創(chuàng)新互聯(lián)網(wǎng)絡(luò)公司擁有10年的成都網(wǎng)站開發(fā)建設(shè)經(jīng)驗,1000+客戶的共同信賴。提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計、網(wǎng)站開發(fā)、網(wǎng)站定制、買友情鏈接、建網(wǎng)站、網(wǎng)站搭建、自適應(yīng)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計師打造企業(yè)風格,提供周到的售前咨詢和貼心的售后服務(wù)
直接使用 MapReduce 所面臨的問題:
1、人員學習成本太高
2、項目周期要求太短
3、MapReduce實現(xiàn)復(fù)雜查詢邏輯開發(fā)難度太大
為什么要使用 Hive:
1、更友好的接口:操作接口采用類 SQL 的語法,提供快速開發(fā)的能力
2、更低的學習成本:避免了寫 MapReduce,減少開發(fā)人員的學習成本
3、更好的擴展性:可自由擴展集群規(guī)模而無需重啟服務(wù),還支持用戶自定義函數(shù)
1、可擴展性,橫向擴展,Hive 可以自由的擴展集群的規(guī)模,一般情況下不需要重啟服務(wù) 橫向擴展:通過分擔壓力的方式擴展集群的規(guī)模 縱向擴展:一臺服務(wù)器cpu i7-6700k 4核心8線程,8核心16線程,內(nèi)存64G => 128G
2、延展性,Hive 支持自定義函數(shù),用戶可以根據(jù)自己的需求來實現(xiàn)自己的函數(shù)
3、良好的容錯性,可以保障即使有節(jié)點出現(xiàn)問題,SQL 語句仍可完成執(zhí)行
1、Hive 不支持記錄級別的增刪改操作,但是用戶可以通過查詢生成新表或者將查詢結(jié) 果導(dǎo)入到文件中(當前選擇的 hive-2.3.2 的版本支持記錄級別的插入操作)
2、Hive 的查詢延時很嚴重,因為 MapReduce Job 的啟動過程消耗很長時間,所以不能 用在交互查詢系統(tǒng)中。
3、Hive 不支持事務(wù)(因為不沒有增刪改,所以主要用來做 OLAP(聯(lián)機分析處理),而 不是 OLTP(聯(lián)機事務(wù)處理),這就是數(shù)據(jù)處理的兩大級別)。
Hive 的元數(shù)據(jù)存儲在 RDBMS 中,除元數(shù)據(jù)外的其它所有數(shù)據(jù)都基于 HDFS 存儲。默認情 況下,Hive 元數(shù)據(jù)保存在內(nèi)嵌的 Derby 數(shù)據(jù)庫中,只能允許一個會話連接,只適合簡單的 測試。實際生產(chǎn)環(huán)境中不適用,為了支持多用戶會話,則需要一個獨立的元數(shù)據(jù)庫,使用 MySQL 作為元數(shù)據(jù)庫,Hive 內(nèi)部對 MySQL 提供了很好的支持。
yum install mariadb-server
啟動數(shù)據(jù)庫
systemctl start mariadb
systemctl enable mariadb
# 下載安裝包
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
# 創(chuàng)建目錄
mkdir -p /home/hive/{log,tmp,job}
編輯文件/etc/profile.d/hive.sh
,修改為如下內(nèi)容:
# HIVE ENV
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
使HIVE環(huán)境變量生效。
source /etc/profile.d/hive.sh
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;
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/
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
編輯文件/usr/local/hive/conf/hive-env.sh
,修改內(nèi)容如下:
HADOOP_HOME=/usr/local/hadoop
export HIVE_CONF_DIR=/usr/local/hive/conf
export HIVE_AUX_JARS_PATH=/usr/local/hive/lib
編輯文件/usr/local/hive/conf/hive-site.xml
,修改內(nèi)容為如下:
hive.exec.local.scratchdir
/home/hive/job
hive的本地臨時目錄,用來存儲不同階段的map/reduce的執(zhí)行計劃
hive.downloaded.resources.dir
/home/hive/tmp/${hive.session.id}_resources
hive下載的本地臨時目錄
hive.querylog.location
/home/hive/log/${system:user.name}
hive運行時結(jié)構(gòu)化日志路徑
hive.hwi.war.file
lib/hive-hwi-2.1.1.war
HWI war文件路徑, 與 ${HIVE_HOME}相關(guān).
hive.server2.logging.operation.log.location
/home/hive/log/${system:user.name}/operation_logs
日志開啟時的,操作日志路徑
hive.metastore.local
false
datanucleus.schema.autoCreateAll
true
啟動時自動創(chuàng)建必要的schema
hive.metastore.warehouse.dir
/hive/warehouse
Hive數(shù)據(jù)倉庫在HDFS中的路徑
hive.metastore.uris
thrift://datanode01:9083
遠程metastore的 Thrift URI,以供metastore客戶端連接metastore服務(wù)端
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
JDBC驅(qū)動名
javax.jdo.option.ConnectionURL
jdbc:mysql://datanode01:3306/hive_db?createDatabaseIfNotExist=true
JDBC連接名
javax.jdo.option.ConnectionUserName
hive
連接metastore數(shù)據(jù)庫的用戶名
javax.jdo.option.ConnectionPassword
hive123456
連接metastore數(shù)據(jù)庫的密碼
hive.metastore.schema.verification
false
強制metastore schema的版本一致性
scp /usr/local/hive/conf/* datanode01:/usr/local/hive/conf/
chmod 755 /usr/local/hive/conf/*
hive --service hiveserver2 &
hive --service metastore &
[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
[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