1. 程式人生 > >Hive select 過程中不走mapreduce,join記憶體溢位

Hive select 過程中不走mapreduce,join記憶體溢位

問題:Hiveselect 過程中沒走mapreduce,本地掃描hdfs,最後報記憶體不足任務失敗

解決:hive語句前增加     set hive.auto.convert.join=false;set hive.ignore.mapjoin.hint=false;

SET hive.auto.convert.join=false; 關閉自動轉化MapJoin,預設為true;
SET hive.ignore.mapjoin.hint=false; 關閉忽略mapjoin的hints(不忽略,hints有效),預設為true(忽略hints)。

以下轉自:http://blog.csdn.net/longshenlmj/article/details/41577543

hive中與hbase外部表join時記憶體溢位(hive處理mapjoin的優化器機制)

與hbase外部表(wizad_mdm_main)進行join出現問題:
CREATE TABLE wizad_mdm_dev_lmj_edition_result as
select * 
from  wizad_mdm_dev_lmj_20141120 as w 
JOIN wizad_mdm_main as a ON (a.rowkey = w.guid);

程式啟動後,死迴圈,無反應。最後在進行到0.83時,記憶體溢位失敗。
原因:
預設情況下,Hive會自動將小表加到DistributeCache中,然後在Map掃描大表的時候,去和DistributeCache中的小表做join,這稱為Mapjoin。
這裡wizad_mdm_main是基於HBase的外部表,而這張表在HDFS上的源路徑為 /hivedata/warehouse/wizad.db/wizad_mdm_main,實際這個目錄為空,
因此,Hive優化器認為它是小表,所以,會將這張表資料加到DistributeCache中,造成記憶體溢位。



解決辦法:
SET hive.auto.convert.join=false; 關閉自動轉化MapJoin,預設為true;
SET hive.ignore.mapjoin.hint=false; 關閉忽略mapjoin的hints(不忽略,hints有效),預設為true(忽略hints)。
然後在查詢時候使用hints,/*+ mapjoin(w) */ 將小表w (wizad_mdm_dev_lmj_edition_20141120) 加入到DistributeCache,
Map task在掃描HBase中的大表階段,就可以完成join操作:
SET mapred.job.queue.name=queue3;
SET hbase.client.scanner.caching=5000;
SET hbase.zookeeper.quorum=datanode06,datanode07,datanode08;
SET zookeeper.znode.parent=/hbase;
set hbase.regionserver.lease.period=180000;
SET hive.auto.convert.join=false;
SET hive.ignore.mapjoin.hint=false;
 
INSERT OVERWRITE LOCAL DIRECTORY '/home/wizad/lmj/'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
select /*+ mapjoin(w) */ cookie_id,rowkey,fixeddim_map
from wizad_mdm_dev_lmj_edition_20141120 as w JOIN wizad_mdm_main as a

ON (w.guid = a.rowkey);


hive大表與大表join:
1.確保沒有笛卡爾積;
2.確保沒有資料傾斜;
3.增加reduce數;
4.不行再試試分桶join;

相關推薦

Hive select 過程mapreducejoin記憶體溢位

問題:Hiveselect 過程中沒走mapreduce,本地掃描hdfs,最後報記憶體不足任務失敗 解決:hive語句前增加     set hive.auto.convert.join=false;set hive.ignore.mapjoin.hint=false;

hive :簡單查詢mapreduce

在hadoop生態圈中屬於資料倉庫的角色。他能夠管理hadoop中的資料,同時可以查詢hadoop中的資料。 本質上講,hive是一個SQL解析引擎。Hive可以把SQL查詢轉換為MapReduce中的job來執行。 hive有一套對映工具,可以把SQL轉換為MapReduce中的job,可以把SQ

MySql、Oracle(通用方法)遞迴查詢生成檔案目錄樹(JAVA實現 遞迴過程訪問資料庫遞迴之前只訪問兩次 進行遞迴前資料準備)

查詢檔案樹 實體類 public class TradeInfoFile { ​ // 檔案編碼(子) private String fileCode; // 所屬檔案編碼(父) private String belongFileCode; // 交易

程序員如何在百忙更有效地利用時間如何岔路白忙(忙得要有效率要有收獲)-----https://www.cnblogs.com/JavaArchitect/p/9080484.html

logs 有效 時間 hit 收獲 AR log title blog https://www.cnblogs.com/JavaArchitect/p/9080484.html 程序員如何在百忙中更有效地利用時間,如何不走岔路,不白忙(忙得要有效率,要有收獲) 程序員如何

Linxu配置NFS過程遇到的問題三機PING

配置NFS過程中遇到的問題,三機PING不上 (作者是學生 寢室學習 主機是筆記本,使用無線網絡卡連WIFI,開發板與筆記本直連) 按照韋老大的視訊 配置根檔案目錄時關於NFS配置時,發現自己是開發板與筆記本直連。 導致有時候三機互相PING不上。經過另一位老師遠端幫忙: 1。每次開機後

樹莓派raspberry Pi 3B+系統安裝mysql過程提示輸入密碼安裝完後如何設置密碼

rate current 默認 oca acc inpu .so error enter 樹莓派raspberry Pi 3B+安裝mysql未提示輸入密碼,安裝後修改mysql密碼默認密碼 使用mysql -uroot -p 命令連接mysql時,報錯 pi@rasp

關於VC++6.0 安裝過程提出vssetup.tff能刪除的問題及在WIN7相容性設定問題。

       1)在我們經常WIN7系統裡面的重新安裝VC++6.0軟體的時候,會有出現vssetup.tff檔案不能刪除的問題。網路上有很多人提出的建議刪除的方法。用上360強力刪除,或者進入什麼安全模式刪除,等等。但是你會發現,一般出現這種情況異常現象,原因都可能因為你上

屬性只能在構造函數定義在其他函數能定義只能引用

int 構造 init ini elf div 局部變量 log 定義 1 class aa(): 2 3 def __init__(self): 4 self.cc = 6 5 def do(self): 6

ajax用beforeSend自定義請求過程客戶端事件提高用戶體驗

函數 fun 直接 alert 完成後 and success ram reat 本文為博主原創,未經允許不得轉載: 在應用ajax的過程中,當我們再前臺提交請求的時候,如果服務端響應事件比較長,就會導致需要等很長時間在前臺才能接受到服務端返回的 響應結果,往

Hive快捷查詢:啟用Mapreduce job啟用Fetch task三種方式介紹

should ima only cts 直接 mapr 問題 rom conf 如果查詢表的某一列,Hive中默認會啟用MapReduce job來完成這個任務,如下: hive>select id,name from m limit 10;--執行時hive會啟用

Hive執行過程出現Caused by : java.lang.ClassNotFoundException: org.cloudera.htrace.Trace的錯誤解決辦法(圖文詳解)

pre wid logs In 實用 過程 ase edit 微信     不多說,直接上幹貨! 問題詳情     如下   這個錯誤的意思是缺少 htrace-core-2.04.jar。  解決辦法:   

Hive:簡單查詢啟用Mapreduce job而啟用Fetch task

 一、背景:        如果在hive中僅僅查詢某個表的一列,Hive也會預設啟用MapReduce Job來完成這個任務。我們都知道,啟用MapReduce Job是會消耗系統開銷的。對於這個問題,從Hive0.10.0版本開始,對於簡

給定由大寫小寫字母和空格組成的字串返回 最後 一個單詞的長度。 如果輸入存在單詞返回 0。

給定由大寫,小寫字母和空格組成的字串,返回 最後 一個單詞的長度。 如果輸入中不存在單詞,返回 0。 注意: “單詞”是指不包含空格符號的字串 例如: 對於字串"hello World"(不帶引號), 那麼返回的結果是 5; 對於字串"abc "(不帶引號),那麼

前端在開發混合應用的時候textarea在ios裝置能輸入失效問題解決方案

<textarea type="text" placeholder="這裡有哪些亮點和槽點,來談談吧……" class="con_comment_input"></textarea> 上面的程式碼在ios裡面是不能輸入的,加入相容就行,例如下面程式碼 <text

在jsp頁面需要建立直接使用的物件

內建物件     * 一共有9個:             變數名                    真實型別                        作用         * pageContext           PageContext          

關於IOS上scroll過程觸發js指令碼的拙見

先貼一下萬惡之源:IOS WebView控制元件詳解(轉) 以上鍊接可以為各位前端開發熟悉一下UIWebView控制元件 進入正文 本文題目指明的問題也可以理解為 在IOS上scroll事件無法實時監聽

springboot專案下service層注入其他service時沒有新增@Autowired專案報錯就是報空指標

這個問題讓我折騰了快一天,因為這個方法是個通用方法,在別的service都能執行成功,就是在此service下執行不成功, 無意間發現了@autowired註解沒有加,協同開發不知道誰不小心刪除了吧。但是springboot也不報錯, try...catch後總是報空指

Unity專案開發過程常見的問題你遇到過嗎?

最近看到有朋友問一個unity遊戲開發團隊,需要掌握哪些知識之類的問題。事實上Unity引擎是一個很靈活的引擎,根據團隊開發遊戲型別的不同,對人員的要求也有差異,所以不能一概而論。但是,一些在Unity專案開發過程中常常會遇到的問題還是可以總結一下的。 下面我就來聊聊實際工作中,一個專案組可能會遇到的問題吧

關於 string轉const char* 過程中文亂碼問題GDAL

剛開始用GDAL,輸出路徑 是由string轉到const char*的,但發現漢字總是亂碼,比較懵逼,第一次遇見這種問題,除錯模式下程式碼神奇的跟不進去,顯示找不到檔案之類的,  ,查了近兩個小時,一直以為是環境錯了或者庫有問題,最後經過多次排查才發現是GDAL預設不支援中

3、jq動畫執行過程讓重複點選(即執行完動畫後點擊)

$(".btnoff").click(function(){ var offbtnStatus = false;//初始化狀態,給狀態false,不讓連續點選 if(offbtnStatus){//如果狀態為真,說明函式未執行完,return跳出 return;