将数据导入到mysql_06955.10.2如何将CM的外部PostgreSQL数据库迁移至MySQL服务
作者:朱超杰
文檔編寫目的在前面的文章《如何將CM內嵌PostgreSQL服務遷移至外部PostgreSQL服務》介紹了將CM內嵌的PostgreSQL遷移至外部PostgreSQL,因為CM內嵌的PostgreSQL數(shù)據庫不支持直接遷移至MySQL。本篇文章Fayson主要介紹如何將集群使用的外部PostgreSQL遷移至MySQL數(shù)據庫。
注意:不支持直接從Cloudera Manager嵌入式PostgreSQL遷移到MySQL / Oracle數(shù)據庫。您必須首先從Cloudera Manager嵌入式PostgreSQL數(shù)據庫服務器遷移到外部PostgreSQL數(shù)據庫服務器。
只有在成功從嵌入式PostgreSQL數(shù)據庫服務器遷移到外部PostgreSQL數(shù)據庫服務器后,才能遷移到外部MySQL或Oracle數(shù)據庫。
內容概述
1.安裝Mariadb服務
2.數(shù)據庫遷移
3.驗證
4.總結
測試環(huán)境
1.CM和CDH版本均為5.10.2
2.采用root用戶
遷移前集群環(huán)境確認1.CM元數(shù)據庫類型為postgresql
cat?/etc/cloudera-scm-server/db.properties2.Hue用戶及用戶組
Hue的數(shù)據庫類型為PostgreSQL
用戶信息
用戶組信息
管理員信息
3.Hive數(shù)據庫及表信息
Hive的數(shù)據庫類型為PostgreSQL
如下所示,當前hive中有default和test兩個數(shù)據庫;default數(shù)據庫中有mytest(分區(qū)表)和mytest_no_partitions兩個表。
查看mytest表的數(shù)據
4.Sentry授權信息
Sentry的數(shù)據庫類型為PostgreSQL
Sentry的授權信息如下
安裝MySQL1.選一臺節(jié)點安裝MariaDB服務
yum?-y?install?mariadb?mariadb-server2.啟動mariadb服務并設置為開機自啟動
systemctl?start?mariadbsystemctl?enable?mariadb
systemctl?status?mariadb?|?grep?Active
3.初始化MariaDB數(shù)據庫
/usr/bin/mysql_secure_installation使用root用戶登錄查看當前數(shù)據庫
4.安裝MySQL JDBC驅動
將mysql驅動上傳至/usr/share/java目錄,并以軟鏈接的方式去掉驅動版本號
遷移CM元數(shù)據庫1.導出Cloudera Manager配置文件
獲取當前支持的API版本
curl?-u?admin:admin?"http://192.168.0.173:7180/api/version"導出json格式配置文件
curl?-u?admin:admin?"http://192.168.0.173:7180/api/v15/cm/deployment"?>?/root/cm/cm-deployment.json2.執(zhí)行如下命令,保留Cloudera Manager的GUID號
sudo?-u?postgres?psql?-qtAX?scm?-c?"select?GUID?from?CM_VERSION"?>?/etc/cloudera-scm-server/uuid3.停止集群和Cloudera Management Service服務
4.在CM節(jié)點上執(zhí)行如下命令停止cloudera-scm-server服務
systemctl?stop?cloudera-scm-serversystemctl?status?cloudera-scm-server?|?grep?Active
5.登錄MySQL執(zhí)行如下SQL語句創(chuàng)建scm數(shù)據庫及用戶并授權
create?database?scm?default?character?set?utf8;CREATE?USER?'scm'@'%'?IDENTIFIED?BY?'password';
GRANT?ALL?PRIVILEGES?ON?scm.*?TO?'scm'@'%';
FLUSH?PRIVILEGES;
執(zhí)行如下命令,初始化Cloudera Manager數(shù)據庫配置
/usr/share/cmf/schema/scm_prepare_database.sh?mysql?scm?scm?password6.清空所有節(jié)點的/var/run/cloudera-scm-agent/process/目錄
????a.使用批量命令,停止集群所有節(jié)點的agent和supervisor服務
batch_cmd.sh?node.list?"?service?cloudera-scm-agent?next_stop_hard"batch_cmd.sh?node.list?"service?cloudera-scm-agent?stop"
查看進程是否已被停止
ps?-ef?|?grep?cmf-agentps?-ef?|?grep?supervisord
????b.使用批量命令,使用mv命令將集群所有節(jié)點的agent目錄備份
batch_cmd.sh?node.list?"mv?/var/run/cloudera-scm-agent?/var/run/cloudera-scm-agent-BU"batch_cmd.sh?node.list?"ls?/var/run?|?grep?cloudera-scm-agent*"
使用批量命令,啟動集群所有節(jié)點的cloudera-scm-agent服務
batch_cmd.sh?node.list?"systemctl?start?cloudera-scm-agent"batch_cmd.sh?node.list?"systemctl?status?cloudera-scm-agent?|?grep?Active"
7.啟動Cloudera Manager Server
systemctl?start?cloudera-scm-servernetstat?-lnpt?|?grep?7180
使用超級管理員用戶登錄CM
接收許可條款,【繼續(xù)】
如果有許可證,上傳許可證,沒有許可證選擇企業(yè)試用版,【繼續(xù)】
注意:必須要上傳許可證或者選擇試用版繼續(xù)之后再返回主頁,否則會導致使用curl導入集群配置時失敗。單擊左上角返回CM主頁
當前CM主頁狀態(tài)如下:
8.執(zhí)行如下命令調用CM API接口,恢復Cloudera Manager配置
curl?-H?"Content-Type:?application/json"?--upload-file?/root/cm/cm-deployment.json?-u?admin:admin?"http://192.168.0.173:7180/api/v15/cm/deployment?deleteCurrentDeployment=true"再次查看CM主頁,CM配置已導入成功
9.啟動服務
啟動Cloudera Mangement Service
Cloudera Management Service啟動成功后,等待parcel分發(fā)完成,然后啟動集群服務并分發(fā)客戶端配置。
查看集群CM元數(shù)據庫使用的數(shù)據庫服務器,如下所示,此時已遷移至MySQL
cat?/etc/cloudera-scm-server/db.properties遷移集群其他服務元數(shù)據庫
此時只有CM的數(shù)據庫scm遷移到了MySQL,集群其他服務的元數(shù)據庫(Hive、Sentry、Hue、Oozie等)任然配置的為PostgreSQL,接下來主要介紹通過使用工具將PostgreSQL數(shù)據庫遷移至MySQL數(shù)據庫,如下示例以遷移Hive元數(shù)據庫為例。
1.下載安裝數(shù)據庫轉換工具 DBConvert for MySQL & PostgreSQL,下載地址如下:
https://dbconvert.com/downloads/dbconvert_mysql_postgresql.zip下載完成之后解壓,執(zhí)行dbconvert_mysql_postgresql文件夾下的setup.exe進行安裝
2.安裝完成后打開該軟件,選擇【Try】使用版
3.這里以hive元數(shù)據庫轉換為例,配置PostgreSQL數(shù)據庫連接信息
測試連接成功,單擊下一步
此時會顯示數(shù)據庫中的所有表,全部勾選;然后單擊【OK】
配置目標數(shù)據庫連接信息(即我們要遷移的MySQL信息)
測試連接成功后單擊【Next】
自定義要轉換的表,然后單擊【Next】
單擊【commit】開始進行轉換
轉換成功后顯示如下
然后依次轉換其他數(shù)據庫即可
注意:轉換hue數(shù)據庫時,有些表因為外鍵的原因不能被轉換,根據提示取消相關外鍵即可4.數(shù)據庫遷移完成后,登錄mysql查看數(shù)據庫如下:
創(chuàng)建用戶并授予數(shù)據庫上的權限
CREATE?USER?'hive'@'%'?IDENTIFIED?BY?'password';GRANT?ALL?PRIVILEGES?ON?hive.*?TO?'hive'@'%';
FLUSH?PRIVILEGES;
CREATE?USER?'sentry'@'%'?IDENTIFIED?BY?'password';???
GRANT?ALL?PRIVILEGES?ON?sentry.?*?TO?'sentry'@'%';???
FLUSH?PRIVILEGES;
CREATE?USER?'rman'@'%'?IDENTIFIED?BY?'password';???
GRANT?ALL?PRIVILEGES?ON?rman.?*?TO?'rman'@'%';???
FLUSH?PRIVILEGES;
CREATE?USER?'hue'@'%'?IDENTIFIED?BY?'password';???
GRANT?ALL?PRIVILEGES?ON?hue.?*?TO?'hue'@'%';???
FLUSH?PRIVILEGES;
CREATE?USER?'oozie'@'%'?IDENTIFIED?BY?'password';???
GRANT?ALL?PRIVILEGES?ON?oozie.?*?TO?'oozie'@'%';???
FLUSH?PRIVILEGES;
更換數(shù)據庫服務器
5.進入Hive配置頁面,修改Hive的Metastore數(shù)據庫類型為MySQL,然后修改其在 MySQL中的數(shù)據庫名稱
6.完成上述修改后,然后回到CM主頁,根據提示重啟相關服務
服務重啟完成后,此時數(shù)據庫已遷移至MySQL數(shù)據庫服務器。
遷移后驗證6.1 Hue驗證
1.查看Hue當前數(shù)據庫類型為MySQL
2.使用管理員賬號hive登錄Hue驗證數(shù)據是否完整
hive用戶的管理員權限與遷移前一致
遷移后的用戶信息與遷移前數(shù)據一致
用戶組信息與遷移前信息一致
6.2 Hive驗證
1.查看Hive當前數(shù)據庫類型為MySQL
2.通過Hue查看Hive數(shù)據庫以及表信息如下:
3.查看mytest表數(shù)據如下:
查看mytest表結構如下:
由上圖可知,數(shù)據庫遷移完成后Hive的數(shù)據庫、表、表結構以及表數(shù)據均遷移成功。
6.3 Sentry驗證
1.查看Sentry當前數(shù)據庫類型為MySQL
2.通過Hue查看Sentry的授權信息如下:
3.使用hive用戶進行建表測試
建表成功
向表中插入數(shù)據,數(shù)據插入成功
執(zhí)行查詢操作,查詢成功
4.使用ldapuser1用戶登錄Hue,進行建表測試
建表失敗,報錯如下:
Error?while?compiling?statement:?FAILED:?SemanticException?No?valid?privileges?User?ldapuser1?does?not?have?privileges?for?SWITCHDATABASE?The?required?privileges:?Server=server1->Db=*->Table=+->Column=*->action=select;Server=server1->Db=*->Table=+->Column=*->action=insert;執(zhí)行數(shù)據插入操作,操作失敗,報錯如下:
Error?while?compiling?statement:?FAILED:?SemanticException?No?valid?privileges?User?ldapuser1?does?not?have?privileges?for?SWITCHDATABASE?The?required?privileges:?Server=server1->Db=*->Table=+->Column=*->action=select;Server=server1->Db=*->Table=+->Column=*->action=insert;執(zhí)行查詢操作,操作失敗,報錯如下:
Error?while?compiling?statement:?FAILED:?SemanticException?No?valid?privileges?User?ldapuser1?does?not?have?privileges?for?SWITCHDATABASE?The?required?privileges:?Server=server1->Db=*->Table=+->Column=*->action=select;Server=server1->Db=*->Table=+->Column=*->action=insert;由上可知,sentry數(shù)據庫遷移后,授權信息也遷移成功。
總結1.將Cloudera Manager服務使用的PostgreSQL遷移至MySQL時,主要通過CM API接口導出集群配置信息json文件,再通過CM API接口導入完成數(shù)據庫的遷移。
2.集群其它服務(Hive、Sentry、Oozie、Hue等)在遷移時并未相應的API接口實現(xiàn),主要是通過DBConvert for MySQL & PostgreSQL工具將PostgreSQL數(shù)據的數(shù)據轉換為MySQL數(shù)據庫的方式解決。
3.在進行Hue數(shù)據庫轉換的過程中由于部分表外鍵的問題,導致轉換失敗,需要將報錯的外鍵取消勾選。
4.Oozie服務重啟失敗,報錯如下:
Caused?by:?com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:?Table?'oozie.VALIDATE_CONN'?doesn't?exist解決方式:為oozie服務創(chuàng)建數(shù)據庫
總結
以上是生活随笔為你收集整理的将数据导入到mysql_06955.10.2如何将CM的外部PostgreSQL数据库迁移至MySQL服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 空间正交基的定义_高等代数|第九章 欧几
- 下一篇: docker可以把应用及其相关的_Doc