MapReduce服(fu)務(MapReduce Service,簡(jian)稱MRS)提供企業級大數據集(ji)群云服(fu)務,里面包含HDFS、Hive、Spark等組件,適用于企業海量數據分(fen)析。
其中Hive提供類SQL查詢(xun)語(yu)言,幫助用(yong)戶對(dui)大(da)(da)規(gui)模的數據進(jin)行(xing)提取、轉(zhuan)換和加載,即通常所稱(cheng)的ETL(Extraction,Transformation,and Loading)操作。對(dui)龐大(da)(da)的數據集查詢(xun)需要耗費大(da)(da)量的時(shi)間去(qu)處理(li),在許多場景(jing)下,可以通過建立Hive分區方法減少每一(yi)次掃描的總(zong)數據量,這種(zhong)做法可以顯(xian)著地(di)改善性(xing)能。
Hive的(de)分(fen)區(qu)使(shi)用HDFS的(de)子(zi)目(mu)錄功(gong)能實現(xian),每一(yi)個子(zi)目(mu)錄包(bao)含了(le)分(fen)區(qu)對應的(de)列(lie)名(ming)和每一(yi)列(lie)的(de)值(zhi)。當(dang)分(fen)區(qu)很(hen)多(duo)時,會有很(hen)多(duo)HDFS子(zi)目(mu)錄,如果不(bu)依賴(lai)工具,將(jiang)外(wai)部數據(ju)(ju)加(jia)載(zai)到(dao)Hive表(biao)各分(fen)區(qu)不(bu)是一(yi)件(jian)容易的(de)事情。云(yun)數據(ju)(ju)遷移服(fu)務(CDM)可以請(qing)輕松將(jiang)外(wai)部數據(ju)(ju)源(yuan)(關系數據(ju)(ju)庫、對象存儲服(fu)務、文件(jian)系統服(fu)務等)加(jia)載(zai)到(dao)Hive分(fen)區(qu)表(biao)。
下面使用CDM將(jiang)MySQL數據導入到MRS Hive分區表為例進行介紹。
操作場景
假設MySQL上有(you)一張(zhang)表trip_data,保存了自行車騎行記錄,里面有(you)起(qi)始時間、結束(shu)時間,起(qi)始站點、結束(shu)站點、騎手ID等信息,trip_data表字(zi)段定義如(ru)下圖“MySQL表字(zi)段”所示。

使用CDM將(jiang)MySQL中的表(biao)(biao)trip_data導入到MRS Hive分區表(biao)(biao),流程如下:
1.在MRS Hive上創建(jian)Hive分區表
2.創建CDM集群并綁定EIP
3.創建MySQL連接
4.創建Hive連接(jie)
5.創建遷移作業
前提條件
- 已經創建MRS。
- 已獲取連接MySQL數據庫的IP地址、端口、數據庫名稱、用戶名、密碼,且該用戶擁有MySQL數據庫的讀寫權限。
- 已參考 管理驅動,上傳了MySQL數據庫驅動。
在MRS Hive上創建Hive分區表
在MRS的Hive上使用(yong)下(xia)面SQL語(yu)句創建一張Hive分(fen)區表(biao),表(biao)名與MySQL上的表(biao)trip_data一致(zhi),且(qie)Hive表(biao)比MySQL表(biao)多(duo)建三個字段(duan)y、ym、ymd,作為Hive的分(fen)區字段(duan)。SQL語(yu)句如下(xia):
create table trip_data(TripID int,Duration int,StartDate,timestamp,StartStation varchar(64),StartTerminal int,EndDate timestamp,EndStation varchar(64),EndTerminal int,Bike int,SubscriberType varchar(32),ZipCodev varchar(10))partitioned by (y int,ym int,ymd int);
說明Hive表trip_data有(you)三個分(fen)區字段:騎行起(qi)始時(shi)間的(de)年(nian)(nian)、騎行起(qi)始時(shi)間的(de)年(nian)(nian)月(yue)、騎行起(qi)始時(shi)間的(de)年(nian)(nian)月(yue)日,例(li)如一(yi)條騎行記錄(lu)的(de)起(qi)始時(shi)間為2018/5/11 9:40,那么這條記錄(lu)會(hui)保(bao)存(cun)在分(fen)區trip_data/2018/201805/20180511下(xia)面。對trip_data進行按時(shi)間維度統計匯(hui)總時(shi),只需要對局部數據掃(sao)描,大大提升性能。
創建CDM集群并綁定EIP
- 參考創建CDM集群,創建CDM集群。
關鍵配置如下:
- CDM集群的規格,按待遷移的數據量選擇,一般選擇cdm.medium即可,滿足大部分遷移場景。
- CDM集群所在VPC、子網、安全組,選擇與MRS集群所在的網絡一致。
- CDM集群創建完成后,選擇集群操作列的“綁定彈性IP”,CDM通過EIP訪問MySQL。
詳見下圖(tu): 集群列表

說明如果用戶對本(ben)地(di)數據源的訪問通道做了SSL加密,則CDM無(wu)法通過彈性IP連接數據源。
創建MySQL連接
- 在CDM集群管理界面,單擊集群后的“作業管理”,選擇“連接管理 > 新建連接”,進入連接器類型的選擇界面。
- 選擇“MySQL”后單擊“下一步”,配置MySQL連接的參數。
單擊“顯示高級屬性”可查看更多可選參數,具體請參見 配置常見關系數據庫連接。這里(li)保持(chi)默認,必(bi)填參數如(ru)下(xia)表“MySQL連接參數”所示。
| 參數名 | 說明 | 取值樣例 |
|---|---|---|
| 名稱 | 輸入便于記憶和區分的連接名稱。 | mysqllink |
| 數據庫服務器 | MySQL數據庫的IP地址或域名。 | 192.168.1.110 |
| 端口 | MySQL數據庫的端口。 | 3306 |
| 數據庫名稱 | MySQL數據庫的名稱。 | sqoop |
| 用戶名 | 擁有MySQL數據庫的讀、寫和刪除權限的用戶。 | admin |
| 密碼 | 用戶的密碼。 | - |
| 使用本地API | 使用數據庫本地API加速(系統會嘗試啟用MySQL數據庫的local_infile系統變量)。 | 是 |
| 使用Agent | 是否選擇通過Agent從源端提取數據。 | 是 |
| local_infile字符集 | mysql通過local_infile導入數據時,可配置編碼格式。 | utf8 |
| 驅動版本 | 適配mysql的驅動。 | - |
| Agent | 單擊“選擇”,選擇連接Agent中已創建的Agent。 | - |
| 單次請求行數 | 指定每次請求獲取的行數。 | 1000 |
| 單次提交行數 | 支持通過agent從源端提取數據 | 1000 |
| 連接屬性 | 自定義連接屬性。 | useCompression=true |
| 引用符號 | 連接引用表名或列名時的分隔符號。默認為空。 | ' |
| 單次寫入行數 | 指定單次批量寫入的行數,當寫入行數累計到單次批量提交行數時提交一次,該值應當小于單次提交行數。 | 100 |
- 單擊“保存”回到連接管理界面。
說明如(ru)果保(bao)存時出(chu)錯(cuo),一般是由于(yu)MySQL數據(ju)庫的(de)安全設置問題,需(xu)要(yao)設置允(yun)許CDM集群的(de)EIP訪問MySQL數據(ju)庫。
創建Hive連接
- 單擊CDM集群后的“作業管理”,進入作業管理界面,再選擇“連接管理 > 新建連接”,進入選擇連接器類型的界面。
- 連接器類型選擇“MRS Hive”后單擊“下一步”配置Hive連接參數,如下圖“創建MRS Hive連接”所示。

各參(can)數(shu)說明如下表“MRS Hive連接參(can)數(shu)”所示,需要您根據(ju)實際情(qing)況配置。
| 參數名 | 說明 | 取值樣例 |
|---|---|---|
| 名稱 | 連接的名稱,根據連接的數據源類型,用戶可自定義便于記憶、區分的連接名。 | mrs-link |
| Manager IP | MRS Manager的浮動IP地址,可以單擊輸入框后的“選擇”來選定已創建的MRS集群,CDM會自動填充下面的鑒權參數。 | 127.0.0.1 |
| 認證類型 | 訪問MRS的認證類型: SIMPLE:非安全模式選擇Simple鑒權。 KERBEROS:安全模式選擇Kerberos鑒權。 |
SIMPLE |
| Hive版本 | Hive的版本。根據服務端Hive版本設置。 | HIVE_3_X |
| 用戶名 | 選擇KERBEROS鑒權時,需要配置MRS Manager的用戶名和密碼。從HDFS導出目錄時,如果需要創建快照,這里配置的用戶需要HDFS系統的管理員權限。 如果要創建MRS安全集群的數據連接,不能使用admin用戶。因為admin用戶是默認的管理頁面用戶,這個用戶無法作為安全集群的認證用戶來使用。您可以創建一個新的MRS用戶,然后在創建MRS數據連接時,“用戶名”和“密碼”填寫為新建的MRS用戶及其密碼。 說明 如果CDM集群為2.9.0版本及之后版本,且MRS集群為3.1.0及之后版本,則所創建的用戶至少需具備Manager_viewer的角色權限才能在CDM創建連接;如果需要對應組件的進行庫、表、數據的操作,還需要添加對應組件的用戶組權限。 如果CDM集群為2.9.0之前的版本,或MRS集群為3.1.0之前的版本,則所創建的用戶需要具備Manager_administrator或System_administrator權限,才能在CDM創建連接。 僅具備Manager_tenant或Manager_auditor權限,無法創建連接。 |
cdm |
| 密碼 | 訪問MRS Manager的用戶密碼。 | - |
| OBS支持 | 需服務端支持OBS存儲。在創建Hive表時,您可以指定將表存儲在OBS中。 | 否 |
| 運行模式 | “HIVE_3_X”版本支持該參數。支持以下模式: EMBEDDED:連接實例與CDM運行在一起,該模式性能較好。 STANDALONE:連接實例運行在獨立進程。如果CDM需要對接多個Hadoop數據源(MRS、Hadoop或CloudTable),并且既有KERBEROS認證模式又有SIMPLE認證模式,只能使用STANDALONE模式或者配置不同的Agent。 說明 STANDALONE模式主要是用來解決版本沖突問題的運行模式。當同一種數據連接的源端或者目的端連接器的版本不一致時,存在jar包沖突的情況,這時需要將源端或目的端放在STANDALONE進程里,防止沖突導致遷移失敗。 |
EMBEDDED |
| 檢查Hive JDBC連通性 | 是否需要測試Hive JDBC連通性。 | 否 |
| 是否使用集群配置 | 用戶可以在“連接管理”處創建集群配置,用于簡化Hadoop連接參數配置。 | 否 |
| 屬性配置 | 其他Hive客戶端配置屬性。 | - |
- 單擊“保存”回到連接管理界面。
創建遷移作業
- 選擇“表/文件遷移 > 新建作業”,開始創建數據遷移任務,如下圖“創建MySQL到Hive的遷移任務”所示。

說明“導(dao)入前(qian)(qian)清空數據(ju)”選(xuan)“是”,這樣每次導(dao)入前(qian)(qian),會(hui)將之前(qian)(qian)已經導(dao)入到Hive表的數據(ju)清空。
- 作業參數配置完成后,單擊“下一步”,進入字段映射界面,如下圖“Hive字段映射”所示。
映射MySQL表(biao)和Hive表(biao)字段,Hive表(biao)比(bi)MySQL表(biao)多三個字段y、ym、ymd,即(ji)是Hive的(de)分區字段。由于沒有源(yuan)(yuan)表(biao)字段直接對應,需(xu)要配置表(biao)達(da)式從(cong)源(yuan)(yuan)表(biao)的(de)StartDate字段抽(chou)取。

- 單擊
進入轉換器列表界面,再選擇“新建轉換器 > 表達式轉換”,如下圖“配置表達式”所示。
y、ym、ymd字段的表達式分別配置如下:
DateUtils.format(DateUtils.parseDate(row[2],"yyyy-MM-dd HH:mm:ss.SSS"),"yyyy")
DateUtils.format(DateUtils.parseDate(row[2],"yyyy-MM-dd HH:mm:ss.SSS"),"yyyyMM")
DateUtils.format(DateUtils.parseDate(row[2],"yyyy-MM-dd HH:mm:ss.SSS"),"yyyyMMdd")

說明CDM的表(biao)達式已經(jing)預置常(chang)用(yong)字符(fu)串、日期、數值等(deng)類型的字段內容轉換。
- 單擊“下一步”配置任務參數,一般情況下全部保持默認即可。
該(gai)步(bu)驟(zou)用戶(hu)可(ke)(ke)以配(pei)置如下可(ke)(ke)選(xuan)功能:
- 作業失敗重試:如果作業執行失敗,可選擇是否自動重試,這里保持默認值“不重試”。
- 作業分組:選擇作業所屬的分組,默認分組為“DEFAULT”。在CDM“作業管理”界面,支持作業分組顯示、按組批量啟動作業、按分組導出作業等操作。
- 是否定時執行:如果需要配置作業定時自動執行,請參見 配置定時任務。這里保持默認值“否”。
- 抽取并發數:設置同時執行的抽取任務數。這里保持默認值“1”。
- 是否寫入臟數據:如果需要將作業執行過程中處理失敗的數據、或者被清洗過濾掉的數據寫入OBS中,以便后面查看,可通過該參數配置,寫入臟數據前需要先配置好OBS連接。這里保持默認值“否”即可,不記錄臟數據。
- 作業運行完是否刪除:這里保持默認值“不刪除”。
- 單擊“保存并運行”,回到作業管理界面,在作業管理界面可查看作業執行進度和結果。
- 作業執行成功后,單擊作業操作列的“歷史記錄”,可查看該作業的歷史執行記錄、讀取和寫入的統計數據。
在歷史記錄界面單擊“日志(zhi)(zhi)”,可查看作業的日志(zhi)(zhi)信(xin)息。