1. 概述
1.1. 系統背景
最初的時候,我們只是想設計一個Web版本的HBase數據瀏覽器,類似於PL/SQL那樣便捷,后來又添加了HDFS分布式文件系統瀏覽器,再后來又添加了Hive數據倉庫瀏覽器功能。這個時候,hadoop集群由一個擴張到三個,大數據業務系統所涉及到的NoSQL數據庫也越來越多,譬如Neo4j、MongoDB、Redis等,所涉及的批處理和流計算平台也從最初的只有MapReduce,又相繼增加了Spark和Storm等。
原本,只是抱着學習和技術探索的態度進入hadoop生態技術圈的,也並沒有指望在正式的生產環境中進行深度應用,但是現在,讓我們措手不及的是要在很短的時期內進行數據庫技術的轉型,面對即將全面鋪開的業務應用,以及由此導致的在多種數據庫和計算平台的頻繁切換,讓我們逐漸生出些許煩躁和厭惡。
於是,決定做一些整合性的開發,“工欲善其事,必先利其器”,希望在戰斗即將打響前,自己有一套稍稍完整的裝備,不至於措手不及和手忙腳亂。這就是“大數據之多數據源綜合管理系統”設計的初衷。“綜合管理系統”,聽起來這是一個多么龐大的系統,其實呢,這只是對一堆難以梳理的技術的一種懶惰的叫法,我們相信,很多人都從事開發過類似於“綜合管理系統”這樣的項目,它就是一種混混沌沌的狀態,在叫法上,你我大可不必斤斤計較。
系統的設計基本上分為五個階段。
第一,數據源管理。理想的構建目標中,系統將囊括業務系統所涉及到的所有的數據庫,包括關系數據庫(Oracle、MySql等)和非關系數據庫(HBase、HDFS、Hive、Neo4j、MongoDB、Redis等等),以及其他不斷涌現的新的數據存儲技術。希望能夠在這樣一個系統中,實現對多種數據庫的統一管理,包括數據庫連接配置、數據庫對象管理、數據瀏覽器、數據維護、訪問授權管理等,免去在多種獨立工具之間的頻繁切換。
第二,數據通道管理。數據該如何寫入數據庫呢?外部系統該如何訪問數據呢?在讀寫數據時該如何平衡速度、安全和傳輸量三者呢?如何解決跨語言應用的問題呢?這就是數據通道需要解決的問題。其實,剛開始的時候,設計數據通道的想法並非是基於以上目標,而只是不願意在訪問HBase數據庫時復制引用大量的hadoop Jar文件,更別說無法預料的jar文件版本沖突引用的其他問題。
第三,數據遷移管理。當業務系統由基於常規的關系數據庫轉向基於NoSQL數據庫時,數據遷移將是不得不面對的大問題。譬如,將Oracle數據遷移到HBase數據庫中,你首先會想到Sqoop,這當然可以,不過稍微復雜一點的情況,就需要你編程了。另外,不同數據庫之間相互遷移數據呢?譬如Oracle到Neo4j,Oracle到MongoDB,以及MongoDB到HBase等等多種情況呢?這就是我們設計數據遷移管理的初衷:“0”代碼編程和跨數據庫類型自由遷移。
第四,數據計算平台。說到這里,你可能已經感覺到系統設計的思路了,是的,就是遵循“存儲-治理-計算-展示”的層次進行的。原本,我們大可不必在系統中引入Spark和MapReduce等計算平台,但是,我們不可能為了讓用戶提交運行Spark任務,隨隨便便將hadoop集群的配置信息和Linux主機的密碼信息泄露出去,而且,通過shell命令行的方式提交Spark和MapReduce應用也並非人人可以勝任,為了降低任務提交的門檻、提高任務提交的便捷性以及出於對集群安全的考慮等,最終說服自己將數據計算平台引入系統中。
第五,遠程主機管理。開始編寫本篇文章時,我需要管理的CDH集群有三個,linux主機將近50台,windows主機數十台。每台主機的運行狀態(內存、CPU、硬盤空間等)、各種服務的運行狀態是每天都需要監控的,另外需要經常進行數據文件的上傳、備份、清除,以及服務的安裝調試等等,在有些情況下,市面上常用的shell工具做不到順手和高效,迫於無奈,我們設計了自己的遠程主機管理模塊。
看下面的兩張系統截圖,你會發現,我們使用了jquery-easyui。不錯,這款UI工具包幫了我們很大忙。
1.2.1 運行環境
由於我們的CDH測試環境是5.4版本,要求jdk必須是1.7以上版本,所以是基於jdk 1.7開發的。
開發階段和生產階段所采用的部署服務器是tomcat 7.0,其他的服務器譬如jboss、weblogic等暫時沒有測試過,如果您有興趣,可以測試部署下。
系統可以在IE、谷歌、火狐等瀏覽器中運行,其中要求IE必須是8.0以上版本。
1.2.2 數據庫配置
本系統的數據庫采用的是MySQL,連接信息配置在jdbc.properties文件中,詳細配置如下表所示:
選項 |
描述 |
driverClass |
com.mysql.jdbc.Driver |
jdbcUrl |
連接字符串 |
user |
用戶名稱 |
password |
登錄密碼 |
1.2.3 系統配置
系統配置信息存放在system.config.properties文件中,詳細配置如下表所示:
選項 |
描述 |
system.title |
系統標題 |
system.sub.title |
系統子標題 |
system.version |
系統版本 |
system.copyright |
系統版權信息 |
system.icon.path |
系統圖標 |
passage.service.address |
系統RMI主通道部署主機地址(設為本機IP地址即可) |
passage.service.port |
系統RMI主通道部署端口號(默認為11000) |
1.3.1 系統版本
由於本系統涉及到的功能較多,所以系統發布工作將分階段進行。第一階段將發布6個獨立的版本,稱之為1.0版本,其中“數據源管理”將分別在1.0.1和1.0.2兩個子版本中介紹。第二階段將發布完整的版本,稱之為為2.0版本。
v1.0.1版本,包含“數據源管理”的兩個子功能:HDFS分布式文件系統、HBase數據庫。
v1.0.2版本,包含“數據源管理”的剩余的子功能:Neo4j圖數據庫、MongoDB文檔數據庫、Redis鍵值數據庫、Hive數據倉庫、關系數據庫等數據庫功能。
v1.0.3版本,包含數據通道功能。
v1.0.4版本,包含數據遷移功能。
v1.0.5版本,包含遠程主機管理功能。
v1.0.6版本,包含數據計算平台功能。
1.3.2 系統部署
我們將系統所涉及到的所有資料都打包成一個rar文件,名稱為“mdsm-v1.0.1-20170216.rar”,其中“mdsm”為系統名稱,“v1.0.1”為系統版本號,“20170216”為發布日期。里面包含4個文件,如下圖所示:
文件 |
描述 |
mdsm |
編譯后的web項目。 |
mdsm.psc |
備份后的mysql數據庫,包含所有的表和數據。我們采用navicat for Mysql進行還原操作: 首先創建mdsm數據庫,如下圖所示: 然后在“備份”面板中點擊“還原備份”按鈕,選擇本地的mdsm.psc文件,進行還原操作,如下圖所示: |
mdsm.pdf |
設計文檔和用戶手冊。 |
readme.txt |
系統發布說明文件。 |
|
【未完待續】