先講乙個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...