為什么要使用Hive?
MapReduce實(shí)現(xiàn)復(fù)雜查詢(xún)邏輯開(kāi)發(fā)難度太大,避免了去寫(xiě)MapReduce,減少開(kāi)發(fā)人員的學(xué)習(xí)成本。
操作接口采用類(lèi)SQL語(yǔ)法,提供快速開(kāi)發(fā)的能力。
Hive支持用戶(hù)自定義函數(shù),用戶(hù)可以根據(jù)自己的需求來(lái)實(shí)現(xiàn)自己的函數(shù)。
提供統(tǒng)一的元數(shù)據(jù)管理。
Hive很容易擴(kuò)展本身的存儲(chǔ)能力和計(jì)算能力(數(shù)倉(cāng)),最適合應(yīng)用在基于大量不可變數(shù)據(jù)的批處理作業(yè)。
Hive的缺點(diǎn):
Hive的HQL表達(dá)能力有限,如迭代式算法無(wú)法表達(dá)。
Hive自動(dòng)生成的MapReduce作業(yè),粒度較粗,運(yùn)行效率不算高。
1. 用戶(hù)接口:Client
CLI(command-line interface)、JDBC/ODBC(jdbc訪(fǎng)問(wèn)hive)、WEBUI(瀏覽器訪(fǎng)問(wèn)hive)
2. 元數(shù)據(jù):Metastore
元數(shù)據(jù)包括:表名、表所屬的數(shù)據(jù)庫(kù)(默認(rèn)是default)、表的擁有者、列/分區(qū)字段、表的類(lèi)型(是否是外部表)、表的數(shù)據(jù)所在目錄等;一般結(jié)合MySQL數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)Metastore
3. Hadoop
使用HDFS進(jìn)行存儲(chǔ),使用MapReduce進(jìn)行計(jì)算。
4. 驅(qū)動(dòng)器:Driver
解析器(SQL Parser):
將SQL字符串轉(zhuǎn)換成抽象語(yǔ)法樹(shù)AST,這一步一般都用第三方工具庫(kù)完成,比如antlr;對(duì)AST進(jìn)行語(yǔ)法分析,比如表是否存在、字段是否存在、SQL語(yǔ)義是否有誤。
編譯器(Physical Plan):
將AST編譯生成邏輯執(zhí)行計(jì)劃。
優(yōu)化器(Query Optimizer):
對(duì)邏輯執(zhí)行計(jì)劃進(jìn)行優(yōu)化。
執(zhí)行器(Execution):
把邏輯執(zhí)行計(jì)劃轉(zhuǎn)換成可以運(yùn)行的物理計(jì)劃。對(duì)于Hive來(lái)說(shuō),就是MR/Spark。
▼▼▼
CREATE DATABASE/SCHEMA, TABLE, VIEW, FUNCTION, INDEX
DROP DATABASE/SCHEMA, TABLE, VIEW, INDEX
TRUNCATE TABLE
ALTER DATABASE/SCHEMA, TABLE, VIEW
MSCK REPAIR TABLE (or ALTER TABLE RECOVER PARTITIONS)
SHOW DATABASES/SCHEMAS, TABLES, TBLPROPERTIES, VIEWS, PARTITIONS, FUNCTIONS, INDEX[ES], COLUMNS, CREATE TABLE
DESCRIBE DATABASE/SCHEMA, table_name, view_name, materialized_view_name
創(chuàng)建數(shù)據(jù)庫(kù):
create database if not exists hive; show databases;
創(chuàng)建學(xué)生表:
create table student(Sno int,Sname string,Sex string,Sage int,Sdept string)row format delimited fields terminated by ,stored as textfile;
創(chuàng)建課程表
create table course(Cno int,Cname string) row format delimited fields terminated by , stored as textfile;
創(chuàng)建分?jǐn)?shù)表
create table sc(Sno int,Cno int,Grade int)row format delimited fields terminated by , stored as textfile;
插入數(shù)據(jù)到表
insert into student values(95001,李勇,男,20,CS);
或者批量插入數(shù)據(jù)到學(xué)生,課程,分?jǐn)?shù)表
load data local inpath /home/gpadmin/hivedata/students.txt overwrite into table student;
查詢(xún)學(xué)生的總?cè)藬?shù)
select count(distinct Sno)count from student;
查詢(xún)各科成績(jī)平均分
select Cno,avg(Grade) from sc group by Cno;
查詢(xún)選修了3門(mén)以上的課程的學(xué)生學(xué)號(hào)
select Sno from (select Sno,count(Cno) CountCno from sc group by Sno)a where a.CountCno>3;
查詢(xún)選修了課程的學(xué)生姓名(inner join)
select distinct Sname from student inner join sc on student.Sno=Sc.Sno;
hive命令執(zhí)行:
hive -e "select * from hive.student;"
delete /update語(yǔ)法
3. 可視化客戶(hù)端工具
DBeave
小表驅(qū)動(dòng)大表,Join操作的Reduce階段,位于Join操作符左邊的表的內(nèi)容會(huì)被加載進(jìn)內(nèi)存,將條目少的表放在左邊,可以有效減少發(fā)生內(nèi)存溢出錯(cuò)誤的幾率。
(1)key分布不均勻
(2)業(yè)務(wù)數(shù)據(jù)本身的特性
(3)建表時(shí)考慮不周
(4)某些SQL語(yǔ)句本身就有數(shù)據(jù)傾斜
參數(shù)優(yōu)化:hive.map.aggr=true 聚合操作放在Map階段執(zhí)行,從而減輕清洗階段數(shù)據(jù)傳輸和Reduce階段的執(zhí)行時(shí)間,提升總體性能、join傾斜設(shè)置hive.optimize.skewjoin=true、group by傾斜設(shè)置hive.groupby.skewindata=true等
小文件過(guò)多,會(huì)給 HDFS 帶來(lái)壓力,影響處理效率,可以通過(guò)合并 Map 和 Reduce 的結(jié)果文件來(lái)消除這樣的影響(修改hive hive-site.xml配置文件):
hive.merge.mapfiles = true是否合并 Map 輸出文件,默認(rèn)為 True
hive.merge.mapredfiles = false是否合并 Reduce 輸出文件,默認(rèn)為 False
hive.merge.size.per.task = 256*1000*1000合并文件的大小
Order by 對(duì)查詢(xún)結(jié)果進(jìn)行全局排序,消耗時(shí)間長(zhǎng)
Sort by 實(shí)現(xiàn)部分有序,單個(gè)reduce輸出的結(jié)果是有序的,效率高
更多精彩干貨分享
點(diǎn)擊下方名片關(guān)注
IT那活兒
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/129846.html
摘要:在有贊的技術(shù)演進(jìn)。業(yè)務(wù)數(shù)據(jù)量正在不斷增大,這些任務(wù)會(huì)影響業(yè)務(wù)對(duì)外服務(wù)的承諾。監(jiān)控需要收集上執(zhí)行的的審計(jì)信息,包括提交者執(zhí)行的具體,開(kāi)始結(jié)束時(shí)間,執(zhí)行完成狀態(tài)。還有一點(diǎn)是詳細(xì)介紹了的原理,實(shí)踐中設(shè)置了的比默認(rèn)的減少了以上的時(shí)間。 前言 有贊數(shù)據(jù)平臺(tái)從2017年上半年開(kāi)始,逐步使用 SparkSQL 替代 Hive 執(zhí)行離線(xiàn)任務(wù),目前 SparkSQL 每天的運(yùn)行作業(yè)數(shù)量5000個(gè),占離線(xiàn)...
摘要:在有贊的技術(shù)演進(jìn)。業(yè)務(wù)數(shù)據(jù)量正在不斷增大,這些任務(wù)會(huì)影響業(yè)務(wù)對(duì)外服務(wù)的承諾。監(jiān)控需要收集上執(zhí)行的的審計(jì)信息,包括提交者執(zhí)行的具體,開(kāi)始結(jié)束時(shí)間,執(zhí)行完成狀態(tài)。還有一點(diǎn)是詳細(xì)介紹了的原理,實(shí)踐中設(shè)置了的比默認(rèn)的減少了以上的時(shí)間。 前言 有贊數(shù)據(jù)平臺(tái)從2017年上半年開(kāi)始,逐步使用 SparkSQL 替代 Hive 執(zhí)行離線(xiàn)任務(wù),目前 SparkSQL 每天的運(yùn)行作業(yè)數(shù)量5000個(gè),占離線(xiàn)...
閱讀 1459·2023-01-11 13:20
閱讀 1814·2023-01-11 13:20
閱讀 1263·2023-01-11 13:20
閱讀 2006·2023-01-11 13:20
閱讀 4226·2023-01-11 13:20
閱讀 2879·2023-01-11 13:20
閱讀 1488·2023-01-11 13:20
閱讀 3807·2023-01-11 13:20