從這部份開始,我們整體從ABC的ORACLE環境,遷移到大數據的HIVE環境,並且讓系統自動調度,定時進行數據的計算。
本節我們遷移基礎表的數據,主要是構建我們的ODS數據同步,另一個是邏輯的遷移,主要是從ORACLE的語法,遷移到HIVE的語法。
ABC遷移大數據倉庫架構圖:
本節具體腳本可以參見:https://github.com/blt328/abc_hive
1.表結構遷移見:5-ABC遷移大數據1_建表.sql文件
drop table if exists ods_subj_acco;
create external table ods_subj_acco
(
month_code string comment '月份',
dept_code string comment '機構代碼',
subj_code string comment '科目代碼',
subj_name string comment '科目名稱',
post_name string comment '崗位名',
car_no string comment '車牌號',
amt double comment '金額',
load_tm string comment '加載時間'
)comment 'ODS財務成本接口表'
PARTITIONED BY (hq_month_code string)
row format delimited fields terminated by '\001'
location '/dm/blt/bsl/ods_subj_acco';
--手動增加分區並指定目錄
alter table ods_subj_acco add partition (hq_month_code='201905') location '/dm/blt/bsl/ods_subj_acco/201905';
alter table ods_subj_acco add partition (hq_month_code='201906') location '/dm/blt/bsl/ods_subj_acco/201906';
--刪除分區
alter table ods_subj_acco drop partition (hq_month_code='201905');
--刪除DFS上的目錄
dfs -rm -r -f /dm/blt/bsl/ods_subj_acco/hq_month_code=201905;
注意:因這個表是ODS層級的表,需要從源頭同步數據過來,所以我們需要手動建立分區並指定目錄,如果是在HIVE生成的數據,我們在建表的時候可以不用手動建立分區,HIVE會自動建立分區目錄。
2.ETL數據同步見:5-ABC遷移大數據1_ETL.sql文件
sqoop import --connect "jdbc:oracle:thin:@192.168.1.102:1521:orcl" --username "blt" --password "orcl" --query "select * from ods_subj_acco WHERE \$CONDITIONS and 1=1 and month_code='201905'" --null-string '\\N' --null-non-string '\\N' --target-dir /dm/blt/bsl/ods_subj_acco/201905 --fields-terminated-by '\001' --hive-drop-import-delims --split-by month_code -m 8 --delete-target-dir
我們從源頭做數據同步到HIVE數據倉庫上。
3.程序遷移見:5-ABC遷移大數據1_p_abc_fct_reso_list.hql文件
在linux環境下創建我們的項目目錄:
目錄名 |
說明 |
/blt/abc/reso |
ABC資源目錄 |
/blt/abc/log |
ABC日誌目錄 |
… |
|
|
|
Hql腳本樣例如下:
4.調度腳本見:5-ABC遷移大數據1_p_abc_fct_reso_list.sh
腳本:
執行腳本:sh /blt/abc/reso/5-ABC遷移大數據1_p_abc_fct_reso_list.sh >/blt/abc/log/ABC遷移大數據1_p_abc_fct_reso_list.log
執行完後可以看到日誌信息:
更多技術文章請關注公衆號BLT328(長按後點識別圖中二維碼):