日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BigBrother的大数据之旅Day 11 hive(2)

發布時間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BigBrother的大数据之旅Day 11 hive(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HIVE參數

命名空間讀寫權限含義
hiveconf可讀寫hive-site.xml當中的各配置變量 例:hive --hiveconf hive.cli.print.header=true 只當前會話有效
system可讀寫系統變量,包含JVM運行參數等 例:set system:user.name=root 當前會話有效 在命令行中hive>
env只讀環境變量 例:env:JAVA_HOME
hivevar可讀寫例:hive -d val=key 當前cli有效 啟動hive時加入參數(用的比較少)

a, 在命令行輸入 set;當前會話中的所有變量都展示出來

b,在家目錄.hivehistory中有敲過端所有命令和結果

c,家目錄.hiverc中可以設置參數(hive的參數初始化)

d,set system:user.name=lisi; 設置當前用戶為lisi

詳述動態分區以及SQL

動態分區

動態分區: 數據自動分區,和靜態分區相比,數據不需要在添加的時候直接指定分區了

1 開啟動態分區

(必須設置的參數)

set hive.exec.dynamic.partition=true

set hive.exec.dynamic.partitohn.mode=nonstricet(不是no是non)

strict時至少有一個靜態分區

(可選參數)

set hive.exec.max.dynamic.partitions.pernode;

每一個執行mr節點上,允許創建的動態分區的最大數量(100)

set hive.exec.max.dynamic.partitions;

所有執行mr節點上,允許創建的所有動態分區的最大數量(1000)

set hive.exec.max.created.files;

所有的mr job允許創建的文件的最大數量(100000)

2 創建表

create table tb_user2(id int,name string,age int,sex string,likes array<string>,addrs map<string, string>)row formatdelimitedfields terminated by ","collection items terminated by "-"map keys terminated by ":"lines terminated by "\n";

創建分區表

create table tb_user3(id int,name string,likes array<string>,addrs map<string, string>)partitioned by(age int,sex string)row formatdelimitedfields terminated by ","collection items terminated by "-"map keys terminated by ":"lines terminated by "\n";

from tb_user2 insert into tb_user3 partition(age,sex)select id,name,likes,addrs,age,sex;

結果

靜態分區塊,動態分區開啟了mapreduce任務,所以慢

hive 視圖

1 不支持物化視圖,每次視圖都是一個子查詢

2 只能查詢

分桶

分桶表是對列值取哈希值的方式,將不同數據放到不同文件中存儲。

對于hive中每一個表、分區都可以進一步進行分桶。

由列的哈希值除以桶的個數來決定每條數據劃分在哪個桶中。

主要適用場景:數據抽樣

抽樣表: TABLESAMPLE (BUCKET x OUT OF y [ON colname])

TABLESAMPLE子句允許用戶對表中數據抽樣,而不是獲取全表數據。 TABLESAMPLE子句可以跟在任何表的from子句之后。桶從1開始計數。colname表示通過哪列進行抽樣。colname可以是表中非分區列或者rand()表示對一整行而非單個列進行抽樣。表中的記錄根據指定的列分桶到y個桶中(從1到y)。返回屬于x桶的列。

下面SQL語句表示source表中分桶為32個桶之后返回第三個桶的數據。's’是表的別名:

SELECT * FROM source TABLESAMPLE(BUCKET 3 OUT OF 32 ON rand()) s;

上面的效率不高

一般情況下,TABLESAMPLE會掃描整張表來獲取抽樣數據,效率不高。在創建表的時候可以通過clustered by子句指定一列或幾列將表的數據先使用hash分區。如果TABLESAMPLE子句指定的列和clustered by子句中的列一樣,TABLESAMPLE子句只掃描表中需要的hash分區并返回:

如果上面例子中,表source創建的時候使用了’clustered by id into 32 buckets’,則:

TABLESAMPLE(BUCKET 3 OUT OF 16 ON id)

TABLESAMPLE(BUCKET X OUT OF y ON id)

N:桶的個數,一共多少桶 – 例如32個

x:第一個取端桶 --例如2

y:桶的個數或者因子,可以理解為步長-- 例如 4

32/4=8 , 取8份數據

2 ,6,10,14…30

1 開啟分桶

set hive.enforce.bucketing=true;

2 創建分桶表

CREATE TABLE tb_bucket( id INT, name STRING, age INT)

CLUSTERED BY (age) INTO 4 BUCKETS

ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’;

3 導入數據(從其他表中)

insert into tb_bucket select id,name,age from tb_user2;

4 進行分桶抽樣

select * from tb_bucket tablesample(bucket 2 out of 4);

權限管理

三種授權方式

1、Storage Based Authorization in the Metastore Server

基于存儲的授權 - 可以對Metastore中的元數據進行保護,但是沒有提供更加細粒度的訪問控制(例如:列級別、行級別)。

2、SQL Standards Based Authorization in HiveServer2

基于SQL標準的Hive授權 - 完全兼容SQL的授權模型,推薦使用該模式。

3、Default Hive Authorization (Legacy Mode)

hive默認授權 - 設計目的僅僅只是為了防止用戶產生誤操作,而不是防止惡意用戶訪問未經授權的數據。

修改權限為hiveserver2

1 修改服務器配置文件

<property><name>hive.security.authorization.enabled</name><value>true</value> </property> <property><name>hive.server2.enable.doAs</name><value>false</value> </property> <property><name>hive.users.in.admin.role</name><value>root</value> </property> <property><name>hive.security.authorization.manager</name><value>org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory</value> </property> <property><name>hive.security.authenticator.manager</name><value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value> </property>

2 服務端啟動hiveserver2;客戶端通過beeline進行連接

3 使用命令對權限進行管理

CREATE ROLE role_name; -- 創建角色 DROP ROLE role_name; -- 刪除角色 SET ROLE (role_name|ALL|NONE); -- 設置角色 SHOW CURRENT ROLES; -- 查看當前具有的角色 SHOW ROLES; -- 查看所有存在的角色

啟動hiveserver2;客戶端通過beeline進行連接

3 使用命令對權限進行管理

CREATE ROLE role_name; -- 創建角色 DROP ROLE role_name; -- 刪除角色 SET ROLE (role_name|ALL|NONE); -- 設置角色 SHOW CURRENT ROLES; -- 查看當前具有的角色 SHOW ROLES; -- 查看所有存在的角色

總結

以上是生活随笔為你收集整理的BigBrother的大数据之旅Day 11 hive(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。