Spark SQL優化流程(解決叢集OOM問題)
阿新 • • 發佈:2018-11-30
根據七張基礎業務表,生成大寬表
tt_sales_order 1826 7673 大 ord
tt_deposit_order 56 0368 小 dep
tt_vehicle_action 236 5624 中 vac
tt_pipeline_pool 1000 0000 大 pol
tt_vehicle_resource 53 9059 小 vre
tt_dealer_resource 1000 0000 大 dre
tt_dealer_retail_order 1602 3564 大 ret
直接join報錯OOM
分步驟操作:
OrderSales_ordtwoyears OrderSales_ord_dep_one OrderSales_ord_dep_two OrderSales_ord_vac_dep OrderSales_pol_vre OrderSales_dre_ret
第一步:where ord
篩選兩年內資料,並mark_for_delete = ‘0’
第二步:ord left outer join dep
經研究發生資料傾斜,主要原因是BRAND_ID欄位只有100和200兩個狀態
(先處理 BRAND_ID = 100)
第三步:ord left outer join dep
經研究發生資料傾斜,主要原因是BRAND_ID欄位只有100和200兩個狀態
(再處理 BRAND_ID = 200)
第四步:ord_dep left outer join vac
第五步:ord_dep_vac left outer join pol_vre
第六步:ord_dep_vac_pol_vre left outer join dre_ret
問題一:某個欄位有/n導致與hive換行符衝突
regexp_replace(dep.cust_name, '\n|\t|\r', '')
問題二:join不上的資料顯示為NULL
採用parquet儲存格式,把NULL自動轉換成空字元
問題三:業務邏輯不熟