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