開啓Hive的本地模式

原文地址:https://blog.csdn.net/zyq11223/article/details/78846886

先講一個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:///

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章