zoukankan      html  css  js  c++  java
  • Kettle 入门

    Kettle 入门 - Incanus - OSCHINA - 中文开源技术交流社区

    1 概述

    1.1 什么是 Kettle?

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

    1.2 Kettle 工程存储方式

    • 以 XML 形式存储
    • 以资源库方式存储(数据库资源库和文件资源库)

    1.3 Kettle 的两种设计

    1.4 Kettle 的组成

    1、勺子(Spoon.bat/spoon.sh): 是一个图形化的界面,可以让我们用图形化的方式开发转换和作业,Windows 选择Spoon.bat,Linux 选择 spoon.sh

    2、煎锅(Pan.bat/pan.sh): 利用 Pan 可以用命令行的形式调用 Trans

    3、厨房(Kitchen.bat/kitchen.sh): 利用 Kitchen 可以使用命令行调用 Job

    4、菜单(Carte.bat/ Carte.sh):Carte 是一个轻量级的 Web 容器,用于建立专用、远程的 ETL Server

    1.5 Kettle 的特点

    2 安装部署

    官网地址

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

    下载地址

    [https://sourceforge.net/projects/pentaho/files/Data%20Integration/](https://sourceforge.net/projects/pentaho/files/Data Integration/)

    2.1 Windows 下安装使用

    安装 JDK

    下载 Kettle 压缩包,Kettle 是绿色软件,解压缩到任意本地路径即可

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

    2.2 单机

    运行数据库资源库中的转换

    [djm@hadoop102 data-integration]$./pan.sh -rep=my_repo -user=admin -pass=admin -trans=stu1tostu2 -dir=/
    

    参数说明:

    • rep:资源库名称

    • user:资源库用户名

    • pass:资源库密码

    • trans:要启动的转换名称

    • dir:目录(不要忘了前缀 /)

    运行资源库里的作业:

    [djm@hadoop102 data-integration]$./kitchen.sh -rep=repo1 -user=admin -pass=admin -job=jobDemo1 -logfile=./logs/log.txt -dir=/
    

    参数说明:

    • rep:资源库名

    • user:资源库用户名

    • pass:资源库密码

    • job:job名

    • dir:job路径

    • logfile:日志目录

    2.3 集群安装

    准备三台服务器,hadoop102 作为 Kettle 主服务器,服务器端口号为 8080,hadoop103 和 hadoop104 作为两个子服务器,端口号分别为 8081 和 8082

    上传解压 kettle 的安装包

    进到 /opt/module/data-integration/pwd 目录,修改配置文件

    • 修改主服务器配置文件 carte-config-master-8080.xml
    <slaveserver>
        <name>master</name>
        <hostname>hadoop102</hostname>
        <port>8080</port>
        <master>Y</master>
        <username>cluster</username>
        <password>cluster</password>
    </slaveserver>
    
    • 修改从服务器配置文件carte-config-8081.xml
    <masters>
        <slaveserver>
            <name>master</name>
            <hostname>hadoop102</hostname>
            <port>8080</port>
            <username>cluster</username>
            <password>cluster</password>
            <master>Y</master>
        </slaveserver>
    </masters>
    <report_to_masters>Y</report_to_masters>
    <slaveserver>
        <name>slave1</name>
        <hostname>hadoop103</hostname>
        <port>8081</port>
        <username>cluster</username>
        <password>cluster</password>
        <master>N</master>
    </slaveserver>
    
    • 修改从配置文件carte-config-8082.xml
    <masters>
        <slaveserver>
            <name>master</name>
            <hostname>hadoop102</hostname>
            <port>8080</port>
            <username>cluster</username>
            <password>cluster</password>
            <master>Y</master>
        </slaveserver>
    </masters>
    <report_to_masters>Y</report_to_masters>
    <slaveserver>
        <name>slave2</name>
        <hostname>hadoop104</hostname>
        <port>8082</port>
        <username>cluster</username>
        <password>cluster</password>
        <master>N</master>
    </slaveserver>
    

    分发

    启动相关进程,在 hadoop102,hadoop103,hadoop104 上执行

    [djm@hadoop102 data-integration]$./carte.sh hadoop102 8080
    [djm@hadoop103 data-integration]$./carte.sh hadoop103 8081
    [djm@hadoop104 data-integration]$./carte.sh hadoop104 8082
    

    3 案例

    3.1 案例一:

    把 stu1 的数据按 id 同步到 stu2,stu2 有相同 id 则更新数据

    1)在 mysql 中创建两张表

    mysql> create database kettle;
    mysql> use kettle;
    mysql> create table stu1(id int,name varchar(20),age int);
    mysql> create table stu2(id int,name varchar(20));
    

    2)往两张表中插入数据

    mysql> insert into stu1 values(1001,'zhangsan',20),(1002,'lisi',18), (1003,'wangwu',23);
    mysql> insert into stu2 values(1001,'wukong');
    

    3)在 kettle 中新建转换

    4)分别在输入和输出中拉出表输入和插入/更新

    5)双击表输入对象,填写相关配置,测试是否成功

    6)双击 更新/插入对象,填写相关配置

    7)保存转换,启动运行,去 mysql 表查看结果

    3.2 案例 二:

    使用作业执行上述转换,并且额外在表 stu2 中添加一条数据

    1)新建一个作业

    2)按图示拉取组件

    3)双击 Start 编辑属性

    4)双击转换,选择案例 1 保存的文件

    5)双击 SQL,编辑 SQL 语句

    6)保存执行

    3.3 案例 三:

    将 Hive 表的数据输出到 hdfs

    1)因为涉及到 Hive 和 HBase 的读写,需要修改相关配置文件

    2)创建两张表 dept 和 emp

    CREATE TABLE dept(deptno int, dname string,loc string)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '	';
    CREATE TABLE emp(empno int, ename string, job string, mgr int, 
                     hiredate string, sal double, comm int,deptno int)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '	';
    

    3)导入数据

    load data local inpath '/opt/module/datas/dept.txt' into table dept;
    load data local inpath '/opt/module/datas/emt.txt' into table emp;
    

    4)按下图建立流程图

    5)设置表输入,连接 Hive

    6)设置排序记录属性

    7)设置连接属性

    8)设置字段选择

    9)设置文件输出

    10)保存并查看 HDFS

    3.4 案例 四:

    读取 HDFS 文件并将 sal 大于 1000 的数据保存到 HBase 中

    1)在 HBase 中创建一张表用于存放数据

    [djm@hadoop102 ~]$ /opt/module/hbase-1.3.1/bin/hbase shell
    hbase(main):004:0> create 'people','info'
    

    2)按下图建立流程图

    3)设置文件输入,连接 HDFS

    4)设置过滤记录

    5)设置 HBase output

    6)保存执行

    4 创建资源库

    4.1 数据库资源库

    数据库资源库是将作业和转换相关的信息存储在数据库中,执行的时候直接去数据库读取信息,很容易跨平台使用

    1)点击右上角 connect,选择 Other Resporitory

    2)选择 Database Repository

    3)填好之后,点击finish,会在指定的库中创建很多表,至此数据库资源库创建完成

    1. 连接资源库,默认账号密码为 admin

    2. 将之前做过的转换导入资源库

    4.2 文件资源库

    将作业和转换相关的信息存储在指定的目录中,其实和XML的方式一样创建方式跟创建数据库资源库步骤类似,只是不需要用户密码就可以访问,跨平台使用比较麻烦

    1)点击右上角 connect,选择 Other Resporitory

    2)选择 File Repository

    3)填写信息

    5 优化

    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

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

  • 相关阅读:
    题目3:爬楼梯
    题目1:删除排序数组中的重复数字
    最近目标
    软件工程----个人总结
    软件工程第二次作业——结对编程
    软件工程第一次作业补充
    爬楼梯
    买卖股票的最佳时机
    删除排序数组中的重复数字
    思考题
  • 原文地址:https://www.cnblogs.com/zkwarrior/p/14845260.html
Copyright © 2011-2022 走看看