kettle-java程式碼執行hive相關ktr時報錯: database type with plugin id [HIVE2] couldn't be found!
kettle-java程式碼執行hive相關ktr時報錯: database type with plugin id [HIVE2] couldn't be found!
轉
2018年08月13日 16:47:30 lisery1993 閱讀數:305
1.在java專案中執行hive相關的ktr:
-
KettleEnvironment.init();
-
TransMeta transMeta = new TransMeta("C:\\Users\\lixiang\\Desktop\\hivetorizhi.ktr");
-
// 設定執行模式
-
TransExecutionConfiguration config = new TransExecutionConfiguration();
-
config.setExecutingClustered(true);
-
config.setExecutingLocally(false);
-
config.setExecutingRemotely(false);
-
config.setClusterPosting(true);
-
config.setClusterPreparing(true);
-
config.setClusterStarting(true);
-
TransSplitter transSplitter = Trans.executeClustered(transMeta, config);
-
System.out.println(transSplitter.getCarteObjectMap());
-
System.out.println(transSplitter.getMaster());
-
System.out.println(transSplitter.getSlaves()[0]);
-
System.out.println(transSplitter.getSlaves()[1].getStepNames()[0]);
-
}
2.報錯:
-
Exception in thread "main" org.pentaho.di.core.exception.KettleXMLException:
-
錯誤從XML檔案讀取轉換
-
錯誤從XML檔案讀取轉換
-
Unable to load database connection info from XML node
-
Unable to create new database interface
-
database type with plugin id [HIVE2] couldn't be found!
-
at org.pentaho.di.trans.TransMeta.loadXML(TransMeta.java:3402)
-
at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2758)
-
at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2710)
-
at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2687)
-
at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2667)
-
at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2632)
-
at org.pentaho.di.trans.TransMeta.<init>(TransMeta.java:2595)
-
at com.kettle.KettleExamle.getRemoteServer(KettleExamle.java:55)
-
at com.kettle.KettleExamle.main(KettleExamle.java:140)
-
Caused by: org.pentaho.di.core.exception.KettleXMLException:
-
錯誤從XML檔案讀取轉換
-
Unable to load database connection info from XML node
-
Unable to create new database interface
-
database type with plugin id [HIVE2] couldn't be found!
-
at org.pentaho.di.trans.TransMeta.loadXML(TransMeta.java:3384)
-
... 8 more
-
Caused by: org.pentaho.di.core.exception.KettleXMLException:
-
Unable to load database connection info from XML node
-
Unable to create new database interface
-
database type with plugin id [HIVE2] couldn't be found!
-
at org.pentaho.di.core.database.DatabaseMeta.<init>(DatabaseMeta.java:1013)
-
at org.pentaho.di.trans.TransMeta.loadXML(TransMeta.java:2976)
-
... 8 more
-
Caused by: org.pentaho.di.core.exception.KettleXMLException:
-
Unable to create new database interface
-
database type with plugin id [HIVE2] couldn't be found!
-
at org.pentaho.di.core.database.DatabaseMeta.<init>(DatabaseMeta.java:977)
-
... 9 more
-
Caused by: org.pentaho.di.core.exception.KettleDatabaseException:
-
database type with plugin id [HIVE2] couldn't be found!
-
at org.pentaho.di.core.database.DatabaseMeta.findDatabaseInterface(DatabaseMeta.java:584)
-
at org.pentaho.di.core.database.DatabaseMeta.getDatabaseInterface(DatabaseMeta.java:558)
-
at org.pentaho.di.core.database.DatabaseMeta.<init>(DatabaseMeta.java:974)
-
... 9 more
3.報錯分析:kettle程式在讀取database type的過程中讀不到hive2這個型別。
檢視kettle-core-7.1.0.0-12.jar中的kettle-database-types.xml檔案,此檔案定義了database type ,其中沒hive2.。
-
<database-types>
-
<database-type id="AS/400">
-
<description>AS/400</description>
-
<classname>org.pentaho.di.core.database.AS400DatabaseMeta</classname>
-
</database-type>
-
<database-type id="CACHE">
-
<description>Intersystems Cache</description>
-
<classname>org.pentaho.di.core.database.CacheDatabaseMeta</classname>
-
</database-type>
-
<database-type id="DB2">
-
<description>IBM DB2</description>
-
<classname>org.pentaho.di.core.database.DB2DatabaseMeta</classname>
-
</database-type>
-
<database-type id="DBASE">
-
<description>dBase III, IV or 5</description>
-
<classname>org.pentaho.di.core.database.DbaseDatabaseMeta</classname>
-
</database-type>
-
<database-type id="DERBY">
-
<description>Apache Derby</description>
-
<classname>org.pentaho.di.core.database.DerbyDatabaseMeta</classname>
-
</database-type>
-
<database-type id="EXASOL4">
-
<description>Exasol 4</description>
-
<classname>org.pentaho.di.core.database.Exasol4DatabaseMeta</classname>
-
</database-type>
-
<database-type id="EXTENDB">
-
<description>ExtenDB</description>
-
<classname>org.pentaho.di.core.database.ExtenDBDatabaseMeta</classname>
-
</database-type>
-
<database-type id="FIREBIRD">
-
<description>Firebird SQL</description>
-
<classname>org.pentaho.di.core.database.FirebirdDatabaseMeta</classname>
-
</database-type>
-
<database-type id="GENERIC">
-
<description>Generic database</description>
-
<classname>org.pentaho.di.core.database.GenericDatabaseMeta</classname>
-
</database-type>
-
<database-type id="GREENPLUM">
-
<description>Greenplum</description>
-
<classname>org.pentaho.di.core.database.GreenplumDatabaseMeta</classname>
-
</database-type>
-
<database-type id="INFINIDB">
-
<description>Calpont InfiniDB</description>
-
<classname>org.pentaho.di.core.database.InfiniDbDatabaseMeta</classname>
-
</database-type>
-
<database-type id="SQLBASE">
-
<description>Gupta SQL Base</description>
-
<classname>org.pentaho.di.core.database.GuptaDatabaseMeta</classname>
-
</database-type>
-
<database-type id="H2">
-
<description>H2</description>
-
<classname>org.pentaho.di.core.database.H2DatabaseMeta</classname>
-
</database-type>
-
<database-type id="HYPERSONIC">
-
<description>Hypersonic</description>
-
<classname>org.pentaho.di.core.database.HypersonicDatabaseMeta</classname>
-
</database-type>
-
<database-type id="INFOBRIGHT">
-
<description>Infobright</description>
-
<classname>org.pentaho.di.core.database.InfobrightDatabaseMeta</classname>
-
</database-type>
-
<database-type id="INFORMIX">
-
<description>Informix</description>
-
<classname>org.pentaho.di.core.database.InformixDatabaseMeta</classname>
-
</database-type>
-
<database-type id="INGRES">
-
<description>Ingres</description>
-
<classname>org.pentaho.di.core.database.IngresDatabaseMeta</classname>
-
</database-type>
-
<database-type id="VECTORWISE">
-
<description>Ingres VectorWise</description>
-
<classname>org.pentaho.di.core.database.VectorWiseDatabaseMeta</classname>
-
</database-type>
-
<database-type id="INTERBASE">
-
<description>Borland Interbase</description>
-
<classname>org.pentaho.di.core.database.InterbaseDatabaseMeta</classname>
-
</database-type>
-
<database-type id="KINGBASEES">
-
<description>KingbaseES</description>
-
<classname>org.pentaho.di.core.database.KingbaseESDatabaseMeta</classname>
-
</database-type>
-
<database-type id="LucidDB">
-
<description>LucidDB</description>
-
<classname>org.pentaho.di.core.database.LucidDBDatabaseMeta</classname>
-
</database-type>
-
<database-type id="MARIADB">
-
<description>MariaDB</description>
-
<classname>org.pentaho.di.core.database.MariaDBDatabaseMeta</classname>
-
</database-type>
-
<database-type id="MONETDB">
-
<description>MonetDB</description>
-
<classname>org.pentaho.di.core.database.MonetDBDatabaseMeta</classname>
-
</database-type>
-
<database-type id="MSACCESS">
-
<description>MS Access</description>
-
<classname>org.pentaho.di.core.database.MSAccessDatabaseMeta</classname>
-
</database-type>
-
<database-type id="MSSQLNATIVE">
-
<description>MS SQL Server (Native)</description>
-
<classname>org.pentaho.di.core.database.MSSQLServerNativeDatabaseMeta</classname>
-
</database-type>
-
<database-type id="MSSQL">
-
<description>MS SQL Server</description>
-
<classname>org.pentaho.di.core.database.MSSQLServerDatabaseMeta</classname>
-
</database-type>
-
<database-type id="MYSQL">
-
<description>MySQL</description>
-
<classname>org.pentaho.di.core.database.MySQLDatabaseMeta</classname>
-
</database-type>
-
<database-type id="MONDRIAN">
-
<description>Native Mondrian</description>
-
<classname>org.pentaho.di.core.database.MondrianNativeDatabaseMeta</classname>
-
</database-type>
-
<database-type id="NEOVIEW">
-
<description>Neoview</description>
-
<classname>org.pentaho.di.core.database.NeoviewDatabaseMeta</classname>
-
</database-type>
-
<database-type id="NETEZZA">
-
<description>Netezza</description>
-
<classname>org.pentaho.di.core.database.NetezzaDatabaseMeta</classname>
-
</database-type>
-
<database-type id="ORACLE">
-
<description>Oracle</description>
-
<classname>org.pentaho.di.core.database.OracleDatabaseMeta</classname>
-
</database-type>
-
<database-type id="ORACLERDB">
-
<description>Oracle RDB</description>
-
<classname>org.pentaho.di.core.database.OracleRDBDatabaseMeta</classname>
-
</database-type>
-
<database-type id="POSTGRESQL">
-
<description>PostgreSQL</description>
-
<classname>org.pentaho.di.core.database.PostgreSQLDatabaseMeta</classname>
-
</database-type>
-
<database-type id="REDSHIFT">
-
<description>Redshift</description>
-
<classname>org.pentaho.di.core.database.RedshiftDatabaseMeta</classname>
-
</database-type>
-
<database-type id="REMEDY-AR-SYSTEM">
-
<description>Remedy Action Request System</description>
-
<classname>org.pentaho.di.core.database.RemedyActionRequestSystemDatabaseMeta</classname>
-
</database-type>
-
<database-type id="SAPDB">
-
<description>MaxDB (SAP DB)</description>
-
<classname>org.pentaho.di.core.database.SAPDBDatabaseMeta</classname>
-
</database-type>
-
<database-type id="SQLITE">
-
<description>SQLite</description>
-
<classname>org.pentaho.di.core.database.SQLiteDatabaseMeta</classname>
-
</database-type>
-
<database-type id="SYBASE">
-
<description>Sybase</description>
-
<classname>org.pentaho.di.core.database.SybaseDatabaseMeta</classname>
-
</database-type>
-
<database-type id="SYBASEIQ">
-
<description>SybaseIQ</description>
-
<classname>org.pentaho.di.core.database.SybaseIQDatabaseMeta</classname>
-
</database-type>
-
<database-type id="TERADATA">
-
<description>Teradata</description>
-
<classname>org.pentaho.di.core.database.TeradataDatabaseMeta</classname>
-
</database-type>
-
<database-type id="UNIVERSE">
-
<description>UniVerse database</description>
-
<classname>org.pentaho.di.core.database.UniVerseDatabaseMeta</classname>
-
</database-type>
-
<database-type id="VERTICA">
-
<description>Vertica</description>
-
<classname>org.pentaho.di.core.database.VerticaDatabaseMeta</classname>
-
</database-type>
-
<database-type id="VERTICA5">
-
<description>Vertica 5+</description>
-
<classname>org.pentaho.di.core.database.Vertica5DatabaseMeta</classname>
-
</database-type>
-
</database-types>
4.報錯解決:
hive的api的連線方式是通過jdbc連線的。具體思路與postgresql的連線思路相同。因此仿照postgresql的連線方法自定義一個database-type為hive2。因此,在kettle-core-7.1.0.0-12.jar的kettle-database-types.xml檔案中新增
-
<database-type id="HIVE2">
-
<description>HIVE2</description>
-
<classname>org.pentaho.di.core.database.Hive2SQLDatabaseMeta</classname>
-
</database-type>
其中會有對應的實現類org.pentaho.di.core.database.Hive2SQLDatabaseMeta。
仿照postgresql的實現類org.pentaho.di.core.database.PostgreSQLDatabaseMeta來寫即可,只需將連線的url以及jdbc driver名稱更換為hive相關。
將org.pentaho.di.core.database.Hive2SQLDatabaseMeta類編譯為.class檔案放進kettle-core-7.1.0.0-12.jar的org\pentaho\di\core\database路徑下
6.再次執行ktr:
執行成功:結果:
-
{/hivetorizhi (master)=1cc5f5bb-b0c4-4938-96f7-85363f88564d, /hivetorizhi (local:slave1-8081)=09ea3633-f5bd-4e43-9352-62b958255469, /hivetorizhi (local:slave2-8082)=35e00dc2-f570-4f26-8540-156fb84d9524}
-
/hivetorizhi (master)
-
/hivetorizhi (local:slave2-8082)