Just some sharing about java open source and life
  • Kettle dependency management

    日期:2012-04-13 20:41 | 作者:JavaChen | 分类目录:Kettle
    149 views

    pentaho的项目使用了ant和ivy解决项目依赖,所以必须编译源码需要ivy工具.直接使用ivy编译pentaho的bi server项目,一直没有编译成功.
    使用ivy编译kettle的源代码却是非常容易的事情.

    该篇文章翻译并参考了Will Gorman在pentaho的wiki上添加的Kettle dependency management,文章标题没作修改.
    编写此文,是为了记录编译kettle源码的方法和过程.

    以下是对原文的一个简单翻译.
    将kettle作为一个产品发行是一个很有趣的事情.有很多来自于pentaho其他项目(其中有一些有依赖于kettle)的jar包被导入到kettle.这些jar包必须在发行的时候构建并且加入到kettle中.如果一个核心的库被更新了,我们必须将其导入到kettle中(如果有必要).bi服务器,pentaho报表以及pentaho元数据编辑器都将kettle作为一个服务/引擎资源而被构建的.自从我们已经将这些jar导入到我们的源码仓库,这些项目必须使用ivy明确列出kettle以及他的依赖.当kettle的依赖变化的时候,我们必须审查libext文件是否需要更新.

    pentaho创建了一系列的脚本来自动化的安装ivy,解决jar(或者是artifacts),构建并发行artifacts.kettle已经升级使用subfloor(简单的意味着build.xml继承自subfloor的构建脚本).subfloor使用ivy从pentaho仓库()或者ibiblio maven2仓库来获取跟新jar.ibiblio仓库用于大多数第三方的jar文件(如apache-commons).pentaho仓库用于在线的pentaho项目或者一些比在ibiblio的三方库.为了解决kettle的依赖,我们不得不在ivy.xml里创建一个清单.这个文件明确地列出每一个没有传递依赖的jar文件.这意味着libext文件的映射在ivy.xml中是一对一的.
    Read More »

    作者:JavaChen | 分类目录:Kettle | 标签:
  • Getting Started Using the Cassandra CLI

    日期:2012-04-09 20:51 | 作者:JavaChen | 分类目录:BigDataCassandra
    148 views

    这仅仅是一个Cassandra CLI使用方法的清单。
    Cassandra CLI 客户端用于处理集群中基本的数据定义(DDL)和数据维护(DML)。其处于/usr/bin/cassandra-cli,如果是试用包安装,或者是$CASSANDRA_HOME/bin/cassandra-cli,如果使用二进制文件安装。

    Starting the CLI

    使用cassandra-cli -host -port 命令启动 Cassandra CLI,他将会连接cassandra.yaml文件中定义的集群名称,默认为“Test Cluster”。
    如果你有一个但节点的集群,则使用以下命令:

    $ cassandra-cli -host localhost -port 9160
    

    如果想连接多节点集群中的一个节点,可以使用以下命令:

    $ cassandra-cli -host 110.123.4.5 -port 9160
    

    或者,可以直接执行以下命令:

    $ cassandra-cli
    

    登录成功之后,可以看到:

    Welcome to cassandra CLI.
    Type 'help;' or '?' for help. Type 'quit;' or 'exit;' to quit.
    

    你必须指定连接一个节点:

    [default@unknown]connect localhost/9160;
    

    Read More »

    作者:JavaChen | 分类目录:BigDataCassandra | 标签:
  • 使用DataStax Community Edition安装Cassandra单节点

    日期:2012-04-06 21:41 | 作者:JavaChen | 分类目录:BigDataCassandra
    179 views

    本文主要记录使用DataStax Community Edition安装Cassandra单节点的过程.配置单节点的Cassandra,是为了方便快速的了解学习Cassandra.

    检查java环境

    Cassandra由java编写,需要运行中jvm虚拟机之上.如果用于生产环境,则需要jre 1.6.0-19或更高版本.

    1.检查是否安装java:

    # java -version
    

    如果你没有安装java,可以参考网上相关文章.这里主要记录在RHEL系统上安装jdk的方法.

    2.安装jdk

    下载Oracle JRE
    1)修改执行权限:

    $ cd /tmp
    $ chmod a+x jre-6u25-linux-x64-rpm.bin
    

    Read More »

    作者:JavaChen | 分类目录:BigDataCassandra | 标签:
  • 哈希表

    日期:2012-03-26 21:24 | 作者:JavaChen | 分类目录:Java Core
    298 views

    定义
    一般的线性表、树,数据在结构中的相对位置是随机的,即和记录的关键字之间不存在确定的关系,因此,在结构中查找记录时需进行一系列和关键字的比较。这一类查找方法建立在“比较“的基础上,查找的效率依赖于查找过程中所进行的比较次数。 若想能直接找到需要的记录,必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应,这就是哈希表。

    哈希表又称散列表。
    哈希表存储的基本思想是:以数据表中的每个记录的关键字 k为自变量,通过一种函数H(k)计算出函数值。把这个值解释为一块连续存储空间(即数组空间)的单元地址(即下标),将该记录存储到这个单元中。在此称该函数H为哈希函数或散列函数。按这种方法建立的表称为哈希表散列表
    哈希表是一种数据结构,它可以提供快速的插入操作和查找操作。
    哈希表是基于数组结构实现的,所以它也存在一些缺点: 数组创建后难于扩展,某些哈希表被基本填满时,性能下降得非常严重。 这个问题是哈希表不可避免的,即冲突现象:对不同的关键字可能得到同一哈希地址。 所以在以下情况下可以优先考虑使用哈希表: 不需要有序遍历数据,并且可以提前预测数据量的大小

    Read More »

    作者:JavaChen | 分类目录:Java Core | 标签:
  • 如何在kettle4.2上面实现cassandra的输入与输出

    日期:2012-03-23 20:02 | 作者:JavaChen | 分类目录:Kettle
    252 views

    这是在QQ群里有人问到的一个问题.
    如何在pdi-ce-4.2.X-stable上面实现cassandra的输入与输出,或是实现hadoop,hbase,mapreduce,mongondb的输入输出?

    在kettle中实现cassandra的输入与输出有以下两种方式:
    第一种方式:自己编写cassandra输入输出组件
    第二种方式:使用别人编写好的插件,将其集成进来

    当然还有第三种方法,直接使用4.3版本的pdi.
    第一种方法需要对cassandra很熟悉编写插件才可以做到,第二种方法可以通过拷贝pdi-ce-big-data-4.3.0-preview中的文件来完成.

    在pdi-ce-big-data-4.3.0-preview(下载页面)版本中可以看到kettle开始支持cassandra的输入和输出.
    故我们可以将4.3版本中的cassandra相关文件拷贝到4.2.1中.我使用的是pdi-ce-4.2.1-stable.
    在pdi-ce-big-data-4.3.0-preview/plugins目录下有以下目录或文件:
    Read More »

    作者:JavaChen | 分类目录:Kettle | 标签:
  • Seam的启动过程

    日期:2012-02-23 20:30 | 作者:JavaChen | 分类目录:Seam
    265 views

    了解seam2的人知道,seam是通过在web.xml中配置监听器启动的。注意,本文中的seam是指的seam2,不是seam3.

    < listener>
    	< listener-class>org.jboss.seam.servlet.SeamListener< /listener-class>
    < /listener>
    

    该监听器会做哪些事情呢?看看Gavin King对SeamListener类的描述。

    Drives certain Seam functionality such as initialization and cleanup of application and session contexts from the web application lifecycle.

    从描述中可以知道
    SeamListener主要完成应用以及web应用生命周期中的session上下文的初始化和清理工作。

    该类实现了ServletContextListener接口,在contextInitialized(ServletContextEvent event)方法内主要初始化生命周期并完成应用的初始化,在contextDestroyed(ServletContextEvent event)方法内结束应用的生命周期。
    该类实现了HttpSessionListener接口,主要是用于在生命周期中开始和结束session。
    Read More »

    作者:JavaChen | 分类目录:Seam | 标签:
  • Kettle运行作业之前的初始化过程

    日期:2012-02-22 18:57 | 作者:JavaChen | 分类目录:Kettle
    462 views
    open-source

    本文主要描述Kettle是如何通过GUI调用代码启动线程执行作业的。

    之前用英文写了一篇文章《The execution process of kettle’s job》 ,这篇文章只是用于英语写技术博客的一个尝试。由于很久没有使用英语写作了,故那篇文章只是简单的通过UML的序列图描述kettle运行job的一个java类调用过程。将上篇文章的序列图和这篇文章联系起来,会更加容易理解本文。

    在Spoon界面点击运行按钮,Spoon GUI会调用Spoon.runFile()方法,这可以从xul文件(ui/menubar.xul)中的描述看出来。关于kettle中的xul的使用,不是本文重点故不在此说明。

    public void runFile() {
    	executeFile(true, false, false, false, false, null, false);
    }
    
    public void executeFile(boolean local, boolean remote, boolean cluster,
    		boolean preview, boolean debug, Date replayDate, boolean safe) {
    	TransMeta transMeta = getActiveTransformation();
    	if (transMeta != null)
    		executeTransformation(transMeta, local, remote, cluster, preview,
    				debug, replayDate, safe);
    
    	JobMeta jobMeta = getActiveJob();
    	if (jobMeta != null)
    		executeJob(jobMeta, local, remote, replayDate, safe, null, 0);
    }
    
    public void executeJob(JobMeta jobMeta, boolean local, boolean remote,
    		Date replayDate, boolean safe, String startCopyName, int startCopyNr) {
    	try {
    		delegates.jobs.executeJob(jobMeta, local, remote, replayDate, safe,
    				startCopyName, startCopyNr);
    	} catch (Exception e) {
    		new ErrorDialog(shell, "Execute job",
    				"There was an error during job execution", e);
    	}
    }
    

    runFile()方法内部调用executeFile()方法,executeFile方法有以下几个参数:
    local:是否本地运行
    remote:是否远程运行
    cluster:是否集群环境运行
    preview:是否预览
    debug:是否调试
    replayDate:回放时间
    safe:是否安全模式

    executeFile方法会先获取当前激活的转换,如果获取结果不为空,则执行该转换;否则获取当前激活的作业,执行该作业。 本文主要讨论作业的执行过程,关于转换的执行过程,之后单独一篇文章进行讨论。

    executeJob委托SpoonJobDelegate执行其内部的executeJob方法,注意,其将JobMeta传递给了executeJob方法。SpoonJobDelegate还保存着对Spoon的引用。

    SpoonJobDelegate的executeJob方法主要完成以下操作:
    1.设置Spoon的执行配置JobExecutionConfiguration类,该类设置变量、仓库、是否执行安全模式、日志等级等等。
    2.获得当前Job对应的图形类JobGraph。
    3.将执行配置类JobExecutionConfiguration的变量、参数、命令行参数设置给jobMeta。
    4.如果本地执行,则调用jobGraph.startJob(executionConfiguration),如果远程执行,则委托给SpoonSlaveDelegate执行。

    JobExecutionConfiguration类是保存job执行过程中的一些配置,该类会在Spoon、JobGraph类之间传递。

    本文只讨论本地执行的情况,故往下查看jobGraph.startJob(executionConfiguration)方法。该方法被synchronized关键字修饰。

    JobGraph类包含当前Spoon类的引用、以及对Job的引用。初始情况,Job的引用应该为null。该类会做以下操作:
    1.如果job为空或者没有运行或者没有激活,则先保存,然后往下执行作业。
    2.在仓库不为空的时候,通过仓库加载Job获得一个运行时的JobMeta对象,名称为runJobMeta;否则,通过文件名称直接new一个JobMeta对象,名称也为runJobMeta。
    3.通过仓库和runJobMeta对象构建一个Job对象,并将jobMeta对象(此对象通过JobGraph构造方法传入)的变量、参数共享给Job对象。
    4.Job对象添加JobEntry监听器、Job监听器。
    5.调用Job的start方法,启动线程开始执行一个job。

    Job继承自Thread类,该类的run方法内部会递归执行该作业内部的作业项,限于篇幅,本文不做深究。

    作者:JavaChen | 分类目录:Kettle | 标签:
  • The execution process of kettle’s job

    日期:2012-02-21 18:24 | 作者:JavaChen | 分类目录:Kettle
    266 views

    How to execute a kettle job in Spoon GUI or command line after we create a job in Spoon GUI? In Spoon GUI,the main class is “org.pentaho.di.ui.spoon.Spoon.java”.This class handles the main window of the Spoon graphical transformation editor.Many operations about a job or transformation such as run,debug,preview,zoomIn,etc,are all in this class.This post just writes about the code execution process.

    When we start a job or transformation,Spoon invokes the method runFile(),and then is distributed to executeTransformation() or executeJob().At now,we mainly study about executeJob() method.

    This is a simple sequence diagram below.It contains several classes for Starting to execute a job using execute(int nr, Result result) in Job.java.We can see the relation of these classes from it.

    What is the detail process of job execution? You should look into the Job.run() method for detail information.

    作者:JavaChen | 分类目录:Kettle | 标签:
回到顶部

无觅相关文章插件,快速提升流量