先講一個hive使用的一個小技巧。對於使用慣了oracle數據庫的人來講,hive中沒有dual啊,想驗證一些函數的執行結果非常麻煩。數據庫
好比咱們在oracle數據庫裏面能夠寫select (1+2) from dual能夠返回3。oracle
爲了保證使用習慣,咱們相似的在hive中也建一張dual表:create table dual(dummy string)函數
而後往這張表中導入一個只有一行數據的文件:load data local inpath '/home/Hadoop/dual.txt' overwrite into table dualoop
這樣咱們就能夠在hive中用select (1+2) from dual了。大數據
接下來就是本文要闡述的內容:你會發現執行這個語句的時候提交了一個job到集羣上去運行了,這麼一個簡單的語句都須要執行好幾十秒,徹底無法接受,其實咱們使用dual的時候大多隻是驗證一下函數的執行結果而已,須要快速的返回咱們想看到的結果。.net
0.7版本後Hive開始支持任務執行選擇本地模式(local mode)。大多數的Hadoop job是須要hadoop提供的完整的可擴展性來處理大數據的。不過,有時hive的輸入數據量是很是小的。在這種狀況下,爲查詢出發執行任務的時間消耗可能會比實際job的執行時間要多的多。對於大多數這種狀況,hive能夠經過本地模式在單臺機器上處理全部的任務。對於小數據集,執行時間會明顯被縮短。
hadoop
如此一來,對數據量比較小的操做,就能夠在本地執行,這樣要比提交任務到集羣執行效率要快不少。
配置以下參數,能夠開啓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或者1get
可是你會發現job確實是以本地模式運行了(看job名字就能看出來,中間有local字樣),可是仍是會報錯,各類找不到jar包。input
這裏還要運行一個語句:set fs.defaultFS=file:///string
而後你再去執行前面的那條語句,能夠正常運行了,執行實現只須要幾秒鐘而已,咱們可以很快的看到執行結果了。