一、簡介
Hive 是一個構(gòu)建在 Hadoop 之上的數(shù)據(jù)倉庫,它可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射成表,并提供類 SQL 查詢功能,用于查詢的 SQL 語句會被轉(zhuǎn)化為 MapReduce 作業(yè),然后提交到 Hadoop 上運行。
特點:
- 簡單、容易上手 (提供了類似 sql 的查詢語言 hql),使得精通 sql 但是不了解 Java 編程的人也能很好地進行大數(shù)據(jù)分析;
- 靈活性高,可以自定義用戶函數(shù) (UDF) 和存儲格式;
- 為超大的數(shù)據(jù)集設(shè)計的計算和存儲能力,集群擴展容易;
- 統(tǒng)一的元數(shù)據(jù)管理,可與 presto/impala/sparksql 等共享數(shù)據(jù);
- 執(zhí)行延遲高,不適合做數(shù)據(jù)的實時處理,但適合做海量數(shù)據(jù)的離線處理。
二、HQL的執(zhí)行流程
Hive 在執(zhí)行一條 HQL 的時候,會經(jīng)過以下步驟:
- 語法解析:Antlr 定義 SQL 的語法規(guī)則,完成 SQL 詞法,語法解析,將 SQL 轉(zhuǎn)化為抽象 語法樹 AST Tree;
- 語義解析:遍歷 AST Tree,抽象出查詢的基本組成單元 QueryBlock;
- 生成邏輯執(zhí)行計劃:遍歷 QueryBlock,翻譯為執(zhí)行操作樹 OperatorTree;
- 優(yōu)化邏輯執(zhí)行計劃:邏輯層優(yōu)化器進行 OperatorTree 變換,合并不必要的 ReduceSinkOperator,減少
shuffle 數(shù)據(jù)量; - 生成物理執(zhí)行計劃:遍歷 OperatorTree,翻譯為 MapReduce 任務(wù);
- 優(yōu)化物理執(zhí)行計劃:物理層優(yōu)化器進行 MapReduce 任務(wù)的變換,生成最終的執(zhí)行計劃。
HQL建表語句示例:
CREATE TABLE students(
name STRING, -- 姓名
age INT, -- 年齡
subject ARRAY<STRING>, --學(xué)科
score MAP<STRING,FLOAT>, --各個學(xué)科考試成績
address STRUCT<houseNumber:int, street:STRING, city:STRING, province:STRING> --家庭居住地址
) ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
三、索引
2.3 創(chuàng)建索引
CREATE INDEX index_name --索引名稱
ON TABLE base_table_name (col_name, ...) --建立索引的列
AS index_type --索引類型
[WITH DEFERRED REBUILD] --重建索引
[IDXPROPERTIES (property_name=property_value, ...)] --索引額外屬性
[IN TABLE index_table_name] --索引表的名字
[
[ ROW FORMAT ...] STORED AS ...
| STORED BY ...
] --索引表行分隔符 、 存儲格式
[LOCATION hdfs_path] --索引表存儲位置
[TBLPROPERTIES (...)] --索引表表屬性
[COMMENT "index comment"]; --索引注釋
2.4 查看索引
--顯示表上所有列的索引
SHOW FORMATTED INDEX ON table_name;
2.4 刪除索引
刪除索引會刪除對應(yīng)的索引表。
DROP INDEX [IF EXISTS] index_name ON table_name;
如果存在索引的表被刪除了,其對應(yīng)的索引和索引表都會被刪除。如果被索引表的某個分區(qū)被刪除了,那么分區(qū)對應(yīng)的分區(qū)索引也會被刪除。
2.5 重建索引
ALTER INDEX index_name ON table_name [PARTITION partition_spec] REBUILD;
重建索引。如果指定了 PARTITION,則僅重建該分區(qū)的索引。
四、索引案例
3.1 創(chuàng)建索引
在 emp 表上針對 empno 字段創(chuàng)建名為 emp_index,索引數(shù)據(jù)存儲在 emp_index_table 索引表中
create index emp_index on table emp(empno) as
'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
with deferred rebuild
in table emp_index_table ;
此時索引表中是沒有數(shù)據(jù)的,需要重建索引才會有索引的數(shù)據(jù)。
3.2 重建索引
alter index emp_index on emp rebuild;
Hive 會啟動 MapReduce 作業(yè)去建立索引,建立好后查看索引表數(shù)據(jù)如下。三個表字段分別代表:索引列的值、該值對應(yīng)的 HDFS 文件路徑、該值在文件中的偏移量。
五、Hive常用DDL操作
1.1 查看數(shù)據(jù)列表
show databases;
1.2 使用數(shù)據(jù)庫
USE database_name;
1.3 新建數(shù)據(jù)庫
語法:
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name --DATABASE|SCHEMA 是等價的
[COMMENT database_comment] --數(shù)據(jù)庫注釋
[LOCATION hdfs_path] --存儲在 HDFS 上的位置
[WITH DBPROPERTIES (property_name=property_value, ...)]; --指定額外屬性
示例:
CREATE DATABASE IF NOT EXISTS hive_test
COMMENT 'hive database for test'
WITH DBPROPERTIES ('create'='heibaiying');
1.4 查看數(shù)據(jù)庫信息
語法:
DESC DATABASE [EXTENDED] db_name; --EXTENDED 表示是否顯示額外屬性
示例:
DESC DATABASE EXTENDED hive_test;
1.5 刪除數(shù)據(jù)庫
語法:
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
默認行為是 RESTRICT,如果數(shù)據(jù)庫中存在表則刪除失敗。要想刪除庫及其中的表,可以使用 CASCADE 級聯(lián)刪除。
示例:
DROP DATABASE IF EXISTS hive_test CASCADE;
二、創(chuàng)建表
2.1 建表語法
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name --表名
[(col_name data_type [COMMENT col_comment],
... [constraint_specification])] --列名 列數(shù)據(jù)類型
[COMMENT table_comment] --表描述
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] --分區(qū)表分區(qū)規(guī)則
[
CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS
] --分桶表分桶規(guī)則
[SKEWED BY (col_name, col_name, ...) ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
[STORED AS DIRECTORIES]
] --指定傾斜列和值
[
[ROW FORMAT row_format]
[STORED AS file_format]
| STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]
] -- 指定行分隔符、存儲文件格式或采用自定義存儲格式
[LOCATION hdfs_path] -- 指定表的存儲位置
[TBLPROPERTIES (property_name=property_value, ...)] --指定表的屬性
[AS select_statement]; --從查詢結(jié)果創(chuàng)建表
2.2 內(nèi)部表
CREATE TABLE emp(
empno INT,
ename STRING,
job STRING,
mgr INT,
hiredate TIMESTAMP,
sal DECIMAL(7,2),
comm DECIMAL(7,2),
deptno INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
2.3 外部表
CREATE EXTERNAL TABLE emp_external(
empno INT,
ename STRING,
job STRING,
mgr INT,
hiredate TIMESTAMP,
sal DECIMAL(7,2),
comm DECIMAL(7,2),
deptno INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
LOCATION '/hive/emp_external';
使用 desc format emp_external 命令可以查看表的詳細信息如下:
2.4 分區(qū)表
CREATE EXTERNAL TABLE emp_partition(
empno INT,
ename STRING,
job STRING,
mgr INT,
hiredate TIMESTAMP,
sal DECIMAL(7,2),
comm DECIMAL(7,2)
)
PARTITIONED BY (deptno INT) -- 按照部門編號進行分區(qū)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
LOCATION '/hive/emp_partition';
2.5 分桶表
CREATE EXTERNAL TABLE emp_bucket(
empno INT,
ename STRING,
job STRING,
mgr INT,
hiredate TIMESTAMP,
sal DECIMAL(7,2),
comm DECIMAL(7,2),
deptno INT)
CLUSTERED BY(empno) SORTED BY(empno ASC) INTO 4 BUCKETS --按照員工編號散列到四個 bucket 中
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
LOCATION '/hive/emp_bucket';
2.6 傾斜表
通過指定一個或者多個列經(jīng)常出現(xiàn)的值(嚴重偏斜),Hive 會自動將涉及到這些值的數(shù)據(jù)拆分為單獨的文件。在查詢時,如果涉及到傾斜值,它就直接從獨立文件中獲取數(shù)據(jù),而不是掃描所有文件,這使得性能得到提升。
CREATE EXTERNAL TABLE emp_skewed(
empno INT,
ename STRING,
job STRING,
mgr INT,
hiredate TIMESTAMP,
sal DECIMAL(7,2),
comm DECIMAL(7,2)
)
SKEWED BY (empno) ON (66,88,100) --指定 empno 的傾斜值 66,88,100
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
LOCATION '/hive/emp_skewed';
2.7 臨時表
臨時表僅對當(dāng)前 session 可見,臨時表的數(shù)據(jù)將存儲在用戶的暫存目錄中,并在會話結(jié)束后刪除。如果臨時表與永久表表名相同,則對該表名的任何引用都將解析為臨時表,而不是永久表。臨時表還具有以下兩個限制:
不支持分區(qū)列;
不支持創(chuàng)建索引。
CREATE TEMPORARY TABLE emp_temp(
empno INT,
ename STRING,
job STRING,
mgr INT,
hiredate TIMESTAMP,
sal DECIMAL(7,2),
comm DECIMAL(7,2)
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
2.8 CTAS創(chuàng)建表
支持從查詢語句的結(jié)果創(chuàng)建表:
CREATE TABLE emp_copy AS SELECT * FROM emp WHERE deptno='20';
2.9 復(fù)制表結(jié)構(gòu)
語法:
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name --創(chuàng)建表表名
LIKE existing_table_or_view_name --被復(fù)制表的表名
[LOCATION hdfs_path]; --存儲位置
示例:
CREATE TEMPORARY EXTERNAL TABLE IF NOT EXISTS emp_co LIKE emp
2.10 加載數(shù)據(jù)到表
加載數(shù)據(jù)到表中屬于 DML 操作,這里為了方便大家測試,先簡單介紹一下加載本地數(shù)據(jù)到表中:
– 加載數(shù)據(jù)到 emp 表中
load data local inpath "/usr/file/emp.txt" into table emp;
其中 emp.txt 的內(nèi)容如下,你可以直接復(fù)制使用,也可以到本倉庫的resources 目錄下載:
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800.00 20
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250.00 500.00 30
7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975.00 20
7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850.00 30
7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450.00 10
7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 1500.00 20
7839 KING PRESIDENT 1981-11-17 00:00:00 5000.00 10
7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100.00 20
7900 JAMES CLERK 7698 1981-12-03 00:00:00 950.00 30
7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000.00 20
7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300.00 10
加載后可查詢表中數(shù)據(jù):
三、修改表
3.1 重命名表
語法:
ALTER TABLE table_name RENAME TO new_table_name;
示例:
ALTER TABLE emp_temp RENAME TO new_emp; --把 emp_temp 表重命名為 new_emp
3.2 修改列
語法:
ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type
[COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];
示例:
-- 修改字段名和類型
ALTER TABLE emp_temp CHANGE empno empno_new INT;
-- 修改字段 sal 的名稱 并將其放置到 empno 字段后
ALTER TABLE emp_temp CHANGE sal sal_new decimal(7,2) AFTER ename;
-- 為字段增加注釋
ALTER TABLE emp_temp CHANGE mgr mgr_new INT COMMENT 'this is column mgr';
3.3 新增列
示例:
ALTER TABLE emp_temp ADD COLUMNS (address STRING COMMENT 'home address');
四、清空表/刪除表
4.1 清空表
語法:
-- 清空整個表或表指定分區(qū)中的數(shù)據(jù)
TRUNCATE TABLE table_name [PARTITION (partition_column = partition_col_value, ...)];
目前只有內(nèi)部表才能執(zhí)行 TRUNCATE 操作,外部表執(zhí)行時會拋出異常 Cannot truncate non-managed table XXXX。
示例:
TRUNCATE TABLE emp_mgt_ptn PARTITION (deptno=20);
4.2 刪除表
語法:
DROP TABLE [IF EXISTS] table_name [PURGE];
內(nèi)部表:不僅會刪除表的元數(shù)據(jù),同時會刪除 HDFS 上的數(shù)據(jù);
外部表:只會刪除表的元數(shù)據(jù),不會刪除 HDFS 上的數(shù)據(jù);
刪除視圖引用的表時,不會給出警告(但視圖已經(jīng)無效了,必須由用戶刪除或重新創(chuàng)建)。
五、其他命令
5.1 Describe
查看數(shù)據(jù)庫:
DESCRIBE|Desc DATABASE [EXTENDED] db_name; --EXTENDED 是否顯示額外屬性
查看表:
DESCRIBE|Desc [EXTENDED|FORMATTED] table_name --FORMATTED 以友好的展現(xiàn)方式查看表詳情
5.2 Show
- 查看數(shù)據(jù)庫列表
-- 語法
SHOW (DATABASES|SCHEMAS) [LIKE 'identifier_with_wildcards'];
-- 示例:
SHOW DATABASES like 'hive*';
LIKE 子句允許使用正則表達式進行過濾,但是 SHOW 語句當(dāng)中的 LIKE 子句只支持 *(通配符)和 |(條件或)兩個符號。例如 employees,emp *,emp * | * ees,所有這些都將匹配名為 employees 的數(shù)據(jù)庫。
- 查看表的列表
-- 語法
SHOW TABLES [IN database_name] ['identifier_with_wildcards'];
-- 示例
SHOW TABLES IN default;
- 查看視圖列表
SHOW VIEWS [IN/FROM database_name] [LIKE 'pattern_with_wildcards']; --僅支持 Hive 2.2.0 +
- 查看表的分區(qū)列表
SHOW PARTITIONS table_name;
- 查看表/視圖的創(chuàng)建語句
```commonlisp
SHOW CREATE TABLE ([db_name.]table_name|view_name);
六、Hive 常用DML操作
案例分析:
新建分區(qū)表:
CREATE TABLE emp_ptn(
empno INT,
ename STRING,
job STRING,
mgr INT,
hiredate TIMESTAMP,
sal DECIMAL(7,2),
comm DECIMAL(7,2)
)
PARTITIONED BY (deptno INT) -- 按照部門編號進行分區(qū)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
從 HDFS 上加載數(shù)據(jù)到分區(qū)表:
LOAD DATA INPATH "hdfs://hadoop001:8020/mydir/emp.txt" OVERWRITE INTO TABLE emp_ptn PARTITION (deptno=20);
emp.txt 文件可在本倉庫的 resources 目錄中下載
加載后表中數(shù)據(jù)如下,分區(qū)列 deptno 全部賦值成 20:
七、查詢結(jié)果插入到表
案例分析:
新建 emp 表,作為查詢對象表
CREATE TABLE emp(
empno INT,
ename STRING,
job STRING,
mgr INT,
hiredate TIMESTAMP,
sal DECIMAL(7,2),
comm DECIMAL(7,2),
deptno INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
-- 加載數(shù)據(jù)到 emp 表中 這里直接從本地加載
load data local inpath "/usr/file/emp.txt" into table emp;
為清晰演示,先清空 emp_ptn 表中加載的數(shù)據(jù):
TRUNCATE TABLE emp_ptn;
靜態(tài)分區(qū)演示:從 emp 表中查詢部門編號為 20 的員工數(shù)據(jù),并插入 emp_ptn 表中,語句如下:
INSERT OVERWRITE TABLE emp_ptn PARTITION (deptno=20)
SELECT empno,ename,job,mgr,hiredate,sal,comm FROM emp WHERE deptno=20;
完成后 emp_ptn 表中數(shù)據(jù)如下:
動態(tài)分區(qū)演示:
-- 由于我們只有一個分區(qū),且還是動態(tài)分區(qū),所以需要關(guān)閉嚴格默認。因為在嚴格模式下,用戶必須至少指定一個靜態(tài)分區(qū)
set hive.exec.dynamic.partition.mode=nonstrict;
-- 動態(tài)分區(qū) 此時查詢語句的最后一列為動態(tài)分區(qū)列,即 deptno
INSERT OVERWRITE TABLE emp_ptn PARTITION (deptno)
SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno FROM emp WHERE deptno=30;
結(jié)果:
八、更新和刪除操作
更新和刪除的語法比較簡單,和關(guān)系型數(shù)據(jù)庫一致。需要注意的是這兩個操作都只能在支持 ACID 的表,也就是事務(wù)表上才能執(zhí)行。
-- 更新
UPDATE tablename SET column = value [, column = value ...] [WHERE expression]
--刪除
DELETE FROM tablename [WHERE expression]
案例分析:
- 修改配置
首先需要更改 hive-site.xml,添加如下配置,開啟事務(wù)支持,配置完成后需要重啟 Hive 服務(wù)。
<property>
<name>hive.support.concurrency</name>
<value>true</value>
</property>
<property>
<name>hive.enforce.bucketing</name>
<value>true</value>
</property>
<property>
<name>hive.exec.dynamic.partition.mode</name>
<value>nonstrict</value>
</property>
<property>
<name>hive.txn.manager</name>
<value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property>
<name>hive.compactor.initiator.on</name>
<value>true</value>
</property>
<property>
<name>hive.in.test</name>
<value>true</value>
</property>
- 創(chuàng)建測試表
創(chuàng)建用于測試的事務(wù)表,建表時候指定屬性 transactional = true 則代表該表是事務(wù)表。需要注意的是,按照官方文檔 的說明,目前 Hive 中的事務(wù)表有以下限制:
必須是 buckets Table;
僅支持 ORC 文件格式;
不支持 LOAD DATA …語句。
CREATE TABLE emp_ts(
empno int,
ename String
)
CLUSTERED BY (empno) INTO 2 BUCKETS STORED AS ORC
TBLPROPERTIES ("transactional"="true");
- 插入測試數(shù)據(jù)
INSERT INTO TABLE emp_ts VALUES (1,"ming"),(2,"hong");
插入數(shù)據(jù)依靠的是 MapReduce 作業(yè),執(zhí)行成功后數(shù)據(jù)如下:
- 測試更新和刪除
--更新數(shù)據(jù)
UPDATE emp_ts SET ename = "lan" WHERE empno=1;
--刪除數(shù)據(jù)
DELETE FROM emp_ts WHERE empno=2;
更新和刪除數(shù)據(jù)依靠的也是 MapReduce 作業(yè),執(zhí)行成功后數(shù)據(jù)如下:
九、查詢結(jié)果寫出到文件系統(tǒng)
5.1 語法
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
[ROW FORMAT row_format] [STORED AS file_format]
SELECT ... FROM ...
- OVERWRITE 關(guān)鍵字表示輸出文件存在時,先刪除后再重新寫入;
- 和 Load 語句一樣,建議無論是本地路徑還是 URL 地址都使用完整的;
寫入文件系統(tǒng)的數(shù)據(jù)被序列化為文本,其中列默認由^A 分隔,行由換行符分隔。如果列不是基本類型,則將其序列化為 JSON 格式。其中行分隔符不允許自定義,但列分隔符可以自定義,如下:
-- 定義列分隔符為'\t'
insert overwrite local directory './test-04'
row format delimited
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
select * from src;
5.2 示例
這里我們將上面創(chuàng)建的 emp_ptn 表導(dǎo)出到本地文件系統(tǒng),語句如下:
INSERT OVERWRITE LOCAL DIRECTORY '/usr/file/ouput'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
SELECT * FROM emp_ptn;
導(dǎo)出結(jié)果如下:
十、Hive CLI和Beeline命令行的基本使用
1.1 Help
使用 hive -H 或者 hive --help 命令可以查看所有命令的幫助,顯示如下:
1.2 交互式命令行
直接使用 Hive 命令,不加任何參數(shù),即可進入交互式命令行。
1.3 執(zhí)行SQL命令
在不進入交互式命令行的情況下,可以使用 hive -e 執(zhí)行 SQL 命令。
hive -e 'select * from emp';
1.4 執(zhí)行SQL腳本
用于執(zhí)行的 sql 腳本可以在本地文件系統(tǒng),也可以在 HDFS 上。
# 本地文件系統(tǒng)
hive -f /usr/file/simple.sql;
# HDFS文件系統(tǒng)
hive -f hdfs://hadoop001:8020/tmp/simple.sql;
其中 simple.sql 內(nèi)容如下:
select * from emp;
1.5 配置Hive變量
可以使用 --hiveconf 設(shè)置 Hive 運行時的變量。
hive -e 'select * from emp' \
--hiveconf hive.exec.scratchdir=/tmp/hive_scratch \
--hiveconf mapred.reduce.tasks=4;
hive.exec.scratchdir:指定 HDFS 上目錄位置,用于存儲不同 map/reduce 階段的執(zhí)行計劃和這些階段的中間輸出結(jié)果。
1.6 配置文件啟動
使用 -i 可以在進入交互模式之前運行初始化腳本,相當(dāng)于指定配置文件啟動。
hive -i /usr/file/hive-init.conf;
其中 hive-init.conf 的內(nèi)容如下:
set hive.exec.mode.local.auto = true;
hive.exec.mode.local.auto 默認值為 false,這里設(shè)置為 true ,代表開啟本地模式。
1.7 用戶自定義變量
–define <key=value> 和 --hivevar <key=value> 在功能上是等價的,都是用來實現(xiàn)自定義變量,這里給出一個示例:
定義變量:
hive --define n=ename --hiveconf --hivevar j=job;
在查詢中引用自定義變量:
# 以下兩條語句等價
hive > select ${n} from emp;
hive > select ${hivevar:n} from emp;
# 以下兩條語句等價
hive > select ${j} from emp;
hive > select ${hivevar:j} from emp;
十一、Hive配置
可以通過三種方式對 Hive 的相關(guān)屬性進行配置,分別介紹如下:
3.1 配置文件
方式一為使用配置文件,使用配置文件指定的配置是永久有效的。Hive 有以下三個可選的配置文件:
- hive-site.xml :Hive 的主要配置文件;
- hivemetastore-site.xml: 關(guān)于元數(shù)據(jù)的配置;
- hiveserver2-site.xml:關(guān)于 HiveServer2 的配置。
示例如下,在 hive-site.xml 配置 hive.exec.scratchdir:
<property>
<name>hive.exec.scratchdir</name>
<value>/tmp/mydir</value>
<description>Scratch space for Hive jobs</description>
</property>
3.2 hiveconf
方式二為在啟動命令行 (Hive CLI / Beeline) 的時候使用 --hiveconf 指定配置,這種方式指定的配置作用于整個 Session。
hive --hiveconf hive.exec.scratchdir=/tmp/mydir
3.3 set
方式三為在交互式環(huán)境下 (Hive CLI / Beeline),使用 set 命令指定。這種設(shè)置的作用范圍也是 Session 級別的,配置對于執(zhí)行該命令后的所有命令生效。set 兼具設(shè)置參數(shù)和查看參數(shù)的功能。如下:
0: jdbc:hive2://hadoop001:10000> set hive.exec.scratchdir=/tmp/mydir;
No rows affected (0.025 seconds)
0: jdbc:hive2://hadoop001:10000> set hive.exec.scratchdir;
+----------------------------------+--+
| set |
+----------------------------------+--+
| hive.exec.scratchdir=/tmp/mydir |
+----------------------------------+--+
3.4 配置優(yōu)先級文章來源:http://www.zghlxwxcb.cn/news/detail-429654.html
配置的優(yōu)先順序如下 (由低到高):
hive-site.xml - >hivemetastore-site.xml- >hiveserver2-site.xml - >-- hiveconf- > set文章來源地址http://www.zghlxwxcb.cn/news/detail-429654.html
到了這里,關(guān)于大數(shù)據(jù)之Hadoop數(shù)據(jù)倉庫Hive的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!