Kettle是一款开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。
以XML形式存储
以资源库方式存储(数据库资源库和文件资源库)
常用的是数据库资源库,数据库资源库可以跨平台使用,在windows上使用可视化工具spoon编写好转换或者是job,存入数据库资源库,linux上直接使用数据库资源库。
1.tranformation(转换):完成对数据的基础转换
2.job(工作流):完成对整个工作流的控制
3.区别?
job数步骤流,转换是是数据流;
作业的每一个步骤会等前面的步骤执行完成,后面的步骤才会执行;而转换会先把所有的控件全部启动,然后数据流会从第一个控件开始一条记录一条记录的流向最后一个控件;
官网地址
https://community.hitachivantara.com/docs/DOC-1009855
下载地址
https://sourceforge.net/projects/pentaho/files/Data Integration/
1.Windows下安装使用
安装jdk
下载kettle压缩包,因kettle为绿色软件,解压缩到任意本地路径即可
双击Spoon.bat,启动图形化界面工具,就可以直接使用了
org.apache.hadoop.security.AccessControlException: Permission denied: user
解决方法1:
在hdfs的配置文件hdfs-site.xml 中加上如下,禁止权限检查,然后重启namenode
<property>
<name>dfs.permissions.enabledname>
<value>falsevalue>
<description>
If "true", enable permission checking in HDFS.
If "false", permission checking is turned off,
but all other behavior is unchanged.
Switching from one parameter value to the other does not change the mode,
owner or group of files or directories.
description>
property>
解决方法2:
在Spoon.bat中第119行添加参数
"-DHADOOP_USER_NAME=***" "-Dfile.encoding=UTF-8"
这里的***是你自己的用户名,然后重新启动kettle
需要配置hiveserver2的相关信息,在hive-site.xml 中添加
<property>
<name>hive.server2.thrift.portname>
<value>10000value>
property>
<property>
<name>hive.server2.thrift.bind.hostname>
<value>hadoop03value>
property>
在hadoop的core-size.xml中添加如下信息:***是自己当前的用户名
<property>
<name>hadoop.proxyuser.root.hostsname>
<value>*value>
property>
<property>
<name>hadoop.proxyuser.root.groupsname>
<value>*value>
property>
<property>
<name>hadoop.proxyuser.***.hostsname>
<value>*value>
property>
<property>
<name>hadoop.proxyuser.***.groupsname>
<value>*value>
property>
1、调整JVM大小进行性能优化,修改Kettle根目录下的Spoon脚本。
参数参考:
-Xmx2048m:设置JVM最大可用内存为2048M。
-Xms1024m:设置JVM促使内存为1024m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn2g:设置年轻代大小为2G。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
2、 调整提交(Commit)记录数大小进行优化,Kettle默认Commit数量为:1000,可以根据数据量大小来设置Commitsize:1000~50000
3、尽量使用数据库连接池;
4、尽量提高批处理的commit size;
5、尽量使用缓存,缓存尽量大一些(主要是文本文件和数据流);
6、Kettle是Java做的,尽量用大一点的内存参数启动Kettle;
7、可以使用sql来做的一些操作尽量用sql;
Group , merge , stream lookup,split field这些操作都是比较慢的,想办法避免他们.,能用sql就用sql;
8、插入大量数据的时候尽量把索引删掉;
9、尽量避免使用update , delete操作,尤其是update,如果可以把update变成先delete, 后insert;
10、能使用truncate table的时候,就不要使用deleteall row这种类似sql合理的分区,如果删除操作是基于某一个分区的,就不要使用delete row这种方式(不管是deletesql还是delete步骤),直接把分区drop掉,再重新创建;
11、尽量缩小输入的数据集的大小(增量更新也是为了这个目的);
12、尽量使用数据库原生的方式装载文本文件(Oracle的sqlloader, mysql的bulk loader步骤)。