ETL -- Kettle

ETL – Kettle

1.什么是kettle

Kettle是一款开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。

2. Kettle核心知识点

1.1Kettle工程存储方式
  1. 以XML形式存储

  2. 以资源库方式存储(数据库资源库和文件资源库)

常用的是数据库资源库,数据库资源库可以跨平台使用,在windows上使用可视化工具spoon编写好转换或者是job,存入数据库资源库,linux上直接使用数据库资源库。

1.2 Kettle的两种设计

1.tranformation(转换):完成对数据的基础转换

2.job(工作流):完成对整个工作流的控制

3.区别?

job数步骤流,转换是是数据流;
作业的每一个步骤会等前面的步骤执行完成,后面的步骤才会执行;而转换会先把所有的控件全部启动,然后数据流会从第一个控件开始一条记录一条记录的流向最后一个控件;
1.3 Kettle的组成

在这里插入图片描述

3. kettle的安装

官网地址

https://community.hitachivantara.com/docs/DOC-1009855

下载地址

https://sourceforge.net/projects/pentaho/files/Data Integration/

1.Windows下安装使用

  1. 安装jdk

  2. 下载kettle压缩包,因kettle为绿色软件,解压缩到任意本地路径即可

  3. 双击Spoon.bat,启动图形化界面工具,就可以直接使用了

4. 实践中遇到的问题

1.HDFS作为数据输出的位置,因为用户没有写入没有权限报错?

org.apache.hadoop.security.AccessControlException: Permission denied: user

解决方法1:

在hdfs的配置文件hdfs-site.xml 中加上如下,禁止权限检查,然后重启namenode

<property>
  <name>dfs.permissions.enabled</name>
  <value>false</value>
  <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

2. 使用hive数据源,要开始hiveserver2,但是无法连接?

需要配置hiveserver2的相关信息,在hive-site.xml 中添加

<property>
	<name>hive.server2.thrift.port</name>
	<value>10000</value>
</property>
<property>
	<name>hive.server2.thrift.bind.host</name>
	<value>hadoop03</value>
</property>

在hadoop的core-size.xml中添加如下信息:***是自己当前的用户名

<!-- 如果连接不上10000 -->

<property>     
	<name>hadoop.proxyuser.root.hosts</name>     
	<value>*</value>
 </property> 
<property>     
	<name>hadoop.proxyuser.root.groups</name>    
    <value>*</value> 
</property>
<property>     
	<name>hadoop.proxyuser.***.hosts</name>     
	<value>*</value> 
</property> 
<property>     
	<name>hadoop.proxyuser.***.groups</name>     
	<value>*</value> 
</property>

5. kettle的优化

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步骤)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值