<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JavaChen on Java</title>
	<atom:link href="http://www.javachen.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.javachen.com</link>
	<description>Just some sharing about java open source and life</description>
	<lastBuildDate>Fri, 13 Apr 2012 14:07:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Kettle dependency management</title>
		<link>http://www.javachen.com/2012/04/kettle-dependency-management/</link>
		<comments>http://www.javachen.com/2012/04/kettle-dependency-management/#comments</comments>
		<pubDate>Fri, 13 Apr 2012 12:41:39 +0000</pubDate>
		<dc:creator>JavaChen</dc:creator>
				<category><![CDATA[Kettle]]></category>
		<category><![CDATA[Ivy]]></category>
		<category><![CDATA[Pentaho]]></category>

		<guid isPermaLink="false">http://www.javachen.com/?p=2531</guid>
		<description><![CDATA[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中是一对一的. 关于Ivy Apache Ivy™是一个流行的致力于灵活性和简单性的依赖管理工具.更多的参考:enterprise features, what people say about it, 以及 how it can improve your build system 在kettle中使用ivyIDE 首先,从svn上下载kettle的源代码: svn://source.pentaho.org/svnkettleroot/Kettle/trunk 如果你想在Eclipse上使用ivyde plugin. 请参考相关文章安装该插件. 如果你不想使用ivyde,你可以简单快速并且容易的开始并编译代码. 1.执行ant resolve,这个命令将会创建一个叫做resolved-libs的文件夹. 2.使用下面命令更新classpath a.手动的添加这些jar文件到你的ide的classpath b.执行ant create-dot-classpath,将会修改你的.classpath文件(注意刷新项目以使改变生效) 注意:kettle项目中的构建脚本会自动安装ivy插件. 构建Kettle 你可以下载kettle源代码然后立即执行ant distrib命令 或者你可以在ide中导入下载的kettle工程,然后按照你的操作系统(默认的是Windows 32-bit)版本修改依赖的swt.jar文件. ivy中未完成的 pentaho-database-这是一个依赖kettle-db的常用项目,但又被kettle-ui使用.这样会导致循环依赖,将来可能会将其引入到kettle项目或是从该项目中去掉对kettle的依赖. swt-swt文件目前没有包括在ivy.xml文件中 library configurations-每一个kettle库(kettle-db,kettle-core等等)应该在ivy.xml中有他自己的依赖.这些库应该继承一些特定的依赖,而取代继承整个kettle依赖. checked-in plugins-当前引入的插件如;DummyJob, [...]<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="5"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="kettle中定义错误处理" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F02%2Fstep-error-handling-in-kettle%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fkettle-dependency-management%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/02/17/15591139.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">kettle中定义错误处理</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="如何在kettle4.2上面实现casscandra的输入与输出" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-casscandra-input-and-output-in-kettle4-2%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fkettle-dependency-management%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/03/23/18027467.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">如何在kettle4.2上面实现casscandra的输入与输出</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="The execution process of kettle’s job" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F02%2Fthe-execution-process-of-kettles-job%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fkettle-dependency-management%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/02/21/15808625.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">The execution process of kettle’s job</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="如何在kettle4.2上面实现cassandra的输入与输出" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-cassandra-input-and-output-in-kettle4-2%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fkettle-dependency-management%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/03/23/18027467.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">如何在kettle4.2上面实现cassandra的输入与输出</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="kettle进行数据迁移遇到的问题" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F01%2Fsome-problems-about-migrating-database-datas-with-kettle%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fkettle-dependency-management%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">kettle进行数据迁移遇到的问题</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="5" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></description>
			<content:encoded><![CDATA[<p>pentaho的项目使用了ant和ivy解决项目依赖,所以必须编译源码需要ivy工具.直接使用ivy编译pentaho的bi server项目,一直没有编译成功.<br />
使用ivy编译kettle的源代码却是非常容易的事情.</p>
<p>该篇文章翻译并参考了Will Gorman在pentaho的wiki上添加的<a href="http://wiki.pentaho.com/display/EAI/Kettle+dependency+management" target="_blank">Kettle dependency management</a>,文章标题没作修改.<br />
编写此文,是为了记录编译kettle源码的方法和过程.</p>
<p><strong>以下是对原文的一个简单翻译.</strong><br />
将kettle作为一个产品发行是一个很有趣的事情.有很多来自于pentaho其他项目(其中有一些有依赖于kettle)的jar包被导入到kettle.这些jar包必须在发行的时候构建并且加入到kettle中.如果一个核心的库被更新了,我们必须将其导入到kettle中(如果有必要).bi服务器,pentaho报表以及pentaho元数据编辑器都将kettle作为一个服务/引擎资源而被构建的.自从我们已经将这些jar导入到我们的源码仓库,这些项目必须使用ivy明确列出kettle以及他的依赖.当kettle的依赖变化的时候,我们必须审查libext文件是否需要更新.</p>
<p>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中是一对一的.<br />
<span id="more-2531"></span><br />
<strong>关于Ivy</strong><br />
<a href="http://ant.apache.org/ivy/" target="_blank">Apache Ivy™</a>是一个流行的致力于灵活性和简单性的依赖管理工具.更多的参考:<a href="http://ant.apache.org/ivy/features.html" target="_blank">enterprise features</a>, <a href="http://ant.apache.org/ivy/testimonials.html" target="_blank">what people say about it</a>, 以及 <a href="http://ant.apache.org/ivy/history/latest-milestone/index.html" target="_blank">how it can improve your build system</a></p>
<p><strong>在kettle中使用ivyIDE</strong><br />
首先,从svn上下载kettle的源代码:</p>
<pre>
svn://source.pentaho.org/svnkettleroot/Kettle/trunk
</pre>
<p>如果你想在Eclipse上使用<a href="http://ant.apache.org/ivy/ivyde/download.cgi" target="_blank">ivyde plugin</a>.<br />
请参考相关文章安装该插件.</p>
<p>如果你不想使用ivyde,你可以简单快速并且容易的开始并编译代码.<br />
1.执行<code>ant resolve</code>,这个命令将会创建一个叫做resolved-libs的文件夹.<br />
2.使用下面命令更新classpath<br />
  a.手动的添加这些jar文件到你的ide的classpath<br />
  b.执行ant create-dot-classpath,将会修改你的.classpath文件(注意刷新项目以使改变生效)<br />
注意:kettle项目中的构建脚本会自动安装ivy插件.</p>
<p><strong>构建Kettle</strong><br />
你可以下载kettle源代码然后立即执行<code>ant distrib</code>命令<br />
或者你可以在ide中导入下载的kettle工程,然后按照你的操作系统(默认的是Windows 32-bit)版本修改依赖的swt.jar文件.</p>
<p><strong>ivy中未完成的</strong><br />
<strong>pentaho-database-</strong>这是一个依赖kettle-db的常用项目,但又被kettle-ui使用.这样会导致循环依赖,将来可能会将其引入到kettle项目或是从该项目中去掉对kettle的依赖.<br />
<strong>swt-</strong>swt文件目前没有包括在ivy.xml文件中<br />
<strong>library configurations-</strong>每一个kettle库(kettle-db,kettle-core等等)应该在ivy.xml中有他自己的依赖.这些库应该继承一些特定的依赖,而取代继承整个kettle依赖.<br />
<strong>checked-in plugins-</strong>当前引入的插件如;DummyJob, DummyPlugin, S3CsvInput, ShapeFileReader3,versioncheck应该都移到ivy的plugin配置中.</p>
<p><strong>参考文章</strong><br />
<a href="http://wiki.pentaho.com/display/EAI/Kettle+dependency+management" target="_blank">Kettle dependency management</a></p>
<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="5"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="kettle中定义错误处理" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F02%2Fstep-error-handling-in-kettle%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fkettle-dependency-management%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/02/17/15591139.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">kettle中定义错误处理</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="如何在kettle4.2上面实现casscandra的输入与输出" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-casscandra-input-and-output-in-kettle4-2%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fkettle-dependency-management%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/03/23/18027467.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">如何在kettle4.2上面实现casscandra的输入与输出</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="The execution process of kettle’s job" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F02%2Fthe-execution-process-of-kettles-job%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fkettle-dependency-management%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/02/21/15808625.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">The execution process of kettle’s job</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="如何在kettle4.2上面实现cassandra的输入与输出" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-cassandra-input-and-output-in-kettle4-2%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fkettle-dependency-management%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/03/23/18027467.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">如何在kettle4.2上面实现cassandra的输入与输出</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="kettle进行数据迁移遇到的问题" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F01%2Fsome-problems-about-migrating-database-datas-with-kettle%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fkettle-dependency-management%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">kettle进行数据迁移遇到的问题</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="5" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></content:encoded>
			<wfw:commentRss>http://www.javachen.com/2012/04/kettle-dependency-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Started Using the Cassandra CLI</title>
		<link>http://www.javachen.com/2012/04/getting-started-using-the-cassandra-cli/</link>
		<comments>http://www.javachen.com/2012/04/getting-started-using-the-cassandra-cli/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 12:51:39 +0000</pubDate>
		<dc:creator>JavaChen</dc:creator>
				<category><![CDATA[BigData]]></category>
		<category><![CDATA[Cassandra]]></category>
		<category><![CDATA[cassandra]]></category>

		<guid isPermaLink="false">http://www.javachen.com/?p=2527</guid>
		<description><![CDATA[这仅仅是一个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; Creating a Keyspace [...]<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="5"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="如何在kettle4.2上面实现cassandra的输入与输出" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-cassandra-input-and-output-in-kettle4-2%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fgetting-started-using-the-cassandra-cli%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/03/23/18027467.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">如何在kettle4.2上面实现cassandra的输入与输出</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="使用DataStax Community Edition安装Cassandra单节点" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Finstall_singlenode-with-datastax-community-editio%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fgetting-started-using-the-cassandra-cli%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">使用DataStax Community Edition安装Cassandra单节点</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="JavaScript模态窗口和非模态窗口" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2011%2F08%2Fjavascript-modelessdialog-and-modaldialog%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fgetting-started-using-the-cassandra-cli%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/08/07/21460805.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">JavaScript模态窗口和非模态窗口</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="自定义dhtmlxGrid表头菜单" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2011%2F07%2Fcustom-dhtmlxgrid-header-menu%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fgetting-started-using-the-cassandra-cli%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/07/31/20231616.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">自定义dhtmlxGrid表头菜单</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Ext读取xml文件生成动态表格和表单" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2009%2F10%2Fext_readxml_in_bjsasc_wuzi%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fgetting-started-using-the-cassandra-cli%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/05/31/10383851.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Ext读取xml文件生成动态表格和表单</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="5" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></description>
			<content:encoded><![CDATA[<p>这仅仅是一个Cassandra CLI使用方法的清单。<br />
Cassandra CLI 客户端用于处理集群中基本的数据定义（DDL）和数据维护（DML）。其处于<code>/usr/bin/cassandra-cli</code>，如果是试用包安装，或者是<code>$CASSANDRA_HOME/bin/cassandra-cli</code>，如果使用二进制文件安装。</p>
<h1>Starting the CLI</h1>
<p>使用<code>cassandra-cli</code> <code>-host</code> <code>-port</code> 命令启动 Cassandra CLI，他将会连接<code>cassandra.yaml</code>文件中定义的集群名称，默认为“<em>Test Cluster</em>”。<br />
如果你有一个但节点的集群，则使用以下命令：</p>
<pre>
$ cassandra-cli -host localhost -port 9160
</pre>
<p>如果想连接多节点集群中的一个节点，可以使用以下命令:</p>
<pre>
$ cassandra-cli -host 110.123.4.5 -port 9160
</pre>
<p>或者，可以直接执行以下命令：</p>
<pre>
$ cassandra-cli
</pre>
<p>登录成功之后，可以看到：</p>
<pre>
Welcome to cassandra CLI.
Type 'help;' or '?' for help. Type 'quit;' or 'exit;' to quit.
</pre>
<p>你必须指定连接一个节点：</p>
<pre>
[default@unknown]connect localhost/9160;
</pre>
<p><span id="more-2527"></span></p>
<h1>Creating a Keyspace</h1>
<pre>
[default@unknown] CREATE KEYSPACE demo;
</pre>
<p>下面的一个例子，创建一个叫demo的Keyspace,并且复制因子为1，使用<code>SimpleStrategy</code>复制替换策略。</p>
<pre>
[default@unknown] CREATE KEYSPACE demo with
        placement_strategy ='org.apache.cassandra.locator.SimpleStrategy'
        and strategy_options = [{replication_factor:1}];
</pre>
<p>你可以使用<code>SHOW KEYSPACES</code>来查看所有系统的和你创建的Keyspace</p>
<h1>Use a keyspace</h1>
<pre>
[default@unknown] USE demo;
</pre>
<h1>Creating a Column Family</h1>
<pre>
[default@demo] CREATE COLUMN FAMILY users
WITH comparator = UTF8Type
AND key_validation_class=UTF8Type
AND column_metadata = [
{column_name: full_name, validation_class: UTF8Type}
{column_name: email, validation_class: UTF8Type}
{column_name: state, validation_class: UTF8Type}
{column_name: gender, validation_class: UTF8Type}
{column_name: birth_year, validation_class: LongType}
];
</pre>
<p>我们使用demo keyspace创建了一个column family，其名称为users，并包括5个静态列：full_name，email,state,gender,birth_year.comparator, key_validation_class和validation_class，用于设置；列名称，行key的值，列值的编码。comparator还定义了列名称的排序方式。<br />
下面命令创建一个名称为 blog_entry的动态column family，我们不需要定义列，而由应用程序稍后定义。</p>
<pre>
[default@demo] CREATE COLUMN FAMILY blog_entry WITH comparator = TimeUUIDType AND key_validation_class=UTF8Type AND default_validation_class = UTF8Type;
</pre>
<h1>Creating a Counter Column Family</h1>
<pre>
[default@demo] CREATE COLUMN FAMILY page_view_counts WITH
          default_validation_class=CounterColumnType
          AND key_validation_class=UTF8Type AND comparator=UTF8Type;
</pre>
<p>插入一行和计数列：</p>
<pre>
[default@demo] INCR page_view_counts['www.datastax.com'][home] BY 0;
</pre>
<p>增加计数：</p>
<pre>
[default@demo] INCR page_view_counts['www.datastax.com'][home] BY 1;
</pre>
<h1>Inserting Rows and Columns</h1>
<p>以下命令以一个特点的行key值插入列到users中</p>
<pre>
[default@demo] SET users['bobbyjo']['full_name']='Robert Jones';
[default@demo] SET users['bobbyjo']['email']='bobjones@gmail.com';
[default@demo] SET users['bobbyjo']['state']='TX';
[default@demo] SET users['bobbyjo']['gender']='M';
[default@demo] SET users['bobbyjo']['birth_year']='1975';
</pre>
<p>更新数据： set users['bobbyjo']['full_name'] = &#8216;Jack&#8217;;<br />
获取数据： get users['bobbyjo'];<br />
get命令用法参考：<a href="http://wiki.apache.org/cassandra/API#get_slice" target="_blank">API#get_slice</a><br />
查询数据： get users where gender= &#8216;M&#8217;;<br />
下面命令在 blog_entry中创建了一行，其行key为“yomama”，并指定了一列：timeuuid()的值为 &#8216;I love my new shoes!&#8217;</p>
<pre>
[default@demo] SET blog_entry['yomama'][timeuuid()] = 'I love my new shoes!';
</pre>
<h1>Reading Rows and Columns</h1>
<p>使用List命令查询记录，默认查询100条记录</p>
<pre>
[default@demo] LIST users;
</pre>
<p>Cassandra 默认以16进制数组的格式存储数据 为了返回可读的数据格式，可以指定编码：</p>
<li>ascii</li>
<li>bytes</li>
<li>integer (a generic variable-length integer type)</li>
<li>lexicalUUID</li>
<li>long</li>
<li>utf8</li>
<p>例如：</p>
<pre>
[default@demo] GET users[utf8('bobby')][utf8('full_name')];
</pre>
<p>你也可以使用<code>ASSUME</code>命令指定编码，例如，指定行key，行名称，行值显示ascii码格式：</p>
<pre>
[default@demo] ASSUME users KEYS AS ascii;
[default@demo] ASSUME users COMPARATOR AS ascii;
[default@demo] ASSUME users VALIDATOR AS ascii;
</pre>
<h1>Setting an Expiring Column</h1>
<p>例如，假设我们正在跟踪我们的用户，到期后10天的优惠券代码。我们可以定义coupon_code的列和设置该列的过期日期。例如：</p>
<pre>
[default@demo] SET users['bobbyjo'] [utf8('coupon_code')] = utf8('SAVE20') WITH ttl=864000;
</pre>
<p>自该列被设置值之后，经过10天或864,000秒后，其值将被标记为删除，不再由读操作返回。然而，请注意，直到Cassandra的处理过程完成，该值才会从硬盘中删除。</p>
<h1>Indexing a Column</h1>
<p>给birth_year添加一个二级索引：</p>
<pre>
[default@demo] UPDATE COLUMN FAMILY users
            WITH comparator = UTF8Type AND column_metadata =
            [{column_name: birth_year, validation_class: LongType, index_type: KEYS}];
</pre>
<p>由于该列被索引了，所以可以直接通过该列查询：</p>
<pre>
[default@demo] GET users WHERE birth_date = 1969;
</pre>
<h1>Deleting Rows and Columns</h1>
<p>删除yomama索引的coupon_code列：</p>
<pre>
[default@demo] DEL users ['yomama']['coupon_code'];
[default@demo] GET users ['yomama'];
</pre>
<p>或者删除整行：</p>
<pre>
[default@demo] DEL users ['yomama'];
</pre>
<h1>Dropping Column Families and Keyspaces</h1>
<pre>
[default@demo] DROP COLUMN FAMILY users;
[default@demo] DROP KEYSPACE demo;
</pre>
<h1>For help</h1>
<pre>
[default@unknown]help;
</pre>
<p>查看某一个命令的详细说明：</p>
<pre>
[default@unknown] help SET;
</pre>
<h1>To Quit</h1>
<pre>
[default@unknown]quit;
</pre>
<h1>To Execute Script</h1>
<pre>
bin/cassandra-cli -host localhost -port 9160 -f script.txt
</pre>
<h1>参考文章</h1>
<p>1.<a href="http://www.datastax.com/docs/0.8/dml/using_cli" target="_blank">Getting Started Using the Cassandra CLI</a><br />
2.<a href="http://wiki.apache.org/cassandra/CassandraCli" target="_blank">CassandraCli</a></p>
<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="5"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="如何在kettle4.2上面实现cassandra的输入与输出" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-cassandra-input-and-output-in-kettle4-2%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fgetting-started-using-the-cassandra-cli%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/03/23/18027467.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">如何在kettle4.2上面实现cassandra的输入与输出</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="使用DataStax Community Edition安装Cassandra单节点" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Finstall_singlenode-with-datastax-community-editio%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fgetting-started-using-the-cassandra-cli%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">使用DataStax Community Edition安装Cassandra单节点</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="OpenNebula的架构" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2011%2F07%2Fopennebula-architecture%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fgetting-started-using-the-cassandra-cli%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/08/19/14457146.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">OpenNebula的架构</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="生日快乐！" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2009%2F08%2Fhappy_birthday_23%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fgetting-started-using-the-cassandra-cli%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/09/11/30221357.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">生日快乐！</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="毕业纪念册完结了" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2009%2F06%2Fgraduation_memory_photo%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fgetting-started-using-the-cassandra-cli%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/05/31/10384461.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">毕业纪念册完结了</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="5" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></content:encoded>
			<wfw:commentRss>http://www.javachen.com/2012/04/getting-started-using-the-cassandra-cli/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用DataStax Community Edition安装Cassandra单节点</title>
		<link>http://www.javachen.com/2012/04/install_singlenode-with-datastax-community-editio/</link>
		<comments>http://www.javachen.com/2012/04/install_singlenode-with-datastax-community-editio/#comments</comments>
		<pubDate>Fri, 06 Apr 2012 13:41:36 +0000</pubDate>
		<dc:creator>JavaChen</dc:creator>
				<category><![CDATA[BigData]]></category>
		<category><![CDATA[Cassandra]]></category>
		<category><![CDATA[cassandra]]></category>
		<category><![CDATA[DataStax]]></category>

		<guid isPermaLink="false">http://www.javachen.com/?p=2524</guid>
		<description><![CDATA[本文主要记录使用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 2）解压执行RPM文件,例如: $ sudo ./jre-6u25-linux-x64-rpm.bin 这样JRE会安装在/usr/java/ 3）配置Oracle JRE取代OpenJDK JRE 可以使用alternatives命令添加一个链接到Oracle JRE. $ sudo alternatives --install /usr/bin/java java /usr/java/jre1.6.0_25/bin/java 20000 4）确认是否安装JRE $ java -version java version "1.6.0_25" Java(TM) SE Runtime Environment (build 1.6.0_25-b06) Java HotSpot(TM) [...]<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="5"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="Getting Started Using the Cassandra CLI" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fgetting-started-using-the-cassandra-cli%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Finstall_singlenode-with-datastax-community-editio%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Getting Started Using the Cassandra CLI</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="如何在kettle4.2上面实现cassandra的输入与输出" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-cassandra-input-and-output-in-kettle4-2%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Finstall_singlenode-with-datastax-community-editio%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/03/23/18027467.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">如何在kettle4.2上面实现cassandra的输入与输出</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Centos上安装 OpenNebula Management Console" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2011%2F06%2Finstall-opennebula-management-console-in-centos5-6%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Finstall_singlenode-with-datastax-community-editio%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Centos上安装 OpenNebula Management Console</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="MyEclipse 反编译插件jad安装方法" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2010%2F05%2Fmyeclipse-8-5_jad_installer_method%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Finstall_singlenode-with-datastax-community-editio%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">MyEclipse 反编译插件jad安装方法</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="DhtmlxGrid Quick Start Guide" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2011%2F07%2Fdhtmlxgrid-quick-start-guide%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Finstall_singlenode-with-datastax-community-editio%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/07/19/18117829.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">DhtmlxGrid Quick Start Guide</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="5" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></description>
			<content:encoded><![CDATA[<p>本文主要记录使用DataStax Community Edition安装Cassandra单节点的过程.配置单节点的Cassandra,是为了方便快速的了解学习Cassandra.</p>
<h1>检查java环境</h1>
<p>Cassandra由java编写,需要运行中jvm虚拟机之上.如果用于生产环境,则需要jre 1.6.0-19或更高版本.</p>
<h3>1.检查是否安装java:</h3>
<pre>
# java -version
</pre>
<p>如果你没有安装java,可以参考网上相关文章.这里主要记录在RHEL系统上安装jdk的方法.</p>
<h3>2.安装jdk</h3>
<p>下载<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">Oracle JRE</a><br />
1）修改执行权限:</p>
<pre>
$ cd /tmp
$ chmod a+x jre-6u25-linux-x64-rpm.bin
</pre>
<p><span id="more-2524"></span><br />
2）解压执行RPM文件,例如:</p>
<pre>
$ sudo ./jre-6u25-linux-x64-rpm.bin
</pre>
<p>这样JRE会安装在/usr/java/<br />
3）配置Oracle JRE取代OpenJDK JRE<br />
可以使用alternatives命令添加一个链接到Oracle JRE.</p>
<pre>
$ sudo alternatives --install /usr/bin/java java /usr/java/jre1.6.0_25/bin/java 20000
</pre>
<p>4）确认是否安装JRE</p>
<pre>
$ java -version
  java version "1.6.0_25"
  Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
  Java HotSpot(TM) 64-Bit Server VM (build 20.0-b11, mixed mode)
</pre>
<p>如果OpenJDK JRE仍然被使用,可以使用alternatives命令切换到Oracle JRE.例如:</p>
<pre>
$ sudo alternatives --config java
There are 2 programs which provide 'java'.

Selection      Command
-----------------------------------------------
   1           /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
*+ 2           /usr/java/jre1.6.0_25/bin/java
</pre>
<h1>在Linux系统上安装DataStax Community二进制文件</h1>
<h3>1.在用户目录创建一个目录,如datas</h3>
<pre>
$ cd $HOME
$ mkdir datas
$ cd datas
</pre>
<h3>2.下载cassandra(必须的)和OpsCenter包(可选的)</h3>
<pre>
$ wget http://downloads.datastax.com/community/dsc.tar.gz
$ wget http://downloads.datastax.com/community/opscenter.tar.gz
$ wget http://downloads.datastax.com/community/dsc-1.0.1-demo-bin.tar.gz
</pre>
<h3>3.解压</h3>
<pre>
$ tar -xzvf dsc.tar.gz
$ tar -xzvf opscenter.tar.gz
$ tar -xzvf dsc-1.0.1-demo-bin.tar.gz
$ rm *.tar.gz
</pre>
<h3>4.设置环境变量</h3>
<p>1)编辑 .bashrc </p>
<pre>
 vi $HOME/.bashrc
</pre>
<p>2)添加以下代码</p>
<pre>
export CASSANDRA_HOME=$HOME/datas/<font color="red">dsc_package_name</font>
export DSCDEMO_HOME=$HOME/datas/dsc-1.0.1/demos/portfolio_manager
export OPSC_HOME=$HOME/datas/<font color="red">opscenter_package_name</font>
export PATH="$PATH:$CASSANDRA_HOME/bin:$DSCDEMO_HOME/bin:$OPSC_HOME/bin"
</pre>
<p>注意替换<font color="red">dsc_package_name</font>和<font color="red">opscenter_package_name</font><br />
3)保存退出<br />
4)使该文件生效</p>
<pre>
source $HOME/.bashrc
</pre>
<h3>5.创建保存Cassandra数据的文件和日志目录</h3>
<pre>
$ mkdir $HOME/datas/cassandra-data
</pre>
<h1>配置并启动单节点</h1>
<h3>1.编辑配置环境</h3>
<p>修改$CASSANDRA_HOME/conf/cassandra.yaml</p>
<pre>
$ sed -i -e "s,initial_token:,initial_token: 0," \
  $CASSANDRA_HOME/conf/cassandra.yaml

$ sed -i -e "s,- /var/lib/cassandra/data,- $HOME/datastax/cassandra-data," \
  $CASSANDRA_HOME/conf/cassandra.yaml

$ sed -i -e "s,saved_caches_directory: /var/lib/cassandra/saved_caches, \
  saved_caches_directory: $HOME/datastax/cassandra-data/saved_caches," \
  $CASSANDRA_HOME/conf/cassandra.yaml

$ sed -i -e "s,commitlog_directory: /var/lib/cassandra/commitlog,commitlog_directory: \
  $HOME/datastax/cassandra-data/commitlog," $CASSANDRA_HOME/conf/cassandra.yaml
</pre>
<h3>2.设置日志文件位置</h3>
<p>修改：$CASSANDRA_HOME/conf/log4j-server.properties</p>
<pre>
$ sed -i -e "s,log4j.appender.R.File=/var/log/cassandra/system.log, \
  log4j.appender.R.File=$HOME/datastax/cassandra-data/system.log," \
  $CASSANDRA_HOME/conf/log4j-server.properties
</pre>
<h3>3.配置DataStax示例程序指向Cassandra的安装位置</h3>
<pre>
$ sed -i -e "s,/usr/share/cassandra,$HOME/datastax/<dsc_package_name>," \
  $DSCDEMO_HOME/bin/pricer
</dsc_package_name></pre>
<h3>4.后台启动Cassandra</h3>
<pre>
$ cassandra
</pre>
<h3>5.检查cassandra环是否在运行</h3>
<pre>
$ nodetool ring -h localhost
</pre>
<h3>6.运行Portfolio Demo示例程序</h3>
<p>1)进入Portfolio目录</p>
<pre>
$ cd $DSCDEMO_HOME
</pre>
<p>2)运行 ./bin/pricer工具生成数据</p>
<pre>
./bin/pricer --help
</pre>
<p>下面代码生成100天的历史数据</p>
<pre>
./bin/pricer -o INSERT_PRICES
./bin/pricer -o UPDATE_PORTFOLIOS
./bin/pricer -o INSERT_HISTORICAL_PRICES -n 100
</pre>
<p>3)启动服务(必须在$DSCDEMO_HOME/website目录下启动)</p>
<pre>
$ cd $DSCDEMO_HOME/website
$ java -jar start.jar &#038;
</pre>
<p>4)浏览程序 http://localhost:8983/portfolio</p>
<h1>参考文章</h1>
<p>1.<a href="http://www.datastax.com/docs/1.0/getting_started/install_singlenode" target="_blank">Installing a Single-Node Instance of Cassandra</a></p>
<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="5"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="Getting Started Using the Cassandra CLI" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fgetting-started-using-the-cassandra-cli%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Finstall_singlenode-with-datastax-community-editio%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Getting Started Using the Cassandra CLI</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="如何在kettle4.2上面实现cassandra的输入与输出" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-cassandra-input-and-output-in-kettle4-2%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Finstall_singlenode-with-datastax-community-editio%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/03/23/18027467.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">如何在kettle4.2上面实现cassandra的输入与输出</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Centos上安装 OpenNebula Management Console" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2011%2F06%2Finstall-opennebula-management-console-in-centos5-6%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Finstall_singlenode-with-datastax-community-editio%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Centos上安装 OpenNebula Management Console</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="MyEclipse 反编译插件jad安装方法" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2010%2F05%2Fmyeclipse-8-5_jad_installer_method%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Finstall_singlenode-with-datastax-community-editio%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">MyEclipse 反编译插件jad安装方法</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="JavaScript模态窗口和非模态窗口" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2011%2F08%2Fjavascript-modelessdialog-and-modaldialog%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Finstall_singlenode-with-datastax-community-editio%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/08/07/21460805.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">JavaScript模态窗口和非模态窗口</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="5" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></content:encoded>
			<wfw:commentRss>http://www.javachen.com/2012/04/install_singlenode-with-datastax-community-editio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>哈希表</title>
		<link>http://www.javachen.com/2012/03/hash-and-hash-functions/</link>
		<comments>http://www.javachen.com/2012/03/hash-and-hash-functions/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 13:24:28 +0000</pubDate>
		<dc:creator>JavaChen</dc:creator>
				<category><![CDATA[Java Core]]></category>
		<category><![CDATA[hashCode]]></category>
		<category><![CDATA[HashMap]]></category>

		<guid isPermaLink="false">http://www.javachen.com/?p=2522</guid>
		<description><![CDATA[定义 一般的线性表、树，数据在结构中的相对位置是随机的，即和记录的关键字之间不存在确定的关系，因此，在结构中查找记录时需进行一系列和关键字的比较。这一类查找方法建立在“比较“的基础上，查找的效率依赖于查找过程中所进行的比较次数。 若想能直接找到需要的记录，必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f，使每个关键字和结构中一个唯一的存储位置相对应，这就是哈希表。 哈希表又称散列表。 哈希表存储的基本思想是：以数据表中的每个记录的关键字 k为自变量，通过一种函数H(k)计算出函数值。把这个值解释为一块连续存储空间（即数组空间）的单元地址（即下标），将该记录存储到这个单元中。在此称该函数H为哈希函数或散列函数。按这种方法建立的表称为哈希表或散列表。 哈希表是一种数据结构，它可以提供快速的插入操作和查找操作。 哈希表是基于数组结构实现的，所以它也存在一些缺点： 数组创建后难于扩展，某些哈希表被基本填满时，性能下降得非常严重。 这个问题是哈希表不可避免的，即冲突现象：对不同的关键字可能得到同一哈希地址。 所以在以下情况下可以优先考虑使用哈希表： 不需要有序遍历数据，并且可以提前预测数据量的大小。 冲突 理想情况下，哈希函数在关键字和地址之间建立了一个一一对应关系，从而使得查找只需一次计算即可完成。由于关键字值的某种随机性，使得这种一一对应关系难以发现或构造。因而可能会出现不同的关键字对应一个存储地址。即k1≠k2，但H(k1)=H(k2)，这种现象称为冲突。 把这种具有不同关键字值而具有相同哈希地址的对象称同义词。 在大多数情况下，冲突是不能完全避免的。这是因为所有可能的关键字的集合可能比较大，而对应的地址数则可能比较少。 对于哈希技术，主要研究两个问题： （1）如何设计哈希函数以使冲突尽可能少地发生。 （2）发生冲突后如何解决。 哈希函数的构造方法 构造好的哈希函数的方法，应能使冲突尽可能地少，因而应具有较好的随机性。这样可使一组关键字的散列地址均匀地分布在整个地址空间。根据关键字的结构和分布的不同，可构造出许多不同的哈希函数。 1．直接定址法 直接定址法是以关键字k本身或关键字加上某个数值常量c作为哈希地址的方法。 该哈希函数H(k)为： H(k)=k+c (c≥0) 这种哈希函数计算简单，并且不可能有冲突发生。当关键字的分布基本连续时，可使用直接定址法的哈希函数。否则，若关键字分布不连续将造成内存单元的大量浪费 2．除留余数法 取关键字k除以哈希表长度m所得余数作为哈希函数地址的方法。即： H(k)=k％m 这是一种较简单、也是较常见的构造方法。 这种方法的关键是选择好哈希表的长度m。使得数据集合中的每一个关键字通过该函数转化后映射到哈希表的任意地址上的概率相等。 理论研究表明，在m取值为素数（质数）时，冲突可能性相对较少。 3．平方取中法 取关键字平方后的中间几位作为哈希函数地址（若超出范围时，可再取模）。 设有一组关键字ABC，BCD,CDE，DEF，……其对应的机内码如表所示。假定地址空间的大小为1000，编号为0-999。现按平方取中法构造哈希函数，则可取关键字机内码平方后的中间三位作为存储位置。 4．折叠法 这种方法适合在关键字的位数较多，而地址区间较小的情况。 将关键字分隔成位数相同的几部分。然后将这几部分的叠加和作为哈希地址（若超出范围，可再取模）。 例如，假设关键字为某人身份证号码430104681015355，则可以用4位为一组进行叠加。即有5355+8101+1046+430=14932，舍去高位。 则有H(430104681015355)=4932 为该身份证关键字的哈希函数地址。 5．数值分析法 若事先知道所有可能的关键字的取值时，可通过对这些关键字进行分析，发现其变化规律，构造出相应的哈希函数。 例：对如下一组关键字通过分析可知：每个关键字从左到右的第l，2，3位和第6位取值较集中，不宜作哈希地址。 剩余的第4，5，7和8位取值较分散，可根据实际需要取其中的若干位作为哈希地址。 6. 随机数法 选择一个随机函数，取关键字的随机函数值为它的哈希地址，即H(key)＝random(key)，其中random为随机函数。 7. 斐波那契（Fibonacci）散列法 平方散列法的缺点是显而易见的，所以我们能不能找出一个理想的乘数，而不是拿value本身当作乘数呢？答案是肯定的。 1，对于16位整数而言，这个乘数是40503 2，对于32位整数而言，这个乘数是2654435769 3，对于64位整数而言，这个乘数是11400714819323198485 [...]<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="5"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="commons-lang-1.0中的EqualsBuilder和HashCodeBuilder" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2011%2F02%2Fcommons-lang-1-0-equalsbuilder-hashcodebuilder%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhash-and-hash-functions%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">commons-lang-1.0中的EqualsBuilder和HashCodeBuilder</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="js在线压缩" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2010%2F06%2Fjavascript-min-tools%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhash-and-hash-functions%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/05/31/10380389.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">js在线压缩</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="OpenNebula的架构" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2011%2F07%2Fopennebula%25E7%259A%2584%25E6%259E%25B6%25E6%259E%2584%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhash-and-hash-functions%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/08/19/14457146.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">OpenNebula的架构</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="还未发表的离职申请书" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2009%2F12%2Fnot-published-off-job-report%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhash-and-hash-functions%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/05/31/10383220.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">还未发表的离职申请书</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="The execution process of kettle’s job" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F02%2Fthe-execution-process-of-kettles-job%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhash-and-hash-functions%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/02/21/15808625.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">The execution process of kettle’s job</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="5" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></description>
			<content:encoded><![CDATA[<p><strong>定义 </strong><br />
一般的线性表、树，数据在结构中的相对位置是<code>随机</code>的，即和记录的关键字之间不存在确定的关系，因此，在结构中查找记录时需进行一系列和关键字的比较。这一类查找方法建立在“比较“的基础上，查找的效率依赖于查找过程中所进行的比较次数。 若想能直接找到需要的记录，必须在记录的存储位置和它的关键字之间建立一个确定的对应关系f，使每个关键字和结构中一个唯一的存储位置相对应，这就是哈希表。</p>
<p><code>哈希表</code>又称散列表。<br />
<em>哈希表存储的基本思想是</em>：以数据表中的每个记录的关键字 k为自变量，通过一种函数H(k)计算出函数值。把这个值解释为一块连续存储空间（即<code>数组空间</code>）的单元地址（即<code>下标</code>），将该记录存储到这个单元中。在此称该函数H为哈希函数或散列函数。按这种方法建立的表称为<code>哈希表</code>或<code>散列表</code>。<br />
哈希表是一种数据结构，它可以提供快速的插入操作和查找操作。<br />
哈希表是基于<code>数组结构</code>实现的，所以它也存在一些<em>缺点</em>： 数组创建后难于扩展，某些哈希表被基本填满时，性能下降得非常严重。 这个问题是哈希表不可避免的，即<code>冲突现象</code>：对不同的关键字可能得到同一哈希地址。 所以在以下情况下可以优先考虑使用哈希表： <em>不需要有序遍历数据，并且可以提前预测数据量的大小</em>。</p>
<p><span id="more-2522"></span></p>
<p><strong>冲突</strong><br />
理想情况下，哈希函数在关键字和地址之间建立了一个一一对应关系，从而使得查找只需一次计算即可完成。由于关键字值的某种随机性，使得这种一一对应关系难以发现或构造。因而可能会出现不同的关键字对应一个存储地址。即k1≠k2，但H(k1)=H(k2)，这种现象称为冲突。<br />
把这种具有不同关键字值而具有相同哈希地址的对象称<code>同义词</code>。 在大多数情况下，冲突是不能完全避免的。这是因为所有可能的关键字的集合可能比较大，而对应的地址数则可能比较少。<br />
对于哈希技术，主要研究两个问题：<br />
（1）如何设计哈希函数以使冲突尽可能少地发生。<br />
（2）发生冲突后如何解决。</p>
<p><strong>哈希函数的构造方法</strong><br />
构造好的哈希函数的方法，应能使冲突尽可能地少，因而应具有较好的随机性。这样可使一组关键字的散列地址均匀地分布在整个地址空间。根据关键字的结构和分布的不同，可构造出许多不同的哈希函数。<br />
<strong>1．直接定址法</strong><br />
<code>直接定址法</code>是以关键字k本身或关键字加上某个数值常量c作为哈希地址的方法。<br />
该哈希函数H(k)为：<br />
H(k)=k+c (c≥0)<br />
这种哈希函数计算简单，并且不可能有冲突发生。当关键字的分布基本连续时，可使用直接定址法的哈希函数。否则，若关键字分布不连续将造成内存单元的大量浪费</p>
<p><strong>2．除留余数法</strong></p>
<p>取关键字k除以哈希表长度m所得余数作为哈希函数地址的方法。即：<br />
H(k)=k％m<br />
这是一种较简单、也是较常见的构造方法。<br />
这种方法的关键是选择好哈希表的长度m。使得数据集合中的每一个关键字通过该函数转化后映射到哈希表的任意地址上的概率相等。<br />
理论研究表明，在m取值为素数（质数）时，冲突可能性相对较少。</p>
<p><strong>3．平方取中法</strong><br />
取关键字平方后的中间几位作为哈希函数地址（若超出范围时，可再取模）。<br />
设有一组关键字ABC，BCD,CDE，DEF，……其对应的机内码如表所示。假定地址空间的大小为1000，编号为0-999。现按平方取中法构造哈希函数，则可取关键字机内码平方后的中间三位作为存储位置。</p>
<p><strong>4．折叠法</strong><br />
这种方法适合在关键字的位数较多，而地址区间较小的情况。<br />
将关键字分隔成位数相同的几部分。然后将这几部分的叠加和作为哈希地址（若超出范围，可再取模）。<br />
例如，假设关键字为某人身份证号码430104681015355，则可以用4位为一组进行叠加。即有5355+8101+1046+430=14932，舍去高位。 则有H(430104681015355)=4932 为该身份证关键字的哈希函数地址。</p>
<p><strong>5．数值分析法</strong><br />
若事先知道所有可能的关键字的取值时，可通过对这些关键字进行分析，发现其变化规律，构造出相应的哈希函数。<br />
例：对如下一组关键字通过分析可知：每个关键字从左到右的第l，2，3位和第6位取值较集中，不宜作哈希地址。 剩余的第4，5，7和8位取值较分散，可根据实际需要取其中的若干位作为哈希地址。</p>
<p><strong>6. 随机数法</strong><br />
选择一个随机函数，取关键字的随机函数值为它的哈希地址，即H(key)＝random(key)，其中random为随机函数。</p>
<p><strong>7. 斐波那契（Fibonacci）散列法</strong><br />
平方散列法的缺点是显而易见的，所以我们能不能找出一个理想的乘数，而不是拿value本身当作乘数呢？答案是肯定的。<br />
1，对于16位整数而言，这个乘数是40503<br />
2，对于32位整数而言，这个乘数是2654435769<br />
3，对于64位整数而言，这个乘数是11400714819323198485<br />
这几个“理想乘数”是如何得出来的呢？这跟一个法则有关，叫黄金分割法则，而描述黄金分割法则的最经典表达式无疑就是著名的斐波那契数列，如果你还有兴趣，就到网上查找一下“斐波那契数列”等关键字，我数学水平有限，不知道怎么描述清楚为什么，另外斐波那契数列的值居然和太阳系八大行星的轨道半径的比例出奇吻合，很神奇，对么？<br />
对我们常见的32位整数而言，公式：<br />
index = (value * 2654435769) &gt;&gt; 28<br />
如果用这种斐波那契散列法的话，那我上面的图就变成这样了：</p>
<p><strong>冲突的解决方法</strong><br />
假设哈希表的地址范围为0～m-l，当对给定的关键字k，由哈希函数H(k)算出的哈希地址为i（0≤i≤m-1）的位置上已存有记录，这种情况就是<code>冲突现象</code>。 处理冲突就是为该关键字的记录找到另一个“空”的哈希地址。即通过一个新的哈希函数得到一个新的哈希地址。如果仍然发生冲突，则再求下一个，依次类推。直至新的哈希地址不再发生冲突为止。<br />
常用的处理冲突的方法有开放地址法、链地址法两大类<br />
<strong>1．开放定址法</strong><br />
用开放定址法处理冲突就是当冲突发生时，形成一个地址序列。沿着这个序列逐个探测，直到找出一个“空”的开放地址。将发生冲突的关键字值存放到该地址中去。<br />
如 Hi=(H(k)+d（i）) % m, i=1，2，…k (k 其中H(k)为哈希函数，m为哈希表长，d为增量函数，d(i)=dl，d2…dn-l。<br />
增量序列的取法不同，可得到不同的开放地址处理冲突探测方法。</p>
<p><strong>1）线性探测法</strong><br />
线性探测法是从发生冲突的地址（设为d）开始，依次探查d+l，d+2，…m-1（当达到表尾m-1时，又从0开始探查）等地址，直到找到一个空闲位置来存放冲突处的关键字。<br />
若整个地址都找遍仍无空地址，则产生溢出。<br />
线性探查法的数学递推描述公式为：<br />
d0=H(k)<br />
di=(di-1+1)% m (1≤i≤m-1)</p>
<p>【例】已知哈希表地址区间为0～10，给定关键字序列（20，30，70，15，8，12，18，63，19）。哈希函数为H(k)=k％ll，采用线性探测法处理冲突，则将以上关键字依次存储到哈希表中。试构造出该哈希表，并求出等概率情况下的平均查找长度。<br />
假设数组为A, 本题中各元素的存放过程如下：<br />
H(20)=9，可直接存放到A[9]中去。<br />
H(30)=8，可直接存放到A[8]中去。<br />
H(70)=4，可直接存放到A[4]中去。<br />
H(15)=4，冲突；<br />
d0=4<br />
d1=(4+1)%11=5，将15放入到A[5]中。<br />
H(8)=8，冲突；<br />
d0=8<br />
d1=(8+1)%11=9，仍冲突；<br />
d2=(8+2)%11=10，将8放入到A[10]中。</p>
<p>在等概率情况下成功的平均查找长度为：<br />
（1*5+2+3+4+6）/9 =20/9<br />
利用线性探查法处理冲突容易造成关键字的<code>堆积</code>问题。这是因为当连续n个单元被占用后，再散列到这些单元上的关键字和直接散列到后面一个空闲单元上的关键字都要占用这个空闲单元，致使该空闲单元很容易被占用，从而发生非同义冲突。造成平均查找长度的增加。<br />
为了克服堆积现象的发生，可以用下面的方法替代线性探查法。</p>
<p><strong>（2）平方探查法</strong><br />
设发生冲突的地址为d，则平方探查法的探查序列为：d+12，d+22，…直到找到一个空闲位置为止。<br />
平方探查法的数学描述公式为：<br />
d0=H(k)<br />
di=(d0+i2) % m (1≤i≤m-1)<br />
在等概率情况下成功的平均查找长度为：<br />
（1*4+2*2+3+4+6）/9 =21/9<br />
平方探查法是一种较好的处理冲突的方法，可以避免出现堆积问题。它的缺点是不能探查到哈希表上的所有单元，但至少能探查到一半单元。<br />
例如，若表长m=13，假设在第3个位置发生冲突，则后面探查的位置依次为4、7、12、6、2、0，即可以探查到一半单元。<br />
若解决冲突时，探查到一半单元仍找不到一个空闲单元。则表明此哈希表太满，需重新建立哈希表。</p>
<p><strong>2．链地址法</strong><br />
用链地址法解决冲突的方法是：把所有关键字为同义词的记录存储在一个线性链表中，这个链表称为同义词链表。并将这些链表的表头指针放在数组中（下标从0到m-1）。这类似于图中的邻接表和树中孩子链表的结构。<br />
由于在各链表中的第一个元素的查找长度为l，第二个元素的查找长度为2，依此类推。因此，在等概率情况下成功的平均查找长度为：<br />
(1*5+2*2+3*l+4*1)／9=16／9</p>
<p>虽然链地址法要多费一些存储空间，但是彻底解决了“堆积”问题，大大提高了查找效率。</p>
<p><strong>3. 再哈希法</strong>：<br />
Hi=R Hi(key)，<br />
R Hi均是不同的哈希函数，即在同义词产生地址冲突时计算另一个哈希函数地址，直到冲突不再发生。这种方法不易产生<code>聚集</code>，但增加了计算的时间。</p>
<p><strong>4.建立一个公共溢出区</strong><br />
这也是处理冲突的一种方法。<br />
假设哈希函数的值域为[0，m-1]，则设向量HashTable[0…m-1]为基本表，每个分量存放一个记录，另设立向量OverTable[0．．v]为溢出表。所有关键字和基本表中关键字为同义词的记录，不管它们由哈希函数得到的哈希地址是什么，一旦发生冲突，都填入溢出表。</p>
<p><strong>哈希表的查找及性能分析</strong><br />
<code>哈希法</code>是利用关键字进行计算后直接求出存储地址的。当哈希函数能得到均匀的地址分布时，不需要进行任何比较就可以直接找到所要查的记录。但实际上不可能完全避免冲突，因此查找时还需要进行探测比较。<br />
在哈希表中，虽然冲突很难避免，但发生冲突的可能性却有大有小。这主要与三个因素有关。<br />
<strong>第一:与装填因子有关</strong><br />
所谓装填因子是指哈希表中己存入的元素个数n与哈希表的大小m的比值，即f=n/m。<br />
当f越小时，发生冲突的可能性越小，越大（最大为1）时，发生冲突的可能性就越大。<br />
<strong>第二:与所构造的哈希函数有关</strong><br />
若哈希函数选择得当，就可使哈希地址尽可能均匀地分布在哈希地址空间上，从而减少冲突的发生。否则，若哈希函数选择不当，就可能使哈希地址集中于某些区域，从而加大冲突的发生。<br />
<strong>第三:与解决冲突的哈希冲突函数有关</strong><br />
哈希冲突函数选择的好坏也将减少或增加发生冲突的可能性。</p>
<p><strong>思考</strong><br />
<em>哈希算法的基本思想是什么？</em><br />
<em>哈希算法的存储效率主要取决于什么？</em><br />
<em>哈希算法解决冲突的方式有哪些？</em></p>
<p><strong>java 哈希表实现</strong><br />
java中哈希表的实现有多个，比如hashtable，hashmap，currenthashmap，也有其他公司实现的，如apache的FashHashmap,google的mapmarker,high-lib的NonBlockingHashMap,其中差别是：</p>
<p><strong>hastable</strong>:线程同步，比较慢<br />
<strong>hashmap</strong>：线程不同步，不同步时候读写最快（但是不能保证读到最新数据），加同步修饰的时候， 读写比较慢<br />
<strong>currenthashmap</strong>:线程同步，默认分成16块，写入的时候只锁要写入的快，读取一般不锁块，只有读到空的时候，才锁块，性能比较高，处于hashmap同步和不同步之间。<br />
<strong>fashhashmap</strong>:apache collection 将HashMap封装，读取的时候copy一个新的，写入比较慢（尤其是存入比较多对象每写一次都要复制一个对象，超级慢），读取快<br />
<strong>NoBlockingHashMap</strong>： high_scale_lib实现写入慢，读取较快<br />
<strong>MiltigetHashMap</strong>，MapMaker google collection，和CurrentHashMap性能相当，功能比较全，可以设置超时，重复的可以保存成list</p>
<p><strong>参考文章</strong><br />
<a href="http://course.onlinesjtu.com/mod/page/view.php?id=423" target="_blank"> http://course.onlinesjtu.com/mod/page/view.php?id=423</a><br />
<a href="http://www.cnblogs.com/bigshuai/articles/2398116.html" target="_blank"> http://www.cnblogs.com/bigshuai/articles/2398116.html</a></p>
<p><strong>扩展阅读</strong><br />
Hash碰撞的拒绝式服务攻击 <a href="http://blog.jobbole.com/11454/" target="_blank">http://blog.jobbole.com/11454/</a><br />
Berkeley DB Hash、Btree、Queue、Recno选择<a href=" http://www.webzone8.com/article/560.html" target="_blank"> http://www.webzone8.com/article/560.html</a><br />
Java Hashtable <a href="http://javapapers.com/core-java/java-hashtable/#&amp;slider1=1" target="_blank">http://javapapers.com/core-java/java-hashtable/#&amp;slider1=1</a><br />
Java Hashtable分析 <a href="http://kantery.iteye.com/blog/441755" target="_blank">http://kantery.iteye.com/blog/441755</a></p>
<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="5"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="commons-lang-1.0中的EqualsBuilder和HashCodeBuilder" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2011%2F02%2Fcommons-lang-1-0-equalsbuilder-hashcodebuilder%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhash-and-hash-functions%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">commons-lang-1.0中的EqualsBuilder和HashCodeBuilder</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="OpenNebula的架构" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2011%2F07%2Fopennebula-architecture%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhash-and-hash-functions%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/08/19/14457146.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">OpenNebula的架构</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="生日快乐！" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2009%2F08%2Fhappy_birthday_23%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhash-and-hash-functions%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/09/11/30221357.png" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">生日快乐！</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="毕业纪念册完结了" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2009%2F06%2Fgraduation_memory_photo%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhash-and-hash-functions%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/05/31/10384461.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">毕业纪念册完结了</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="用ExtJs制作登陆界面" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2010%2F02%2Fextjs-login-window%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhash-and-hash-functions%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2011/05/31/10382548.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">用ExtJs制作登陆界面</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="5" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></content:encoded>
			<wfw:commentRss>http://www.javachen.com/2012/03/hash-and-hash-functions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>如何在kettle4.2上面实现cassandra的输入与输出</title>
		<link>http://www.javachen.com/2012/03/how-to-implement-cassandra-input-and-output-in-kettle4-2/</link>
		<comments>http://www.javachen.com/2012/03/how-to-implement-cassandra-input-and-output-in-kettle4-2/#comments</comments>
		<pubDate>Fri, 23 Mar 2012 12:02:07 +0000</pubDate>
		<dc:creator>JavaChen</dc:creator>
				<category><![CDATA[Kettle]]></category>
		<category><![CDATA[cassandra]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[Pentaho]]></category>

		<guid isPermaLink="false">http://www.javachen.com/?p=2518</guid>
		<description><![CDATA[这是在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目录下有以下目录或文件: . &#124;-- databases &#124;-- hour-partitioner.jar &#124;-- jobentries &#124;-- kettle-gpload-plugin &#124;-- kettle-hl7-plugin &#124;-- kettle-palo-plugin &#124;-- pentaho-big-data-plugin &#124;-- repositories &#124;-- spoon &#124;-- steps `-- versioncheck pentaho-big-data-plugin目录是kettle对大数据的集成与支持,我们只需要将该目录拷贝到pdi-ce-4.2.1-stable/plugins目录下即可.最后的结构如下 . &#124;-- databases &#124;-- hour-partitioner.jar &#124;-- jobentries &#124; `-- DummyJob &#124; &#124;-- DPL.png &#124; &#124;-- dummyjob.jar &#124; `-- plugin.xml &#124;-- pentaho-big-data-plugin [...]<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="5"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="如何在kettle4.2上面实现casscandra的输入与输出" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-casscandra-input-and-output-in-kettle4-2%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-cassandra-input-and-output-in-kettle4-2%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/03/23/18027467.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">如何在kettle4.2上面实现casscandra的输入与输出</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="kettle中定义错误处理" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F02%2Fstep-error-handling-in-kettle%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-cassandra-input-and-output-in-kettle4-2%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/02/17/15591139.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">kettle中定义错误处理</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="The execution process of kettle’s job" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F02%2Fthe-execution-process-of-kettles-job%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-cassandra-input-and-output-in-kettle4-2%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/02/21/15808625.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">The execution process of kettle’s job</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Kettle运行作业之前的初始化过程" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F02%2Fthe-init-process-before-job-execution%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-cassandra-input-and-output-in-kettle4-2%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/02/22/15863364.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Kettle运行作业之前的初始化过程</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Kettle dependency management" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fkettle-dependency-management%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-cassandra-input-and-output-in-kettle4-2%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Kettle dependency management</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="5" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></description>
			<content:encoded><![CDATA[<p>这是在QQ群里有人问到的一个问题.<br />
如何在pdi-ce-4.2.X-stable上面实现cassandra的输入与输出,或是实现hadoop,hbase,mapreduce,mongondb的输入输出?</p>
<p>在kettle中实现cassandra的输入与输出有以下两种方式:<br />
第一种方式:自己编写cassandra输入输出组件<br />
第二种方式:使用别人编写好的插件,将其集成进来</p>
<p>当然还有第三种方法,直接使用4.3版本的pdi.<br />
第一种方法需要对cassandra很熟悉编写插件才可以做到,第二种方法可以通过拷贝pdi-ce-big-data-4.3.0-preview中的文件来完成.</p>
<p>在pdi-ce-big-data-4.3.0-preview<a href="http://ci.pentaho.com/job/pentaho-big-data-plugin/lastSuccessfulBuild/artifact/pentaho-big-data-plugin/dist/" target="_blank">(下载页面</a>)版本中可以看到kettle开始支持cassandra的输入和输出.<br />
故我们可以将4.3版本中的cassandra相关文件拷贝到4.2.1中.我使用的是pdi-ce-4.2.1-stable.<br />
在pdi-ce-big-data-4.3.0-preview/plugins目录下有以下目录或文件:<br />
<span id="more-2518"></span></p>
<pre>
.
|-- databases
|-- hour-partitioner.jar
|-- jobentries
|-- kettle-gpload-plugin
|-- kettle-hl7-plugin
|-- kettle-palo-plugin
|-- pentaho-big-data-plugin
|-- repositories
|-- spoon
|-- steps
`-- versioncheck
</pre>
<p>pentaho-big-data-plugin目录是kettle对大数据的集成与支持,我们只需要将该目录拷贝到pdi-ce-4.2.1-stable/plugins目录下即可.最后的结构如下</p>
<pre>
.
|-- databases
|-- hour-partitioner.jar
|-- jobentries
|   `-- DummyJob
|       |-- DPL.png
|       |-- dummyjob.jar
|       `-- plugin.xml
|-- pentaho-big-data-plugin
|   |-- lib
|   |   |-- apache-cassandra-1.0.0.jar
|   |   |-- apache-cassandra-thrift-1.0.0.jar
|   |   |-- aws-java-sdk-1.0.008.jar
|   |   |-- commons-cli-1.2.jar
|   |   |-- guava-r08.jar
|   |   |-- hbase-comparators-TRUNK-SNAPSHOT.jar
|   |   |-- jline-0.9.94.jar
|   |   |-- libthrift-0.6.jar
|   |   |-- mongo-java-driver-2.7.2.jar
|   |   |-- pig-0.8.1.jar
|   |   |-- xpp3_min-1.1.4c.jar
|   |   `-- xstream-1.3.1.jar
|   `-- pentaho-big-data-plugin-TRUNK-SNAPSHOT.jar
|-- repositories
|-- spoon
|-- steps
|   |-- DummyPlugin
|   |   |-- DPL.png
|   |   |-- dummy.jar
|   |   `-- plugin.xml
|   |-- S3CsvInput
|   |   |-- jets3t-0.7.0.jar
|   |   |-- plugin.xml
|   |   |-- S3CIN.png
|   |   `-- s3csvinput.jar
|   `-- ShapeFileReader3
|       |-- plugin.xml
|       |-- SFR.png
|       `-- shapefilereader3.jar
`-- versioncheck
    |-- kettle-version-checker-0.2.0.jar
    `-- lib
        `-- pentaho-versionchecker.jar

13 directories, 29 files
</pre>
<p>启动pdi-ce-4.2.1-stable之后,打开一个转换,在核心对象窗口就可以看到Big Data步骤目录了.</p>
<div class="pic">
<a href="http://ww4.sinaimg.cn/mw600/48e24b4cjw1dr9zaa66nbj.jpg" target="_blank"><br />
<img alt="" src="http://ww4.sinaimg.cn/mw600/48e24b4cjw1dr9zaa66nbj.jpg" title="pdi big data plugin in kette 4.2" class="aligncenter" width="600" height="375" /><br />
</a>
</div>
<p><strong>获取pentaho-big-data-plugin源码</strong><br />
如果想在eclipse中查看或修改pentaho-big-data-plugin源码,该怎么做呢?<br />
你可以从<a href="http://ci.pentaho.com/job/pentaho-big-data-plugin/lastSuccessfulBuild/artifact/pentaho-big-data-plugin/dist/pentaho-big-data-plugin-TRUNK-SNAPSHOT-sources.zip" target="_blank">这里</a>下载到源码,然后将src下的文件拷贝到你的pdi-ce-4.2.1-stable源码工程中.</p>
<p>然后,需要在kettle-steps.xml中注册步骤节点<br />
例如,下面是MongoDbInput步骤的注册方法,请针对不同插件的不同类路径加以修改.</p>
<pre>
<step id="MongoDbInput" >
<description>i18n:org.pentaho.di.trans.step:BaseStep.TypeLongDesc.MongoDbInput
<classname>org.pentaho.di.trans.steps.mongodbinput.MongoDbInputMeta
<category>i18n:org.pentaho.di.trans.step:BaseStep.Category.Input
<tooltip>i18n:org.pentaho.di.trans.step:BaseStep.TypeTooltipDesc.MongoDbInput
<iconfile>ui/images/mongodb-input.png
</iconfile></tooltip></category></classname></description></step>
</pre>
<div class="note">
<h>注意:<br />
由于pdi-ce-4.2.1-stable中存在hive组件,故添加pentaho-big-data-plugin插件之后有可能会出现找不到类的情况,这是由于jar重复版本不一致导致的,按照异常信息,找到重复的jar并按情况删除一个jar包即可.<br />
</h></div>
<p><strong>扩展阅读:</strong><br />
Pentaho Big Data Plugin <a href="http://wiki.pentaho.com/display/BAD/Getting+Started+for+Java+Developers" target="_blank">http://wiki.pentaho.com/display/BAD/Getting+Started+for+Java+Developers</a><br />
pentaho-big-data-plugin ci<br />
<a href="http://ci.pentaho.com/job/pentaho-big-data-plugin/lastSuccessfulBuild/artifact/pentaho-big-data-plugin/dist/" target="_blank">http://ci.pentaho.com/job/pentaho-big-data-plugin/lastSuccessfulBuild/artifact/pentaho-big-data-plugin/dist/</a><br />
Pentaho Community Edition (CE) downloads <a href="http://wiki.pentaho.com/display/BAD/Downloads" target="_blank">http://wiki.pentaho.com/display/BAD/Downloads</a></p>
<table class="wumii-related-items" cellspacing="0" cellpadding="3" border="0"  style="clear: both;">
    
    <tr>
        <td colspan="5"><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
        <tr>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important;">
                    <a target="_blank" title="如何在kettle4.2上面实现casscandra的输入与输出" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-casscandra-input-and-output-in-kettle4-2%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-cassandra-input-and-output-in-kettle4-2%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/03/23/18027467.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">如何在kettle4.2上面实现casscandra的输入与输出</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="kettle中定义错误处理" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F02%2Fstep-error-handling-in-kettle%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-cassandra-input-and-output-in-kettle4-2%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/02/17/15591139.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">kettle中定义错误处理</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="The execution process of kettle’s job" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F02%2Fthe-execution-process-of-kettles-job%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-cassandra-input-and-output-in-kettle4-2%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/02/21/15808625.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">The execution process of kettle’s job</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Kettle运行作业之前的初始化过程" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F02%2Fthe-init-process-before-job-execution%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-cassandra-input-and-output-in-kettle4-2%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/site_images/2012/02/22/15863364.jpg" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Kettle运行作业之前的初始化过程</font>
                    </a>
                </td>
                <td width="102" valign="top" style="padding: 5px !important; margin: 0 !important; border-left: 1px solid #DDDDDD !important;">
                    <a target="_blank" title="Kettle dependency management" style="text-decoration: none !important; cursor: pointer !important;" href="http://app.wumii.com/ext/redirect?url=http%3A%2F%2Fwww.javachen.com%2F2012%2F04%2Fkettle-dependency-management%2F&from=http%3A%2F%2Fwww.javachen.com%2F2012%2F03%2Fhow-to-implement-cassandra-input-and-output-in-kettle4-2%2F">
                        <img style="margin: 0 !important; padding: 2px !important; border: 1px solid #DDDDDD !important; width: 96px !important; height: 96px !important;" src="http://static.wumii.com/images/blogWidget/wordpress_default.gif" width="96px" height="96px" /><br />
                        <font size="-1" color="#333333" style="display: block !important; line-height: 15px !important; width: 102px !important; font: 12px/15px arial !important; height: 60px !important; margin: 3px 0 0 0 !important; padding: 0 !important; overflow: hidden !important;">Kettle dependency management</font>
                    </a>
                </td>
        </tr>
    
    <tr>
        <td colspan="5" align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table>]]></content:encoded>
			<wfw:commentRss>http://www.javachen.com/2012/03/how-to-implement-cassandra-input-and-output-in-kettle4-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

