A. kettle有什麼特點
引言
作為資深的DBA同胞你是否在工作中也存在這樣的情況呢?公司要搭建數據平台,首要的工作就是把舊庫的數據導入到新庫中,雖然各種資料庫都提供了導入導出的工具,但是數據需要存儲到各個地方,MongoDB、HBase、Mysql、Oracle等各種各樣的不同資料庫,同步起來就有一些困難了。那麼如何做好兩個資料庫之間、不同類型的資料庫之間的相互遷移轉換呢?
今天小編就常用的資料庫同步、遷移轉換工具進行一個匯總,以便大家在需要的時候,選擇到合適的工具完成自己的工作~
一、SQLyog
SQLyog簡介
SQLyog是業界著名的Webyog公司出品的一款簡潔高效、功能強大的圖形化MySQL資料庫管理工具。使用SQLyog可以快速直觀地讓你從世界的任何角落通過網路來維護遠端的MySQL資料庫。它也是小編工作一直使用的MySQL管理客戶端工具哦。
SQLyog特點
方便快捷的資料庫同步與資料庫結構同步工具;
易用的資料庫、數據表備份與還原功能;
支持導入與導出XML、HTML、CSV等多種格式的數據;
直接運行批量SQL腳本文件,速度極快;
新版本更是增加了強大的數據遷移
二、Navicat
Navicat簡介
Navicat是一套快速、可靠並且價格相當便宜的資料庫管理工具,Navicat提供多達 7 種語言供客戶選擇,被認為是最受歡迎的資料庫前端用戶界面工具。它可以用來對本地或遠程的 MySQL、SQL Server、SQLite、Oracle 及 PostgreSQL 資料庫進行管理及開發。
Navicat支持功能
數據模型
數據傳輸
數據同步
結構同步
導入、導出、備份、還原、報表創建工具及計劃以協助管理數據
三、Ottor
Ottor簡介
Otttor是由阿里巴巴開源的一個數據同步產品,它的最初的目的是為了解決跨國異地整個機房的架構為雙A,兩邊均可寫。開發時間長達7年,並持續到現在。目前阿里巴巴B2B內部的本地/異地機房的同步需求基本全上了Otter。Otter基於資料庫增量日誌解析,支持mysql/oracle資料庫進行同步,在最新的v4.2.13已經支持mysql5.7以及阿里雲提供的RDS資料庫。小編已經在實際項目中使用。
Ottor特點
基於Canal開源產品,獲取資料庫增量日誌數據。 (什麼是Canal,詳情查看https://github.com/alibaba/canal)。
典型管理系統架構,manager(web管理)+node(工作節點),manager運行時推送同步配置到node節點,node節點將同步狀態反饋到manager上。
基於zookeeper,解決分布式狀態調度的,允許多node節點之間協同工作.(otter node依賴於zookeeper進行分布式調度,需要安裝一個zookeeper節點或者集群)。
Ottor運行原理
db : 數據源以及需要同步到的庫
Canal : 用戶獲取資料庫增量日誌,目前主要支持mysql
manager :配置同步規則設置數據源同步源等
zookeeper : 協調node進行協調工作
node : 負責任務處理處理接受到的部分同步工作
四、ESF Database Migration
ESF Database Migration簡介
ESF Database Convert是一款強大的商業資料庫轉換工具。支持常見資料庫之間相互轉換,目前網上能找到「免費」版本,如有不同資料庫相互轉的需求,可以用此工具解決你的問題。
官方地址為:https://www.easyfrom.net/
ESF Database Migration特點
它支持Oracle, MySQL, SQL Server, PostgreSQL, Visual Foxpro, FireBird, InterBase, Access, Excel, Paradox, Lotus, dBase, Text...之間互相轉換
五、DB2DB
DB2DB簡介
DB2DB 是目前經過測試速度最快、最穩定實現多種資料庫之間進行數據轉換的工具。支持 SQL Server、MySQL、SQLite、Access 等多種資料庫類型,通過該工具可以把原來的系統,方便快速地部署在不同的資料庫甚至是雲端資料庫下。在大數據情況下(千萬級別以上),處理速度比國內外同類軟體要高出300%以上。並針對雲端資料庫中使用最多的 MySQL 資料庫進行優化,使得從源資料庫復制到新資料庫時保留更多的數據表屬性設置。這樣大大減少程序員、DBA、實施人員將大型資料庫進行遷移時的等待、測試和調試時間,減少公司為了測試某系統轉換到新資料庫系統時的人力成本。
官方地址:http://www.szmesoft.com/DB2DB
DB2DB支持功能
任意類型資料庫間進行轉換;
資料庫表結構自動同步;
數據表索引自動同步;
數據表欄位默認值自動同步;
支持對二進制欄位數據的同步;
支持各種資料庫中自增型欄位的處理;
支持同步前對數據表進行檢查,避免出現由於資料庫自身限制的原因而導致同步失敗的情況;
支持把同步內容導出為 SQL 文件的功能;
支持自定義選擇需要同步的數據表;
支持將配置保存為方案,以方便日後重新使用;
針對不同的機器配置,可以選擇單線程或多線程同步方式。
通過靈活的方式(可按月/周/天/小時/分鍾)設定程序不限次定時執行同步動作。
六、 Kettle
Kettle簡介
Kettle是一款國外開源的ETL工具,使用突破性的元數據驅動方法提供強大的提取,轉換和載入(ETL)功能。在Windows、Linux、Unix上均可運行,數據抽取高效穩定。Kettle 中文名稱叫水壺,它憑借圖形化,拖放式設計環境以及可擴展、數據集成等特點,越來越成為組織的選擇。
Kettle特點
Kettle這個ETL工具集,它允許你管理來自不同資料庫的數據,通過提供一個圖形化的用戶環境來描述你想做什麼,而不是你想怎麼做。Kettle中有兩種腳本文件,transformation和job,transformation完成針對數據的基礎轉換,job則完成整個工作流的控制。
七、SyncNavigator
SyncNavigator簡介
號稱國內做的最好的資料庫同步軟體,傻瓜式同步資料庫,只需要你設置好來源資料庫和目標資料庫的賬號和密碼,一鍵開啟,後台自動同步,斷點續傳,增量同步,幾乎不佔內存和CPU資源。並且還支持異構資料庫,也可以同步部分表或者部分欄位,都可以進行更為精準的設置操作。
syncnavigator特點
是一款專業的SQLSERVER,MySQL資料庫同步軟體,它為你提供一種簡單智能的方式完成復雜的資料庫數據同步,分發操作。
支持同構資料庫同步,異構資料庫同步,定時同步,增量同步,斷點續傳
完整支持Microsoft SQL Server 2000,2005,2008
支持Mysql4.1,5.0,5.4,5.5
支持大容量資料庫快速同步。
八、DataX3.0
DataX3.0特點
DataX 是阿里巴巴集團內被廣泛使用的離線數據同步工具/平台,實現包括 MySQL、SQL Server、Oracle、PostgreSQL、HDFS、Hive、HBase、OTS、ODPS 等各種異構數據源之間高效的數據同步功能。
DataX3.0特點
DataX本身作為離線數據同步框架,採用Framework + plugin架構構建。將數據源讀取和寫入抽象成為Reader/Writer插件,納入到整個同步框架中。
Reader:Reader 為數據採集模塊,負責採集數據源的數據,將數據發送給Framework。
Writer: Writer為數據寫入模塊,負責不斷向Framework取數據,並將數據寫入到目的端。
Framework:Framework用於連接reader和writer,作為兩者的數據傳輸通道,並處理緩沖,流控,並發,數據轉換等核心技術問題。
支持的資料庫:
經過幾年積累,DataX目前已經有了比較全面的插件體系,主流的RDBMS資料庫、NOSQL、大數據計算系統都已經接入。DataX目前支持數據如下:
大家如有更好的工具推薦,歡迎在留言區補充~
B. KETTLE里能調用WEBSERVICE嗎
您好,很高興能幫助您
使用WSDL.exe命令行工具。
2.使用VS.NET中的Add Web Reference菜單選項你的採納是我前進的動力,
記得好評和採納,答題不易,互相幫助,
C. 我將kettle集成的項目中,發現內存一直釋放不掉,求解決:
同問:目前只發現怎麼把內存加大。但即使加到1440M又如何一樣會出錯
而且我還是將job分開處理的
多次調用
目前來說是內存使用已經最小了
但還是在處理到1/3的時候就溢出了
頭痛的是這個溢出不是100%出現
求解決
這個問題已經解決了
我們實在沒辦法
把kettle源碼改掉了
kettle
4.2版中
kettle-core.jar
包下org.pentaho.di.core.logging.LoggingRegistry
第115行出現邏輯錯誤刪除了為空的數據導致空指針異常
聽說其他版本沒這個問題
你可以試試
D. 開源ETL工具比較,Kettle和Talend,都有什麼優勢和劣勢
Pentaho Data Integration (Kettle)是Pentaho生態系統中默認的ETL工具。通過非常直觀的圖形化編輯器(Spoon),您可以定義以XML格式儲存的流程。在Kettle運行過程中,這些流程會以不同的方法編譯。用到的工具包括命令行工具(Pan),小型伺服器(Carte),資料庫存儲庫(repository)(Kitchen)或者直接使用IDE(Spoon)。
Talend Open Studio是 Talend 開發的ETL工具——Talend 是一家主營數據集成和數據管理解決方案的企業。Talend 採用用戶友好型,綜合性很強的IDE(類似於Pentaho Kettle 的 Spoon)來設計不同的流程。這些流程可以在IDE內部測試並編譯成Java 代碼。您可以隨時查看並編輯生成的Java代碼,同時實現強大的控制力和靈活性。
兩者都非常優秀,都屬於用戶友好型的交叉平台(基於Java的)工具。它們的主要差異在於Kettle 將 ELT 流程編譯為 XML 格式,然而Talend Open Studio 則生成 Java 代碼。
易用性:
Talend:有 GUI 圖形界面但是以 Eclipse 的插件方式提供。
Kettle:有非常容易使用的 GUI,出現問題可以到社區咨詢。
技術支持:
Talend:主要在美國
Kettle:在美國,歐洲(比利時,德國,法國,英國),亞洲(中國,日本,韓國)都可以找到相關技術支持人員。
部署:
Talend:創建 java 或perl 文件,並通過操作系統調度工具來運行
Kettle:可以使用 job 作業方式或操作系統調度,來執行一個轉換文件或作業文件,也可以通過集群的方式在多台機器上部署。
速度:
Talend:需要手工調整,對特定數據源有優化知識。
Kettle:比 Talend 快,不過也需要手工調整,對 Oracle 和 PostGre 等數據源做了優化,同時也取決於轉換任務的設計。
數據質量:
Talend:在 GUI 里有數據質量特性,可以手工寫 SQL 語句。
Kettle:在 GUI 里有數據質量特性,可以手工寫 SQL 語句、java腳本、正則表達式來完成數據清洗。
監控:
Talend:有監控和日誌工具
Kettle:有監控和日誌工具
連接性:
Talend:各種常用資料庫,文件,web service。
Kettle:非常廣泛的資料庫,文件,另外可以通過插件擴展
E. web如何調用kettle來進行數據的採集
如下為Java調用本地的轉換文件,其中String[] params就是參數,示例傳遞了兩個參數:「123」, 「234」,傳遞的參數全部是字元串類型,使用時需要轉換成具體的格式:
[java] view plain
/**
* 調用本地的轉換文件(帶參數)
*
* @Description:
* @param transFileName
* @throws KettleException
* @author 李文鍇
* @since:2012-8-15 下午02:58:54
*/
public static void callNativeTransWithParam(String transFileName) throws KettleException {
// 初始化
EnvUtil.environmentInit();
StepLoader.init();
// 轉換元對象
TransMeta transMeta = new TransMeta(transFileName);
// 轉換
Trans trans = new Trans(transMeta);
String[] params = {"123", "234"}; // 傳遞參數
// 執行轉換
trans.execute(params);
// 等待轉換執行結束
trans.waitUntilFinished();
}
F. 如何將kettle 集成到java應用
在Java應用程序中調用Kettle的Transformation
package com.ggd543.kettle.trans
import org.pentaho.di.core.util.EnvUtil
import org.pentaho.di.core.KettleEnvironment
import org.pentaho.di.trans.{Trans, TransMeta}
/**
*
* User: 劉永健
* Date: 12-3-8
* Time: 下午12:14
* To change this template use File | Settings | File Templates.
*/
object TransDemo extends App {
execTrans(args(0)) // ktr文件的全路徑
def execTrans(fileName: String) {
KettleEnvironment.init()
EnvUtil.environmentInit();
val transMeta = new TransMeta(fileName)
val trans = new Trans(transMeta)
trans.execute(null) // you can pass arguments instead of null
trans.waitUntilFinished();
if (trans.getErrors > 0) {
throw new RuntimeException("There were errors ring transformation execution")
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>kettledemo</groupId>
<artifactId>kettledemo</artifactId>
<version>1.0</version>
<dependencies>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scala-tools.testing</groupId>
<artifactId>specs_2.9.1</artifactId>
<version>1.6.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.9.1</artifactId>
<version>1.6.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-actor</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.typesafe.akka</groupId>
<artifactId>akka-testkit</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>pentaho</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<pentaho.kettle.version>4.2.1.1</pentaho.kettle.version>
</properties>
<dependencies>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-core</artifactId>
<version>${pentaho.kettle.version}</version>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-db</artifactId>
<version>${pentaho.kettle.version}</version>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-engine</artifactId>
<version>${pentaho.kettle.version}</version>
</dependency>
<dependency>
<groupId>pentaho</groupId>
<artifactId>pentaho-hdfs-vfs</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-test</artifactId>
<version>${pentaho.kettle.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>pentaho</id>
<name>Pentaho Repository</name>
<url>http://repo.pentaho.org/artifactory/pentaho/</url>
</repository>
</repositories>
</profile>
<profile>
<id>scala</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<scala.version>2.9.1</scala.version>
</properties>
<repositories>
<repository>
<id>typesafe</id>
<name>Typesafe Repository</name>
<url>http://repo.typesafe.com/typesafe/releases/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-compiler</artifactId>
<version>${scala.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-swing</artifactId>
<version>${scala.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
G. kettle可以提供webservice介面服務嗎
應該是能夠調用第三方的服務,但是不能提供服務給第三方。 不過web服務調用的組件很難用。
H. 怎樣在javaweb中同步kettle同步過來的數據
果你用的是INNODB資料庫,有一個最簡單有效的調整,就是將INI文件裡面的下面參數調整: 原始: innodb_flush_log_at_trx_commit=1 調整為: innodb_flush_log_at_trx_commit=2 具體什麼意思就不解釋了,試了效果好再去找度娘
I. 求教Kettle5.2集群問題
集群允許轉換以及轉換中的步驟在多個伺服器上並發執行。在使用kettle集群時,首先需要定義的是Cluster schema。所謂的Cluster schema就是一系列的子伺服器的集合。在一個集群中,它包含一個主伺服器(Master)和多個從屬伺服器伺服器(slave)。如下圖所示:
子伺服器(Slave servers)允許你在遠程伺服器上執行轉換。建立一個子伺服器需要你在遠程伺服器上建立一個叫做「Carte」的 web 伺服器,該伺服器可以從Spoon(遠程或者集群執行)或者轉換任務中接受輸入。
在以後的描述中,如果我們提到的是子伺服器,則包括集群中的主伺服器和從屬伺服器;否則我們會以主伺服器和從屬伺服器來進行特別指定。
注意: 在集群環境下執行轉化時,你必須有一個子伺服器作為主伺服器(master
server)而其餘所有的子伺服器都作從屬伺服器(slave server)
代理伺服器主機名
設置你要通過代理進行連接的主機名
代理伺服器埠
設置與代理進行連接時所需的埠號
Ignore proxy for hosts: regexp|separated
指定哪些伺服器不需要通過代理來進行連接。該選項支持你使用正則表達式來制定多個伺服器,多個伺服器之間以'
| ' 字元來進行分割
創建cluster schema
定義轉換
定義完了 cluster schema 後,下一步就是定義在集群環境下執行的轉換。我們這里展現的只是一個最簡單的例子,完全是為了演示而用。現實情況中的集群有可能非常復雜。
首先你像平時一樣創建轉換,以hop連接連個兩個步驟。然後你指定第二個步驟將在集群下執行
然後選擇需要使用的集群。轉換如圖一樣顯示在GUI中。
注意 Cx4顯示這個步驟將在集群中運行,而這個集群中有4個從屬伺服器。假設我們將計算結果再次存入到數據表中
這個轉換雖然定義了集群,但是我們同樣可以讓它在單機環境下執行,而且可以得到相同的結果。這意味著你可以使用普通的本地模式來測試它。
執行轉換
要想以集群方式來運行轉換或者作業,首先需要啟動在Cluster schema中定義的主伺服器和從屬伺服器,然後再運行轉換或者作業。
啟動子伺服器
子伺服器其實是一個嵌入式的名為 Carte 的 小web server。要進行集群轉換,首先需要啟動cluster schema中的子伺服器
腳本啟動
kettle 提供了 carte.bat 和 carte.sh ( inux )批處理腳本來啟動子伺服器,這種啟動方式分為兩種
使用主機號和埠號
Carte 127.0.0.1 8080
Carte 192.168.1.221 8081
使用配置文件
Carte /foo/bar/carte-config.xml
Carte url .
J. 用kettle抽取數據後 怎麼生成報表 怎麼發布到tomcat上 需要添加什麼代碼 jsp頁面怎麼設置
kettle工具沒用過。
1.怎麼生成報表,這個不知道。
2.怎麼發布到tomcat上。
我下了一個kettle,網上說這個是純JAVA寫的工具,那麼你要使用一些功能,需要將kettle的一些JAR文件添加到你工程的web-inf/lib目錄下。
3. jsp頁面怎設置。
這個要看生成的報表是什麼了。如果是一個圖片。有兩種方法,一個是將文件生成到伺服器上,在JSP中引用該圖片,另一個就是直接以流的方式寫到頁面上。
如果是類似EXCEL那樣的系統,可識別的文件 ,可以用流以打開方式寫到頁面上。打開顯示文件內容。