最初的時候,我們只是想設計一個Web版本的HBase數據瀏覽器,類似於PL/SQL那樣便捷,後來又添加了HDFS分散式文件系統瀏覽器,再後來又添加了Hive數據倉庫瀏覽器功能。這個時候,hadoop集群由一個擴張到三個,大數據業務系統所涉及到的NoSQL資料庫也越來越多,譬如Neo4j、MongoD... ...
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 | 系統發佈說明文件。 |
|
【未完待續】