hive 配置檔案以及join中null值的處理

2021-06-23 08:58:32 字數 1340 閱讀 2132

一、hive的引數設定

1.  三種設定方式:配置檔案

·   使用者自定義配置檔案:$hive_conf_dir/hive-site.xml

·   預設配置檔案:$hive_conf_dir/hive-default.xml

使用者自定義配置會覆蓋預設配置。另外,hive也會讀入hadoop的配置,因為hive是作為hadoop的客戶端啟動的,hadoop的配置檔案包括

·   $hadoop_conf_dir/hive-site.xml

·   $hadoop_conf_dir/hive-default.xml

hive的配置會覆蓋hadoop的配置。

配置檔案的設定對本機啟動的所有hive程序都有效。

2.  命令列引數 ,

bin/hive -hiveconf hive.root.logger=info,console

這一設定對本次啟動的session(對於server方式啟動,則是所有請求的sessions)有效。

3.  引數宣告

set mapred.reduce.tasks=100;

這一設定的作用域也是session級的

二、使用hive一些注意的地方

1.  hive使用的字符集預設是utf-8,hive中沒有轉換字元編碼的這種函式

hive.exec.compress.output 這個引數, 預設是 false,

但是很多時候貌似要單獨顯式設定一遍,否則會對結果做壓縮的,如果你的這個檔案後面還要在hadoop下直接操作, 那麼就不能壓縮了

2.  join中處理null值的語義區別

這裡的特殊邏輯指的是,hive的join中,作為joinkey的字段比較,null=null是有意義的,且返回值為true。檢查以下查詢:

select u.uid, count(u.uid)

from t_weblog l join t_user u on (l.uid = u.uid) groupby u.uid;

查詢中,t_weblog表中uid為空的記錄將和t_user表中uid為空的記錄做連線,即l.uid = u.uid=null成立。

如果需要與標準一致的語義,我們需要改寫查詢手動過濾null值的情況:

select u.uid, count(u.uid)

from t_weblog l join t_user u

on (l.uid = u.uid and l.uid is not null and u.uid is notnull)

group by u.uid;

實踐中,這一語義區別也是經常導致資料傾斜的原因之一。

hive配置檔案中的引數描述

hive.exec.max.created.files 說明 所有hive執行的map與reduce任務可以產生的檔案的和 預設值 100000 hive.exec.dynamic.partition 說明 是否為自動分割槽 預設值 false hive.mapred.reduce.tasks.sp...

hive配置檔案例項教程

說明 所有hive執行的map與reduce任務可以產生的檔案的和 預設值 100000 hive.exec.dynamic.partition 說明 是否為自動分割槽 預設值 false hive.mapred.reduce.tasks.speculative.execution 說明 是否開啟推...

python中的配置檔案讀取以及使用

配置檔案字尾為.ini 方便區分 例如 test conf1 dog name babola test list a b c cn name 美麗的霸王花 test conf2 dog name babola test list a b c 載入使用 import configparser def ...