Kettle构建Hadoop ETL实践(二):安装与配置

目录html

1、安装前端

1. 安装环境java

(1)选择操做系统linux

(2)安装规划程序员

2. 安装前准备sql

(1)安装Java环境shell

(2)安装GNOME Desktop图形界面数据库

(3)安装配置VNC远程控制express

(4)在客户端安装vncviewerapache

3. 安装运行Kettle

(1)下载和解压

(2)运行Kettle程序

(3)建立Spoon快捷启动方式

2、配置

1. 配置文件和.kettle目录

(1).spoonrc

(2)jdbc.properties

(3)kettle.properties

(4)kettle.pwd

(5)repositories.xml

(6)shared.xml

2. 用于启动Kettle程序的shell脚本

(1)shell脚本的结构

(2)classpath里增长一个jar包

(3)改变虚拟机堆大小

(4)修改图形工具包环境

3. 管理JDBC驱动

3、小结


        在前一篇里介绍了ETL和Kettle的基本概念,内容偏重于理论。从本篇开始,让咱们进入实践阶段。工欲善其事,必先利其器。既然咱们要用Kettle构建Hadoop ETL应用,那么先要作的就是安装Kettle。本篇首先阐述选择安装环境所要考虑的因素,以后详细介绍Kettle的安装过程,最后说明Kettle配置文件、启动脚本和JDBC驱动管理。本专题后面的实践部分都是基于这里所安装的Kettle之上完成的。

1、安装

1. 安装环境

(1)选择操做系统

        有些熟悉Kettle的用户必定会以为,Kettle的安装过程至关简单,基本上就是开箱即用,而这里所谓的“开箱”也仅仅是执行一个解压缩命令而已,根本没有必要单开一篇文章进行说明。稍安勿躁,且听我慢慢道来。这里要讨论的是在Linux系统而不是Windows上安装Kettle,缘由有以下两点:

  • 用户和权限问题

        Windows上运行的Kettle在链接Hadoop集群时,须要在HDFS上创建Windows登陆用户的主目录,并进行权限配置。不然在测试Hadoop集群链接时,User Home Directory Access和Verify User Home Permissions会报错。hdfs是启动其进程所使用的用户,而Kettle始终用本机用户链接Hadoop集群。一般Linux和Windows系统上缺省建立的用户名是不一样的,所以须要在HDFS上建立Windows用户目录:

hdfs dfs -mkdir /user/Windows用户名

        缺省Hadoop并不进行用户验证,这个工做交由操做系统代劳。为解决Verify User Home Permissions问题,须要在config.properties文件(该文件在Kettle安装目录下的hadoop插件目录下,例如D:\data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\cdh61)中添加配置:

authentication.superuser.provider=NO_AUTH

        最后重启Kettle使配置生效。

  • Kettle中执行MapReduce报错

        Windows上的Kettle在执行Pentaho MapReduce做业项时会报相似下面的错误:

ERROR (version 8.3.0.0-371, build 8.3.0.0-371 from 2019-06-11 11.09.08 by buildguy) : org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
ERROR (version 8.3.0.0-371, build 8.3.0.0-371 from 2019-06-11 11.09.08 by buildguy) : java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
    at org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Native Method)
    at org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:606)
    at org.apache.hadoop.fs.FileUtil.canRead(FileUtil.java:1202)
    at org.apache.hadoop.fs.FileUtil.list(FileUtil.java:1407)
    at org.apache.hadoop.fs.RawLocalFileSystem.listStatus(RawLocalFileSystem.java:468)
    at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1853)
    at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1895)
    at org.apache.hadoop.fs.ChecksumFileSystem.listStatus(ChecksumFileSystem.java:678)
    at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:395)
    at org.apache.hadoop.fs.FileUtil.copy(FileUtil.java:379)
    at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:2354)
    at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:2320)
    at org.apache.hadoop.fs.FileSystem.copyFromLocalFile(FileSystem.java:2283)
    at org.pentaho.hadoop.shim.common.DistributedCacheUtilImpl.stageForCache(DistributedCacheUtilImpl.java:443)
    at org.pentaho.hadoop.shim.common.DistributedCacheUtilImpl.stageForCache(DistributedCacheUtilImpl.java:713)
    at org.pentaho.big.data.impl.shim.mapreduce.PentahoMapReduceJobBuilderImpl.stageMetaStoreForHadoop(PentahoMapReduceJobBuilderImpl.java:587)
    at org.pentaho.big.data.impl.shim.mapreduce.PentahoMapReduceJobBuilderImpl.submit(PentahoMapReduceJobBuilderImpl.java:534)
    at org.pentaho.big.data.impl.shim.mapreduce.MapReduceJobBuilderImpl.submit(MapReduceJobBuilderImpl.java:277)
    at org.pentaho.big.data.kettle.plugins.mapreduce.entry.pmr.JobEntryHadoopTransJobExecutor.execute(JobEntryHadoopTransJobExecutor.java:780)
    at org.pentaho.di.job.Job.execute(Job.java:686)
    at org.pentaho.di.job.Job.execute(Job.java:827)
    at org.pentaho.di.job.Job.execute(Job.java:498)
    at org.pentaho.di.job.Job.run(Job.java:384)

        若是说上一个问题能经过修改配置的方式来解决仍是可接受的,那么这个问题则须要修改Hadoop中NativeIO类的源代码并从新编译来解决。该方案对于非程序员用户来讲确是强人所难了。

        Linux上运行的Kettle不存在上述两个问题。咱们只要使用Linux系统中缺省建立的用户(如root)运行Kettle,就能成功访问Hadoop集群,由于Hadoop集群一样是安装部署在Linux系统之上。并且Linux上的Kettle执行Pentaho MapReduce做业项也不会报NativeIO错误。这就是咱们选择Linux做为Kettle安装平台的缘由。

        下面就要解决肯定Linux平台所引入的一系列相关问题:

  • 为了使用Kettle GUI,须要安装Linux图形环境,如GNOME。
  • 为了远程访问Linux图形环境,须要安装远程控制软件,如VNC Server和VNC Client。
  • 为了使用中文输入和显示,须要安装相应的输入法,如智能拼音。
  • 建立Kettle桌面快捷启动方式。

(2)安装规划

        这里只是演示Kettle安装的过程,不做为生产环境使用,所以创建四台Linux虚机,每台硬盘50G,内存8G。IP与主机名以下:
172.16.1.101 hdp1
172.16.1.102 hdp2
172.16.1.103 hdp3
172.16.1.104 hdp4



  • 主机规划:以上四台主机构成Kettle集群。本篇只说明在172.16.1.101一台主机上的安装过程,其它三台主机上的Kettle安装过程彻底相同。Kettle集群的配置和使用,详见本专题的(十一)Kettle集群与数据分片。
  • 操做系统:CentOS Linux release 7.2.1511 (Core)
  • Java版本:openjdk version 1.8.0_262
  • Kettle版本:GA Release 8.3.0.0-371

2. 安装前准备

(1)安装Java环境

        Kettle是一个Java程序,须要Java运行时环境(Java虚拟机/JVM和一组运行时类)。Kettle与Java的版本要匹配,本例中的Kettle 8.3须要Java 1.8的支持。若是只是运行Kettle,只须要安装Java Runtime Environment(JRE) 1.8。若是要从源代码编译Kettle或本身开发Kettle插件,须要安装Java Development Kit(JDK) 1.8。

  • 手工安装Java

        从https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html下载Linux x64 RPM Package对应的RPM包。下载后直接使用rpm命令进行安装,例如:

rpm -ivh jdk-8u261-linux-x64.rpm
  • 使用yum

        yum全称为 Yellowdog Updater Modified,是一个在Fedora、RedHat以及CentOS中流行的shell前端软件包管理器。它基于RPM包管理,可以从指定的服务器(在资源库文件中定义)自动下载安装RPM包,而且能够自动处理依赖性关系,一次安装全部依赖的软件包,无须繁琐地一次次下载安装。yum提供了查找、安装、删除某一个、一组甚至所有软件包的命令,并且命令简洁好记。

        在CentOS下使用yum安装Java很是简单:

# 查找yum资源库中的java包
yum search java | grep -i --color JDK
# 安装Java 1.8
yum install -y java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 
# 验证安装
java -version

        若是在本地资源库中没有须要安装的软件包,能够从网上下载公开的yum源。例如将http://mirrors.163.com/.help/CentOS7-Base-163.repo文件下载到本地的/etc/yum.repos.d/目录下,而后再执行yum命令便可。

(2)安装GNOME Desktop图形界面

        这里选择GNOME Desktop做为运行Kettle界面的图形环境。GNOME Desktop是主流Linux发行版本的默认桌面,主张简约易用,够用便可。GNOME的全称为GNU网络对象模型环境(The GNU Network Object Model Environment),基于GTK+图形库,使用C语言开发,官方网站是gnome.org。

1. 安装GNOME Desktop

# 列出可安装的桌面环境
yum grouplist

        此命令显示了系统安装过程当中没有被安装的软件组,下面是本例中该命令的部分输出:

...
Available Environment Groups:
   ...
   GNOME Desktop
   KDE Plasma Workspaces
   ...
Available Groups:
   ...
   Graphical Administration Tools
   ...

        从中咱们能够看到,Centos 7中有两大桌面环境安装组GNOME Desktop和KDE Plasma Workspaces。执行下面的命令安装GNOME Desktop。

yum groupinstall "GNOME Desktop" -y

        yum groupinstall命令安装一组软件包,这组软件包包含了不少单个软件,以及各个软件之间的依赖关系。-y参数表示安装过程当中省略确认,避免交互式输入。当安装成功后,能够再次执行yum grouplist命令,从输出中能够看到已经安装的GNOME Desktop。

...
Installed Environment Groups:
   GNOME Desktop
...

2. 配置中文支持
        locale -a命令列出当前系统支持的全部语言包。若是没有zh_CN,则须要先安装一个中文语言包,例如:

yum install kde-l10n-Chinese

        若是系统包含中文语言包,但在安装CentOS 7时没有选择中文,安装完成后须要再使用中文,能够按照下面的步骤进行操做。

# 安装系统语言配置工具
yum install -y system-config-language
# 执行语言配置
system-config-language
# 选择“chinese (P.R. of China) - 中文(简体)”。

        肯定后,会自动将系统语言设置成zh_CN.UTF-8。也能够执行下面的命令修改系统默认语言为中文:

localectl set-locale LANG=zh_CN.UTF-8

        能够在终端输入locale命令查看更改后的系统语言变量,输出以下:

LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=

而后执行下面的命令安装中文拼音输入法:

yum install -y ibus ibus-libpinyin

最后重启系统:

reboot

(3)安装配置VNC远程控制

        为了可以在远程终端中使用GNOME桌面环境,须要安装配置VNC软件。VNC(Virtual Network Console)是虚拟网络控制台的缩写。它是一款优秀的远程控制工具,是基于UNIX和Linux操做系统的免费开源软件,远程控制能力强大,高效实用。在Linux中,VNC 包括四个命令:vncserver、vncviewer、vncpasswd和vncconnect。大多数状况下用户只须要其中的两个命令,即vncserver和vncviewer。

        VNC服务器工具备不少,例如tightvnc、vnc4server、tigervnc、realvnc等。这里选择tigervnc做为VNC服务器。tigervnc包含服务器控制端用于实现vnc服务,其中包含一个名为X0VNC的特殊服务,该服务运行后能够把当前桌面会话远程传输给远端客户端让其操控,而不是传统VNC的虚拟会话桌面模式。执行如下步骤安装配置tigervnc服务器。

1. 关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

2. 关闭seLinux

# 查看状态
sestatus
# 临时关闭
setenforce 0
# 永久关闭
vim /etc/sysconfig/selinux
SELINUX=disabled

3. 安装tigervnc服务器

yum install -y tigervnc-server

4. 启动vncserver

# 启动
vncserver

        命令输出以下:

You will require a password to access your desktops.

Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used

New 'hdp1:1 (root)' desktop is hdp1:1

Creating default startup script /root/.vnc/xstartup
Creating default config /root/.vnc/config
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/hdp1:1.log

        首次启动vncserver时提示输入设置远程链接密码,能够不一样于本地密码,该密码之后可使用vncpasswd命令重置。注意当出现 Would you like to enter a view-only password (y/n)? 提示时输入n。

# 查看vncserver进程列表
vncserver -list

        命令输出以下,显示当前启动了一个VNC服务器进程:

TigerVNC server sessions:

X DISPLAY #    PROCESS ID
:1        2431

5. 设置自动启动的vncserver服务

# 复制缺省配置文件
cp /lib/systemd/system/vncserver@.service /lib/systemd/system/vncserver@:1.service
# 修改配置文件/lib/systemd/system/vncserver@:1.service,内容以下(主要是修改root用户):
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=forking
User=root

# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i"
PIDFile=/root/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

[Install]
WantedBy=multi-user.target

# 从新加载服务配置文件
systemctl daemon-reload

# 设置开机启动
systemctl enable vncserver@:1.service

# 重启系统
reboot

(4)在客户端安装vncviewer

        从https://www.realvnc.com/en/connect/download/viewer/下载对应操做系统的安装文件,这里为VNC-Viewer-6.19.1115-Windows.exe。直接运行该文件进行安装,安装目录为缺省。成功安装后运行 C:\Program Files\RealVNC\VNC Viewer\vncviewer.exe 文件打开VNC Viewer,点击右键菜单中的“New connection...”,在VNC Server中输入VNC服务器地址,本例为172.16.1.101:1,如图2-1所示,而后点击OK按钮保存。冒号后面的1指定一个TigerVNC server sessions号。

图2-1 在VNC Viewer添加新链接

        双击刚才创建的链接,输入并保存初次启动VNC服务器时设置(或者由vncpasswd所设置)的密码,如图2-2所示。

图2-2 输入并保存VNC链接密码

        在第一次使用GNOME Desktop时,须要进行一些初始化设置,如配置语言、时区和输入法等。由于咱们已经设置了系统的缺省语言为中文,而且安装了拼音输入法,因此缺省选择就是中文。配置好打开的GNOME桌面如图2-3所示,界面显示为中文,并支持中文输入。

图2-3 支持中文的GNOME桌面

        也能够随时在GNOME桌面环境中设置语言和时区相关选项,例如执行如下步骤添加中文拼音输入法。

1. 选择菜单“应用程序” -> “系统工具” -> “设置” -> “Region & Language”,打开如图2-4所示的窗口。

图2-4 设置语言和时区

 

2. 在图2-4中点击“输入源”下的“+”按钮,在弹出窗口中选择“汉语(中国)” -> “汉语(Intelligent Pinyin)”,如图2-5所示。

图2-5 添加中文拼音输入法

        点击图2-5中的“添加”按钮就可添加输入法。缺省使用“Super+空格”组合键切换输入法,Super键就是普通键盘上的Win键。下面还有一步操做是将ibus拼音输入法设置为默认输入方法。若是缺乏了这一步,每次重启系统后ibus拼音输入法就不能正常工做。设置方法为,在GNOME桌面点击右键菜单中的“打开终端”,在终端窗口中执行如下命令:

# 安装输入法选择器
yum install im-chooser
# 设置默认输入法
imsettings-switch ibus

        注意必定要在图形界面下的终端窗口而不是字符界面控制台执行命令,如图2-6所示。

图2-6 设置默认输入法

        至此,Kettle安装前的准备工做已经完成,Java环境、图形界面、中文支持、远程控制都已配置好。

3. 安装运行Kettle

        Kettle做为一个独立的压缩包发布,能够从sourceforge.net上下载。做为Pentaho BI项目的一部分,能够在https://sourceforge.net/projects/pentaho/files目录下找到Kettle的全部版本。

(1)下载和解压

        在sourceforge网站上,每一个版本都对应一个独立的目录,目录名就是版本号。例如本专题中使用的是8.3版本,所属目录为Pentaho 8.3。在该目录下包含 shims、server、plugins、other、client-tools五个子目录,Kettle在client-tools目录下。sourceforge版本路径下保存的归档文件是zip格式,还有与.zip文件对应的.sum文件,用于校验zip文件的完整性,通常只须要下载.zip文件。归档文件的命名格式依照pdi-ce-version-extension格式,pdi表明Pentaho Data Integration,ce表明Community Edition。Kettle是跨平台的,不管什么操做系统都是同一下载文件。

        能够直接从浏览器中下载,或者使用终端命令行工具(如wget)下载。本例执行下面的命令将Kettle 8.3版本zip文件下载到本地,而后进行解压缩:

# 下载安装包
wget https://sourceforge.net/projects/pentaho/files/Pentaho%208.3/client-tools/pdi-ce-8.3.0.0-371.zip
 
# 解压缩,会建立data-integration目录
unzip pdi-ce-8.3.0.0-371.zip

# 修改目录名使之包含版本号
mv data-integration pdi-ce-8.3.0.0-371

        Kettle不关心被解压缩到哪一个目录下,因此能够根据实际状况来解压缩。例如在Windows开发环境下,通常是在Program Files目录下建立kettle或pentaho目录,而后解压缩到这个目录下。在类UNIX系统下,若是用于开发目的,通常在home目录下建立一个目录。若是用于生产环境,通常建立/opt/kettle或/opt/pentaho目录。

        解压缩归档文件会产生一个data-integration目录。最好从新命名这个目录,以反映出原来的版本号。一个比较好的方法就是简单地命名为压缩文件的文件名,但不包括扩展名。咱们使用Kettle根目录一词来表示这个安装目录。

        重命名目录使之包含版本号,可让在这个环境下工做的人一眼就看出目录下的Kettle是哪一个版本。这也便于在一个目录下同时维护多个Kettle版本,当但愿测试新版本或进行Kettle版本升级时就能够看出这种命名方式的优势。

(2)运行Kettle程序

        全部Kettle程序均可以经过运行Kettle根目录下的shell脚原本启动。在运行shell脚本上Windows和类UNIX系统基本相同。运行Kettle的shell脚本要求当前的工做目录就是Kettle根目录。这意味着在写本身的shell脚本时,调用Kettle程序以前,须要先切换工做路径到Kettle根目录下。

        解压缩以后,Windows用户经过执行Kettle根目录下的bat文件启动Kettle程序。例如,要设计转换或做业能够双击Spoon.bat来启动Spoon。要执行做业能够在命令行下运行Kitchen.bat,或在本身的脚本里调用这个bat文件。

        对于类UNIX系统来讲,能够执行相应的.sh脚原本运行Kettle,但要在运行以前设置.sh文件可执行。例如,在Kettle根目录下能够经过执行下面的命令让全部.sh文件可执行:

chmod 755 *.sh

        执行完该命令后就能够运行全部脚本了,固然前提是Kettle根目录是当前工做目录。本例在GNOME桌面打开一个终端窗口执行下面的命令,便可启动spoon界面。

cd pdi-ce-8.3.0.0-371/
./spoon.sh 

(3)建立Spoon快捷启动方式

        由于常常要使用Spoon,可能但愿在任务栏或桌面上建立一个Spoon的快捷方式。Windows用户能够打开资源管理器到Kettle根目录,而后选中Spoon.bat,在右键弹出菜单中选择“发送到”->“桌面快捷方式”。这样就在桌面上建立了一个快捷方式(.lnk)文件用于启动Spoon。

        右键单击新建立的快捷文件,在弹出菜单中选择“属性”。打开的属性对话框里显示了“快捷方式”标签。在这个标签下,“目标”和“起始位置”输入框已经被正确填写,不用编辑这些属性。“更改图标”按钮能够为这个快捷方式选中一个容易识别的图标,通常选择Kettle根目录下的spoon.ico文件。

        在GNOME桌面上也能够建立应用的快捷启动方式,但方法比Windows稍微复杂一些。GNOME系统中的桌面快捷方式文件称为 Desktop Entry 文件,以".desktop"为后缀。每一个应用程序快捷方式都和一个 Desktop Entry 文件相对应。本例中咱们但愿使用root用户执行Spoon程序,所以建立/root/桌面/Spoon.desktop文件,内容以下:

[Desktop Entry]
Encoding=UTF-8
Name=spoon
Exec=sh /root/pdi-ce-8.3.0.0-371/spoon.sh
Terminal=false
Type=Application

        Desktop Entry 文件一般以字符串"[Desktop Entry]"开始。文件的内容由若干键值对条目组成。Desktop Entry 文件定义了一系列标准关键字。标准关键字分为必选和可选两种:必选标准关键字必须在 .desktop 文件中被定义;而可选关键字则没必要。如下是对本例中所使用关键字的简单描述。

  • Encoding[可选]:指定了当前 Desktop Entry 文件中特定字符串所使用的编码方式。
  • Name[必选]:指定了桌面快捷方式显示的名称。
  • Exec[可选]:关键字“Exec”只有在“Type”类型是“Application”时才有意义。“Exec”的值定义了启动指定应用程序所要执行的命令,在此命令是能够带参数的。
  • Terminal[可选]:关键字“Terminal”的值是布尔值(true或false),而且该关键字只有在“Type”类型是“Application”时才有意义。其值指出了相关应用程序(即关键字“Exec”的值)是否在终端窗口中运行。
  • Type[必选]:关键字“Type”定义了Desktop Entry文件的类型。常见的值是“Application”和“Link”。“Application”表示当前Desktop Entry文件指向了一个应用程序,而“Link”表示当前Desktop Entry文件指向了一个URL(Uniform Resource Locator)。

        关于Desktop Entry的完整说明参见https://developer.gnome.org/desktop-entry-spec/

        建立/root/桌面/Spoon.desktop文件后,在GNOME桌面按F5刷新桌面,会看到桌面上出现了一个名为“Spoon.desktop”的图标,如图2-7(a)所示。

图2-7 GNOME桌面快捷方式

 

        双击该图标,首次执行会出现如图2-8所示的警告信息。

图2-8 未信任的应用程序启动器提示

 

        点击图2-8中的“Trust and Launch”按钮,信任并启动spoon程序,以后再运行桌面快捷方式将不会弹出未信任应用的警告。同时桌面上对应的图标和名称也会变为如图2-7(b)所示。

        与Windows快捷方式相似,点击桌面快捷方式图标右键,在弹出菜单中选择“属性”,点击对话框中的图标,能够选择更换自定义图标。例如选择了spoon.ico做为图标后如图2-7(c)所示。

        至此Kettle在Linux上安装的全部技术细节都已完成。

2、配置

        Kettle运行环境内的一些因素会影响其运行方式。这些因素包括配置文件和与Kettle集成在一块儿的外部软件。咱们把这些因素统称为Kettle的配置。将在本节了解到Kettle的配置包括哪些部分,以及应如何管理这些配置。

1. 配置文件和.kettle目录

        Kettle运行环境中有几个文件影响了它的运行状况,这些文件能够当作是Kettle配置文件。当Kettle作了环境移植或升级时,这些文件也要随之改变,包括:

  • .spoonrc
  • jdbc.properties
  • kettle.properties
  • kettle.pwd
  • repositories.xml
  • shared.xml

        .spoonrc文件只用于spoon程序,其他的则用于Kettle里的多个程序。这些文件大部分都存放在.kettle目录下。.kettle目录默认状况下位于操做系统用户的主目录下,每一个用户都有本身的主目录(如/home/<user>,这里的user就是操做系统的用户名)。

        .kettle目录的位置也能够配置,这须要设置KETTLE_HOME环境变量。例如在生产机器上,可能但愿全部用户都使用同一个配置来运行转换和做业,就能够设置KETTLE_HOME使之指向一个目录,这样全部操做系统用户就可使用相同的配置文件了。与之相反,也能够给某个ETL项目设置一个特定的配置目录,此时须要在运行这个ETL的脚本里设置KETTLE_HOME环境变量。

        下面说明每一个配置文件的做用。

(1).spoonrc

        从名字就能够看出,.spoonrc文件用于存储Spoon程序的运行参数和状态。其它Kettle的程序都不使用这个文件。.spoonrc文件位于.kettle目录下。由于在默认状况下,.kettle目录位于用户主目录下,因此不一样用户都使用各自的.spoonrc文件。.spoonrc文件中包括的主要属性以下:

  • 通用的设置和默认值:在Spoon里,这些设置在“选项”对话框的“通常”标签下设置。“选项”对话框能够经过主菜单的“工具” -> “选项”菜单项打开。
  • 外观,例如字体和颜色:在Spoon里,这些都在“选项”对话框的“观感”标签下。
  • 程序状态数据:如最近使用的文件列表。

        一般不用手工编辑.spoonrc文件。若是新安装了一个Kettle代替一个旧版本的Kettle,可用旧版本的.spoonrc文件覆盖新安装的.spoonrc文件,这样来保留旧版本Kettle的运行状态。为了保留历史版本以备恢复之需,定时备份.spoonrc文件也是必要的。

(2)jdbc.properties

        Kettle还有一个jdbc.properties文件,保存在Kettle根目录下的simple-jndi子目录下。这个文件用来存储JNDI链接对象的链接参数。Kettle能够用JNDI的方式引用JDBC链接参数,如IP地址、用户认证等,这些链接参数最终用来在转换和做业中构造数据库链接对象。

        JNDI是Java Naming and Directory Interface的缩写,是一个Java标准,能够经过一个名字访问数据库服务。注意JNDI只是Kettle指定数据库链接参数的一种方式,数据库链接参数也能够保持在转换或做业的数据库链接对象或资源库里。JNDI数据库链接配置是整个Kettle配置的一部分。

        在jdbc.properties文件里,JNDI链接参数以多行文本形式保存,每一行就是一个键值对,等号左右分别是键和值。键包括了JNDI名字和一个属性名,中间用反斜线分隔。属性名前的JNDI名称决定了JNDI链接包括几行参数。以JNDI名称开头的行就构成了创建链接须要的全部参数。以下是一些属性名称:

  • type:这个属性的值永远是javax.sql.DataSource。
  • driver:实现了JDBC里Driver类的全名。
  • url:用于链接数据库的JDBC URL链接串。
  • user:数据库用户名。
  • password:数据库密码。

        下面是一个jdbc.properties里保存JNDI链接参数的例子:

SampleData/type=javax.sql.DataSource
SampleData/driver=org.h2.Driver
SampleData/url=jdbc:h2:file:samples/db/sampledb;IFEXISTS=TRUE
SampleData/user=PENTAHO_USER
SampleData/password=PASSWORD

        在这个例子里,JNDI名字是SampleData,可用于创建h2数据库的链接,数据库用户名是PENTAHO_USER,密码是PASSWORD。

        能够按照SampleData的格式,把本身的JNDI名字和链接参数写到jdbc.properties文件里。由于在jdbc.properties里定义的链接能够在转换和做业里使用,用户须要保存好这个文件,至少须要作定时备份。

        另外还须要注意部署问题,在部署使用JNDI方式的转换和做业时,记住须要更改部署环境里的jdbc.properties文件。若是开发环境和实际部署环境相同,就能够直接使用开发环境里的jdbc.properties文件。但大多数状况下,开发环境使用的是测试数据库,在把开发好的转换和做业部署到实际生产环境中后,须要更改jdbc.properties的内容,使之指向实际生产数据库。使用JNDI的好处就是部署时不用再更改转换和做业,只须要更改jdbc.properties里的链接参数。

(3)kettle.properties

        kettle.properties文件是一个通用的保存Kettle属性的文件。属性对Kettle而言就如同环境变量对操做系统的shell命令。它们都是全局字符串变量,用于把做业和转换参数化。例如,可使用一个属性来保存数据库链接参数、文件路径,或一个用在某个转换里的常量。

        kettle.properties文件使用文本编辑器来编辑。一个属性是一个等号分隔的键值对,占据一行。键在等号前面,做为之后使用的属性名,等号后面就是这个属性的值。下面是一个kettle.properties文件的例子:

# connection parameters for the job server
DB_HOST=dbhost.domain.org
DB_NAME=sakila
DB_USER=sakila_user
DB_PASSWORD=sakila_password
 
# path from where to read input files
INPUT_PATH=/home/sakila/import
 
# path to store the error reports
ERROR_PATH=/home/sakila/import_errors

        转换和做业能够经过${属性名}或%%属性名%%的方式来引用kettle.properties里定义的这些属性值,用于对话框里输入项的变量。图2-9显示的是CSV输入步骤对话框。

图2-9 引用kettle.properties文件里定义的变量

        如图中所示,在文件名字段里再也不用硬编码路径,而使用了变量的方式${INPUT_PATH}。对任何带有“$”符号的输入框均可以使用这种变量的输入方式。在运行阶段,这个变量的值就是/home/sakila/import,即在kettle.properties文件里设置的值。

        这里属性的使用方式和前面讲过的jdbc.properties里定义的JNDI链接参数的使用方式相似。例如能够在开发和生产环境中使用不一样的kettle.properties文件,以便快速切换。尽管使用kettle.properties和jdbc.properties类似,但也有区别。首先,JNDI只用于数据库链接,而属性可用于任何状况。其次,kettle.properties里的属性名字能够是任意名字,而JNDI里的属性名是预先定义好的,只用于JDBC数据库链接。

        关于kettle.properties文件还有一点要说明:kettle.properties文件里能够定义用于资源库的一些预约义变量。若是使用资源库保存转换或做业,以下这些预约义变量就能够定义一个默认资源库:

  • KETTLE_REPOSITORY:默认的资源库名称。
  • KETTLE_USER:资源库用户名。
  • KETTLE_PASSWORD:用户名对应的密码。

        使用上面这些变量,Kettle会自动使用KETTLE_REPOSITORY定义的资源库。        

(4)kettle.pwd

        使用Carte服务执行做业须要受权。默认状况下,Carte只支持最基本的受权方式,就是将密码保存在kettle.pwd文件中。kettle.pwd文件位于Kettle根目录下的pwd目录下。kettle.pwd文件的默认内容以下:

# Please note that the default password (cluster) is obfuscated using the Encr script provided in this release
# Passwords can also be entered in plain text as before
# 
cluster: OBF:1v8w1uh21z7k1ym71z7i1ugo1v9q

        最后一行定义了一个用户cluster,以及加密后的密码(这个密码也是cluster)。文件的注释部分说明了这个加密的密码是由Encr.bat或encr.sh脚本生成的。若是使用Carte服务,尤为当Carte服务不在局域网范围内时,就要编辑kettle.pwd文件,至少要更改默认密码。直接使用文本编辑器就能够编辑。        

(5)repositories.xml

        Kettle能够经过资源库管理转换、做业和数据库链接这样的资源。若是不使用资源库,转换、做业也能够保存在文件里,每个转换和做业都保存各自的数据库链接。Kettle资源库能够存储在关系数据库里,也可使用插件存储到其它存储系统,例如存储到一个像SVN这样的版本控制系统。为了使操做资源库更容易,Kettle在repositories.xml文件中保存了全部资源库。repositories.xml文件能够位于两个目录:

  • 位于用户主目录(由Java环境变量中的user.home变量指定)的.kettle目录下。Spoon、Kitchen、Pan会读取这个文件。
  • Carte服务会读取当前启动路径下的repositories.xml文件。若是当前路径下没有,会使用上面的用户主目录下的.kettle目录下的repositories.xml文件。

        对开发而言,不用手工编辑这个文件。不管何时链接到了资源库,这个文件都由Spoon自动维护。但对部署而言状况就不一样了,在部署的转换或做业里会使用资源库的名字,因此在repositories.xml文件里必需要有一个对应的资源库的名字。和上面讲到的jdbc.properties或kettle.properties文件相似,实际运行环境的资源库和开发时使用的资源库每每是不一样的。实践中通常直接将repositories.xml文件从开发环境复制到运行环境,并手工编辑这个文件使之匹配运行环境。

(6)shared.xml

        Kettle里有一个概念叫共享对象,共享对象就是相似于转换的步骤、数据库链接定义、集群服务器定义等这些能够一次定义,而后在转换和做业里屡次引用的对象。共享对象在概念上和资源库有一些重叠,资源库也能够被用来共享数据库链接和集群服务器的定义,但仍是有一些区别。资源库每每是一个中央存储,多个开发人员都访问同一个资源库,用来维护整个项目范围内全部可共享的对象。

        在Spoon里单击左侧树状列表的“主对象树”标签,选择想共享的对象。右键单击,而后在弹出菜单中选择“Share”。必须保存文件,不然该共享不会被保存。以这种方式建立的共享能够在其它转换或做业里使用(能够在左侧树状列表的“主对象树”标签中找到)。可是,共享的步骤或做业项不会被自动放在画布里,须要把它们从树状列表中拖到画布里,以便在转换或做业里使用。

        共享对象存储在shared.xml文件中。默认状况下,shared.xml文件保存在.kettle目录下,.kettle目录位于当前系统用户的主目录下。也能够给shared.xml文件自定义一个存储位置。这样用户就能够在转换或做业里屡次使用这些预约义好的共享对象。在转换或做业的设置对话框里能够设置shared.xml文件的位置。对做业来讲,在“做业设置”对话框的“设置”标签下。对转换而言,在“转换设置”对话框的“杂项”标签下。

        可使用变量指定共享文件的位置。例如,在转换里可使用相似下面的路径:

${Internal.Transformation.Filename.Directory}/shared.xml

        这样不论目录在哪里,全部一个目录下的转换均可以使用同一个共享文件。对部署而言,须要确保任何在开发环境中直接或间接使用的共享文件也要在部署环境中能够找到。通常状况下,在两种环境中,共享文件应该是同样的。全部环境差别的配置应该在kettle.properties文件中设置。

2. 用于启动Kettle程序的shell脚本

        在下面一些状况下,可能要调整一下启动Kettle程序的shell脚本:

  • 给Java classpath增长新的jar包。一般是由于在转换和做业里直接或间接引用了非默认的Java Class文件。
  • 改变Java虚拟机的参数,如可用内存大小。
  • 修改图形工具包环境。

(1)shell脚本的结构

        全部Kettle程序用的shell脚本都相似:

  • 初始化一个classpath的字符串,字符串里包括几个Kettle最核心的jar文件。
  • 将libext目录下的jar包都包含在classpath字符串中。
  • 将和程序相关的其它一些jar包都包含在classpath字符串中。例如Spoon启动时,要包含swt.jar文件,用于生成Spoon图形界面。
  • 构造Java虚拟机选项字符串,前面构造的classpath字符串也包含在这个字符串里。虚拟机选项设置了最大内存大小。
  • 利用上面构造好的虚拟机选项字符串,构造最终能够运行的Java可执行程序的字符串,包括Java可执行程序、虚拟机选项、要启动的Java类名。

        上面描述的脚本结构是Kettle 3.2和之前版本的脚本文件结构,Kettle 4.0和之后版本都统一使用Pentaho的Launcher做为启动程序。

(2)classpath里增长一个jar包

        在Kettle的转换里能够写Java脚本,Java脚本可能会引用第三方jar包。例如能够在“Java Script”步骤里实例化一个对象,并调用对象的方法,或者在“User defined Java expression”步骤里直接写Java表达式。当编写Java脚本或表达式时,须要注意classpath中有Java脚本里使用的各类Java类。最简单的方法就是在libext目录下新建一个目录,而后把须要的jar包都放入该目录下。由于在.sh脚本里能够加载libext目录下的全部jar文件(包括子目录),见下面的.sh文件里的代码:

# ***************************************************
# ** JDBC & other libraries used by Kettle:        **
# ***************************************************
for f in `find $BASEDIR/libext -type f -name "*.jar"` \
         `find $BASEDIR/libext -type f -name "*.zip"`
do
  CLASSPATH=$CLASSPATH:$f
done

        这个sh脚本遍历libext目录下(包括各级子目录)的全部jar和zip文件,并添加到classpath中。在Kettle 4.2及之后的版本中,使用Launcher做为启动类,使用Kettle根目录下launcher子目录下的launcher.properties文件配置须要加载的类。用户增长了新的jar包,只要修改launcher.properties文件,不用再修改.sh脚本文件。

(3)改变虚拟机堆大小

        全部Kettle启动脚本都指定了最大堆大小。如在spoon.sh中,有相似下面的语句:

# ******************************************************************
# ** Set java runtime options                                     **
# ** Change 2048m to higher values in case you run out of memory  **
# ** or set the PENTAHO_DI_JAVA_OPTIONS environment variable      **
# ******************************************************************
 
if [ -z "$PENTAHO_DI_JAVA_OPTIONS" ]; then
    PENTAHO_DI_JAVA_OPTIONS="-Xms1024m -Xmx2048m -XX:MaxPermSize=256m"
fi

        当运行转换或做业时,若是遇到Out of Memory的错误,或者运行Java的机器有更多的物理内存可用,能够在这里增长堆的大小。只需把2048改为更大的数字,不要修改其它任何地方。

(4)修改图形工具包环境

        例如,spoon.sh文件中有一个环境变量配置为export SWT_GTK3=0。使用该默认配置在建立资源库时会报相似下面的错误:

No more handles because no underlying browser available.
   SWT on GTK 2.x detected. It is reccomended to use SWT on GTK 3.x and Webkit2 API.

org.eclipse.swt.SWTError: No more handles because no underlying browser available.
   SWT on GTK 2.x detected. It is reccomended to use SWT on GTK 3.x and Webkit2 API.

将配置改成export SWT_GTK3=1便可解决这个问题。

3. 管理JDBC驱动

        随Kettle带了不少种数据库的JDBC驱动。通常一个驱动就是一个jar文件。Kettle把全部JDBC驱动都保存在lib目录下。

        要增长新的JDBC驱动,只要把相应的jar文件放到lib目录下便可。Kettle的各类启动脚本会自动加载lib下的全部jar文件到classpath。添加新数据库的JDBC驱动jar包,不会对正在运行的Kettle程序起做用。须要将Kettle程序中止,添加JDBC jar包后再启动才生效。

        当升级或替换驱动时,要确保删除了旧的jar文件。若是想暂时保留旧的jar文件,能够把jar文件放在Kettle以外的目录中,以免旧的jar包也被意外加载。

3、小结

        本篇讲述了如何在Linux系统上安装配置Kettle,包括如下要点:

  • 选择操做系统须要考虑的问题。
  • 安装Java(Kettle运行环境)。
  • 安装GNOME桌面。
  • 配置VNC Server和VNC Client以远程链接GNOME桌面。
  • 安装配置中文字符集和输入法。
  • 使用脚本启动Kettle程序。
  • 在GNOME桌面配置Spoon快捷启动方式。
  • Kettle的主要配置文件。

        下一篇引入本专题涉及的另外一个关键技术,Hadoop及其生态圈,实际演示Kettle对Hadoop的支持。

相关文章
相关标签/搜索