kettle安装以及运行注意事项
ETL工具kettle使用资料整理
kettle工具安装
- kettle是开源的etl开发工具,软件包中包含了windows,linux,mac三个版本。下载地址:https://sourceforge.net/projects/pentaho/files/latest/download
解压下载的软件包
- 拷贝Hadoop的配置文件到PDI的pdi-ce-7.0.0.0-25\data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\对应版本的目录 包含以下五个文件(可按需增减,大数据的配置文件需要从hadoop集群中获取)hdfs-site.xml core-site.xml mapred-site.xml yarn-site.xml hbase-site.xml
- 如果安装了oracle把oracle安装目录(C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib)下的oracle5.jar和oracle6.jar拷贝到pdi-ce-7.0.0.0-25\data-integration\lib下
- 编辑相关配置文件cd /home/grid/data-integration/plugins/pentaho-big-data-plugin/hadoop-configurations/cdh54/在config.properties文件末尾添加如下一行 authentication.superuser.provider=NO_AUTH
- 启动kettle:运行pdi-ce-7.0.0.0-25\data-integration\Spoon.bat linux下是:Spoon.sh
kettle工具简单使用
kettle工具主要介绍:资源链接配置,Transformation(转换),job(作业),资源库
Transformation主要进行具体的数据抽取过程的编写,以及数据清洗等操作。
job主要将多个Transformation按照特定的顺序和规则进行依赖关系的关联,确保数据流程的正确,以及对Transformation的调度作业,job也可以添加组件实现Transformation的功能。 Transformation和job可以分别单独调度执行的。
资源连接配置:
主要包含数据库连接串配置和hadoop集群环境的配置(下图作为oracle链接配置,右为hadoop集群配置样例)
Transformation组件介绍与使用
数据库连接的组件需要创建数据库连接,hadoop连接也需要单独创建
1.点击数据库连接旁的新建创建数据库连接,就可以连接上数据库。之后将需要查询的表的sql语句填写到下面的表格中,用于数据的检索。还可以将筛选的条件进行参数化,以便后续调度时,参数的动态传入。 之后按住shift键用鼠标拖动,连接两个组件。
2.选中gettablename,如果连接成功的话可以看到hbase中的表名称的列表,之后按照下图的操作步骤,加载oracle表与hbase表的对应关系:
3.之后一个Transformation的开发基本就结束了, 可以点击Transformation窗口的右上角的三角形保存和运行改Transformation,测试是否可行。
hbase组件内部字段的对应,以及map对应规则的确定,以及rowkey,列族挑选等
job组件介绍与使用
job组件和Transformation组件操作基本相似,job操作主要包含Transformation以及job之间的依赖调度。如下图:
job作业必须以一个start组件开始。
后面添加Transformation或者job来启动作业。
资源库使用
数据库的这些资源链接可以使用资源库进行统一的管理
下面是资源库链接介绍:
资源库分为文件资源库和数据库资源库
文件资源库的方式会在用户的根目录下产生一个隐藏文件夹.pentaho,里面存放hadoop集群的配置等。并会在资源库自定的目录下产生对应的数据库连接对应的.kdb格式的文件
- 创建资源库介绍:
实际使用测试中发现:如果使用file Repository的话,用命令行调度Pan/Kitchen的时候,没有明显的报错但是数据无法写入到hdfs或者hbase中。具体原因还没有查明
使用Database Repsitory的话,需要指定数据库连接,以及用户名和密码,默认设置是admin/admin 之后在调度运行的时候直接指定对应的资源库 用户名密码以及trans/job名称就可以了运行了。
*注意事项:
1.从windows部署到linux的时候,由于开发工作是在windows图形界面开发的,例如资源库的配置信息,以及其他一些配置信息:例如hbase mapping表的信息都需要调入到linux中,作业才能够运行正确。
2.在windows下配置的hadoop集群的版本信息也需要在linux中的:F:\kettle\data-integration\plugins\pentaho-big-data-plugin\plugin.properties 中把active.hadoop.configuration=cdh58 改为对应的windows下配置的版本,否则会报错:org.pentaho.di.core.hadoop.NoShimSpecifiedException: Active configuration no...active.hadoop.configuration信息。
问题汇总
问题0:
kattle Driver class'oracle.jdbc.driver.OracleDriver' could not be found
解决办法:
如果安装了Oracle数据库软件,$ORACLE_HOME\jdbc\lib下的ojdbc5.jar ojdbc6.jar包copy到kettle安装目录\lib 下面。重新运行spoon程序。
创建数据库连接: 数据库名:为数据库连接串@后的部分。
表空间:可以查看需要同步的表的建表语句。
用户名/密码需要是该表空间的用户
kettle配置oracle数据库连接:
问题1:
个人安装kettle遇到的问题:
连接hadoop集群:
当 User Home Directory Access报错,需要在hadoop 的 hdfs上创建
kettle 系统当前用户名的文件夹, xshell登录到 Hadoop master 上,执行
hadoop fs -mkdir /user/你本机的用户名 如我的就是 hadoop ,所以执行
hadoop fs -mkdir /user/hadoop
右侧hdfs的用户名密码是登陆hadoop所在服务器的linux的用户名密码:root/guanghua
下面的oozie这些地址和端口号可以在cdh中进入到对应的web管理页面查看到url地址,及对应的端口号
问题2:
连接hbase的时候:选择完配置文件之后点击get table name会弹出下面的错误,uknown host。
解决方案:在选择hbase-site.xml的文件目录中添加:file:/// 即可或者/ 或者\都可以
linux环境下:不需要添加file:///
连接hbase以及创建hbase 传输过程
我用的是Kettle7.0
第一步:
准备好数据:数据可以是文本,表...
第二步:配置Hadoop
点击测试:
通过即可。
第三步:配置 HBase Output
第一步:
配置好的hadoop导入
第二步:
图中第三步:Mappingname 名字可以随便起。
图中低五步:把'key'的值改为Y 去掉'Columnfamily' 和 'Column name' 的值 ,'type'改为String
第三步:
在重新打开获取图中数据,点击确定即可。
第四步:
完成。
问题3:
kettle连接hbase大数据环境的时候,在图形界面数据可以写入到hbase以及hdfs,但是在用pan/Kitchen命令运行的时候,就会出现,hbase数据无法写入也不报明显错误。写入hdfs时日志打出路径为:file:F/kettle/data_file?hdfs:hadoop1:8020/user/dalong/data的本地路径下:
解答:经测试,发现使用文件资源库,以及不使用资源库的时候会出现这种情况,具体原因还不清楚。
将资源库改为数据库资源库的时候,数据就写入正常没有问题。
pan.bat -rep=ywgl_Repository -user=admin -pass=admin-trans=orc_to_hbase_test -level=Rowlevel >F:\kettle\Kettle_workspace\hbase_Repository\test2.log pause;
Kitchen.bat -rep=hbase_Repository -user=admin-pass=admin -job=orc2hbase_ywgl_task_info -level=Rowlevel >F:\kettle\Kettle_workspace\hbase_Repository\test2.log pause;
问题4:
2017/09/11 10:37:40 - orc_to_hbase_test - 步骤 [表输入 2.0] 初始化不完全,有缺陷.
2017/09/11 10:37:40 - orc_to_hbase_test - 步骤 [Hadoop File Output.0] 初始化不完全,有缺陷.
解答:
这种log出现并不影响job的运行,
但是具体出现的原因还没有找到。