1. MySQL資料庫管理工具有哪些
1、phpMyAdmin
phpMyAdmin是最常用的MySQL維護工具,是一個用PHP開發的基於Web方式架構在網站主機上的MySQL管理工具,支持中文,管理資料庫非常方便。不足之處在於對大資料庫的備份和恢復不方便。
2、MySQLDumper
MySQLDumper使用PHP開發的MySQL資料庫備份恢復程序,解決了使用PHP進行大資料庫備份和恢復的問題,數百兆的資料庫都可以方便的備份恢復,不用擔心網速太慢導致中間中斷的問題,非常方便易用。這個軟體是德國人開發的,還沒有中文語言包。
3、Navicat
Navicat是一個桌面版MySQL資料庫管理和開發工具。和微軟SQLServer的管理器很像,易學易用。Navicat使用圖形化的用戶界面,可以讓用戶使用和管理更為輕松。支持中文,有免費版本提供。
4、MySQL GUI Tools
MySQL GUI Tools是MySQL官方提供的圖形化管理工具,功能很強大,值得推薦,可惜的是沒有中文界面。
5、MySQL ODBC Connector
MySQL官方提供的ODBC介面程序,系統安裝了這個程序之後,就可以通過ODBC來訪問MySQL,這樣就可以實現SQLServer、Access和MySQL之間的數據轉換,還可以支持ASP訪問MySQL資料庫。
2. 大數據工程師常用的大數據BI工具是什麼
【導語】目前,無論是大企業還是小企業,都面臨著數字化轉型的挑戰。如何在大數據中獲得更好地洞察力,有效改善用戶體驗,同時達到優化生產力的效果,這時候進行數據分析就顯得尤為重要了,那麼大數據工程師常用的大數據BI工具是什麼?
1、億信ABI
億信ABI是億信華辰開發的一款全能型數據分析平台。支持連接多種類型的數據源,包括:關系型資料庫,分布式資料庫,文件數據源,介面數據源等;也能靈活支持跨源跨庫的數據分析。內置了數倉實施工具,通過拖拽式的流程設計,實現了數據抽取、清洗、轉換、裝載及調度。支持業務人員自助分析,拖拖拽拽就能做出數據分析。
2、Tableau
Tableau是國外比較流行的一款數據可視化工具,可視化功能很強大,對計算機的硬體要求較高,部署較復雜。支持與Matlab進行集成計算。目前在數據挖掘領域做得相對比較簡單,只是內置了預測和聚類兩個挖掘分析演算法,但支持R語言等挖掘語言集成。
3、QlikView
QlikView比較靈活,展示樣式多樣。它允許設置和調整每個對象的每個小方面,並自定義可視化和儀錶板的外觀。QlikView數據文件(QVD文件)概念的引入,一定程度上取代了ETL工具的功能,擁有可集成的ETL(提取,轉換,載入)引擎,能夠執行普通的數據清理操作,但是這可能會很昂貴。
4、Power BI
Power
BI是微軟提供的一種商業分析產品,因為是微軟的產品,所以它的知名度很高。在產品的功能、易用性、美觀程度上都有很好的表現。這個產品的學習成本較低、上手快,因為桌面版不提供協作選項,因此最適合獨立用戶或在同一個辦公區工作的人使用,對於有復雜業務場景需求的客戶,包括有定製開發需求的客戶來說,存在不小的障礙。
5、Finebi
Finebi是帆軟開發的一款敏捷BI工具,帆軟早期專注於傳統報表的圖表組件功能,以價格優勢佔到了不低的市場份額,作為傳統報表起步的公司,在敏捷BI的沖擊下市場受到了沖擊並開始轉向敏捷路線。Finebi做到了將IT人員從分析環節的中心淡去,提供了從數據採集到數據加工處理、數據存儲、數據分析、數據可視化為一體的一站式商業智能解決方案。
關於大數據工程師常用的大數據BI工具,就給大家說明到這里了,其實大數據行業的發展未來前景一路看好,希望大家能夠抓住機遇,加油!
3. 什麼是ETL調度系統
對於做過 BI 開發的朋友,ETL 並不陌生,只要涉及到數據源的數據抽取、數據的計算和處理過程的開發,都是 ETL,ETL 就這三個階段,Extraction 抽取,Transformation 轉換,Loading 載入。
從不同數據源抽取數據 EXTRACTION ,按照一定的數據處理規則對數據進行加工和格式轉換 TRASFORMATION,最後處理完成的輸出到目標數據表中也有可能是文件等等,這個就是 LOADING。
再通俗一點講,ETL 的過程就跟大家日常做菜一樣,需要到菜市場的各個攤位買好菜,把菜買回來要摘一下,洗一洗,切一切最後下鍋把菜炒好端到飯桌上。菜市場的各個攤位就是數據源,做好的菜就是最終的輸出結果,中間的所有過程像摘菜、洗菜、切菜、做菜就是轉換。
在開發者殲的時候,大部分時候會通過 ETL 工具去實現,比如常用的像 KETTLE、PENTAHO、IBM DATASTAGE、INFORNAICA、微軟 SQL SERVER 裡面的 SSIS 等等,在結合基本的 SQL 來實現整個 ETL 過程。
也有的是自己通過程序開發,然後控制一些數據處理腳本跑批,基本上就是程序加 SQL 實現。
哪種方式更好,也是需要看使用場景和開發人員對那種方式使用的更加得心應手。我看大部分軟體程序開發人員出身的,碰到數據類項目會比較喜歡用程序控制跑批,這是程序思維的自然延續。純 BI 開發人員大部分自然就選擇成熟的 ETL 工具來開發,當然也有一上來就寫程序腳本的,這類 BI 開發人員的師傅基本上是程序人員轉過來的。
用程序的好處就是適配性強,可擴展性強,可以集成或拆解到到任何的程序處理過程中,有的時候使用程序開發效率更高。難就難在對維護人員有一定的技術要求,經驗轉移和可復制性不夠。
用 ETL 工具的好處,第一是整個 ETL 的開發過程可視化了,特別是在數據處理流程的分層設計中可以很清晰的管理。第二是鏈接到不同數據源的時候,各種數據源、資料庫的鏈接協議已經內置了,直接配置就可以,不需要再去寫程序去實現。第三是各種轉換控制項基本上拖拉拽就可以使用,起到簡化的代替一部分 SQL 的開發,不需要寫代碼去實現扮陪。第四是可以非常靈活的設計各種 ETL 調度規則,高度配置化,這個也不需要寫代碼實現。
所以在大多數通用的項目中,在項目上使用 ETL 標准組件開發會比較多一些。
ETL 從邏輯上一般可以分為兩層,控制流和數據流,這也是很多 ETL 工具設計的理念,不同的 ETL 工具可能叫法不同。
控制流就是控制每一個數據流與數據流處理的先後流程,一個控制流可以包含多個數據流。比廳嫌蠢如在數據倉庫開發過程中,第一層的處理是ODS層或者Staging 層的開發,第二層是DIMENSION維度層的開發,後面幾層就是DW 事實層、DM數據集市層的開發。通過ETL的調度管理就可以讓這幾層串聯起來形成一個完整的數據處理流程。
數據流就是具體的從源數據到目標數據表的數據轉換過程,所以也有 ETL 工具把數據流叫做轉換。在數據流的開發設計過程中主要就是三個環節,目標數據表的鏈接,這兩個直接通過 ETL 控制項配置就可以了。中間轉換的環節,這個時候就可能有很多的選擇了,調 SQL 語句、存儲過程,或者還是使用 ETL 控制項來實現。
有的項目上習慣使用 ETL 控制項來實現數據流中的轉換,也有的項目要求不使用標準的轉換組件使用存儲過程來調用。也有的是因為數據倉庫本身這個資料庫不支持存儲過程就只能通過標準的SQL來實現。
我們通常講的BI數據架構師其實指的就是ETL的架構設計,這是整個BI項目中非常核心的一層技術實現,數據處理、數據清洗和建模都是在ETL中去實現。一個好的ETL架構設計可以同時支撐上百個包就是控制流,每一個控制流下可能又有上百個數據流的處理過程。之前寫過一篇技術文章,大家可以搜索下關鍵字 BIWORK ETL 應該在網上還能找到到這篇文章。這種框架設計不僅僅是ETL框架架構上的設計,還有很深的ETL項目管理和規范性控制器思想,包括後期的運維,基於BI的BI分析,ETL的性能調優都會在這些框架中得到體現。因為大的BI項目可能同時需要幾十人來開發ETL,框架的頂層設計就很重要。
4. 調度工具(ETL+任務流)
kettle是一個ETL工具,ETL(Extract-Transform-Load的縮寫,即數據抽取、轉換、裝載的過程)。
kettle中文名稱叫水壺,該項目的主程序員MATT 希望把各種數據放到一個壺里,然後以一種指定的格式流出。
所以他的重心是用於數據
oozie是一個工作流,Oozie工作流是放置在控制依賴DAG(有向無環圖桐頃 Direct Acyclic Graph)中的一組動作(例如,Hadoop的Map/Rece作業、Pig作業等),其中指定了動作執行的順序。
oozie工作流中是有數據流動的,但是重心是在於工作流的定義。
二者雖然都有相關功能及數據的流動,但是其實用途是不一樣的。
查看幫助
列舉出所有linux上的資料庫
列舉出所有Window上的資料庫
查看資料庫下的所有表
(1)確定mysql服務啟動正常
查詢控制埠和查詢進程來確定,一下兩種辦法可以確認mysql是否在啟動狀態
辦法1:查詢埠
MySQL監控的TCP的3306埠,如果顯示3306,證明MySQL服務在運行中
辦法二:查詢進程
可以看見mysql的進程
沒有指定數據導入到哪個目錄,默認是/user/root/表名
原因:
如果表中有主鍵,m的值可以設置大於1的值;如果沒有主鍵只能將m值設置成為1;或者要將m值大於1,需要使用--split-by指定一個欄位
設置了-m 1 說明只有一個maptask執行數據導入,默認是4個maptask執行導入操作,但是必須指定一個列來作為劃分依據
導入數據到指定目錄
在導入表數據到HDFS使用Sqoop導入工具,我們可以指定目標目錄。使用參數 --target-dir來指定導出目的地,使用參數—delete-target-dir來判斷導出目錄是否存在,如果存在就刪掉
查詢導入
提示:must contain '$CONDITIONS' in WHERE clause。
where id <=1 匹配條件
$CONDITIONS:傳遞作用。
如果 query 後使用的是雙引號,則 $CONDITIONS前必須加轉義符,防止 shell 識別為自己的變數。
--query時不能使用--table一起使用
需要指定--target-dir路徑
導入到hdfs指定目錄並指茄運定局納陸要求
數據導出儲存方式(數據存儲文件格式---( textfil parquet)--as-textfileImports data as plain text (default)--as-parquetfile Imports data to Parquet Files)
導入表數據子集到HDFS
sqoop導入blob數據到hive
對於CLOB,如xml文本,sqoop可以遷移到Hive表,對應欄位存儲為字元類型。
對於BLOB,如jpg圖片,sqoop無法直接遷移到Hive表,只能先遷移到HDFS路徑,然後再使用Hive命令載入到Hive表。遷移到HDFS後BLOB欄位存儲為16進制形式。
2.1.3導入關系表到Hive
第一步:導入需要的jar包
將我們mysql表當中的數據直接導入到hive表中的話,我們需要將hive的一個叫做hive-exec-1.1.0-cdh5.14.0.jar的jar包拷貝到sqoop的lib目錄下
第二步:開始導入
導入關系表到hive並自動創建hive表
們也可以通過命令來將我們的mysql的表直接導入到hive表當中去
通過這個命令,我們可以直接將我們mysql表當中的數據以及表結構一起倒入到hive當中去
--incremental 增量模式。
append id 是獲取一個某一列的某個值。
lastmodified 「2016-12-15 15:47:35」 獲取某個時間後修改的所有數據
-append 附加模式
-merge-key id 合並模式
--check-column 用來指定一些列,可以去指定多個列;通常的是指定主鍵id
--last -value 從哪個值開始增量
==注意:增量導入的時候,一定不能加參數--delete-target-dir 否則會報錯==
第一種增量導入方式(不常用)
1.Append方式
使用場景:有個訂單表,裡面每個訂單有一個唯一標識的自增列id,在關系型資料庫中以主鍵的形式存在。之前已經將id在0-1000之間的編號的訂單導入到HDFS 中;如果在產生新的訂單,此時我們只需指定incremental參數為append,--last-value參數為1000即可,表示只從id大於1000後開始導入。
(1)創建一個MySQL表
(2)創建一個hive表(表結構與mysql一致)
注意:
append 模式不支持寫入到hive表中
2.lastModify方式
此方式要求原有表有time欄位,它能指定一個時間戳,讓sqoop把該時間戳之後的數據導入到HDFS;因為後續訂單可能狀體會變化,變化後time欄位時間戳也會變化,此時sqoop依然會將相同狀態更改後的訂單導入HDFS,當然我們可以只當merge-key參數為order-id,表示將後續新的記錄和原有記錄合並。
# 將時間列大於等於閾值的數據增量導入HDFS
使用 lastmodified 方式導入數據,要指定增量數據是要 --append(追加)還是要 --merge-key(合並)last-value 指定的值是會包含於增量導入的數據中。
第二種增量導入方式(推薦)
==通過where條件選取數據更加精準==
2.1.5從RDBMS到HBase
會報錯
原因:sqoop1.4.6 只支持 HBase1.0.1 之前的版本的自動創建 HBase 表的功能。
解決方案:手動創建 HBase 表
導出前,目標表必須存在與目標資料庫中
默認操作是將文件中的數據使用insert語句插入到表中
數據是在HDFS當中的如下目錄/sqoop/emp,數據內容如下
第一步:創建MySQL表
第二步:執行導出命令
通過export來實現數據的導出,將hdfs的數據導出到mysql當中去
全量導出
增量導出
更新導出
總結:
參數介紹
--update-key 後面也可以接多個關鍵字列名,可以使用逗號隔開,Sqoop將會匹配多個關鍵字後再執行更新操作。
--export-dir 參數配合--table或者--call參數使用,指定了HDFS上需要將數據導入到MySQL中的文件集目錄。
--update-mode updateonly和allowinsert。 默認模式為updateonly,如果指定--update-mode模式為allowinsert,可以將目標資料庫中原來不存在的數據也導入到資料庫表中。即將存在的數據更新,不存在數據插入。
組合測試及說明
1、當指定update-key,且關系型資料庫表存在主鍵時:
A、allowinsert模式時,為更新目標資料庫表存的內容,並且原來不存在的數據也導入到資料庫表;
B、updateonly模式時,為更新目標資料庫表存的內容,並且原來不存在的數據也不導入到資料庫表;
2、當指定update-key,且關系型資料庫表不存在主鍵時:
A、allowinsert模式時,為全部數據追加導入到資料庫表;
B、updateonly模式時,為更新目標資料庫表存的內容,並且原來不存在的數據也不導入到資料庫表;
3、當不指定update-key,且關系型資料庫表存在主鍵時:
A、allowinsert模式時,報主鍵沖突,數據無變化;
B、updateonly模式時,報主鍵沖突,數據無變化;
4、當不指定update-key,且關系型資料庫表不存在主鍵時:
A、allowinsert模式時,為全部數據追加導入到資料庫表;
B、updateonly模式時,為全部數據追加導入到資料庫表;
實際案例:
(1)mysql批量導入hive
使用shell腳本:
筆者目前用sqoop把mysql數據導入到Hive中,最後實現命令行導入,sqoop版本1.4.7,實現如下
最後需要把這個導入搞成job,每天定時去跑,實現數據的自動化增量導入,sqoop支持job的管理,可以把導入創建成job重復去跑,並且它會在metastore中記錄增值,每次執行增量導入之前去查詢
創建job命令如下
創建完job就可以去執行它了
sqoop job --exec users
可以把該指令設為Linux定時任務,或者用Azkaban定時去執行它
hive導出到MySQL時,date類型數據發生變化?
問題原因:時區設置問題,date -R查看伺服器時間,show VARIABLES LIKE "%time_zone"查看Mysql時間,system並不表示中國的標准時間,要將時間設置為東八區
(1):對市面上最流行的兩種調度器,給出以下詳細對比,以供技術選型參考。總體來說,ooize相比azkaban是一個重量級的任務調度系統,功能全面,但配置使用也更復雜。如果可以不在意某些功能的缺失,輕量級調度器azkaban是很不錯的候選對象。
(2):功能:
兩者均可以調度maprece,pig,java,腳本工作流任務;
兩者均可以定時執行工作流任務;
(3):工作流定義:
Azkaban使用Properties文件定義工作流;
Oozie使用XML文件定義工作流;
(4):工作流傳參:
Azkaban支持直接傳參,例如${input};
Oozie支持參數和EL表達式,例如${fs:dirSize(myInputDir)};
(5):定時執行:
Azkaban的定時執行任務是基於時間的;
Oozie的定時執行任務基於時間和輸入數據;
(6):資源管理:
Azkaban有較嚴格的許可權控制,如用戶對工作流進行讀/寫/執行等操作;
Oozie暫無嚴格的許可權控制;
(7):工作流執行:
Azkaban有兩種運行模式,分別是solo server mode(executor server和web server部署在同一台節點)和multi server mode(executor server和web server可以部署在不同節點);
Oozie作為工作流伺服器運行,支持多用戶和多工作流;
(8):工作流管理:
Azkaban支持瀏覽器以及ajax方式操作工作流;
Oozie支持命令行、HTTP REST、Java API、瀏覽器操作工作流;
瀏覽器頁面訪問
http://node03:8081/
使用Oozie時通常整合hue,用戶數據倉庫調度
就是剛才選擇的腳本
腳本里需要的參數,盡量設置為動態自動獲取,如 ${date}
第一步的參數是所有文件和當天日期,後面的只需要日期,最後一步是導出所有結果,相應填入
添加文件和設置相應參數
運行後會有狀態提示頁面,可以看到任務進度
點擊調度任務的頁面情況
修改定時任務名和描述
添加需要定時調度的任務
sm-workflow的參數都是寫死的,沒有設置動態,這里的下拉列表就不會有可選項。
設置參數
將sm-workflow的日期修改為 ${do_date},保存
進入定時計劃sm-dw中,會看到有參數 do_date
填入相應參數,前一天日期
Oozie常用系統常量
當然,也可以通過這樣將參數傳入workflow任務中,代碼或者shell中需要的參數。
如,修改sm-workflow 中的 sqoop_import.sh,添加一個參數 ${num}。
編輯文件(需要登陸Hue的用戶有對HDFS操作的許可權),修改shell中的一個值為參數,保存。
在workflow中,編輯添加參數 ${num} ,或者num=${num} 保存。
進入schele中,可以看到添加的參數,編輯輸入相應參數即可。
Bundle統一管理所有定時調度,階段劃分:Bundle > Schele > workflow