hive開啟本地模式執行

2021-06-28 01:51:27 字數 1186 閱讀 9523

先講乙個hive使用的乙個小技巧。對於使用慣了oracle資料庫的人來說,hive中沒有dual啊,想驗證一些函式的執行結果很是麻煩。

比如我們在oracle資料庫裡面可以寫select (1+2) from dual可以返回3。

為了保證使用習慣,我們類似的在hive中也建一張dual表:create table dual(dummy string)

然後往這張表中匯入乙個只有一行資料的檔案:load data local inpath '/home/hadoop/dual.txt' overwrite into table dual

這樣我們就可以在hive中用select (1+2) from dual了。

接下來就是本文要闡述的內容:你會發現執行這個語句的時候提交了乙個job到集群上去執行了,這麼乙個簡單的語句都需要執行好幾十秒,完全沒法接受,其實我們使用dual的時候大多只是驗證一下函式的執行結果而已,需要快速的返回我們想看到的結果。

0.7版本後hive開始支援任務執行選擇本地模式(local mode)。大多數的hadoop job是需要hadoop提供的完整的可擴充套件性來處理大資料的。不過,有時hive的輸入資料量是非常小的。在這種情況下,為查詢出發執行任務的時間消耗可能會比實際job的執行時間要多的多。對於大多數這種情況,hive可以通過本地模式在單台機器上處理所有的任務。對於小資料集,執行時間會明顯被縮短。

如此一來,對資料量比較小的操作,就可以在本地執行,這樣要比提交任務到集群執行效率要快很多。

配置如下引數,可以開啟hive的本地模式:

hive> set hive.exec.mode.local.auto=true;(預設為false)

當乙個job滿足如下條件才能真正使用本地模式:

1.job的輸入資料大小必須小於引數:hive.exec.mode.local.auto.inputbytes.max(預設128mb)

2.job的map數必須小於引數:hive.exec.mode.local.auto.tasks.max(預設4)

3.job的reduce數必須為0或者1

但是你會發現job確實是以本地模式執行了(看job名字就能看出來,中間有local字樣),但是還是會報錯,各種找不到jar包。

這裡還要執行乙個語句:set fs.defaultfs=file:///

然後你再去執行前面的那條語句,可以正常執行了,執行實現只需要幾秒鐘而已,我們能夠很快的看到執行結果了。

hive 開啟本地模式

先講乙個hive使用的乙個小技巧。對於使用慣了oracle資料庫的人來說,hive中沒有dual啊,想驗證一些函式的執行結果很是麻煩。比如我們在oracle資料庫裡面可以寫select 1 2 from dual可以返回3。為了保證使用習慣,我們類似的在hive中也建一張dual表 create t...

開啟Hive的本地模式

先講乙個hive使用的乙個小技巧。對於使用慣了oracle資料庫的人來說,hive中沒有dual啊,想驗證一些函式的執行結果很是麻煩。比如我們在oracle資料庫裡面可以寫select 1 2 from dual可以返回3。為了保證使用習慣,我們類似的在hive中也建一張dual表 create t...

開啟Hive的本地模式

先講乙個hive使用的乙個小技巧。對於使用慣了oracle資料庫的人來說,hive中沒有dual啊,想驗證一些函式的執行結果很是麻煩。比如我們在oracle資料庫裡面可以寫select 1 2 from dual可以返回3。為了保證使用習慣,我們類似的在hive中也建一張dual表 create t...