﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-paulwong-随笔分类-分布式</title><link>http://www.blogjava.net/paulwong/category/47498.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 16 Jan 2022 12:06:16 GMT</lastBuildDate><pubDate>Sun, 16 Jan 2022 12:06:16 GMT</pubDate><ttl>60</ttl><item><title>!!!架构网站内容不错</title><link>http://www.blogjava.net/paulwong/archive/2016/04/19/430154.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 19 Apr 2016 09:54:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2016/04/19/430154.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/430154.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2016/04/19/430154.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/430154.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/430154.html</trackback:ping><description><![CDATA[<a href="http://colobu.com/categories/%E6%9E%B6%E6%9E%84/page/2/" target="_blank">http://colobu.com/categories/%E6%9E%B6%E6%9E%84/page/2/</a><img src ="http://www.blogjava.net/paulwong/aggbug/430154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2016-04-19 17:54 <a href="http://www.blogjava.net/paulwong/archive/2016/04/19/430154.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SPRING CACHE资源</title><link>http://www.blogjava.net/paulwong/archive/2015/02/25/423032.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 25 Feb 2015 08:04:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2015/02/25/423032.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/423032.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2015/02/25/423032.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/423032.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/423032.html</trackback:ping><description><![CDATA[SPRING手册<a href="http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/htmlsingle/#cache" target="_blank"><br />http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/htmlsingle/#cache</a><br /><br />SPRING CONCURRENTMAP MANAGER加过期策略<br /><a href="http://stackoverflow.com/questions/8181768/can-i-set-a-ttl-for-cacheable" target="_blank">http://stackoverflow.com/questions/8181768/can-i-set-a-ttl-for-cacheable</a><br /><br />组合KEY<br /><a href="http://stackoverflow.com/questions/14072380/cacheable-key-on-multiple-method-arguments" target="_blank">http://stackoverflow.com/questions/14072380/cacheable-key-on-multiple-method-arguments</a><br /><br />Spring Cache抽象详解<br /><a href="http://www.open-open.com/lib/view/open1389575623336.html" target="_blank">http://www.open-open.com/lib/view/open1389575623336.html</a><br /><br />注释驱动的 Spring cache 缓存介绍<br /><a href="https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/" target="_blank">https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/</a><br /><br /><h3><a href="http://jinnianshilongnian.iteye.com/blog/2001040" style="color: #e9650e;" target="_blank">Spring Cache抽象详解</a></h3><img src ="http://www.blogjava.net/paulwong/aggbug/423032.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2015-02-25 16:04 <a href="http://www.blogjava.net/paulwong/archive/2015/02/25/423032.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用WILDFLY中的分布式缓存INFISHPAN</title><link>http://www.blogjava.net/paulwong/archive/2015/02/23/422998.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 23 Feb 2015 05:40:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2015/02/23/422998.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/422998.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2015/02/23/422998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/422998.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/422998.html</trackback:ping><description><![CDATA[项目部署的应用服务器：WILDFLY
<ol>
     <li>通过http://127.0.0.1:9991/console/App.html#infinispan添加CACHE<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     --><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">cache-container&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="tickets"</span><span style="color: #FF0000; ">&nbsp;default-cache</span><span style="color: #0000FF; ">="default"</span><span style="color: #FF0000; ">&nbsp;jndi-name</span><span style="color: #0000FF; ">="java:jboss/infinispan/tickets"</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">local-cache&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="default"</span><span style="color: #FF0000; ">&nbsp;batching</span><span style="color: #0000FF; ">="true"</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">locking&nbsp;</span><span style="color: #FF0000; ">isolation</span><span style="color: #0000FF; ">="REPEATABLE_READ"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">local-cache</span><span style="color: #0000FF; ">&gt;</span><br />
     <span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">cache-container</span><span style="color: #0000FF; ">&gt;</span></div>
     <br />
     </li>
     <li>pom.xml添加依赖包<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     -->&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.infinispan<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>infinispan-core<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span>provided<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.infinispan<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>infinispan-client-hotrod<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span>provided<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.jgroups<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>jgroups<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span>provided<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.infinispan<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>infinispan-spring<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span>6.0.2.Final<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.infinispan<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>infinispan-jcache<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span>6.0.2.Final<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span></div>
     <br />
     </li>
     <li>添加拦截器，WEB-INF/beans.xml<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     --><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"</span><span style="color: #0000FF; ">?&gt;</span><br />
     <span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">beans&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">="http://java.sun.com/xml/ns/javaee"</span><span style="color: #FF0000; ">&nbsp;xmlns:xsi</span><span style="color: #0000FF; ">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #FF0000; "><br />
     &nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000FF; ">="http://java.sun.com/xml/ns/javaee&nbsp;http://jboss.org/schema/cdi/beans_1_0.xsd"</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">interceptors</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span>org.infinispan.jcache.annotation.CacheResultInterceptor<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span>org.infinispan.jcache.annotation.CachePutInterceptor<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span>org.infinispan.jcache.annotation.CacheRemoveEntryInterceptor<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span>org.infinispan.jcache.annotation.CacheRemoveAllInterceptor<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">class</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">interceptors</span><span style="color: #0000FF; ">&gt;</span><br />
     <span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">beans</span><span style="color: #0000FF; ">&gt;</span></div>
     <br />
     </li>
     <li>添加项目的全局依赖，WEB-INF/jboss-deployment-structure.xml<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     --><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><br />
     <span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">jboss-deployment-structure</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">deployment</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.jboss.xnio"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.infinispan"</span><span style="color: #FF0000; ">&nbsp;export</span><span style="color: #0000FF; ">="true"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.infinispan.commons"</span><span style="color: #FF0000; ">&nbsp;export</span><span style="color: #0000FF; ">="true"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.infinispan.client.hotrod"</span><span style="color: #FF0000; ">&nbsp;export</span><span style="color: #0000FF; ">="true"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">deployment</span><span style="color: #0000FF; ">&gt;</span><br />
     <span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">jboss-deployment-structure</span><span style="color: #0000FF; ">&gt;</span></div>
     <br />
     </li>
     <li>在CDI BEAN中使用CACHE<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     --><span style="color: #0000FF; ">package</span>&nbsp;com.paul.myejb;<br />
     <br />
     <span style="color: #0000FF; ">import</span>&nbsp;javax.annotation.Resource;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;javax.cache.annotation.CacheResult;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;javax.ejb.Remote;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;javax.ejb.Stateless;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;javax.interceptor.Interceptors;<br />
     <br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.infinispan.Cache;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.infinispan.manager.EmbeddedCacheManager;<br />
     <span style="color: #008000; ">//</span><span style="color: #008000; ">import&nbsp;org.springframework.cache.annotation.Cacheable;</span><span style="color: #008000; "><br />
     </span><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.ejb.interceptor.SpringBeanAutowiringInterceptor;<br />
     <br />
     <span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
     &nbsp;*&nbsp;Session&nbsp;Bean&nbsp;implementation&nbsp;class&nbsp;HelloWorldBean<br />
     &nbsp;</span><span style="color: #008000; ">*/</span><br />
     @Stateless<br />
     <span style="color: #008000; ">//</span><span style="color: #008000; ">@Local(HelloWorld.class)</span><span style="color: #008000; "><br />
     </span>@Remote(HelloWorld.<span style="color: #0000FF; ">class</span>)<br />
     @Interceptors(SpringBeanAutowiringInterceptor.<span style="color: #0000FF; ">class</span>)<br />
     <span style="color: #008000; ">//</span><span style="color: #008000; ">@RolesAllowed({Roles.ADMIN})</span><span style="color: #008000; "><br />
     </span><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;HelloWorldBean&nbsp;<span style="color: #0000FF; ">implements</span>&nbsp;HelloWorld&nbsp;{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;@Resource(lookup&nbsp;=&nbsp;"java:jboss/infinispan/tickets")<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;EmbeddedCacheManager&nbsp;container;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Default&nbsp;constructor.&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;HelloWorldBean()&nbsp;{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;}<br />
     <br />
     <span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;@Transactional<br />
     </span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;@Cacheable(value&nbsp;=&nbsp;"books",&nbsp;key&nbsp;=&nbsp;"#name")</span><span style="color: #008000; "><br />
     </span>&nbsp;&nbsp;&nbsp;&nbsp;@CacheResult<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;sayHello(String&nbsp;name)&nbsp;{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" />NO&nbsp;CACHE<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" />");<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;=&nbsp;"Hello&nbsp;"&nbsp;+&nbsp;name&nbsp;+&nbsp;",&nbsp;I&nbsp;am&nbsp;HelloWorldBean.";<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cache&lt;String,&nbsp;String&gt;&nbsp;cache&nbsp;=&nbsp;<span style="color: #0000FF; ">this</span>.container.getCache();<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cache.put(name,&nbsp;result);<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;result;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;}<br />
     <br />
     }</div>
     <br />
     <br />
     </li>
     <li>修改modules/system/layers/base/org/infinispan/client/hotrod/main/modules.xml<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     --><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><br />
     <span style="color: #008000; ">&lt;!--</span><span style="color: #008000; "><br />
     &nbsp;&nbsp;~&nbsp;JBoss,&nbsp;Home&nbsp;of&nbsp;Professional&nbsp;Open&nbsp;Source.<br />
     &nbsp;&nbsp;~&nbsp;Copyright&nbsp;2010,&nbsp;Red&nbsp;Hat,&nbsp;Inc.,&nbsp;and&nbsp;individual&nbsp;contributors<br />
     &nbsp;&nbsp;~&nbsp;as&nbsp;indicated&nbsp;by&nbsp;the&nbsp;@author&nbsp;tags.&nbsp;See&nbsp;the&nbsp;copyright.txt&nbsp;file&nbsp;in&nbsp;the<br />
     &nbsp;&nbsp;~&nbsp;distribution&nbsp;for&nbsp;a&nbsp;full&nbsp;listing&nbsp;of&nbsp;individual&nbsp;contributors.<br />
     &nbsp;&nbsp;~<br />
     &nbsp;&nbsp;~&nbsp;This&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and/or&nbsp;modify&nbsp;it<br />
     &nbsp;&nbsp;~&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;Lesser&nbsp;General&nbsp;Public&nbsp;License&nbsp;as<br />
     &nbsp;&nbsp;~&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2.1&nbsp;of<br />
     &nbsp;&nbsp;~&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.<br />
     &nbsp;&nbsp;~<br />
     &nbsp;&nbsp;~&nbsp;This&nbsp;software&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,<br />
     &nbsp;&nbsp;~&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of<br />
     &nbsp;&nbsp;~&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;See&nbsp;the&nbsp;GNU<br />
     &nbsp;&nbsp;~&nbsp;Lesser&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.<br />
     &nbsp;&nbsp;~<br />
     &nbsp;&nbsp;~&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;Lesser&nbsp;General&nbsp;Public<br />
     &nbsp;&nbsp;~&nbsp;License&nbsp;along&nbsp;with&nbsp;this&nbsp;software;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free<br />
     &nbsp;&nbsp;~&nbsp;Software&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;St,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA<br />
     &nbsp;&nbsp;~&nbsp;02110-1301&nbsp;USA,&nbsp;or&nbsp;see&nbsp;the&nbsp;FSF&nbsp;site:&nbsp;http://www.fsf.org.<br />
     &nbsp;&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />
     <span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">="urn:jboss:module:1.3"</span><span style="color: #FF0000; ">&nbsp;name</span><span style="color: #0000FF; ">="org.infinispan.client.hotrod"</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">properties</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="jboss.api"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="private"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">properties</span><span style="color: #0000FF; ">&gt;</span><br />
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">resources</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">resource-root&nbsp;</span><span style="color: #FF0000; ">path</span><span style="color: #0000FF; ">="infinispan-client-hotrod-6.0.2.Final.jar"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">resources</span><span style="color: #0000FF; ">&gt;</span><br />
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="javax.api"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">下面这一行注释掉</span><span style="color: #008000; ">--&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&lt;module&nbsp;name="com.google.protobuf"/&gt;</span><span style="color: #008000; ">--&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.apache.commons.pool"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.infinispan.commons"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.infinispan.query.dsl"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">module&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.jboss.logging"</span><span style="color: #0000FF; ">/&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><br />
     <span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">module</span><span style="color: #0000FF; ">&gt;</span></div>
     <br />
     </li>
</ol>
以下是SPRING版本
<ol>
     <li>
     添加依赖的SPRING BEAN<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">beans&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/beans"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000FF; ">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #FF0000; ">&nbsp;xmlns:context</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/context"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:cache</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/cache"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:p</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/p"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:jee</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/jee"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/context<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/context/spring-context-3.0.xsd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans/spring-beans-3.0.xsd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/cache<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/cache/spring-cache.xsd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/jee&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/jee/spring-jee.xsd"</span><span style="color: #0000FF; ">&gt;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">cache:annotation-driven&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="cacheManager"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000FF; ">="org.infinispan.spring.provider.ContainerCacheManagerFactoryBean"</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">constructor-arg&nbsp;</span><span style="color: #FF0000; ">ref</span><span style="color: #0000FF; ">="cacheContainer"</span><span style="color: #FF0000; ">&nbsp;&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">jee:jndi-lookup&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="cacheContainer"</span><span style="color: #FF0000; ">&nbsp;jndi-name</span><span style="color: #0000FF; ">="java:jboss/infinispan/tickets"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">&gt;</span>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">jee:jndi-lookup</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;&lt;bean&nbsp;id="cacheContainer"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="com.paul.myejb.common.util.cache.JndiSpringCacheManagerFactoryBean"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p:infinispanJNDI="java:jboss/infinispan/tickets"&nbsp;/&gt;&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">beans</span><span style="color: #0000FF; ">&gt;</span></div><br />
     </li>
     <li>
     使用CACHE<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;com.paul.myejb.spring;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.beans.factory.annotation.Autowired;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.cache.CacheManager;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.cache.annotation.Cacheable;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.stereotype.Component;<br /><br />@Component<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;MySpringBean&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@Autowired<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;CacheManager&nbsp;cacheManager;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@Cacheable(value&nbsp;=&nbsp;"my-local-cache",&nbsp;key&nbsp;=&nbsp;"#name")<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;sayHello(String&nbsp;name)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />MySpringBean&nbsp;NO&nbsp;CACHE<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;=&nbsp;"Hi&nbsp;"&nbsp;+&nbsp;name&nbsp;+&nbsp;",&nbsp;I&nbsp;am&nbsp;Spring!";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.cache.Cache&nbsp;springCache&nbsp;=&nbsp;<span style="color: #0000FF; ">this</span>.cacheManager.getCache("my-local-cache");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(springCache.get(name)&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>&nbsp;?&nbsp;"null"&nbsp;:&nbsp;springCache.get(name).get());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;springCache.put(name,&nbsp;result);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;result;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}</div><br />
     </li>
     <li><br /></li>
</ol><img src ="http://www.blogjava.net/paulwong/aggbug/422998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2015-02-23 13:40 <a href="http://www.blogjava.net/paulwong/archive/2015/02/23/422998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SPRING-SESSION</title><link>http://www.blogjava.net/paulwong/archive/2014/11/19/420309.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 19 Nov 2014 10:23:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/11/19/420309.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/420309.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/11/19/420309.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/420309.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/420309.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: HTTP SESSION的管理通常是由容器来做，但如果是在PAAS环境下，服务器不能做变更，则需要由WEB应用来做处理HTTP SESSION。同样，如果是分布式的环境下，SESSION的管理也会带来性能问题。SPRING推出了处理SESSION的框架：SPRING-SESSION。SPRING会重写HTTP SESSION的那一套，使用SESSION也同样还是用Code ...&nbsp;&nbsp;<a href='http://www.blogjava.net/paulwong/archive/2014/11/19/420309.html'>阅读全文</a><img src ="http://www.blogjava.net/paulwong/aggbug/420309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-11-19 18:23 <a href="http://www.blogjava.net/paulwong/archive/2014/11/19/420309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分布式调度QUARTZ+SPRING</title><link>http://www.blogjava.net/paulwong/archive/2014/11/14/420104.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 14 Nov 2014 10:46:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/11/14/420104.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/420104.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/11/14/420104.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/420104.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/420104.html</trackback:ping><description><![CDATA[使用SPRING的定时任务框架，如果是在分布式的环境下，由于有多台节点，会产生相同的任务，会被多个节点执行，这时需引入分布式的QUARTZ。<br />触发器：存放时间排程<br />任务：蔟业务代码<br />排程器：负责调度，即在指定的时间执行对应的任务<br /><br />如果是分布式QUARTZ，则各个节点会上报任务，存到数据库中，执行时会从数据库中取出触发器来执行，如果触发器的名称和执行时间相同，则只有一个节点去执行此任务。<br />如果此节点执行失败，则此任务则会被分派到另一节点执行。<br /><br /><div>quartz.properties</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #008000; ">#</span><span style="color: #008000; ">============================================================================</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">&nbsp;Configure&nbsp;JobStore&nbsp;&nbsp;</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">&nbsp;Using&nbsp;Spring&nbsp;datasource&nbsp;in&nbsp;quartzJobsConfig.xml</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">&nbsp;Spring&nbsp;uses&nbsp;LocalDataSourceJobStore&nbsp;extension&nbsp;of&nbsp;JobStoreCMT</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">============================================================================</span><span style="color: #008000; "><br /></span>org.quartz.jobStore.useProperties=true<br />org.quartz.jobStore.tablePrefix&nbsp;=&nbsp;QRTZ_<br />org.quartz.jobStore.isClustered&nbsp;=&nbsp;true<br />org.quartz.jobStore.clusterCheckinInterval&nbsp;=&nbsp;5000<br />org.quartz.jobStore.misfireThreshold&nbsp;=&nbsp;60000<br />org.quartz.jobStore.txIsolationLevelReadCommitted&nbsp;=&nbsp;true<br />&nbsp;<br /><span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;Change&nbsp;this&nbsp;to&nbsp;match&nbsp;your&nbsp;DB&nbsp;vendor</span><span style="color: #008000; "><br /></span>org.quartz.jobStore.<span style="color: #0000FF; ">class</span>&nbsp;=&nbsp;org.quartz.impl.jdbcjobstore.JobStoreTX<br />org.quartz.jobStore.driverDelegateClass&nbsp;=&nbsp;org.quartz.impl.jdbcjobstore.StdJDBCDelegate<br />&nbsp;<br /><br /><span style="color: #008000; ">#</span><span style="color: #008000; ">============================================================================</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">&nbsp;Configure&nbsp;Main&nbsp;Scheduler&nbsp;Properties&nbsp;&nbsp;</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">&nbsp;Needed&nbsp;to&nbsp;manage&nbsp;cluster&nbsp;instances</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">============================================================================</span><span style="color: #008000; "><br /></span>org.quartz.scheduler.instanceId=AUTO<br />org.quartz.scheduler.instanceName=MY_CLUSTERED_JOB_SCHEDULER<br />org.quartz.scheduler.rmi.export&nbsp;=&nbsp;false<br />org.quartz.scheduler.rmi.proxy&nbsp;=&nbsp;false<br /><br /><br /><span style="color: #008000; ">#</span><span style="color: #008000; ">============================================================================</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">&nbsp;Configure&nbsp;ThreadPool&nbsp;&nbsp;</span><span style="color: #008000; "><br />#</span><span style="color: #008000; ">============================================================================</span><span style="color: #008000; "><br /></span>org.quartz.threadPool.<span style="color: #0000FF; ">class</span>&nbsp;=&nbsp;org.quartz.simpl.SimpleThreadPool<br />org.quartz.threadPool.threadCount&nbsp;=&nbsp;10<br />org.quartz.threadPool.threadPriority&nbsp;=&nbsp;5<br />org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread&nbsp;=&nbsp;true</div><br /><br /><div>web-schedule-applicationcontext.xml</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000FF; ">?&gt;</span><br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">beans&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/beans"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000FF; ">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #FF0000; ">&nbsp;xmlns:context</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/context"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:mongo</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/data/mongo"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/context<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/context/spring-context-3.0.xsd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/data/mongo<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/data/mongo/spring-mongo-1.3.xsd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"</span><span style="color: #0000FF; ">&gt;</span><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;增加定时器配置&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;线程执行器配置，用于任务注册&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="executor"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="corePoolSize"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="10"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="maxPoolSize"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="100"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="queueCapacity"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="500"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean</span><span style="color: #0000FF; ">&gt;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;设置调度&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="webScheduler"</span><span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000FF; ">="org.springframework.scheduling.quartz.SchedulerFactoryBean"</span><span style="color: #0000FF; ">&gt;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="configLocation"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="classpath:/properties/config/quartz.properties"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="dataSource"</span><span style="color: #FF0000; ">&nbsp;ref</span><span style="color: #0000FF; ">="dataSourceCMS"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="transactionManager"</span><span style="color: #FF0000; ">&nbsp;ref</span><span style="color: #0000FF; ">="txManager"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;This&nbsp;name&nbsp;is&nbsp;persisted&nbsp;as&nbsp;SCHED_NAME&nbsp;in&nbsp;db.&nbsp;for&nbsp;local&nbsp;testing&nbsp;could&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;change&nbsp;to&nbsp;unique&nbsp;name&nbsp;to&nbsp;avoid&nbsp;collision&nbsp;with&nbsp;dev&nbsp;server&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="schedulerName"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="quartzScheduler"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;Will&nbsp;update&nbsp;database&nbsp;cron&nbsp;triggers&nbsp;to&nbsp;what&nbsp;is&nbsp;in&nbsp;this&nbsp;jobs&nbsp;file&nbsp;on&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;each&nbsp;deploy.&nbsp;Replaces&nbsp;all&nbsp;previous&nbsp;trigger&nbsp;and&nbsp;job&nbsp;data&nbsp;that&nbsp;was&nbsp;in&nbsp;the&nbsp;database.&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;YMMV&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="overwriteExistingJobs"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="true"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="startupDelay"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="5"</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="applicationContextSchedulerContextKey"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="applicationContext"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="jobFactory"</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&nbsp;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="com.tcl.project7.boss.common.scheduling.AutowiringSpringBeanJobFactory"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="triggers"</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">list</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">ref&nbsp;</span><span style="color: #FF0000; ">bean</span><span style="color: #0000FF; ">="springQuertzClusterTaskSchedulerTesterTigger"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">list</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="jobDetails"</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">list</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">ref&nbsp;</span><span style="color: #FF0000; ">bean</span><span style="color: #0000FF; ">="springQuertzClusterTaskSchedulerTesterJobDetail"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">list</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="taskExecutor"</span><span style="color: #FF0000; ">&nbsp;ref</span><span style="color: #0000FF; ">="executor"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean</span><span style="color: #0000FF; ">&gt;</span><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;触发器&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="springQuertzClusterTaskSchedulerTesterTigger"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">="common.scheduling.PersistableCronTriggerFactoryBean"</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="jobDetail"</span><span style="color: #FF0000; ">&nbsp;ref</span><span style="color: #0000FF; ">="springQuertzClusterTaskSchedulerTesterJobDetail"</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="cronExpression"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="*&nbsp;*&nbsp;*&nbsp;*&nbsp;*&nbsp;?"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="springQuertzClusterTaskSchedulerTesterJobDetail"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">="org.springframework.scheduling.quartz.JobDetailBean"</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="jobClass"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="common.scheduling.SpringQuertzClusterTaskSchedulerTester"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;fail-over&nbsp;重写执行失败的任务,default=false&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="requestsRecovery"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="false"</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">beans</span><span style="color: #0000FF; ">&gt;</span></div><br /><br />JOB文件：SpringQuertzClusterTaskSchedulerTester.java<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;common.scheduling;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;java.util.Date;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;org.quartz.JobExecutionContext;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.quartz.JobExecutionException;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.slf4j.Logger;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.slf4j.LoggerFactory;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.beans.factory.annotation.Autowired;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.scheduling.quartz.QuartzJobBean;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;com.tcl.project7.boss.common.util.UrlUtil;<br /><span style="color: #0000FF; ">import</span>&nbsp;com.tcl.project7.boss.common.util.time.TimeUtils;<br /><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;*&nbsp;&lt;p&gt;Title:SpringQuertzClusterTaskSchedulerTester&lt;/p&gt;<br />&nbsp;*&nbsp;&lt;p&gt;Description:<br />&nbsp;*&nbsp;应为要持久化等特性操作,需要继承&nbsp;QuartzJobBean<br />&nbsp;*&nbsp;&lt;br&gt;由于要被持久化,所以不能存放xxxxManager类似对象,<br />&nbsp;*&nbsp;只能从每次从QuartzJobBean注入的ApplicationContext&nbsp;中去取出<br />&nbsp;*<br />&nbsp;*&nbsp;&lt;/p&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;*<br />&nbsp;*<br />&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;SpringQuertzClusterTaskSchedulerTester&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;QuartzJobBean&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;Logger&nbsp;logger&nbsp;=&nbsp;LoggerFactory.getLogger(SpringQuertzClusterTaskSchedulerTester.<span style="color: #0000FF; ">class</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@Autowired<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;UrlUtil&nbsp;urlUtil;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;executeInternal(JobExecutionContext&nbsp;arg0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;JobExecutionException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.info("------"&nbsp;+&nbsp;TimeUtils.formatTime(<span style="color: #0000FF; ">new</span>&nbsp;Date())&nbsp;+&nbsp;"------"&nbsp;+&nbsp;urlUtil.getNginxHost());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("------"&nbsp;+&nbsp;TimeUtils.formatTime(<span style="color: #0000FF; ">new</span>&nbsp;Date())&nbsp;+&nbsp;"------"&nbsp;+&nbsp;urlUtil.getNginxHost());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}</div><br /><br />如果JOB中有需要调用SPRING的BEAN，则需要此文件AutowiringSpringBeanJobFactory.java<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;common.scheduling;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;org.quartz.spi.TriggerFiredBundle;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.beans.factory.config.AutowireCapableBeanFactory;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.context.ApplicationContext;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.context.ApplicationContextAware;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.scheduling.quartz.SpringBeanJobFactory;<br /><br /><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;*&nbsp;Autowire&nbsp;Quartz&nbsp;Jobs&nbsp;with&nbsp;Spring&nbsp;context&nbsp;dependencies<br />&nbsp;*&nbsp;</span><span style="color: #808080; ">@see</span><span style="color: #008000; ">&nbsp;</span><span style="color: #008000; text-decoration: underline; ">http://stackoverflow.com/questions/6990767/inject-bean-reference-into-a-quartz-job-in-spring/15211030</span><span style="color: #008000; ">#15211030<br />&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;AutowiringSpringBeanJobFactory&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;SpringBeanJobFactory&nbsp;<span style="color: #0000FF; ">implements</span>&nbsp;ApplicationContextAware&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">transient</span>&nbsp;AutowireCapableBeanFactory&nbsp;beanFactory;<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setApplicationContext(<span style="color: #0000FF; ">final</span>&nbsp;ApplicationContext&nbsp;context)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beanFactory&nbsp;=&nbsp;context.getAutowireCapableBeanFactory();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;Object&nbsp;createJobInstance(<span style="color: #0000FF; ">final</span>&nbsp;TriggerFiredBundle&nbsp;bundle)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;Object&nbsp;job&nbsp;=&nbsp;<span style="color: #0000FF; ">super</span>.createJobInstance(bundle);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beanFactory.autowireBean(job);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;job;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><br /><br />由于JOB需要存储到数据库中，会产生PROPERTY的问题，需剔除JOB-DATA，需此文件PersistableCronTriggerFactoryBean.java<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span>&nbsp;common.scheduling;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.scheduling.quartz.CronTriggerFactoryBean;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.scheduling.quartz.JobDetailAwareTrigger;<br /><br /><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;*&nbsp;Needed&nbsp;to&nbsp;set&nbsp;Quartz&nbsp;useProperties=true&nbsp;when&nbsp;using&nbsp;Spring&nbsp;classes,<br />&nbsp;*&nbsp;because&nbsp;Spring&nbsp;sets&nbsp;an&nbsp;object&nbsp;reference&nbsp;on&nbsp;JobDataMap&nbsp;that&nbsp;is&nbsp;not&nbsp;a&nbsp;String<br />&nbsp;*&nbsp;<br />&nbsp;*&nbsp;</span><span style="color: #808080; ">@see</span><span style="color: #008000; ">&nbsp;</span><span style="color: #008000; text-decoration: underline; ">http://site.trimplement.com/using-spring-and-quartz-with-jobstore-properties/</span><span style="color: #008000; "><br />&nbsp;*&nbsp;</span><span style="color: #808080; ">@see</span><span style="color: #008000; ">&nbsp;</span><span style="color: #008000; text-decoration: underline; ">http://forum.springsource.org/showthread.php?130984-Quartz-error-IOException</span><span style="color: #008000; "><br />&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;PersistableCronTriggerFactoryBean&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;CronTriggerFactoryBean&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;afterPropertiesSet()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">super</span>.afterPropertiesSet();<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">Remove&nbsp;the&nbsp;JobDetail&nbsp;element</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getJobDataMap().remove(JobDetailAwareTrigger.JOB_DETAIL_KEY);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><br /><br />建表语句，MYSQL：quartzTables.sql<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#<br />#&nbsp;Quartz&nbsp;seems&nbsp;<span style="color: #0000FF; ">to</span>&nbsp;<span style="color: #0000FF; ">work</span>&nbsp;best&nbsp;<span style="color: #0000FF; ">with</span>&nbsp;the&nbsp;driver&nbsp;mm.mysql<span style="color: #808080; ">-</span><span style="color: #800000; font-weight: bold; ">2.0</span>.<span style="color: #800000; font-weight: bold; ">7</span><span style="color: #808080; ">-</span>bin.jar<br />#<br />#&nbsp;<span style="color: #808080; ">In</span>&nbsp;your&nbsp;Quartz&nbsp;properties&nbsp;<span style="color: #0000FF; ">file</span>,&nbsp;you<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">ll&nbsp;need&nbsp;to&nbsp;set&nbsp;<br />#&nbsp;org.quartz.jobStore.driverDelegateClass&nbsp;=&nbsp;org.quartz.impl.jdbcjobstore.StdJDBCDelegate<br />#<br /><br />DROP&nbsp;TABLE&nbsp;IF&nbsp;EXISTS&nbsp;QRTZ_JOB_LISTENERS;<br />DROP&nbsp;TABLE&nbsp;IF&nbsp;EXISTS&nbsp;QRTZ_TRIGGER_LISTENERS;<br />DROP&nbsp;TABLE&nbsp;IF&nbsp;EXISTS&nbsp;QRTZ_FIRED_TRIGGERS;<br />DROP&nbsp;TABLE&nbsp;IF&nbsp;EXISTS&nbsp;QRTZ_PAUSED_TRIGGER_GRPS;<br />DROP&nbsp;TABLE&nbsp;IF&nbsp;EXISTS&nbsp;QRTZ_SCHEDULER_STATE;<br />DROP&nbsp;TABLE&nbsp;IF&nbsp;EXISTS&nbsp;QRTZ_LOCKS;<br />DROP&nbsp;TABLE&nbsp;IF&nbsp;EXISTS&nbsp;QRTZ_SIMPLE_TRIGGERS;<br />DROP&nbsp;TABLE&nbsp;IF&nbsp;EXISTS&nbsp;QRTZ_CRON_TRIGGERS;<br />DROP&nbsp;TABLE&nbsp;IF&nbsp;EXISTS&nbsp;QRTZ_BLOB_TRIGGERS;<br />DROP&nbsp;TABLE&nbsp;IF&nbsp;EXISTS&nbsp;QRTZ_TRIGGERS;<br />DROP&nbsp;TABLE&nbsp;IF&nbsp;EXISTS&nbsp;QRTZ_JOB_DETAILS;<br />DROP&nbsp;TABLE&nbsp;IF&nbsp;EXISTS&nbsp;QRTZ_CALENDARS;<br /><br /><br />CREATE&nbsp;TABLE&nbsp;QRTZ_JOB_DETAILS<br />&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;JOB_NAME&nbsp;&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;JOB_GROUP&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;DESCRIPTION&nbsp;VARCHAR(250)&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;JOB_CLASS_NAME&nbsp;&nbsp;&nbsp;VARCHAR(250)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;IS_DURABLE&nbsp;VARCHAR(1)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;IS_VOLATILE&nbsp;VARCHAR(1)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;IS_STATEFUL&nbsp;VARCHAR(1)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;REQUESTS_RECOVERY&nbsp;VARCHAR(1)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;JOB_DATA&nbsp;BLOB&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;PRIMARY&nbsp;KEY&nbsp;(JOB_NAME,JOB_GROUP)<br />);<br /><br />CREATE&nbsp;TABLE&nbsp;QRTZ_JOB_LISTENERS<br />&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;JOB_NAME&nbsp;&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;JOB_GROUP&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;JOB_LISTENER&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;PRIMARY&nbsp;KEY&nbsp;(JOB_NAME,JOB_GROUP,JOB_LISTENER),<br />&nbsp;&nbsp;&nbsp;&nbsp;FOREIGN&nbsp;KEY&nbsp;(JOB_NAME,JOB_GROUP)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REFERENCES&nbsp;QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP)<br />);<br /><br />CREATE&nbsp;TABLE&nbsp;QRTZ_TRIGGERS<br />&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIGGER_NAME&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIGGER_GROUP&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;JOB_NAME&nbsp;&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;JOB_GROUP&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;IS_VOLATILE&nbsp;VARCHAR(1)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;DESCRIPTION&nbsp;VARCHAR(250)&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;NEXT_FIRE_TIME&nbsp;BIGINT(13)&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;PREV_FIRE_TIME&nbsp;BIGINT(13)&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;PRIORITY&nbsp;INTEGER&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIGGER_STATE&nbsp;VARCHAR(16)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIGGER_TYPE&nbsp;VARCHAR(8)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;START_TIME&nbsp;BIGINT(13)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;END_TIME&nbsp;BIGINT(13)&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;CALENDAR_NAME&nbsp;VARCHAR(200)&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;MISFIRE_INSTR&nbsp;SMALLINT(2)&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;JOB_DATA&nbsp;BLOB&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;PRIMARY&nbsp;KEY&nbsp;(TRIGGER_NAME,TRIGGER_GROUP),<br />&nbsp;&nbsp;&nbsp;&nbsp;FOREIGN&nbsp;KEY&nbsp;(JOB_NAME,JOB_GROUP)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REFERENCES&nbsp;QRTZ_JOB_DETAILS(JOB_NAME,JOB_GROUP)<br />);<br /><br />CREATE&nbsp;TABLE&nbsp;QRTZ_SIMPLE_TRIGGERS<br />&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIGGER_NAME&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIGGER_GROUP&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;REPEAT_COUNT&nbsp;BIGINT(7)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;REPEAT_INTERVAL&nbsp;BIGINT(12)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;TIMES_TRIGGERED&nbsp;BIGINT(10)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;PRIMARY&nbsp;KEY&nbsp;(TRIGGER_NAME,TRIGGER_GROUP),<br />&nbsp;&nbsp;&nbsp;&nbsp;FOREIGN&nbsp;KEY&nbsp;(TRIGGER_NAME,TRIGGER_GROUP)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REFERENCES&nbsp;QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)<br />);<br /><br />CREATE&nbsp;TABLE&nbsp;QRTZ_CRON_TRIGGERS<br />&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIGGER_NAME&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIGGER_GROUP&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;CRON_EXPRESSION&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;TIME_ZONE_ID&nbsp;VARCHAR(80),<br />&nbsp;&nbsp;&nbsp;&nbsp;PRIMARY&nbsp;KEY&nbsp;(TRIGGER_NAME,TRIGGER_GROUP),<br />&nbsp;&nbsp;&nbsp;&nbsp;FOREIGN&nbsp;KEY&nbsp;(TRIGGER_NAME,TRIGGER_GROUP)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REFERENCES&nbsp;QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)<br />);<br /><br />CREATE&nbsp;TABLE&nbsp;QRTZ_BLOB_TRIGGERS<br />&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIGGER_NAME&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIGGER_GROUP&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;BLOB_DATA&nbsp;BLOB&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;PRIMARY&nbsp;KEY&nbsp;(TRIGGER_NAME,TRIGGER_GROUP),<br />&nbsp;&nbsp;&nbsp;&nbsp;FOREIGN&nbsp;KEY&nbsp;(TRIGGER_NAME,TRIGGER_GROUP)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REFERENCES&nbsp;QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)<br />);<br /><br />CREATE&nbsp;TABLE&nbsp;QRTZ_TRIGGER_LISTENERS<br />&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIGGER_NAME&nbsp;&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIGGER_GROUP&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIGGER_LISTENER&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;PRIMARY&nbsp;KEY&nbsp;(TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_LISTENER),<br />&nbsp;&nbsp;&nbsp;&nbsp;FOREIGN&nbsp;KEY&nbsp;(TRIGGER_NAME,TRIGGER_GROUP)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REFERENCES&nbsp;QRTZ_TRIGGERS(TRIGGER_NAME,TRIGGER_GROUP)<br />);<br /><br /><br />CREATE&nbsp;TABLE&nbsp;QRTZ_CALENDARS<br />&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;CALENDAR_NAME&nbsp;&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;CALENDAR&nbsp;BLOB&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;PRIMARY&nbsp;KEY&nbsp;(CALENDAR_NAME)<br />);<br /><br /><br /><br />CREATE&nbsp;TABLE&nbsp;QRTZ_PAUSED_TRIGGER_GRPS<br />&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIGGER_GROUP&nbsp;&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PRIMARY&nbsp;KEY&nbsp;(TRIGGER_GROUP)<br />);<br /><br />CREATE&nbsp;TABLE&nbsp;QRTZ_FIRED_TRIGGERS<br />&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;ENTRY_ID&nbsp;VARCHAR(95)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIGGER_NAME&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIGGER_GROUP&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;IS_VOLATILE&nbsp;VARCHAR(1)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;INSTANCE_NAME&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;FIRED_TIME&nbsp;BIGINT(13)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;PRIORITY&nbsp;INTEGER&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;STATE&nbsp;VARCHAR(16)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;JOB_NAME&nbsp;VARCHAR(200)&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;JOB_GROUP&nbsp;VARCHAR(200)&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;IS_STATEFUL&nbsp;VARCHAR(1)&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;REQUESTS_RECOVERY&nbsp;VARCHAR(1)&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;PRIMARY&nbsp;KEY&nbsp;(ENTRY_ID)<br />);<br /><br />CREATE&nbsp;TABLE&nbsp;QRTZ_SCHEDULER_STATE<br />&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;INSTANCE_NAME&nbsp;VARCHAR(200)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;LAST_CHECKIN_TIME&nbsp;BIGINT(13)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;CHECKIN_INTERVAL&nbsp;BIGINT(13)&nbsp;NOT&nbsp;NULL,<br />&nbsp;&nbsp;&nbsp;&nbsp;PRIMARY&nbsp;KEY&nbsp;(INSTANCE_NAME)<br />);<br /><br />CREATE&nbsp;TABLE&nbsp;QRTZ_LOCKS<br />&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;LOCK_NAME&nbsp;&nbsp;VARCHAR(40)&nbsp;NOT&nbsp;NULL,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PRIMARY&nbsp;KEY&nbsp;(LOCK_NAME)<br />);<br /><br /><br />INSERT&nbsp;INTO&nbsp;QRTZ_LOCKS&nbsp;values(</span><span style="color: #FF0000; ">'</span>TRIGGER_ACCESS<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">);<br />INSERT&nbsp;INTO&nbsp;QRTZ_LOCKS&nbsp;values(</span><span style="color: #FF0000; ">'</span>JOB_ACCESS<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">);<br />INSERT&nbsp;INTO&nbsp;QRTZ_LOCKS&nbsp;values(</span><span style="color: #FF0000; ">'</span>CALENDAR_ACCESS<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">);<br />INSERT&nbsp;INTO&nbsp;QRTZ_LOCKS&nbsp;values(</span><span style="color: #FF0000; ">'</span>STATE_ACCESS<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">);<br />INSERT&nbsp;INTO&nbsp;QRTZ_LOCKS&nbsp;values(</span><span style="color: #FF0000; ">'</span>MISFIRE_ACCESS<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">);<br /><br /><br />commit;</span></div><br /><br />参考：<br /><a href="http://wenku.baidu.com/view/82e3bcbdfd0a79563c1e7223.html">http://wenku.baidu.com/view/82e3bcbdfd0a79563c1e7223.html</a><br /><br />Quartz集成springMVC 的方案二（持久化任务、集群和分布式）<br /><a href="http://blog.csdn.net/congcong68/article/details/39256307">http://blog.csdn.net/congcong68/article/details/39256307</a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/paulwong/aggbug/420104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-11-14 18:46 <a href="http://www.blogjava.net/paulwong/archive/2014/11/14/420104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>樂視 TV 載入 4K 片點解咁快？CDN 網絡解構</title><link>http://www.blogjava.net/paulwong/archive/2014/11/07/419670.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 07 Nov 2014 09:03:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/11/07/419670.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/419670.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/11/07/419670.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/419670.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/419670.html</trackback:ping><description><![CDATA[經過幾次搶購，相信有些 unwire 讀者已經買到 Letv X50 Air 超級智能電視，在家享受它的豐富內容，以及準備欣賞 HKTV 直播劇集了吧。<br /><br />而它提供的內容中，最吸引的肯定是 4K 影片及劇集。相信大家都知道，4K 內容檔案本身容量十分大，還要透過網絡進行串流，一般情況也會「窒下窒下」，但為何在 X50 Air 上會如此順暢？以下小編就為大家解構一下：<br /><br />
<p style="color: #2e415c; font-family: Arial, Helvetica, sans-serif; background-color: #fefefe;"></p>
<div style="position: relative; display: inline-block; z-index: 21;">
<div id="pc_231578"  pc_first"="" title="Pin this image to Pinterest. Right-click to turn-off this feature." style="position: absolute; top: 10px; left: 10px; padding-top: 5px; padding-right: 5px; padding-left: 5px; opacity: 0; border-top-left-radius: 25px; border-top-right-radius: 25px; border-bottom-right-radius: 25px; border-bottom-left-radius: 25px; cursor: pointer; z-index: 22; background-color: #222222;"></div>
<img src="http://cdn.unwire.hk/wp-content/uploads/2014/11/letvcdn-590x461.png" alt="letvcdn" width="590" height="461" style="border: 0px none; outline: none; max-width: 1087px; height: auto;" /></div>
<p>&nbsp;</p>
好了，謎底揭曉！<br /><br />其實很多時候欣賞串流內容（streaming）時要等，是因為 cache 時間十分長，導致影響載入時候。<br /><br />而 Letv 就採用了 CDN（Content Delivery / Distribution Network；內容傳遞網路）網路，它的總承載量比單一骨幹最大的頻寬還要大，而且有異地備援，萬一某個伺服器出現故障，系統就會自動調用其他鄰近地區的伺服器資源，所以可靠度極之接近 100%；<br /><br />就算沒有故障時，樂視香港的 CDN 網絡亦可有效回避繁忙擠塞的網絡，並自動尋找距離用家最接近的快取伺服器接收內容，因此可以改善內容存取速度，大大縮短下載時間，自然可以用串流網絡，順暢欣賞極致 4K 影片內容啦。<img src ="http://www.blogjava.net/paulwong/aggbug/419670.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-11-07 17:03 <a href="http://www.blogjava.net/paulwong/archive/2014/11/07/419670.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java并行处理框架 JPPF</title><link>http://www.blogjava.net/paulwong/archive/2014/07/19/415998.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sat, 19 Jul 2014 01:55:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/07/19/415998.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/415998.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/07/19/415998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/415998.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/415998.html</trackback:ping><description><![CDATA[JPPF是一个MASTER/SLAVE的结构，提供客户端的JAR包，客户端只要把执行的代码封闭成一个TASK并提交到MASTER中，MASTER会把此任务分派给SLAVE/NODE去执行，然后把结果返回。<br /><br /><a href="http://www.jppf.org/doc/v4/index.php?title=Main_Page" target="_blank">http://www.jppf.org/doc/v4/index.php?title=Main_Page</a><img src ="http://www.blogjava.net/paulwong/aggbug/415998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-07-19 09:55 <a href="http://www.blogjava.net/paulwong/archive/2014/07/19/415998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>腾讯CKV海量分布式存储系统</title><link>http://www.blogjava.net/paulwong/archive/2014/07/16/415866.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 15 Jul 2014 23:58:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/07/16/415866.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/415866.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/07/16/415866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/415866.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/415866.html</trackback:ping><description><![CDATA[<img src="http://ww4.sinaimg.cn/bmiddle/a1ab8e59jw1eeeg66h72fj20c83ek7ra.jpg" width="440" height="4412" alt="" /><img src ="http://www.blogjava.net/paulwong/aggbug/415866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-07-16 07:58 <a href="http://www.blogjava.net/paulwong/archive/2014/07/16/415866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转载】经典漫画讲解HDFS原理 </title><link>http://www.blogjava.net/paulwong/archive/2013/10/26/405663.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sat, 26 Oct 2013 01:15:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/10/26/405663.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/405663.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/10/26/405663.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/405663.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/405663.html</trackback:ping><description><![CDATA[<span style="font-family: 微软雅黑, 宋体; background-color: #dfdfdf;">分布式文件系统比较出名的有HDFS&nbsp;&nbsp;和 GFS，其中HDFS比较简单一点。本文是一篇描述非常简洁易懂的漫画形式讲解HDFS的原理。比一般PPT要通俗易懂很多。不难得的学习资料。<br /></span><br /><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><span style="font-family: 微软雅黑, 宋体; background-color: #dfdfdf;">1、三个部分: 客户端、nameserver（可理解为主控和文件索引,类似linux的inode）、datanode（存放实际数据）</span><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><img width="600" height="225" src="http://my.csdn.net/uploads/201208/11/1344691496_8076.png" border="0" alt="" style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf; cursor: pointer;" /><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><span style="font-family: 微软雅黑, 宋体; background-color: #dfdfdf;">在这里，client的形式我所了解的有两种，通过hadoop提供的api所编写的程序可以和hdfs进行交互，另外一种就是安装了hadoop的datanode其也可以通过命令行与hdfs系统进行交互，如在datanode上上传则使用如下命令行：bin/hadoop fs -put example1 user/chunk/<br /><br /></span><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><span style="font-family: 微软雅黑, 宋体; background-color: #dfdfdf;">2、如何写数据过程</span><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><img width="600" height="476" src="http://my.csdn.net/uploads/201208/11/1344691715_8066.png" border="0" alt="" style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf; cursor: pointer;" /><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><img width="600" height="480" src="http://my.csdn.net/uploads/201208/11/1344692755_3243.png" border="0" alt="" style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf; cursor: pointer;" /><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><img width="600" height="217" src="http://my.csdn.net/uploads/201208/12/1344702703_2919.png" border="0" alt="" style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf; cursor: pointer;" /><br /><br /><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><span style="font-family: 微软雅黑, 宋体; background-color: #dfdfdf;">3、读取数据过程</span><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><img width="600" height="439" src="http://my.csdn.net/uploads/201208/11/1344693039_4501.png" border="0" alt="" style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf; cursor: pointer;" /><br /><br /><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><span style="font-family: 微软雅黑, 宋体; background-color: #dfdfdf;">4、容错：第一部分：故障类型及其检测方法（nodeserver 故障，和网络故障，和脏数据问题）</span><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><img width="600" height="471" src="http://my.csdn.net/uploads/201208/11/1344693728_5407.png" border="0" alt="" style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf; cursor: pointer;" /><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><img width="600" height="442" src="http://my.csdn.net/uploads/201208/11/1344693685_4529.png" border="0" alt="" style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf; cursor: pointer;" /><br /><br /><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><span style="font-family: 微软雅黑, 宋体; background-color: #dfdfdf;">5、容错第二部分：读写容错</span><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><img width="600" height="429" src="http://my.csdn.net/uploads/201208/11/1344693811_7697.png" border="0" alt="" id="img_0.5895301518030465" initialized="true" style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf; cursor: pointer;" /><br /><br /><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><span style="font-family: 微软雅黑, 宋体; background-color: #dfdfdf;">6、容错第三部分：dataNode 失效</span><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><img width="600" height="421" src="http://my.csdn.net/uploads/201208/11/1344694035_2660.png" border="0" alt="" style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf; cursor: pointer;" /><br /><br /><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><span style="font-family: 微软雅黑, 宋体; background-color: #dfdfdf;">7、备份规则</span><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><img width="600" height="450" src="http://my.csdn.net/uploads/201208/11/1344694119_7534.png" border="0" alt="" style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf; cursor: pointer;" /><br /><br /><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><span style="font-family: 微软雅黑, 宋体; background-color: #dfdfdf;">8、结束语</span><br style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf;" /><img width="600" height="235" src="http://my.csdn.net/uploads/201208/11/1344694185_4387.png" border="0" alt="" style="word-wrap: break-word; font-family: 微软雅黑, 宋体; background-color: #dfdfdf; cursor: pointer;" /><img src ="http://www.blogjava.net/paulwong/aggbug/405663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-10-26 09:15 <a href="http://www.blogjava.net/paulwong/archive/2013/10/26/405663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些数据切分、缓存、rpc框架、nosql方案资料</title><link>http://www.blogjava.net/paulwong/archive/2013/10/14/404954.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 14 Oct 2013 02:14:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/10/14/404954.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/404954.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/10/14/404954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/404954.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/404954.html</trackback:ping><description><![CDATA[<div style="margin-bottom: 15px; font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 12px; line-height: 18px;"><span style="line-height: 1.8em; font-size: 14px;">1、数据切分</span></div><div id="blog_content" style="line-height: 1.8em; font-family: Helvetica, Tahoma, Arial, sans-serif;"><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp; 1.1、<a href="http://www.guokr.com/blog/475765/" style="color: #108ac6;" target="_blank">mysql中间件研究（Atlas，cobar，TDDL）</a>&nbsp;</p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp; 1.2、<a href="http://www.cnblogs.com/ivanjack/archive/2010/09/11/1824001.html" style="color: #108ac6;" target="_blank">利用 MySQL Proxy 实现数据切分及整合&nbsp;</a></p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp; 1.3、<a href="http://www.dedecms.com/knowledge/data-base/mysql/2012/0819/7626.html" style="color: #108ac6;" target="_blank">基于MySQL分库分表方案简介&nbsp;</a></p><p style="margin: 0px; padding: 0px;"><span style="line-height: 1.5;">&nbsp; &nbsp; &nbsp; &nbsp;</span>&nbsp;1.4、<a href="http://yale.iteye.com/blog/1859988" style="color: #108ac6;" target="_blank">tddl和diamond &nbsp;</a></p><p style="margin: 0px; padding: 0px;">2、缓存</p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp; 2.1、<a href="http://ljh0721.iteye.com/blog/1811338" style="color: #108ac6;" target="_blank">java客户端三种方式操作&nbsp;</a></p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;2.2、<a href="http://zys-wings.com/?p=218" style="color: #108ac6;" target="_blank">myibatis配置memcached评测&nbsp;</a></p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;2.3、<a href="http://stackoverflow.com/questions/11364554/memcached-spring-caching" style="color: #108ac6;" target="_blank">Memcached + Spring Caching&nbsp;</a></p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;2.4、<a href="http://www.open-open.com/lib/view/1324369698014%20" style="color: #108ac6;" target="_blank">memcachedb-持久化存储的缓存系统&nbsp;</a></p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;2.5、<a href="http://blog.sina.com.cn/s/blog_613904cc0100w5ij.html" style="color: #108ac6;" target="_blank">memcachedb让memcache的数据持久化&nbsp;</a></p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;2.6、<a href="http://code.taobao.org/p/tair/wiki/intro/" style="color: #108ac6;" target="_blank">淘宝kv缓存框架tair&nbsp;</a></p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;2.7、<a href="http://yueyemaitian.iteye.com/admin/blogs/%20http:/gubaojian.blog.163.com/blog/static/1661799082012519084312/" style="color: #108ac6;" target="_blank">ibatis之扩展缓存ibatis-tair-cache&nbsp;</a></p><p style="margin: 0px; padding: 0px;">3、rpc框架</p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;3.1、<a href="http://code.alibabatech.com/wiki/display/dubbo/Home-zh" style="color: #108ac6;">dubbo&nbsp;</a></p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;3.2、hsf 未开源</p><p style="margin: 0px; padding: 0px;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;3.3、<a href="http://iwinit.iteye.com/blog/1745132" style="color: #108ac6;" target="_blank">服务框架HSF分析之一容器启动</a></p><p style="margin: 0px; padding: 0px;">4、noSql</p><p style="margin: 0px; padding: 0px;"><span style="line-height: 1.5;">&nbsp; &nbsp; &nbsp; &nbsp;</span>&nbsp;4.1、<a href="http://www.ha97.com/3447.html" style="color: #108ac6;" target="_blank">学习NoSQL数据库的必读资料&nbsp;</a></p></div><img src ="http://www.blogjava.net/paulwong/aggbug/404954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-10-14 10:14 <a href="http://www.blogjava.net/paulwong/archive/2013/10/14/404954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分布式搜索资源</title><link>http://www.blogjava.net/paulwong/archive/2013/08/31/403522.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sat, 31 Aug 2013 07:52:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/08/31/403522.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/403522.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/08/31/403522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/403522.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/403522.html</trackback:ping><description><![CDATA[云端分布式搜索技术<br /><a href="http://www.searchtech.pro" target="_blank">http://www.searchtech.pro</a><br /><br /><br />ELASTICSEARCH中文社区<br /><a href="http://es-bbs.medcl.net/categories/%E6%9C%80%E6%96%B0%E5%8A%A8%E6%80%81" target="_blank">http://es-bbs.medcl.net/categories/%E6%9C%80%E6%96%B0%E5%8A%A8%E6%80%81</a><br /><br /><br /><a href="http://wangwei3.iteye.com/blog/1818599" target="_blank">http://wangwei3.iteye.com/blog/1818599</a><br /><br /><br />Welcome to the Apache Nutch Wiki<br /><a href="https://wiki.apache.org/nutch/FrontPage" target="_blank">https://wiki.apache.org/nutch/FrontPage</a><br /><br /><br />elasticsearch客户端大全<br /><a href="http://www.searchtech.pro/elasticsearch-clients" target="_blank">http://www.searchtech.pro/elasticsearch-clients</a><br /><br /><br />客户端<br /><a href="http://es-cn.medcl.net/guide/concepts/scaling-lucene/" target="_blank">http://es-cn.medcl.net/guide/concepts/scaling-lucene/</a><br /><a href="https://github.com/aglover/elasticsearch_article/blob/master/src/main/java/com/b50/usat/load/MusicReviewSearch.java" target="_blank">https://github.com/aglover/elasticsearch_article/blob/master/src/main/java/com/b50/usat/load/MusicReviewSearch.java</a><br /><br /><br />&nbsp;<img src ="http://www.blogjava.net/paulwong/aggbug/403522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-08-31 15:52 <a href="http://www.blogjava.net/paulwong/archive/2013/08/31/403522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Install hadoop+hbase+nutch+elasticsearch</title><link>http://www.blogjava.net/paulwong/archive/2013/08/31/403513.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 30 Aug 2013 17:17:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/08/31/403513.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/403513.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/08/31/403513.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/403513.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/403513.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: This document is for Anyela Chavarro.Only these version of each framework work togetherCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->H...&nbsp;&nbsp;<a href='http://www.blogjava.net/paulwong/archive/2013/08/31/403513.html'>阅读全文</a><img src ="http://www.blogjava.net/paulwong/aggbug/403513.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-08-31 01:17 <a href="http://www.blogjava.net/paulwong/archive/2013/08/31/403513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Implementation for CombineFileInputFormat Hadoop 0.20.205</title><link>http://www.blogjava.net/paulwong/archive/2013/08/29/403442.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 29 Aug 2013 08:08:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/08/29/403442.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/403442.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/08/29/403442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/403442.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/403442.html</trackback:ping><description><![CDATA[运行MAPREDUCE JOB时，如果输入的文件比较小而多时，默认情况下会生成很多的MAP JOB，即一个文件一个MAP JOB，因此需要优化，使多个文件能合成一个MAP JOB的输入。<br /><br />具体的原理是下述三步: <br /><br />1.根据输入目录下的每个文件,如果其长度超过mapred.max.split.size,以block为单位分成多个split(一个split是一个map的输入),每个split的长度都大于mapred.max.split.size, 因为以block为单位, 因此也会大于blockSize, 此文件剩下的长度如果大于mapred.min.split.size.per.node, 则生成一个split, 否则先暂时保留.<br /><br />2. 现在剩下的都是一些长度效短的碎片,把每个rack下碎片合并, 只要长度超过mapred.max.split.size就合并成一个split, 最后如果剩下的碎片比mapred.min.split.size.per.rack大, 就合并成一个split, 否则暂时保留.<br /><br />3. 把不同rack下的碎片合并, 只要长度超过mapred.max.split.size就合并成一个split, 剩下的碎片无论长度, 合并成一个split.<br />举例: mapred.max.split.size=1000<br />      mapred.min.split.size.per.node=300<br />      mapred.min.split.size.per.rack=100<br />输入目录下五个文件,rack1下三个文件,长度为2050,1499,10, rack2下两个文件,长度为1010,80. 另外blockSize为500.<br />经过第一步, 生成五个split: 1000,1000,1000,499,1000. 剩下的碎片为rack1下:50,10; rack2下10:80<br />由于两个rack下的碎片和都不超过100, 所以经过第二步, split和碎片都没有变化.<br />第三步,合并四个碎片成一个split, 长度为150.<br /><br />如果要减少map数量, 可以调大mapred.max.split.size, 否则调小即可.<br /><br />其特点是: 一个块至多作为一个map的输入，一个文件可能有多个块，一个文件可能因为块多分给做为不同map的输入， 一个map可能处理多个块，可能处理多个文件。<br /><br />注：CombineFileInputFormat是一个抽象类，需要编写一个继承类。<br /><br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">import</span>&nbsp;java.io.IOException;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.conf.Configuration;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.io.LongWritable;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.io.Text;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.mapred.FileSplit;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.mapred.InputSplit;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.mapred.JobConf;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.mapred.LineRecordReader;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.mapred.RecordReader;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.mapred.Reporter;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.mapred.lib.CombineFileInputFormat;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.mapred.lib.CombineFileRecordReader;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.mapred.lib.CombineFileSplit;<br /><br />@SuppressWarnings("deprecation")<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;CombinedInputFormat&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;CombineFileInputFormat&lt;LongWritable,&nbsp;Text&gt;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@SuppressWarnings({&nbsp;"unchecked",&nbsp;"rawtypes"&nbsp;})<br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;RecordReader&lt;LongWritable,&nbsp;Text&gt;&nbsp;getRecordReader(InputSplit&nbsp;split,&nbsp;JobConf&nbsp;conf,&nbsp;Reporter&nbsp;reporter)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;CombineFileRecordReader(conf,&nbsp;(CombineFileSplit)&nbsp;split,&nbsp;reporter,&nbsp;(Class)&nbsp;myCombineFileRecordReader.<span style="color: #0000FF; ">class</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;myCombineFileRecordReader&nbsp;<span style="color: #0000FF; ">implements</span>&nbsp;RecordReader&lt;LongWritable,&nbsp;Text&gt;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;LineRecordReader&nbsp;linerecord;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;myCombineFileRecordReader(CombineFileSplit&nbsp;split,&nbsp;Configuration&nbsp;conf,&nbsp;Reporter&nbsp;reporter,&nbsp;Integer&nbsp;index)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileSplit&nbsp;filesplit&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;FileSplit(split.getPath(index),&nbsp;split.getOffset(index),&nbsp;split.getLength(index),&nbsp;split.getLocations());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linerecord&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;LineRecordReader(conf,&nbsp;filesplit);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;close()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linerecord.close();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;LongWritable&nbsp;createKey()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;linerecord.createKey();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Text&nbsp;createValue()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;linerecord.createValue();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;getPos()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;linerecord.getPos();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">float</span>&nbsp;getProgress()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;linerecord.getProgress();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;next(LongWritable&nbsp;key,&nbsp;Text&nbsp;value)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;linerecord.next(key,&nbsp;value);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><br /><br />在运行时这样设置：<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">if</span>&nbsp;(argument&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.set("mapred.max.split.size",&nbsp;argument);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.set("mapred.max.split.size",&nbsp;"134217728");&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;128&nbsp;MB</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008000; ">//</span><span style="color: #008000; "><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.setInputFormat(CombinedInputFormat.<span style="color: #0000FF; ">class</span>);</div><br /><br /><img src ="http://www.blogjava.net/paulwong/aggbug/403442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-08-29 16:08 <a href="http://www.blogjava.net/paulwong/archive/2013/08/29/403442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Sqoop实现HDFS与Mysql互转</title><link>http://www.blogjava.net/paulwong/archive/2013/05/11/399153.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sat, 11 May 2013 13:27:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/05/11/399153.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/399153.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/05/11/399153.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/399153.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/399153.html</trackback:ping><description><![CDATA[<br />
简介<br />
Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具，可以将一个关系型数据库（例如 ： MySQL ,Oracle ,Postgres等）中的数据导入到Hadoop的HDFS中，也可以将HDFS的数据导入到关系型数据库中。<br />
<br />
http://sqoop.apache.org/<br />
<br />
环境<br />
当调试过程出现IncompatibleClassChangeError一般都是版本兼容问题。<br />
<br />
为了保证hadoop和sqoop版本的兼容性，使用Cloudera，<br />
<br />
Cloudera简介：<br />
<br />
Cloudera为了让Hadoop的配置标准化，可以帮助企业安装，配置，运行hadoop以达到大规模企业数据的处理和分析。<br />
<br />
http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDHTarballs/3.25.2013/CDH4-Downloadable-Tarballs/CDH4-Downloadable-Tarballs.html<br />
<br />
下载安装hadoop-0.20.2-cdh3u6，sqoop-1.3.0-cdh3u6。<br />
<br />
安装<br />
安装比较简单，直接解压即可<br />
<br />
唯一需要做的就是将mysql的jdbc适配包mysql-connector-java-5.0.7-bin.jar copy到$SQOOP_HOME/lib下。<br />
<br />
配置好环境变量：/etc/profile<br />
<br />
export SQOOP_HOME=/home/hadoop/sqoop-1.3.0-cdh3u6/<br />
<br />
export PATH=$SQOOP_HOME/bin:$PATH<br />
<br />
MYSQL转HDFS-示例<br />
./sqoop import --connect jdbc:mysql://10.8.210.166:3306/recsys --username root --password root --table shop -m 1 --target-dir /user/recsys/input/shop/$today<br />
<br />
<br />
HDFS转MYSQ-示例<br />
./sqoop export --connect jdbc:mysql://10.8.210.166:3306/recsys --username root --password root --table shopassoc  --fields-terminated-by ',' --export-dir /user/recsys/output/shop/$today<br />
<br />
示例参数说明<br />
(其他参数我未使用，故不作解释，未使用，就没有发言权，详见命令help)<br />
<br />
<br />
参数类型<br />
<br />
参数名<br />
<br />
解释<br />
<br />
公共<br />
<br />
connect<br />
<br />
Jdbc-url<br />
<br />
公共<br />
<br />
username<br />
<br />
---<br />
<br />
公共<br />
<br />
password<br />
<br />
---<br />
<br />
公共<br />
<br />
table<br />
<br />
表名<br />
<br />
Import<br />
<br />
target-dir<br />
<br />
制定输出hdfs目录，默认输出到/user/$loginName/<br />
<br />
export<br />
<br />
fields-terminated-by<br />
<br />
Hdfs文件中的字段分割符，默认是&#8220;\t&#8221;<br />
<br />
export<br />
<br />
export-dir<br />
<br />
hdfs文件的路径<img src ="http://www.blogjava.net/paulwong/aggbug/399153.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-05-11 21:27 <a href="http://www.blogjava.net/paulwong/archive/2013/05/11/399153.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>全方位的技术服务及相关技术解决方案（纯java解决方案）</title><link>http://www.blogjava.net/paulwong/archive/2013/05/11/399132.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 10 May 2013 16:17:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/05/11/399132.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/399132.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/05/11/399132.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/399132.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/399132.html</trackback:ping><description><![CDATA[<a href="http://www.iteye.com/topic/1128561" target="_blank">http://www.iteye.com/topic/1128561</a>
@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);<img src ="http://www.blogjava.net/paulwong/aggbug/399132.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-05-11 00:17 <a href="http://www.blogjava.net/paulwong/archive/2013/05/11/399132.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一网打尽13款开源Java大数据工具</title><link>http://www.blogjava.net/paulwong/archive/2013/05/03/398700.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 03 May 2013 01:05:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/05/03/398700.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/398700.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/05/03/398700.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/398700.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/398700.html</trackback:ping><description><![CDATA[<p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><strong>下面将介绍大数据领域支持Java的主流开源工具</strong>：</p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><a href="http://cms.csdnimg.cn/article/201304/28/517ce391277b5.jpg" target="_blank" style="cursor: pointer; color: #0066cc; text-decoration: none;"><img src="http://cms.csdnimg.cn/article/201304/28/517ce391277b5.jpg" border="0" alt="" style="vertical-align: middle; border: none; float: right; margin: 0px 0px 10px 10px;" /></a></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><strong>1.	HDFS</strong></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">HDFS是Hadoop应用程序中主要的分布式储存系统， HDFS集群包含了一个NameNode（主节点），这个节点负责管理所有文件系统的元数据及存储了真实数据的DataNode（数据节点，可以有很多）。HDFS针对海量数据所设计，所以相比传统文件系统在大批量小文件上的优化，HDFS优化的则是对小批量大型文件的访问和存储。</p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><a href="http://cms.csdnimg.cn/article/201304/28/517ce3c49ded6.jpg" target="_blank" style="cursor: pointer; color: #0066cc; text-decoration: none;"></a><a href="http://cms.csdnimg.cn/article/201304/28/517ce3c49ded6.jpg" target="_blank" style="cursor: pointer; color: #0066cc; text-decoration: none;"><img src="http://cms.csdnimg.cn/article/201304/28/517ce3c49ded6.jpg" border="0" alt="" style="vertical-align: middle; border: none; float: right; margin: 0px 0px 10px 10px;" /></a></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><strong>2.	MapReduce</strong></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">Hadoop MapReduce是一个软件框架，用以轻松编写处理海量（TB级）数据的并行应用程序，以可靠和容错的方式连接<span style="line-height: 1.45em;">大型集群中</span><span style="line-height: 1.45em;">上万个节点（商用硬件）。</span></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><a href="http://cms.csdnimg.cn/article/201304/28/517ce3ee64519.jpg" target="_blank" style="cursor: pointer; color: #0066cc; text-decoration: none;"><img src="http://cms.csdnimg.cn/article/201304/28/517ce3ee64519.jpg" border="0" alt="" style="vertical-align: middle; border: none; float: right; margin: 0px 0px 10px 10px;" /></a></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><strong>3.	HBase</strong></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">Apache HBase是Hadoop数据库，一个分布式、可扩展的大数据存储。它提供了大数据集上随机和实时的读/写访问，并针对了商用服务器集群上的大型表格做出优化&#8212;&#8212;上百亿行，上千万列。其核心是Google Bigtable论文的开源实现，分布式列式存储。就像Bigtable利用GFS（Google File System）提供的分布式数据存储一样，它是Apache Hadoop在HDFS基础上提供的一个类Bigatable。</p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><a href="http://cms.csdnimg.cn/article/201304/28/517ce413366c7.jpg" target="_blank" style="cursor: pointer; color: #0066cc; text-decoration: none;"><img src="http://cms.csdnimg.cn/article/201304/28/517ce413366c7.jpg" border="0" alt="" style="vertical-align: middle; border: none; float: right; margin: 0px 0px 10px 10px;" /></a></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><strong>4.	Cassandra</strong></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">Apache Cassandra是一个高性能、可线性扩展、高有效性数据库，可以运行在商用硬件或云基础设施上打造完美的任务关键性数据平台。在横跨数据中心的复制中，Cassandra同类最佳，为用户提供更低的延时以及更可靠的灾难备份。通过log-structured update、反规范化和物化视图的强支持以及强大的内置缓存，Cassandra的数据模型提供了方便的二级索引（column indexe）。</p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><a href="http://cms.csdnimg.cn/article/201304/28/517ce4611885c.jpg" target="_blank" style="cursor: pointer; color: #0066cc; text-decoration: none;"><img src="http://cms.csdnimg.cn/article/201304/28/517ce4611885c.jpg" border="0" alt="" style="vertical-align: middle; border: none; float: right; margin: 0px 0px 10px 10px;" /></a></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><strong>5.	Hive</strong></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">Apache Hive是Hadoop的一个数据仓库系统，促进了数据的综述（将结构化的数据文件映射为一张数据库表）、即席查询以及存储在Hadoop兼容系统中的大型数据集分析。Hive提供完整的SQL查询功能&#8212;&#8212;HiveQL语言，同时当使用这个语言表达一个<span style="line-height: 1.45em;">逻辑</span><span style="line-height: 1.45em;">变得低效和繁琐</span><span style="line-height: 1.45em;">时，HiveQL还允许传统的Map/Reduce程序员使用自己定制的Mapper和Reducer。</span></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><a href="http://cms.csdnimg.cn/article/201304/28/517ce470085ed.jpg" target="_blank" style="cursor: pointer; color: #0066cc; text-decoration: none;"><img src="http://cms.csdnimg.cn/article/201304/28/517ce470085ed.jpg" border="0" alt="" style="vertical-align: middle; border: none; float: right; margin: 0px 0px 10px 10px;" /></a></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><strong>6.	Pig</strong></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">Apache Pig是一个用于大型数据集分析的平台，它包含了一个用于数据分析应用的高级语言以及评估这些应用的基础设施。Pig应用的闪光特性在于它们的结构经得起大量的并行，也就是说让它们支撑起非常大的数据集。Pig的基础设施层包含了产生Map-Reduce任务的编译器。Pig的语言层当前包含了一个原生语言&#8212;&#8212;Pig Latin，开发的初衷是易于编程和保证可扩展性。</p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><a href="http://cms.csdnimg.cn/article/201304/28/517ce47b8e077.jpg" target="_blank" style="cursor: pointer; color: #0066cc; text-decoration: none;"><img src="http://cms.csdnimg.cn/article/201304/28/517ce47b8e077.jpg" border="0" alt="" style="vertical-align: middle; border: none; width: 99px; height: 99px; float: right; margin: 0px 0px 10px 10px;" /></a></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><strong>7.	Chukwa</strong></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">Apache Chukwa是个开源的数据收集系统，用以监视大型分布系统。建立于HDFS和Map/Reduce框架之上，继承了Hadoop的可扩展性和稳定性。Chukwa同样包含了一个灵活和强大的工具包，用以显示、监视和分析结果，以保证数据的使用达到最佳效果。</p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><a href="http://cms.csdnimg.cn/article/201304/28/517ce4870b072.jpg" target="_blank" style="cursor: pointer; color: #0066cc; text-decoration: none;"><img src="http://cms.csdnimg.cn/article/201304/28/517ce4870b072.jpg" border="0" alt="" style="vertical-align: middle; border: none; float: right; margin: 0px 0px 10px 10px;" /></a></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><strong>8.	Ambari</strong></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">Apache Ambari是一个基于web的工具，用于配置、管理和监视Apache Hadoop集群，支持Hadoop HDFS,、Hadoop MapReduce、Hive、HCatalog,、HBase、ZooKeeper、Oozie、Pig和Sqoop。Ambari同样还提供了集群状况仪表盘，比如heatmaps和查看MapReduce、Pig、Hive应用程序的能力，以友好的用户界面对它们的性能特性进行诊断。</p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><a href="http://cms.csdnimg.cn/article/201304/28/517ce49282930.jpg" target="_blank" style="cursor: pointer; color: #0066cc; text-decoration: none;"><img src="http://cms.csdnimg.cn/article/201304/28/517ce49282930.jpg" border="0" alt="" style="vertical-align: middle; border: none; float: right; margin: 0px 0px 10px 10px;" /></a></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><strong>9.	ZooKeeper</strong></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">Apache ZooKeeper是一个针对大型分布式系统的可靠协调系统，提供的功能包括：配置维护、命名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务，将简单易用的接口和性能高效、功能稳定的系统提供给用户。</p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><a href="http://cms.csdnimg.cn/article/201304/28/517ce49e31e19.jpg" target="_blank" style="cursor: pointer; color: #0066cc; text-decoration: none;"><img src="http://cms.csdnimg.cn/article/201304/28/517ce49e31e19.jpg" border="0" alt="" style="vertical-align: middle; border: none; float: right; margin: 0px 0px 10px 10px;" /></a></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><strong>10.	Sqoop</strong></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具，可以将一个关系型数据库中数据导入Hadoop的HDFS中，也可以将HDFS中数据导入关系型数据库中。</p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><a href="http://cms.csdnimg.cn/article/201304/28/517ce4b0d3c61.jpg" target="_blank" style="cursor: pointer; color: #0066cc; text-decoration: none;"><img src="http://cms.csdnimg.cn/article/201304/28/517ce4b0d3c61.jpg" border="0" alt="" style="vertical-align: middle; border: none; float: right; margin: 0px 0px 10px 10px;" /></a></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><strong>11.	Oozie</strong></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">Apache Oozie是一个可扩展、可靠及可扩充的工作流调度系统，用以管理Hadoop作业。Oozie Workflow作业是活动的Directed Acyclical Graphs（DAGs）。Oozie Coordinator作业是由周期性的Oozie Workflow作业触发，周期一般决定于时间（频率）和数据可用性。Oozie与余下的Hadoop堆栈结合使用，开箱即用的支持多种类型Hadoop作业（比如：Java map-reduce、Streaming map-reduce、Pig、 Hive、Sqoop和Distcp）以及其它系统作业（比如Java程序和Shell脚本）。</p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><a href="http://cms.csdnimg.cn/article/201304/28/517ce4bdedb23.jpg" target="_blank" style="cursor: pointer; color: #0066cc; text-decoration: none;"><img src="http://cms.csdnimg.cn/article/201304/28/517ce4bdedb23.jpg" border="0" alt="" style="vertical-align: middle; border: none; width: 100px; height: 100px; float: right; margin: 0px 0px 10px 10px;" /></a></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><strong>12.	Mahout</strong></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">Apache Mahout是个可扩展的机器学习和数据挖掘库，当前Mahout支持主要的4个用例：</p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"></p><ul style="margin: 0px 0px 1em 20px; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><li style="margin: 0px; padding: 0px; list-style: disc;"><span style="line-height: 1.45em;">推荐挖掘：搜集用户动作并以此给用户推荐可能喜欢的事物。</span></li><li style="margin: 0px; padding: 0px; list-style: disc;"><span style="line-height: 1.45em;">聚集：收集文件并进行相关文件分组。</span></li><li style="margin: 0px; padding: 0px; list-style: disc;"><span style="line-height: 1.45em;">分类：从现有的分类文档中学习，寻找文档中的相似特征，并为无标签的文档进行正确的归类。</span></li><li style="margin: 0px; padding: 0px; list-style: disc;"><span style="line-height: 1.45em;">频繁项集挖掘：将一组项分组，并识别哪些个别项会经常一起出现。</span></li></ul><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><a href="http://cms.csdnimg.cn/article/201304/28/517ce4cf93346.jpg" target="_blank" style="cursor: pointer; color: #0066cc; text-decoration: none;"><img src="http://cms.csdnimg.cn/article/201304/28/517ce4cf93346.jpg" border="0" alt="" style="vertical-align: middle; border: none; float: right; margin: 0px 0px 10px 10px;" /></a></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><strong>13.	HCatalog</strong></p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;">Apache HCatalog是Hadoop建立数据的映射表和存储管理服务，它包括：</p><p style="margin: 0px 0px 1.5em; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"></p><ul style="margin: 0px 0px 1em 20px; padding: 0px; list-style: none; color: #333333; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 24px; background-color: #ffffff;"><li style="margin: 0px; padding: 0px; list-style: disc;"><span style="line-height: 1.45em;">提供一个共享模式和数据类型机制。</span></li><li style="margin: 0px; padding: 0px; list-style: disc;"><span style="line-height: 1.45em;">提供一个抽象表，这样用户就不需要关注数据存储的方式和地址。</span></li><li style="margin: 0px; padding: 0px; list-style: disc;"><span style="line-height: 1.45em;">为类似Pig、MapReduce及Hive这些数据处理工具提供互操作性。</span></li></ul><img src ="http://www.blogjava.net/paulwong/aggbug/398700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-05-03 09:05 <a href="http://www.blogjava.net/paulwong/archive/2013/05/03/398700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个PIG脚本例子分析</title><link>http://www.blogjava.net/paulwong/archive/2013/04/13/397791.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sat, 13 Apr 2013 07:21:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/04/13/397791.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/397791.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/04/13/397791.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/397791.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/397791.html</trackback:ping><description><![CDATA[执行脚本：<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->PIGGYBANK_PATH=$PIG_HOME/contrib/piggybank/java/piggybank.jar<br />
INPUT=pig/input/test-pig-full.txt<br />
OUTPUT=pig/output/test-pig-output-$(date&nbsp;&nbsp;+%Y%m%d%H%M%S)<br />
PIGSCRIPT=analyst_status_logs.pig<br />
<br />
<span style="color: #008000; ">#</span><span style="color: #008000; ">analyst_500_404_month.pig</span><span style="color: #008000; "><br />
#</span><span style="color: #008000; ">analyst_500_404_day.pig</span><span style="color: #008000; "><br />
#</span><span style="color: #008000; ">analyst_404_percentage.pig</span><span style="color: #008000; "><br />
#</span><span style="color: #008000; ">analyst_500_percentage.pig</span><span style="color: #008000; "><br />
#</span><span style="color: #008000; ">analyst_unique_path.pig</span><span style="color: #008000; "><br />
#</span><span style="color: #008000; ">analyst_user_logs.pig</span><span style="color: #008000; "><br />
#</span><span style="color: #008000; ">analyst_status_logs.pig</span><span style="color: #008000; "><br />
</span><br />
<br />
pig&nbsp;-p&nbsp;PIGGYBANK_PATH=$PIGGYBANK_PATH&nbsp;-p&nbsp;INPUT=$INPUT&nbsp;-p&nbsp;OUTPUT=$OUTPUT&nbsp;$PIGSCRIPT</div><br /><br />要分析的数据源，LOG 文件<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->46.20.45.18&nbsp;-&nbsp;-&nbsp;[25/Dec/2012:23:00:25&nbsp;+0100]&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">GET&nbsp;/&nbsp;HTTP/1.0</span><span style="color: #800000; ">"</span>&nbsp;302&nbsp;-&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">-</span><span style="color: #800000; ">"</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">Pingdom.com_bot_version_1.4_(http://www.pingdom.com/)</span><span style="color: #800000; ">"</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">-</span><span style="color: #800000; ">"</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">-</span><span style="color: #800000; ">"</span>&nbsp;46.20.45.18&nbsp;<span style="color: #800000; ">""</span>&nbsp;11011AEC9542DB0983093A100E8733F8&nbsp;0<br />46.20.45.18&nbsp;-&nbsp;-&nbsp;[25/Dec/2012:23:00:25&nbsp;+0100]&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">GET&nbsp;/sign-in.jspx&nbsp;HTTP/1.0</span><span style="color: #800000; ">"</span>&nbsp;200&nbsp;3926&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">-</span><span style="color: #800000; ">"</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">Pingdom.com_bot_version_1.4_(http://www.pingdom.com/)</span><span style="color: #800000; ">"</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">-</span><span style="color: #800000; ">"</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">-</span><span style="color: #800000; ">"</span>&nbsp;46.20.45.18&nbsp;<span style="color: #800000; ">""</span>&nbsp;11011AEC9542DB0983093A100E8733F8&nbsp;0<br />69.59.28.19&nbsp;-&nbsp;-&nbsp;[25/Dec/2012:23:01:25&nbsp;+0100]&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">GET&nbsp;/&nbsp;HTTP/1.0</span><span style="color: #800000; ">"</span>&nbsp;302&nbsp;-&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">-</span><span style="color: #800000; ">"</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">Pingdom.com_bot_version_1.4_(http://www.pingdom.com/)</span><span style="color: #800000; ">"</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">-</span><span style="color: #800000; ">"</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">-</span><span style="color: #800000; ">"</span>&nbsp;69.59.28.19&nbsp;<span style="color: #800000; ">""</span>&nbsp;36D80DE7FE52A2D89A8F53A012307B0A&nbsp;15</div><br /><br />PIG脚本：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->--注册JAR包，因为要用到DateExtractor<br />register&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">$PIGGYBANK_PATH</span><span style="color: #800000; ">'</span>;<br /><br />--声明一个短函数名<br />DEFINE&nbsp;DATE_EXTRACT_MM&nbsp;<br />org.apache.pig.piggybank.evaluation.util.apachelogparser.DateExtractor(<span style="color: #800000; ">'</span><span style="color: #800000; ">yyyy-MM</span><span style="color: #800000; ">'</span>);<br /><br />DEFINE&nbsp;DATE_EXTRACT_DD&nbsp;<br />org.apache.pig.piggybank.evaluation.util.apachelogparser.DateExtractor(<span style="color: #800000; ">'</span><span style="color: #800000; ">yyyy-MM-dd</span><span style="color: #800000; ">'</span>);<br /><br />--&nbsp;pig/input/test-pig-full.txt<br />--把数据从变量所指的文件加载到PIG中，并定义数据列名，此时的数据集为数组(a,b,c)<br />raw_logs&nbsp;=&nbsp;load&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">$INPUT</span><span style="color: #800000; ">'</span>&nbsp;USING&nbsp;org.apache.pig.piggybank.storage.MyRegExLoader(<span style="color: #800000; ">'</span><span style="color: #800000; ">^(\\S+)&nbsp;(\\S+)&nbsp;(\\S+)&nbsp;\\[([\\w:/]+\\s[+\\-]\\d{4})\\]&nbsp;"(\\S+)&nbsp;(\\S+)&nbsp;(HTTP[^"]+)"&nbsp;(\\S+)&nbsp;(\\S+)&nbsp;"([^"]*)"&nbsp;"([^"]*)"&nbsp;"(\\S+)"&nbsp;"(\\S+)"&nbsp;(\\S+)&nbsp;"(.*)"&nbsp;(\\S+)&nbsp;(\\S+)</span><span style="color: #800000; ">'</span>)<br />as&nbsp;(remoteAddr:&nbsp;chararray,&nbsp;<br />n2:&nbsp;chararray,&nbsp;<br />n3:&nbsp;chararray,&nbsp;<br />time:&nbsp;chararray,&nbsp;<br />method:&nbsp;chararray,<br />path:chararray,<br />protocol:chararray,<br />status:&nbsp;int,&nbsp;<br />bytes_string:&nbsp;chararray,&nbsp;<br />referrer:&nbsp;chararray,&nbsp;<br />browser:&nbsp;chararray,&nbsp;<br />n10:chararray,<br />remoteLogname:&nbsp;chararray,&nbsp;<br />remoteAddr12:&nbsp;chararray,&nbsp;<br />path2:&nbsp;chararray,&nbsp;<br />sessionid:&nbsp;chararray,&nbsp;<br />n15:&nbsp;chararray<br />);<br /><br />--过滤数据<br />filter_logs&nbsp;=&nbsp;FILTER&nbsp;raw_logs&nbsp;BY&nbsp;<span style="color: #0000FF; ">not</span>&nbsp;(browser&nbsp;matches&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">.*pingdom.*</span><span style="color: #800000; ">'</span>);<br />--item_logs&nbsp;=&nbsp;FOREACH&nbsp;raw_logs&nbsp;GENERATE&nbsp;browser;<br /><br />--percent&nbsp;500&nbsp;logs<br />--重定义数据项，数据集只取2项status,month<br />reitem_percent_500_logs&nbsp;=&nbsp;FOREACH&nbsp;filter_logs&nbsp;GENERATE&nbsp;status,DATE_EXTRACT_MM(time)&nbsp;as&nbsp;month;<br />--分组数据集，此时的数据结构为MAP(a{(aa,bb,cc),(dd,ee,ff)},b{(bb,cc,dd),(ff,gg,hh)})<br />group_month_percent_500_logs&nbsp;=&nbsp;GROUP&nbsp;reitem_percent_500_logs&nbsp;BY&nbsp;(month);<br />--重定义分组数据集数据项，进行分组统计，此时要联合分组数据集和原数据集统计<br />final_month_500_logs&nbsp;=&nbsp;FOREACH&nbsp;group_month_percent_500_logs&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;--对原数据集做count，因为是在foreachj里做count的，即使是对原数据集，也会自动会加month==group的条件<br />&nbsp;&nbsp;&nbsp;&nbsp;--从这里可以看出对于group里的数据集，完全没用到<br />&nbsp;&nbsp;&nbsp;&nbsp;--这时是以每一行为单位的，统计MAP中的KEY-a对应的数组在原数据集中的个数<br />&nbsp;&nbsp;&nbsp;&nbsp;total&nbsp;=&nbsp;COUNT(reitem_percent_500_logs);<br />&nbsp;&nbsp;&nbsp;&nbsp;--对原数据集做filter，因为是在foreachj里做count的，即使是对原数据集，也会自动会加month==group的条件<br />&nbsp;&nbsp;&nbsp;&nbsp;--重新过滤一下原数据集，得到status==500,month==group的数据集<br />&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;filter&nbsp;reitem_percent_500_logs&nbsp;by&nbsp;status==&nbsp;500;&nbsp;--create&nbsp;a&nbsp;bag&nbsp;which&nbsp;contains&nbsp;only&nbsp;T&nbsp;values<br />&nbsp;&nbsp;&nbsp;&nbsp;--重定义数据项，取group，统计结果<br />&nbsp;&nbsp;&nbsp;&nbsp;generate&nbsp;flatten(group)&nbsp;as&nbsp;col1,&nbsp;100*(double)COUNT(t)/(double)total;<br />}<br />STORE&nbsp;final_month_500_logs&nbsp;into&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">$OUTPUT</span><span style="color: #800000; ">'</span>&nbsp;using&nbsp;PigStorage(<span style="color: #800000; ">'</span><span style="color: #800000; ">,</span><span style="color: #800000; ">'</span>);</div><br /><img src ="http://www.blogjava.net/paulwong/aggbug/397791.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-04-13 15:21 <a href="http://www.blogjava.net/paulwong/archive/2013/04/13/397791.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>把命令行中的值传进PIG中</title><link>http://www.blogjava.net/paulwong/archive/2013/04/10/397645.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 10 Apr 2013 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/04/10/397645.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/397645.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/04/10/397645.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/397645.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/397645.html</trackback:ping><description><![CDATA[<a href="http://wiki.apache.org/pig/ParameterSubstitution" target="_blank">http://wiki.apache.org/pig/ParameterSubstitution<br />
<br />
<br />
</a>
<div>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->%pig&nbsp;-param&nbsp;input=/user/paul/sample.txt&nbsp;-param&nbsp;output=/user/paul/output/</div>
</div><br /><br />PIG中获取<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->records&nbsp;=&nbsp;LOAD&nbsp;<span style="color: #800080; ">$input</span>;</div><img src ="http://www.blogjava.net/paulwong/aggbug/397645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-04-10 15:32 <a href="http://www.blogjava.net/paulwong/archive/2013/04/10/397645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PIG小议</title><link>http://www.blogjava.net/paulwong/archive/2013/04/05/397411.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 05 Apr 2013 13:33:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/04/05/397411.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/397411.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/04/05/397411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/397411.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/397411.html</trackback:ping><description><![CDATA[<div><strong>什么是PIG</strong></div><div>是一种设计语言，通过设计数据怎么流动，然后由相应的引擎将此变成MAPREDUCE JOB去HADOOP中运行。</div><div></div><div></div><div><strong>PIG与SQL</strong></div><div>两者有相同之处，执行一个或多个语句，然后出来一些结果。</div><div>但不同的是，SQL要先把数据导到表中才能执行，SQL不关心中间如何做，即发一个SQL语句过去，就有结果出来。</div><div>PIG，无须导数据到表中，但要设计直到出结果的中间过程，步骤如何等等。</div><img src ="http://www.blogjava.net/paulwong/aggbug/397411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-04-05 21:33 <a href="http://www.blogjava.net/paulwong/archive/2013/04/05/397411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hadoop集群中添加节点步骤</title><link>http://www.blogjava.net/paulwong/archive/2013/03/16/396544.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sat, 16 Mar 2013 15:04:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/03/16/396544.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/396544.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/03/16/396544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/396544.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/396544.html</trackback:ping><description><![CDATA[在新节点安装好hadoop<br /><br /><br />把namenode的有关配置文件复制到该节点<br /><br /><br />修改masters和slaves文件,增加该节点<br /><br /><br />设置ssh免密码进出该节点<br /><br /><br />单独启动该节点上的datanode和tasktracker(hadoop-daemon.sh start  datanode/tasktracker)<br /><br /><br />运行start-balancer.sh进行数据负载均衡<br />  <br /><br />负载均衡:作用:当节点出现故障,或新增加节点时,数据块分布可能不均匀,负载均衡可以重新平衡各个datanode上数据块的分布<img src ="http://www.blogjava.net/paulwong/aggbug/396544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-03-16 23:04 <a href="http://www.blogjava.net/paulwong/archive/2013/03/16/396544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Phoenix: HBase终于有SQL接口了～</title><link>http://www.blogjava.net/paulwong/archive/2013/02/19/395432.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 19 Feb 2013 15:15:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/02/19/395432.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/395432.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/02/19/395432.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/395432.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/395432.html</trackback:ping><description><![CDATA[这项利器是由CRM领域的领导Saleforce发布的。相当于HBase的JDBC。<br /><br />具体详见：<a href="https://github.com/forcedotcom/phoenix" target="_blank">https://github.com/forcedotcom/phoenix</a><br /><br />支持select，from，where，groupby，having，orderby和建表操作，未来将支持二级索引，join操作，动态列簇等功能。<br /><br />是建立在原生HBASE API基础上的，响应时间10M级别的数据是毫秒，100M级别是秒。<br /><br /><br /><div><a href="http://www.infoq.com/cn/news/2013/02/Phoenix-HBase-SQL" target="_blank">http://www.infoq.com/cn/news/2013/02/Phoenix-HBase-SQL</a></div><img src ="http://www.blogjava.net/paulwong/aggbug/395432.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-02-19 23:15 <a href="http://www.blogjava.net/paulwong/archive/2013/02/19/395432.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>监控HBASE</title><link>http://www.blogjava.net/paulwong/archive/2013/02/04/395107.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 04 Feb 2013 07:08:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/02/04/395107.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/395107.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/02/04/395107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/395107.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/395107.html</trackback:ping><description><![CDATA[@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
<div>Hadoop/Hbase是开源版的google Bigtable, GFS, MapReduce的实现，随着互联网的发展，大数据的处理显得越发重要，Hadoop/Hbase的用武之地也越发广泛。为了更好的使用Hadoop/Hbase系统，需要有一套完善的监控系统，来了解系统运行的实时状态，做到一切尽在掌握。Hadoop/Hbase有自己非常完善的metrics framework, 里面包种各种维度的系统指标的统计，另外，这套metrics framework设计的也非常不错，用户可以很方便地添加自定义的metrics。更为重要的一点是metrics的展示方式，目前它支持三种方式：一种是落地到本地文件，一种是report给Ganglia系统，另一种是通过JMX来展示。本文主要介绍怎么把Hadoop/Hbase的metrics report给Ganglia系统，通过浏览器来查看。<br />
<br />
介绍后面的内容之前有必要先简单介绍一下Ganglia系统。Ganglia是一个开源的用于系统监控的系统，它由三部分组成：gmond, gmetad, webfrontend, 三部分是这样分工的：<br />
<br />
gmond: 是一个守护进程，运行在每一个需要监测的节点上，收集监测统计，发送和接受在同一个组播或单播通道上的统计信息<br />
gmetad: 是一个守护进程，定期检查gmond，从那里拉取数据，并将他们的指标存储在RRD存储引擎中<br />
webfrontend: 安装在有gmetad运行的机器上，以便读取RRD文件，用来做前台展示<br />
<br />
简单总结它们三者的各自的功用，gmond收集数据各个node上的metrics数据，gmetad汇总gmond收集到的数据，webfrontend在前台展示gmetad汇总的数据。Ganglia缺省是对系统的一些metric进行监控，比如cpu/memory/net等。不过Hadoop/Hbase内部做了对Ganglia的支持，只需要简单的改配置就可以将Hadoop/Hbase的metrics也接入到ganglia系统中进行监控。<br />
<br />
接下来介绍如何把Hadoop/Hbase接入到Ganglia系统，这里的Hadoop/Hbase的版本号是0.94.2，早期的版本可能会有一些不同，请注意区别。Hbase本来是Hadoop下面的子项目，因此所用的metrics framework原本是同一套Hadoop metrics，但后面hadoop有了改进版本的metrics framework:metrics2(metrics version 2), Hadoop下面的项目都已经开始使用metrics2, 而Hbase成了Apache的顶级子项目，和Hadoop成为平行的项目后，目前还没跟进metrics2，它用的还是原始的metrics.因此这里需要把Hadoop和Hbase的metrics分开介绍。<br />
<br />
Hadoop接入Ganglia:<br />
<br />
1. Hadoop metrics2对应的配置文件为：hadoop-metrics2.properties<br />
2. hadoop metrics2中引用了source和sink的概念，source是用来收集数据的, sink是用来把source收集的数据consume的（包括落地文件，上报ganglia，JMX等）<br />
3. hadoop metrics2配置支持Ganglia:</div>
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->#*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink30<br />
*.sink.ganglia.class=org.apache.hadoop.metrics2.sink.ganglia.GangliaSink31<br />
&nbsp;<br />
*.sink.ganglia.period=10<br />
*.sink.ganglia.supportsparse=true<br />
*.sink.ganglia.slope=jvm.metrics.gcCount=zero,jvm.metrics.memHeapUsedM=both<br />
*.sink.ganglia.dmax=jvm.metrics.threadsBlocked=70,jvm.metrics.memHeapUsedM=40<br />
&nbsp;<br />
#uncomment&nbsp;as&nbsp;your&nbsp;needs<br />
namenode.sink.ganglia.servers=10.235.6.156:8649<br />
#datanode.sink.ganglia.servers=10.235.6.156:8649<br />
#jobtracker.sink.ganglia.servers=10.0.3.99:8649<br />
#tasktracker.sink.ganglia.servers=10.0.3.99:8649<br />
#maptask.sink.ganglia.servers=10.0.3.99:8649<br />
#reducetask.sink.ganglia.servers=10.0.3.99:8649</div>
</div>
<br />
<div><br />
</div>
<div>这里需要注意的几点：<br />
<br />
(1) 因为Ganglia3.1与3.0不兼容，需要根据Ganglia的版本选择使用GangliaSink30或者GangliaSink31<br />
(2) period配置上报周期，单位是秒(s)<br />
(3) namenode.sink.ganglia.servers指定Ganglia gmetad所在的host:port，用来向其上报数据<br />
(4) 如果同一个物理机器上同时启动了多个hadoop进程(namenode/datanode, etc)，根据需要把相应的进程的sink.ganglia.servers配置好即可<br />
Hbase接入Ganglia:<br />
<br />
1. Hbase所用的hadoop metrics对应的配置文件是: hadoop-metrics.properties<br />
2. hadoop metrics里核心是Context，写文件有写文件的TimeStampingFileContext, 向Ganglia上报有GangliaContext/GangliaContext31<br />
3. hadoop metrics配置支持Ganglia:</div>
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->#&nbsp;Configuration&nbsp;of&nbsp;the&nbsp;"hbase"&nbsp;context&nbsp;for&nbsp;ganglia<br />
#&nbsp;Pick&nbsp;one:&nbsp;Ganglia&nbsp;3.0&nbsp;(former)&nbsp;or&nbsp;Ganglia&nbsp;3.1&nbsp;(latter)<br />
#&nbsp;hbase.class=org.apache.hadoop.metrics.ganglia.GangliaContext<br />
hbase.class=org.apache.hadoop.metrics.ganglia.GangliaContext31<br />
hbase.period=10<br />
hbase.servers=10.235.6.156:8649</div>
</div>
<div><br />
</div>
<div>这里需要注意几点：<br />
<br />
(1) 因为Ganglia3.1和3.0不兼容，所以如果是3.1以前的版本，需要用GangliaContext, 如果是3.1版的Ganglia，需要用GangliaContext31<br />
(2) period的单位是秒(s)，通过period可以配置向Ganglia上报数据的周期<br />
(3) servers指定的是Ganglia gmetad所在的host:port，把数据上报到指定的gmetad<br />
(4) 对rpc和jvm相关的指标都可以进行类似的配置</div>
<div><br />
</div>
<div><br />
</div>
<div><br />
</div>
<div><br />
</div>
<div><br />
</div><img src ="http://www.blogjava.net/paulwong/aggbug/395107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-02-04 15:08 <a href="http://www.blogjava.net/paulwong/archive/2013/02/04/395107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HBASE部署要点</title><link>http://www.blogjava.net/paulwong/archive/2013/02/04/395101.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 04 Feb 2013 04:10:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/02/04/395101.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/395101.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/02/04/395101.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/395101.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/395101.html</trackback:ping><description><![CDATA[<div>REGIONS SERVER和TASK TRACKER SERVER不要在同一台机器上，最好如果有MAPREDUCE JOB运行的话，应该分开两个CLUSTER，即两群不同的服务器上，这样MAPREDUCE 的线下负载不会影响到SCANER这些线上负载。</div>
<div><br />
</div>
<div>如果主要是做MAPREDUCE JOB的话，将REGIONS SERVER和TASK TRACKER SERVER放在一起是可以的。</div>
<div><br />
</div>
<div><br />
</div>
<div><span style="background-color: yellow; color: red; ">原始集群模式</span></div>
<div><br />
</div>
10个或以下节点，无MAPREDUCE JOB，主要用于低延迟的访问。每个节点上的配置为：CPU4-6CORE，内存24-32G，4个SATA硬盘。Hadoop NameNode, JobTracker, HBase Master, 和ZooKeeper全都在同一个NODE上。
<div><br />
</div>
<div><br />
</div>
<div>
<div><span style="background-color: yellow; color: red; ">小型集群模式（10-20台服务器）</span></div>
<div><br />
</div>
HBase Master放在单独一台机器上, 以便于使用较低配置的机器。ZooKeeper也放在单独一台机器上，NameNode和JobTracker放在同一台机器上。</div>
<div><br />
</div>
<div>
<div><span style="background-color: yellow; color: red; ">中型集群模式（20-50台服务器）</span></div>
<div><br />
</div>
由于无须再节省费用，可以将HBase Master和ZooKeeper放在同一台机器上,&nbsp;ZooKeeper和HBase Master要三个实例。NameNode和JobTracker放在同一台机器上。</div>
<div><br />
</div>
<div>
<div><span style="background-color: yellow; color: red; ">大型集群模式（&gt;50台服务器）</span></div>
<div><br />
</div>
和中型集群模式相似，但ZooKeeper和HBase Master要五个实例。NameNode和Second&nbsp;NameNode要有足够大的内存。</div>
<div><br />
</div>
<div>
<div><span style="background-color: yellow; color: red; ">HADOOP MASTER节点</span></div>
<div><br />
</div>
NameNode和Second&nbsp;NameNode服务器配置要求：（小型）8CORE CPU，16G内存，1G网卡和SATA 硬盘，中弄再增加多16G内存，大型则再增加多32G内存。</div>
<div><br />
</div>
<div>
<div><span style="background-color: yellow; color: red; ">HBASE MASTER节点</span></div>
<div><br />
</div>
服务器配置要求：4CORE CPU，8-16G内存，1G网卡和2个SATA 硬盘，一个用于操作系统，另一个用于HBASE MASTER LOGS。</div>
<div><br />
</div>
<div>
<div><span style="background-color: yellow; color: red; ">HADOOP DATA NODES和HBASE REGION SERVER节点</span></div>
<div><br />
</div>
DATA NODE和REGION SERVER应在同一台服务器上，且不应该和TASK TRACKER在一起。服务器配置要求：8-12CORE CPU，24-32G内存，1G网卡和12*1TB SATA 硬盘，一个用于操作系统，另一个用于HBASE MASTER LOGS。</div>
<div><br />
</div>
<div>
<div><span style="background-color: yellow; color: red; ">ZOOPKEEPERS节点</span></div>
<div><br />
</div>
服务器配置和HBASE MASTER相似，也可以与HBASE MASTER放在一起，但就要多增加一个硬盘单独给ZOOPKEEPER使用。</div>
<div><br />
</div>
<div>
<div><span style="background-color: yellow; color: red; ">安装各节点</span></div>
<div><br />
</div>
JVM配置：</div>
-Xmx8g&#8212;设置HEAP的最大值到8G，不建议设到15 GB.<br />
-Xms8g&#8212;设置HEAP的最小值到8GS.<br />
-Xmn128m&#8212;设置新生代的值到128 MB，默认值太小。<br />
-XX:+UseParNewGC&#8212;设置对于新生代的垃圾回收器类型，这种类型是会停止JAVA进程，然后再进行回收的，但由于新生代体积比较小，持续时间通常只有几毫秒，因此可以接受。<br />
-XX:+UseConcMarkSweepGC&#8212;设置老生代的垃圾回收类型，如果用新生代的那个会不合适，即会导致JAVA进程停止的时间太长，用这种不会停止JAVA进程，而是在JAVA进程运行的同时，并行的进行回收。<br />
-XX:CMSInitiatingOccupancyFraction&#8212;设置CMS回收器运行的频率。<br />
<div><br />
</div>
<div><br />
</div>
<div><br />
</div>
<div><br />
</div><img src ="http://www.blogjava.net/paulwong/aggbug/395101.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-02-04 12:10 <a href="http://www.blogjava.net/paulwong/archive/2013/02/04/395101.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HBASE读书笔记</title><link>http://www.blogjava.net/paulwong/archive/2013/02/01/395020.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 01 Feb 2013 05:55:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/02/01/395020.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/395020.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/02/01/395020.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/395020.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/395020.html</trackback:ping><description><![CDATA[<div>GET、PUT是ONLINE的操作，MAPREDUCE是OFFLINE的操作</div>
<div></div><br/><br/>
<div><span style="color: #0000ff; background-color: yellow;">HDFS写流程</span></div>
<div>客户端收到要保存文件的请求后，将文件以64M为单位拆成若干份BLOCK，形成一个列表，即由几个BLOCK组成，将这些信息告诉NAME NODE，我要保存这个，NAME NODE算出一个列表，哪段BLOCK应该写到哪个DATA NODE，客户端将第一个BLOCK传到第一个节点DATA NODE A，通知其保存，同时让它通知DATA NODE D和DATA NODE B也保存一份，DATA NODE D收到信息后进行了保存，同时通知DATA NODE B保存一份，DATA NODE B保存完成后则通知客户端保存完成，客户端再去向NAME NODE中取下一个BLOCK要保存的位置，重复以上的动作，直到所有的BLOCK都保存完成。</div>
<div></div><br/>
<div><span style="color: #0000ff; background-color: yellow;">HDFS读流程</span></div>
<div>客户端向NAME NODE请求读一个文件，NAME NODE返回这个文件所构成的所有BLOCK的DATA NODE IP及BLOCK ID，客户端并行的向各DATA NODE发出请求，要取某个BLOCK ID的BLOCK，DATA NODE发回所要的BLOCK给客户端，客户端收集到所有的BLOCK后，整合成一个完整的文件后，此流程结束。<br />
<br />
<br />
</div>
<div></div>
<div><span style="color: #0000ff; background-color: yellow;">MAPREDUCE流程</span></div>
<div>输入数据 -- 非多线程了，而是多进程的挑选数据，即将输入数据分成多块，每个进程处理一块 -- 分组 -- 多进程的汇集数据 -- 输出</div>
<div><br />
<span style="color: #0000ff; background-color: yellow;">HBASE表结构</span></div>
<div>HBASE中将一个大表数据分成不同的小表，每个小表叫REGION，存放REGION的服务器叫REGIONSERVER，一个REGIONSERVER可以存放多个REGION。通常REGIONSERVER和DATA NODE是在同一服务器，以减少NETWORK IO。</div>
<div></div>
<div>-ROOT-表存放于MASTER SERVER上，记录了一共有多少个REGIONSERVER，每个REGION SERVER上都有一个.META.表，上面记录了本REGION SERVER放有哪几个表的哪几个REGION。如果要知道某个表共有几个REGION，就得去所有的REGION SERVER上查.META.表，进行汇总才能得知。</div>
<div></div>
<div>客户端如果要查ROW009的信息，先去咨询ZOOPKEEPER，-ROOT-表在哪里，然后问-ROOT-表，哪个.META.知道这个信息，然后去问.META.表，哪个REGION有这个信息，然后去那个REGION问ROW009的信息，然后那个REGION返回此信息。<br />
</div>
<br />
<br />
<div><span style="color: #0000ff; background-color: yellow;">HBASE MAPREDUCE</span></div>
<div>一个REGION一个MAP任务，而任务里的map方法执行多少次，则由查询出来的记录有多少条，则执行多少次。</div>
<div>REDUCE任务负责向REGION写数据，但写到哪个REGION则由那个KEY归属哪个REGION管，则写到哪个REGION，有可能REDUCE任务会和所有的REGION SERVER交互。<br />
</div>
<br />
<br />
<div><span style="color: #0000ff; background-color: yellow;">在HBASE的MAPREDUCE JOB中使用JOIN</span></div>
<div>REDUCE-SIDE JOIN<br />
利用现有的SHUTTLE分组机制，在REDUCE阶段做JOIN，但由于MAP阶段数据大，可能会有性能问题。</div>
<div>MAP-SIDE JOIN</div>
<div>将数据较少的一表读到一公共文件中，然后在MPA方法中循环另一表的数据，再将要的数据从公共文件中读取。这样可以减少SHUTTLE和SORT的时间，同时也不需要REDUCE任务。</div>
<div></div>
<img src ="http://www.blogjava.net/paulwong/aggbug/395020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-02-01 13:55 <a href="http://www.blogjava.net/paulwong/archive/2013/02/01/395020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hadoop的几种Join方法</title><link>http://www.blogjava.net/paulwong/archive/2013/01/31/395000.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 31 Jan 2013 10:24:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/01/31/395000.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/395000.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/01/31/395000.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/395000.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/395000.html</trackback:ping><description><![CDATA[1)      在Reduce阶段进行Join,这样运算量比较小.(这个适合被Join的数据比较小的情况下.)<br />2)      压缩字段,对数据预处理,过滤不需要的字段.<br />3)      最后一步就是在Mapper阶段过滤,这个就是Bloom Filter的用武之地了.也就是需要详细说明的地方.<br /><br /> <br />下面就拿一个我们大家都熟悉的场景来说明这个问题: 找出上个月动感地带的客户资费的使用情况,包括接入和拨出.<br /><br />(这个只是我臆想出来的例子,根据实际的DB数据存储结构,在这个场景下肯定有更好的解决方案,大家不要太较真哦)<br /><br />这个时候的两个个数据集都是比较大的,这两个数据集分别是:上个月的通话记录,动感地带的手机号码列表.<br /><br /><br />比较直接的处理方法有2种:<br /><br /><strong>1)在 Reduce 阶段,通过动感地带号码来过滤.</strong><br /><br />                优点:这样需要处理的数据相对比较少,这个也是比较常用的方法.<br /><br />                缺点:很多数据在Mapper阶段花了老鼻子力气汇总了,还通过网络Shuffle到Reduce节点,结果到这个阶段给过滤了.<br /><br /> <br /><br /><strong>2)在 Mapper 阶段时,通过动感地带号码来过滤数据.</strong><br /><br />                优点:这样可以过滤很多不是动感地带的数据,比如神州行,全球通.这些过滤的数据就可以节省很多网络带宽了.<br /><br />                缺点:就是动感地带的号码不是小数目,如果这样处理就需要把这个大块头复制到所有的Mapper节点,甚至是Distributed Cache.(Bloom Filter就是用来解决这个问题的)<br /><br /><br />Bloom Filter就是用来解决上面方法2的缺点的.<br /><br />方法2的缺点就是大量的数据需要在多个节点复制.Bloom Filter通过多个Hash算法, 把这个号码列表压缩到了一个Bitmap里面. 通过允许一定的错误率来换空间, 这个和我们平时经常提到的时间和空间的互换类似.详细情况可以参考:<br /><br />http://blog.csdn.net/jiaomeng/article/details/1495500<br /><br />但是这个算法也是有缺陷的,就是会把很多神州行,全球通之类的号码当成动感地带.但在这个场景中,这根本不是问题.因为这个算法只是过滤一些号码,漏网之鱼会在Reduce阶段进行精确匹配时顾虑掉.<br /><br />这个方法改进之后基本上完全回避了方法2的缺点:<br /><br />1)      没有大量的动感地带号码发送到所有的Mapper节点.<br />2)      很多非动感地带号码在Mapper阶段就过滤了(虽然不是100%),避免了网络带宽的开销及延时.<br /><br /><br />继续需要学习的地方:Bitmap的大小, Hash函数的多少, 以及存储的数据的多少. 这3个变量如何取值才能才能在存储空间与错误率之间取得一个平衡.<img src ="http://www.blogjava.net/paulwong/aggbug/395000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-01-31 18:24 <a href="http://www.blogjava.net/paulwong/archive/2013/01/31/395000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配置secondarynamenode</title><link>http://www.blogjava.net/paulwong/archive/2013/01/31/394998.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 31 Jan 2013 09:39:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/01/31/394998.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/394998.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/01/31/394998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/394998.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/394998.html</trackback:ping><description><![CDATA[NAME NODE起保存DATA NODE上文件的位置信息用，主要有两个保存文件：FsImage和EditLog，FsImage保存了上一次NAME NODE启动时的状态，EditLog则记录每次成功后的对HDFS的操作行为。当NAME NODE重启时，会合并FsImage和EditLog成为一个新的FsImage，清空EditLog，如果EditLog非常大的时候，则NAME NODE启动的时间会非常长。因此就有SECOND NAME NODE。<br /><br /><br />SECOND NAME NODE会以HTTP的方式向NAME NODE要这两个文件，当NAME NODE收到请求时，就会韦一个新的EditLog来记录，这时SECOND NAME NODE就会将取得的这两个文件合并，成一个新的FsImage，再发给NAME NODE，NAME NODE收到后，就会以这个为准，旧的就会归档不用。<br /><br /><br />SECOND NAME NODE还有一个用途就是当NAME NODE DOWN了的时候，可以改SECOND NAME NODE的IP为NAME NODE所用的IP，当NAME NODE用。<br /><br />secondary namenoded 配置很容易被忽视，如果jps检查都正常，大家通常不会太关心，除非namenode发生问题的时候，才会想起还有个secondary namenode，它的配置共两步：<br />
<br />
<ol>
     <li>集群配置文件conf/master中添加secondarynamenode的机器</li>
     <li>修改/添加 hdfs-site.xml中如下属性：<br />
     <br />
     </li>
</ol>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span>dfs.http.address<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span>{your_namenode_ip}:50070<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">description</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;The&nbsp;address&nbsp;and&nbsp;the&nbsp;base&nbsp;port&nbsp;where&nbsp;the&nbsp;dfs&nbsp;namenode&nbsp;web&nbsp;ui&nbsp;will&nbsp;listen&nbsp;on.<br />
&nbsp;If&nbsp;the&nbsp;port&nbsp;is&nbsp;0&nbsp;then&nbsp;the&nbsp;server&nbsp;will&nbsp;start&nbsp;on&nbsp;a&nbsp;free&nbsp;port.<br />
&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">description</span><span style="color: #0000FF; ">&gt;</span><br />
&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span></div>
<br />
<br />
这两项配置OK后，启动集群。进入secondary namenode 机器，检查fs.checkpoint.dir（core-site.xml文件，默认为${hadoop.tmp.dir}/dfs/namesecondary）目录同步状态是否和namenode一致的。<br />
<br />
如果不配置第二项则，secondary namenode同步文件夹永远为空，这时查看secondary namenode的log显示错误为：<br />
<br />
<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->2011-06-09&nbsp;11:06:41,430&nbsp;INFO&nbsp;org.apache.hadoop.hdfs.server.common.Storage:&nbsp;Recovering&nbsp;storage&nbsp;directory&nbsp;/tmp/hadoop-hadoop/dfs/namesecondary&nbsp;from&nbsp;failed&nbsp;checkpoint.<br />
2011-06-09&nbsp;11:06:41,433&nbsp;ERROR&nbsp;org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode:&nbsp;Exception&nbsp;in&nbsp;doCheckpoint:&nbsp;<br />
2011-06-09&nbsp;11:06:41,434&nbsp;ERROR&nbsp;org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode:&nbsp;java.net.ConnectException:&nbsp;Connection&nbsp;refused<br />
at&nbsp;java.net.PlainSocketImpl.socketConnect(Native&nbsp;Method)<br />
at&nbsp;java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)<br />
at&nbsp;java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:211)<br />
at&nbsp;java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)<br />
at&nbsp;java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)<br />
at&nbsp;java.net.Socket.connect(Socket.java:529)<br />
at&nbsp;java.net.Socket.connect(Socket.java:478)<br />
at&nbsp;sun.net.NetworkClient.doConnect(NetworkClient.java:163)<br />
at&nbsp;sun.net.www.http.HttpClient.openServer(HttpClient.java:394)<br />
at&nbsp;sun.net.www.http.HttpClient.openServer(HttpClient.java:529)<br />
at&nbsp;sun.net.www.http.HttpClient.&lt;init&gt;(HttpClient.java:233)<br />
at&nbsp;sun.net.www.http.HttpClient.New(HttpClient.java:306)<br />
at&nbsp;sun.net.www.http.HttpClient.New(HttpClient.java:323)<br />
at&nbsp;sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)<br />
at&nbsp;sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911)<br />
at&nbsp;sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)<br />
at&nbsp;sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)<br />
at&nbsp;org.apache.hadoop.hdfs.server.namenode.TransferFsImage.getFileClient(TransferFsImage.java:151)<br />
at&nbsp;org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.downloadCheckpointFiles(SecondaryNameNode.java:256)<br />
at&nbsp;org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.doCheckpoint(SecondaryNameNode.java:313)<br />
at&nbsp;org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.run(SecondaryNameNode.java:225)<br />
at&nbsp;java.lang.Thread.run(Thread.java:662)</div><br /><br /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">可能用到的core-site.xml文件相关属性</span><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">：<br /><br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span>fs.checkpoint.period<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span>300<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">description</span><span style="color: #0000FF; ">&gt;</span>The&nbsp;number&nbsp;of&nbsp;seconds&nbsp;between&nbsp;two&nbsp;periodic&nbsp;checkpoints.<br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">description</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br /><br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span>fs.checkpoint.dir<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span>${hadoop.tmp.dir}/dfs/namesecondary<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">description</span><span style="color: #0000FF; ">&gt;</span>Determines&nbsp;where&nbsp;on&nbsp;the&nbsp;local&nbsp;filesystem&nbsp;the&nbsp;DFS&nbsp;secondary<br />&nbsp;name&nbsp;node&nbsp;should&nbsp;store&nbsp;the&nbsp;temporary&nbsp;images&nbsp;to&nbsp;merge.<br />&nbsp;If&nbsp;this&nbsp;is&nbsp;a&nbsp;comma-delimited&nbsp;list&nbsp;of&nbsp;directories&nbsp;then&nbsp;the&nbsp;image&nbsp;is<br />&nbsp;replicated&nbsp;in&nbsp;all&nbsp;of&nbsp;the&nbsp;directories&nbsp;for&nbsp;redundancy.<br />&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">description</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span></div><img src ="http://www.blogjava.net/paulwong/aggbug/394998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-01-31 17:39 <a href="http://www.blogjava.net/paulwong/archive/2013/01/31/394998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大规模数据查重的多种方法，及Bloom Filter的应用</title><link>http://www.blogjava.net/paulwong/archive/2013/01/31/394980.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 31 Jan 2013 05:55:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/01/31/394980.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/394980.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/01/31/394980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/394980.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/394980.html</trackback:ping><description><![CDATA[挺有意思的题目。<br /><br /><br /><strong>1. 给你A,B两个文件，各存放50亿条URL，每条URL占用64字节，内存限制是4G，让你找出:A,B文件共同的URL。</strong>  <br />解法一：Hash成内存大小的小块文件，然后分块内存内查交集。<br />解法二：Bloom Filter（广泛应用于URL过滤、查重。参考http://en.wikipedia.org/wiki/Bloom_filter、http://blog.csdn.net/jiaomeng/archive/2007/01/28/1496329.aspx）<br /><br /><br /><strong>2. 有10个文件，每个文件1G， 每个文件的每一行都存放的是用户的query，每个文件的query都可能重复。要你按照query的频度排序。</strong><br />解法一：根据数据稀疏程度算法会有不同，通用方法是用Hash把文件重排，让相同query一定会在同一个文件，同时进行计数，然后归并，用最小堆来统计频度最大的。<br />解法二：类似1，但是用的是与简单Bloom Filter稍有不同的CBF（Counting Bloom Filter）或者更进一步的SBF（Spectral Bloom Filter，参考http://blog.csdn.net/jiaomeng/archive/2007/03/19/1534238.aspx）<br />解法三：MapReduce，几分钟可以在hadoop集群上搞定。参考http://en.wikipedia.org/wiki/MapReduce<br /><br /><br /><strong>3. 有一个1G大小的一个文件，里面每一行是一个词，词的大小不超过16个字节，内存限制大小是1M。返回频数最高的100个词。</strong><br />解法一：跟2类似，只是不需要排序，各个文件分别统计前100，然后一起找前100。<img src ="http://www.blogjava.net/paulwong/aggbug/394980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-01-31 13:55 <a href="http://www.blogjava.net/paulwong/archive/2013/01/31/394980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows环境下用ECLIPSE提交MAPREDUCE JOB至远程HBASE中运行</title><link>http://www.blogjava.net/paulwong/archive/2013/01/29/394851.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 28 Jan 2013 16:19:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/01/29/394851.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/394851.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/01/29/394851.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/394851.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/394851.html</trackback:ping><description><![CDATA[<ol>
     <li>假设远程HADOOP主机名为ubuntu，则应在hosts文件中加上192.168.58.130 &nbsp; &nbsp; &nbsp; ubuntu<br />
     <br /><br />
     </li>
     <li>新建MAVEN项目，加上相应的配置<br />
     pom.xml<br />
     <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     --><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">project&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">="http://maven.apache.org/POM/4.0.0"</span><span style="color: #FF0000; ">&nbsp;xmlns:xsi</span><span style="color: #0000FF; ">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #FF0000; "><br />
     &nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000FF; ">="http://maven.apache.org/POM/4.0.0&nbsp;http://maven.apache.org/xsd/maven-4.0.0.xsd"</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">modelVersion</span><span style="color: #0000FF; ">&gt;</span>4.0.0<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">modelVersion</span><span style="color: #0000FF; ">&gt;</span><br />
     <br />
     &nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>com.cloudputing<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>bigdata<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span>1.0<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">packaging</span><span style="color: #0000FF; ">&gt;</span>jar<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">packaging</span><span style="color: #0000FF; ">&gt;</span><br />
     <br />
     &nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span>bigdata<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">url</span><span style="color: #0000FF; ">&gt;</span>http://maven.apache.org<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">url</span><span style="color: #0000FF; ">&gt;</span><br />
     <br />
     &nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">properties</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">project</span><span style="color: #FF0000; ">.build.sourceEncoding</span><span style="color: #0000FF; ">&gt;</span>UTF-8<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">project.build.sourceEncoding</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">properties</span><span style="color: #0000FF; ">&gt;</span><br />
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>junit<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>junit<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span>3.8.1<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span>test<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">scope</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.springframework.data<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>spring-data-hadoop<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span>0.9.0.RELEASE<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.apache.hbase<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>hbase<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span>0.94.1<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;&lt;dependency&gt;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;org.apache.hbase&lt;/groupId&gt;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;hbase&lt;/artifactId&gt;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;0.90.2&lt;/version&gt;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/dependency&gt;&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.apache.hadoop<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>hadoop-core<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span>1.0.3<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.springframework<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>spring-test<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span>3.0.5.RELEASE<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependency</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dependencies</span><span style="color: #0000FF; ">&gt;</span><br />
     <span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">project</span><span style="color: #0000FF; ">&gt;</span></div>
     </li>
     <br /><br />
     <li>
     <div>hbase-site.xml<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     --><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"</span><span style="color: #0000FF; ">?&gt;</span><br />
     <span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml-stylesheet&nbsp;type="text/xsl"&nbsp;href="configuration.xsl"</span><span style="color: #0000FF; ">?&gt;</span><br />
     <span style="color: #008000; ">&lt;!--</span><span style="color: #008000; "><br />
     /**<br />
     &nbsp;*&nbsp;Copyright&nbsp;2010&nbsp;The&nbsp;Apache&nbsp;Software&nbsp;Foundation<br />
     &nbsp;*<br />
     &nbsp;*&nbsp;Licensed&nbsp;to&nbsp;the&nbsp;Apache&nbsp;Software&nbsp;Foundation&nbsp;(ASF)&nbsp;under&nbsp;one<br />
     &nbsp;*&nbsp;or&nbsp;more&nbsp;contributor&nbsp;license&nbsp;agreements.&nbsp;&nbsp;See&nbsp;the&nbsp;NOTICE&nbsp;file<br />
     &nbsp;*&nbsp;distributed&nbsp;with&nbsp;this&nbsp;work&nbsp;for&nbsp;additional&nbsp;information<br />
     &nbsp;*&nbsp;regarding&nbsp;copyright&nbsp;ownership.&nbsp;&nbsp;The&nbsp;ASF&nbsp;licenses&nbsp;this&nbsp;file<br />
     &nbsp;*&nbsp;to&nbsp;you&nbsp;under&nbsp;the&nbsp;Apache&nbsp;License,&nbsp;Version&nbsp;2.0&nbsp;(the<br />
     &nbsp;*&nbsp;"License");&nbsp;you&nbsp;may&nbsp;not&nbsp;use&nbsp;this&nbsp;file&nbsp;except&nbsp;in&nbsp;compliance<br />
     &nbsp;*&nbsp;with&nbsp;the&nbsp;License.&nbsp;&nbsp;You&nbsp;may&nbsp;obtain&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;License&nbsp;at<br />
     &nbsp;*<br />
     &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.apache.org/licenses/LICENSE-2.0<br />
     &nbsp;*<br />
     &nbsp;*&nbsp;Unless&nbsp;required&nbsp;by&nbsp;applicable&nbsp;law&nbsp;or&nbsp;agreed&nbsp;to&nbsp;in&nbsp;writing,&nbsp;software<br />
     &nbsp;*&nbsp;distributed&nbsp;under&nbsp;the&nbsp;License&nbsp;is&nbsp;distributed&nbsp;on&nbsp;an&nbsp;"AS&nbsp;IS"&nbsp;BASIS,<br />
     &nbsp;*&nbsp;WITHOUT&nbsp;WARRANTIES&nbsp;OR&nbsp;CONDITIONS&nbsp;OF&nbsp;ANY&nbsp;KIND,&nbsp;either&nbsp;express&nbsp;or&nbsp;implied.<br />
     &nbsp;*&nbsp;See&nbsp;the&nbsp;License&nbsp;for&nbsp;the&nbsp;specific&nbsp;language&nbsp;governing&nbsp;permissions&nbsp;and<br />
     &nbsp;*&nbsp;limitations&nbsp;under&nbsp;the&nbsp;License.<br />
     &nbsp;*/<br />
     </span><span style="color: #008000; ">--&gt;</span><br />
     <span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">configuration</span><span style="color: #0000FF; ">&gt;</span><br />
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span>hbase.rootdir<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span>hdfs://ubuntu:9000/hbase<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br />
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;在构造JOB时，会新建一文件夹来准备所需文件。<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果这一段没写，则默认本地环境为LINUX，将用LINUX命令去实施，在WINDOWS环境下会出错&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span>mapred.job.tracker<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span>ubuntu:9001<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span>hbase.cluster.distributed<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span>true<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;此处会向ZOOKEEPER咨询JOB&nbsp;TRACKER的可用IP&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span>hbase.zookeeper.quorum<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span>ubuntu<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">skipInDoc</span><span style="color: #0000FF; ">="true"</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span>hbase.defaults.for.version<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span>0.94.1<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">value</span><span style="color: #0000FF; ">&gt;</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">property</span><span style="color: #0000FF; ">&gt;</span><br />
     <br />
     <span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">configuration</span><span style="color: #0000FF; ">&gt;</span></div>
     </div>
     </li>
     <br /><br />
     <li>测试文件：MapreduceTest.java<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     --><span style="color: #0000FF; ">package</span>&nbsp;com.cloudputing.mapreduce;<br />
     <br />
     <span style="color: #0000FF; ">import</span>&nbsp;java.io.IOException;<br />
     <br />
     <span style="color: #0000FF; ">import</span>&nbsp;junit.framework.TestCase;<br />
     <br />
     <span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;MapreduceTest&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;TestCase{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;testReadJob()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException,&nbsp;InterruptedException,&nbsp;ClassNotFoundException<br />
     &nbsp;&nbsp;&nbsp;&nbsp;{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MapreduceRead.read();<br />
     &nbsp;&nbsp;&nbsp;&nbsp;}<br />
     <br />
     }</div>
     </li>
<br /><br />
     <li>
     <div>MapreduceRead.java</div>
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     --><span style="color: #0000FF; ">package</span>&nbsp;com.cloudputing.mapreduce;<br />
     <br />
     <span style="color: #0000FF; ">import</span>&nbsp;java.io.IOException;<br />
     <br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.conf.Configuration;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.fs.FileSystem;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.fs.Path;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.hbase.HBaseConfiguration;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.hbase.client.Result;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.hbase.client.Scan;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.hbase.io.ImmutableBytesWritable;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.hbase.mapreduce.TableMapper;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.hbase.util.Bytes;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.io.Text;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.mapreduce.Job;<br />
     <span style="color: #0000FF; ">import</span>&nbsp;org.apache.hadoop.mapreduce.lib.output.NullOutputFormat;<br />
     <br />
     <span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;MapreduceRead&nbsp;{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;read()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException,&nbsp;InterruptedException,&nbsp;ClassNotFoundException<br />
     &nbsp;&nbsp;&nbsp;&nbsp;{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Add&nbsp;these&nbsp;statements.&nbsp;XXX<br />
     </span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;jarFile&nbsp;=&nbsp;EJob.createTempJar("target/classes");<br />
     </span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EJob.addClasspath("D:/PAUL/WORK/WORK-SPACES/TEST1/cloudputing/src/main/resources");<br />
     </span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClassLoader&nbsp;classLoader&nbsp;=&nbsp;EJob.getClassLoader();<br />
     </span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.currentThread().setContextClassLoader(classLoader);</span><span style="color: #008000; "><br />
     </span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;config&nbsp;=&nbsp;HBaseConfiguration.create();<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addTmpJar("file:/D:/PAUL/WORK/WORK-SPACES/TEST1/cloudputing/target/bigdata-1.0.jar",config);<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Job&nbsp;job&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Job(config,&nbsp;"ExampleRead");<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;And&nbsp;add&nbsp;this&nbsp;statement.&nbsp;XXX<br />
     </span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((JobConf)&nbsp;job.getConfiguration()).setJar(jarFile.toString());<br />
     <br />
     </span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableMapReduceUtil.addDependencyJars(job);<br />
     </span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableMapReduceUtil.addDependencyJars(job.getConfiguration(),<br />
     </span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MapreduceRead.class,MyMapper.class);</span><span style="color: #008000; "><br />
     </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;job.setJarByClass(MapreduceRead.<span style="color: #0000FF; ">class</span>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;class&nbsp;that&nbsp;contains&nbsp;mapper</span><span style="color: #008000; "><br />
     </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scan&nbsp;scan&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Scan();<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scan.setCaching(500);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;1&nbsp;is&nbsp;the&nbsp;default&nbsp;in&nbsp;Scan,&nbsp;which&nbsp;will&nbsp;be&nbsp;bad&nbsp;for&nbsp;MapReduce&nbsp;jobs</span><span style="color: #008000; "><br />
     </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scan.setCacheBlocks(<span style="color: #0000FF; ">false</span>);&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;don't&nbsp;set&nbsp;to&nbsp;true&nbsp;for&nbsp;MR&nbsp;jobs<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;set&nbsp;other&nbsp;scan&nbsp;attrs</span><span style="color: #008000; "><br />
     </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TableMapReduceUtil.initTableMapperJob(<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"wiki",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;input&nbsp;HBase&nbsp;table&nbsp;name</span><span style="color: #008000; "><br />
     </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scan,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Scan&nbsp;instance&nbsp;to&nbsp;control&nbsp;CF&nbsp;and&nbsp;attribute&nbsp;selection</span><span style="color: #008000; "><br />
     </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MapreduceRead.MyMapper.<span style="color: #0000FF; ">class</span>,&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;mapper</span><span style="color: #008000; "><br />
     </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">null</span>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;mapper&nbsp;output&nbsp;key&nbsp;</span><span style="color: #008000; "><br />
     </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">null</span>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;mapper&nbsp;output&nbsp;value</span><span style="color: #008000; "><br />
     </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;job);<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;job.setOutputFormatClass(NullOutputFormat.<span style="color: #0000FF; ">class</span>);&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;because&nbsp;we&nbsp;aren't&nbsp;emitting&nbsp;anything&nbsp;from&nbsp;mapper<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
     </span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DistributedCache.addFileToClassPath(new&nbsp;Path("hdfs:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">node.tracker1:9000/user/root/lib/stat-analysis-mapred-1.0-SNAPSHOT.jar"),job.getConfiguration());</span><span style="color: #008000; "><br />
     </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;b&nbsp;=&nbsp;job.waitForCompletion(<span style="color: #0000FF; ">true</span>);<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!b)&nbsp;{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">throw</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;IOException("error&nbsp;with&nbsp;job!");<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;}<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;为Mapreduce添加第三方jar包<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;jarPath<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;举例：D:/Java/new_java_workspace/scm/lib/guava-r08.jar<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;conf<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;IOException<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;addTmpJar(String&nbsp;jarPath,&nbsp;Configuration&nbsp;conf)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException&nbsp;{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.setProperty("path.separator",&nbsp;":");<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileSystem&nbsp;fs&nbsp;=&nbsp;FileSystem.getLocal(conf);<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;newJarPath&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Path(jarPath).makeQualified(fs).toString();<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tmpjars&nbsp;=&nbsp;conf.get("tmpjars");<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(tmpjars&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>&nbsp;||&nbsp;tmpjars.length()&nbsp;==&nbsp;0)&nbsp;{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.set("tmpjars",&nbsp;newJarPath);<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conf.set("tmpjars",&nbsp;tmpjars&nbsp;+&nbsp;":"&nbsp;+&nbsp;newJarPath);<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
     &nbsp;&nbsp;&nbsp;&nbsp;}<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;MyMapper&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;TableMapper&lt;Text,&nbsp;Text&gt;&nbsp;{<br />
     <br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;map(ImmutableBytesWritable&nbsp;row,&nbsp;Result&nbsp;value,<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Context&nbsp;context)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;InterruptedException,&nbsp;IOException&nbsp;{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;val1&nbsp;=&nbsp;getValue(value.getValue(Bytes.toBytes("text"),&nbsp;Bytes.toBytes("qual1")));<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;val2&nbsp;=&nbsp;getValue(value.getValue(Bytes.toBytes("text"),&nbsp;Bytes.toBytes("qual2")));<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(val1&nbsp;+&nbsp;"&nbsp;--&nbsp;"&nbsp;+&nbsp;val2);<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;String&nbsp;getValue(<span style="color: #0000FF; ">byte</span>&nbsp;[]&nbsp;value)<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;value&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>?&nbsp;"null"&nbsp;:&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;String(value);<br />
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
     &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
     <br />
     }</div>
     </li>
</ol><img src ="http://www.blogjava.net/paulwong/aggbug/394851.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-01-29 00:19 <a href="http://www.blogjava.net/paulwong/archive/2013/01/29/394851.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>某hadoop视频教程内容</title><link>http://www.blogjava.net/paulwong/archive/2013/01/05/393807.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sat, 05 Jan 2013 04:59:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/01/05/393807.html</guid><description><![CDATA[@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
第1章节: <br />
&gt; Hadoop背景 <br />
&gt; HDFS设计目标 <br />
&gt; HDFS不适合的场景 <br />
&gt; HDFS架构详尽分析 <br />
&gt; MapReduce的基本原理 <br />
<br />
<br />
<br />
第2章节 <br />
&gt; Hadoop的版本介绍 <br />
&gt; 安装单机版Hadoop <br />
&gt; 安装Hadoop集群 <br />
<br />
<br />
<br />
第3章节 <br />
&gt; HDFS命令行基本操作 <br />
&gt; Namenode的工作机制 <br />
&gt; HDFS基本配置管理 <br />
<br />
<br />
<br />
第4章节 <br />
&gt; HDFS应用实战：图片服务器(1) - 系统设计 <br />
&gt; 应用的环境搭建 php + bootstrap + java <br />
&gt; 使用Hadoop Java API实现向HDFS写入文件 <br />
<br />
<br />
<br />
第5章节 <br />
&gt; HDFS应用实战：图片服务器(2) <br />
&gt; 使用Hadoop Java API实现读取HDFS中的文件 <br />
&gt; 使用Hadoop Java API实现获取HDFS目录列表 <br />
&gt; 使用Hadoop Java API实现删除HDFS中的文件 <br />
<br />
<br />
第6章节 <br />
&gt; MapReduce的基本原理 <br />
&gt; MapReduce的运行过程 <br />
&gt; 搭建MapReduce的java开发环境 <br />
&gt; 使用MapReduce的java接口实现WordCount <br />
<br />
<br />
<br />
第7章节 <br />
&gt; WordCount运算过程分析 <br />
&gt; MapReduce的combiner <br />
&gt; 使用MapReduce实现数据去重 <br />
&gt; 使用MapReduce实现数据排序 <br />
&gt; 使用MapReduce实现数据平均成绩计算 <br />
<br />
<br />
<br />
第8章节 <br />
&gt; HBase详细介绍 <br />
&gt; HBase的系统架构 <br />
&gt; HBase的表结构，RowKey，列族和时间戳 <br />
&gt; HBase中的Master，Region以及Region Server <br />
<br />
<br />
第9章节 <br />
&gt; 使用HBase实现微博应用（1） <br />
&gt; 用户注册，登陆和注销的设计 <br />
&gt; 搭建环境 struts2 + jsp + bootstrap + jquery + HBase Java API <br />
&gt; HBase和用户相关的表结构设计 <br />
&gt; 用户注册的实现 <br />
<br />
<br />
<br />
第10章节 <br />
&gt; 使用HBase实现微博应用（2） <br />
&gt; 使用session实现用户登录和注销 <br />
&gt; &#8220;关注"功能的设计 <br />
&gt; &#8220;关注"功能的表结构设计 <br />
&gt; &#8220;关注"功能的实现 <br />
<br />
<br />
第11章节 <br />
&gt; 使用HBase实现微博应用（3） <br />
&gt; &#8220;发微博"功能的设计 <br />
&gt; &#8220;发微博"功能的表结构设计 <br />
&gt; &#8220;发微博"功能的实现 <br />
&gt; 展现整个应用的运行 <br />
<br />
<br />
<br />
第12章节 <br />
&gt; HBase与MapReduce介绍 <br />
&gt; HBase如何使用MapReduce <br />
<br />
<br />
<br />
第13章节 <br />
<br />
&gt; HBase应用实战：话单查询与统计（1） <br />
&gt; 应用的整体设计 <br />
&gt; 开发环境搭建 <br />
&gt; 表结构设计 <br />
<br />
<br />
<br />
第14章节 <br />
&gt; HBase应用实战：话单查询与统计（2） <br />
&gt; 话单入库单设计与实现 <br />
&gt; 话单查询的设计与实现 <br />
<br />
<br />
<br />
第15章节 <br />
&gt; HBase应用实战：话单查询与统计（3） <br />
&gt; 统计功能设计 <br />
&gt; 统计功能实现 <br />
<br />
<br />
<br />
第16章节 <br />
&gt; 深入MapReduce（1） <br />
&gt; split的实现详解 <br />
&gt; 自定义输入的实现 <br />
&gt; 实例讲解 <br />
<br />
<br />
<br />
第17章节 <br />
&gt; 深入MapReduce（2） <br />
&gt; Reduce的partition <br />
&gt; 实例讲解 <br />
<br />
<br />
<br />
第18章节 <br />
&gt; Hive入门 <br />
&gt; 安装Hive <br />
&gt; 使用Hive向HDFS存入结构化数据 <br />
&gt; Hive的基本使用 <br />
<br />
<br />
第19章节 <br />
&gt; 使用MySql作为Hive的元数据库 <br />
&gt; Hive结合MapReduce <br />
<br />
<br />
<br />
第20章节 <br />
&gt; Hive应用实战:数据统计（1） <br />
&gt; 应用设计，表结构设计 <br />
<br />
<br />
<br />
第21章节 <br />
&gt; Hive应用实战：数据统计（2） <br />
&gt; 数据录入与统计的实现&nbsp;<img src ="http://www.blogjava.net/paulwong/aggbug/393807.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-01-05 12:59 <a href="http://www.blogjava.net/paulwong/archive/2013/01/05/393807.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HBase的一些应用设计tip</title><link>http://www.blogjava.net/paulwong/archive/2013/01/02/393701.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 02 Jan 2013 15:09:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/01/02/393701.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/393701.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/01/02/393701.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/393701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/393701.html</trackback:ping><description><![CDATA[1，对于HBase的存储设计，要考虑它的存储结构是：rowkey+columnFamily:columnQualifier+timestamp(version)+value = KeyValue in HBase，一个KeyValue依次按照rowkey，columnkey和timestamp有序。一个rowkey加一个column信息定位了hbase表的一个逻辑的行结构。
<div><a href="http://www.blogjava.net/images/blogjava_net/changedi/Windows-Live-Writer/HBasetip_10C32/0XJJ%7B2%25~G~%5BG%5DJBPMW%7DYE~A_2.jpg"><img title="0XJJ{2%~G~[G]JBPMW}YE~A" border="0" alt="0XJJ{2%~G~[G]JBPMW}YE~A" src="http://www.blogjava.net/images/blogjava_net/changedi/Windows-Live-Writer/HBasetip_10C32/0XJJ%7B2%25~G~%5BG%5DJBPMW%7DYE~A_2.jpg" width="600" height="327" /></a>&nbsp;
<div><br />
</div>
<div>2，从逻辑存储结构到实际的物理存储结构要经历一个fold过程，所有的columnFamily下的内容被有序的合并，因为HBase把一个ColumnFamily存储为一个StoreFile。
<div><br />
</div>
<div>
3，把HBase的查询等价为一个逐层过滤的行为，那么在设计存储时就应该明白，使设计越趋向单一的keyvalue性能会越好；如果是因为复杂的业务逻辑导致查询需要确定rowkey、column、timestamp，甚至更夸张的是用到了HBase的Filter在server端做value的处理，那么整个性能会非常低。&nbsp;</div>
<div><br />
</div>
<div>4，因此在表结构设计时，HBase里有tall narrow和flat wide两种设计模式，前者行多列少，整个表结构高且窄；后者行少列多，表结构平且宽；但是由于HBase只能在行的边界做split，因此如果选择flat wide的结构，那么在特殊行变的超级大（超过file或region的上限）时，那么这种行为会导致compaction，而这样做是要把row读内存的~~因此，强烈推荐使用tall narrow模式设计表结构，这样结构更趋近于keyvalue，性能更好。&nbsp;</div>
<div><br />
</div>
<div>5，一种优雅的行设计叫做partial row scan，我们一般rowkey会设计为&lt;key1&gt;-&lt;key2&gt;-&lt;key3&gt;...，每个key都是查询条件，中间用某种分隔符分开，对于只想查key1的所有这样的情况，在不使用filter的情况下（更高性能），我们可以为每个key设定一个起始和结束的值，比如key1作为开始，key1+1作为结束，这样scan的时候可以通过设定start row和stop row就能查到所有的key1的value，同理迭代，每个子key都可以这样被设计到rowkey中。&nbsp;</div>
<div><br />
</div>
<div>6，对于分页查询，推荐的设计方式也不是利用filter，而是在scan中通过offset和limit的设定来模拟类似RDBMS的分页。具体过程就是首先定位start row，接着跳过offset行，读取limit行，最后关闭scan，整个流程结束。&nbsp;</div>
<div><br />
</div>
<div>7，对于带有时间范围的查询，一种设计是把时间放到一个key的位置，这样设计有个弊端就是查询时一定要先知道查询哪个维度的时间范围值，而不能直接通过时间查询所有维度的值；另一种设计是把timestamp放到前面，同时利用hashcode或者MD5这样的形式将其打散，这样对于实时的时序数据，因为将其打散导致自动分到其他region可以提供更好的并发写优势。&nbsp;</div>
<div><br />
</div>
<div>8，对于读写的平衡，下面这张图更好的说明了key的设计：salting等价于hash，promoted等价于在key中加入其他维度，而random就是MD这样的形式了。</div>
<div>&nbsp;
<a href="http://www.blogjava.net/images/blogjava_net/changedi/Windows-Live-Writer/HBasetip_10C32/VN%7BYX%60@%5B2P9AQ%5B@(2U8N9%7B0_2.jpg" style="color: #006b95; text-decoration: none; "><img title="VN{YX`@[2P9AQ[@(2U8N9{0" border="0" alt="VN{YX`@[2P9AQ[@(2U8N9{0" src="http://www.blogjava.net/images/blogjava_net/changedi/Windows-Live-Writer/HBasetip_10C32/VN%7BYX%60@%5B2P9AQ%5B@(2U8N9%7B0_2.jpg" width="500" height="308" style="border-width: 0px; padding: 0px 0px 1px; background-image: none; display: inline;" /></a>
<div><br />
</div>
9，还有一种高级的设计方式是利用column来当做RDBMS类似二级索引的应用设计，rowkey的存储达到一定程度后，利用column的有序，完成类似索引的设计，比如，一个CF叫做data存放数据本身，ColumnQualifier是一个MD5形式的index，而value是实际的数据；再建一个CF叫做index存储刚才的MD5，这个index的CF的ColumnQualifier是真正的索引字段（比如名字或者任意的表字段，这样可以允许多个），而value是这个索引字段的MD5。每次查询时就可以先在index里找到这个索引（查询条件不同，选择的索引字段不同），然后利用这个索引到data里找到数据，两次查询实现真正的复杂条件业务查询。</div>
<div><br />
</div>
<div>
10，实现二级索引还有其他途径，</div>
<div>比如：</div>
<div>1，客户端控制，即一次读取将所有数据取回，在客户端做各种过滤操作，优点自然是控制力比较强，但是缺点在性能和一致性的保证上；</div>
<div>2，Indexed-Transactional HBase，这是个开源项目，扩展了HBase，在客户端和服务端加入了扩展实现了事务和二级索引；</div>
<div>3，Indexed-HBase；</div>
<div>4，Coprocessor。&nbsp;</div>
<div><br />
</div>
<div>11，HBase集成搜索的方式有多种：1，客户端控制，同上；2，Lucene；3，HBasene，4，Coprocessor。&nbsp;</div>
<div><br />
</div>
<div>12，HBase集成事务的方式：1，ITHBase；2，ZooKeeper，通过分布式锁。&nbsp;</div>
<div><br />
</div>
<div>13，timestamp虽然叫这个名字，但是完全可以存放任何内容来形成用户自定义的版本信息。
</div>
</div>
</div><img src ="http://www.blogjava.net/paulwong/aggbug/393701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-01-02 23:09 <a href="http://www.blogjava.net/paulwong/archive/2013/01/02/393701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>