<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feeds.feedsky.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feeds.feedsky.com/csdn.net/lance_123" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feeds.feedsky.com/csdn.net/lance_123" type="application/rss+xml"></fs:self_link><lastBuildDate>Sat, 18 Jun 2011 17:12:00 GMT</lastBuildDate><title>lance家园</title><description>有事不慌，无事不荒，有容乃大，无欲则刚，以德立纲，外圆内方。</description><link>http://blog.csdn.net/blogrss.aspx?username=lance_123</link><item><title>最近在做的一些事情</title><link>http://blog.csdn.net/lance_123/archive/2011/06/19/6554209.aspx</link><description>&lt;br /&gt;&lt;br /&gt;此篇是流水帐形式，适全于快餐式阅读，主要原因还是本人没有把相关知识完全整理好，待知识齐全后再整理出来。&lt;br /&gt;分布式消息系统的关键问题：&lt;br /&gt;消息的存储方式：db，nosql，file等方式的选择。&lt;br /&gt;消息的可靠性：避免消息的重传和丢失。&lt;br /&gt;系统的可用性：一台机器挂了不影响应用。&lt;br /&gt;消息的生产和消费方式：即推拉模式。&lt;br /&gt;自已目前正在写个简化版的消息系统，希望能把这些功能一步一步加上去。&lt;br /&gt;Nosql方面：&lt;br /&gt;Redis是个好的内存存储系统，相比而言，性能也还可以。&lt;br /&gt;KC封装了分布式的进程通信框架，提供了插件式的K-V存储系统。&lt;br /&gt;Leveldb被认为是读写性能很好，而且代码量小，值得一读。&lt;br /&gt;Erlang语言的特点：分布式，并发性，函数式语言，内部具有资源调度，进程通信，错误处理以及进程与内存管理等机制，值得学习一下。&lt;br /&gt;接下来，我还会继续关注和学习上面的这些知识，同时也会继续关注hadoop,hive,hbase相关的知识。&lt;br /&gt;Hive权限管理机制：&lt;br /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/524519501/lance_123/csdn.net/s.gif?r=http://blog.csdn.net/lance_123/archive/2011/06/19/6554209.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><pubDate>Sun, 19 Jun 2011 01:12:00 +0800</pubDate><author>lance_123</author><guid isPermaLink="false">http://blog.csdn.net/lance_123/archive/2011/06/19/6554209.aspx</guid><dc:creator>lance_123</dc:creator><fs:srclink>http://blog.csdn.net/lance_123/archive/2011/06/19/6554209.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/lance_123/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/lance_123/~1185529/524519501/1185510</fs:itemid></item><item><title>Hbase中结果合并的分析</title><link>http://blog.csdn.net/lance_123/archive/2011/05/24/6443751.aspx</link><description>当client向hregion端put()数据时，HRegion会判断当前的memstore的大小是否大于参数hbase.hregion.memstore.flush.size值，如果大于，则执行flushcache()操作，将hregion上的memstore刷新到store files文件里。而在flushcache时，会先判断当前的region是否满足以下条件Store files number &gt; 参数hbase.hstore.blockingStoreFiles

值如果满足，则会将该region放入CompactSplitThread线程的队列中，等待被compactsplit
。接着继续执行flushcache()
操作，将建立快照，然后将快照刷新到hdfs
的store files
上。Flushcache完成后，还会再判断store file
数是否大于参数hbase.hstore.compaction.min，如果是，还会将其加入到CompactSplitT&lt;img src=&quot;http://www1.feedsky.com/t1/524519502/lance_123/csdn.net/s.gif?r=http://blog.csdn.net/lance_123/archive/2011/05/24/6443751.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><pubDate>Tue, 24 May 2011 23:57:00 +0800</pubDate><author>lance_123</author><guid isPermaLink="false">http://blog.csdn.net/lance_123/archive/2011/05/24/6443751.aspx</guid><dc:creator>lance_123</dc:creator><fs:srclink>http://blog.csdn.net/lance_123/archive/2011/05/24/6443751.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/lance_123/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/lance_123/~1185529/524519502/1185510</fs:itemid></item><item><title>hadoop中rpc的具体实现：</title><link>http://blog.csdn.net/lance_123/archive/2011/04/24/6359348.aspx</link><description>还是一年前看过rpc模块，今天回头去复习了一下，发现有一些小小的改动，增加了一些接口，比如RPCEngine。还增加了对socket一些参数的配置，比如时间设置等。但总体思路基本没有变，关键就是下面几个点。1.        
java中有代理类这样的机制，即只需要知道类名和方法名，即可以通过这个代理类去调用真正的类方法，而不需要直接去new一个对象，再调用该对象的方法来完成。特别是在RPC中，当客户端要调用某个远程对象的方法时，即可调用代理类，然后让代理类与远程进程进行通信，得到函数的返回值，再返回给客户端。2.        
不同类型的对象与字节数组之间的转换，方便低层的socket传输。即序列化与反序列化的功能，hadoop中所有这些对象都需要实现Writable接口来完成序列与反序列的方法。3.        
socket网络通信模型。最常用的就是异步方式，而在java实现中select模型较常用，而在C实现中epoll事件处理模型较常用。在hadoop实现里，就是基于java的select模型实现。&lt;img src=&quot;http://www1.feedsky.com/t1/524519503/lance_123/csdn.net/s.gif?r=http://blog.csdn.net/lance_123/archive/2011/04/24/6359348.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><pubDate>Sun, 24 Apr 2011 20:45:00 +0800</pubDate><author>lance_123</author><guid isPermaLink="false">http://blog.csdn.net/lance_123/archive/2011/04/24/6359348.aspx</guid><dc:creator>lance_123</dc:creator><fs:srclink>http://blog.csdn.net/lance_123/archive/2011/04/24/6359348.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/lance_123/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/lance_123/~1185529/524519503/1185510</fs:itemid></item><item><title>数据复制的几种方案</title><link>http://blog.csdn.net/lance_123/archive/2011/04/03/6299784.aspx</link><description>     清明节，居然下雨，正好有时间看电影，在youku上把将爱看完了。
    先留个位置，抛出几个点来，以便以后补充。最近一阵子时间，看了hbase,tair,redis项目的代码，加上之前的一些积累，在数据复制上这几个项目有些不同，其中hbase与hadoop是一样的，redis与tair较相似。主要有以下几种方案：1.        
一种是典型的数据仓库架构，一次写多次读。时间拉的比较长，一般的分布式系统都会选择三个副本，因此在这种设计时，会一次性写三个副本，只要其中有个副本失败了，就需要重写。这样的优点就是，一旦写完了三个副本后，基本上不会丢失数据，故可靠性要高，但是一致性要差一些，写三个副本的时间是很长的，因此读操作需要等三个副本都写完后，才能进行读操作。2.        
另外一种就是分布式内存缓存架构，一般是先将数据写到主结点上，然后由主结点去同步到从结点。像memcache,tair,redis等，都是这种方式。但是这会有个问题，如果数据还没有同步到其他结点，而主结点挂了，那么数据就会丢失。所以牺牲可靠性，增加可用性。而对于内存缓存这种架构，就是可以接受数&lt;img src=&quot;http://www1.feedsky.com/t1/524519504/lance_123/csdn.net/s.gif?r=http://blog.csdn.net/lance_123/archive/2011/04/03/6299784.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><pubDate>Sun, 03 Apr 2011 11:36:00 +0800</pubDate><author>lance_123</author><guid isPermaLink="false">http://blog.csdn.net/lance_123/archive/2011/04/03/6299784.aspx</guid><dc:creator>lance_123</dc:creator><fs:srclink>http://blog.csdn.net/lance_123/archive/2011/04/03/6299784.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/lance_123/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/lance_123/~1185529/524519504/1185510</fs:itemid></item><item><title>总结最近一阵子忙的事情</title><link>http://blog.csdn.net/lance_123/archive/2011/03/12/6242910.aspx</link><description>&lt;br /&gt;      回家过了个春节，春节期间去了趟广东，跟昔日的同学碰了个头，同时也跟TX公司的同学交流了一下，他们那边在分布式存储与计算的内容，同时了解了他们的集群规模及处理方式等等。&lt;br /&gt;      前段时间，除了完成公司的项目需求外，大致过了一下redis,chukwa的源代码，基本上了解了这二种分布式产品的框架及相关原理，其实思想本身不难，难的就是真正实现及完善出能够在实际应用中发挥出作用的产品，这一点，国外的专家，做的很好，值得我们学习。&lt;br /&gt;      hadoop方面，前不久，yahoo发了一篇mapreduce2.0的框架思想，我想重要一点就是使得JT的负载变小了，利用了更加分布式的原理去化解这个压力，让集群规模可以变大，同时效率也可以提升。因为按目前的现状，规模达到4K时，会有瓶颈，当然国内在单个集群要到这个规模估计很少，如何能做到像google那样，还值得深思。&lt;br /&gt;      另外，最近在开发一个hive-server工具，在server端加了一个多用户认证功能，保证安全性。另一方面，添加了几个通信接口函数，得到更多的关于表的信息，发现老版本&lt;img src=&quot;http://www1.feedsky.com/t1/524519505/lance_123/csdn.net/s.gif?r=http://blog.csdn.net/lance_123/archive/2011/03/12/6242910.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><pubDate>Sat, 12 Mar 2011 11:33:00 +0800</pubDate><author>lance_123</author><guid isPermaLink="false">http://blog.csdn.net/lance_123/archive/2011/03/12/6242910.aspx</guid><dc:creator>lance_123</dc:creator><fs:srclink>http://blog.csdn.net/lance_123/archive/2011/03/12/6242910.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/lance_123/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/lance_123/~1185529/524519505/1185510</fs:itemid></item><item><title>集群工具chukwa和ganglia</title><link>http://blog.csdn.net/lance_123/archive/2011/01/23/6159325.aspx</link><description>&lt;br /&gt;&lt;br /&gt;众所周知，hadoop是运行在分布式的集群环境下，同是是许多用户或者组共享的集群，因此任意时刻都会有很多用户来访问NN或者JT，对分布式文件系统或者mapreduce进行操作，使用集群下的机器来完成他们的存储和计算工作。当使用hadoop的用户越来越多时，就会使得集群运维人员很难客观去分析集群当前状况和趋势。比如NN的内存会不会在某天不知晓的情况下发生内存溢出，因此就需要用数据来得出hadoop当前的运行状况。&lt;br /&gt;Chukwa就是利用了集群中的几个进程输出的日志，如NN,DN,JT,TT等进程都会有log信息，因为这些进程的程序里面都调用log4j提供的接口来记录日志，而到底日志的物理存储是由log4j.properties的配置文件来配置的，可以写在本地文件，也可以写到数据库。Chukwa就是来控制这些日志的记录，由chukwa程序来接替这部分工作，完成日志记录和采集工作。Chukwa由以下几个组件组成：agent收集各个进程的日志，并将收集的日志发送给collector。Collector收集agent发送为的数据，同时将这些数据保存到hdfs上，M&lt;img src=&quot;http://www1.feedsky.com/t1/524519506/lance_123/csdn.net/s.gif?r=http://blog.csdn.net/lance_123/archive/2011/01/23/6159325.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><pubDate>Sun, 23 Jan 2011 00:32:00 +0800</pubDate><author>lance_123</author><guid isPermaLink="false">http://blog.csdn.net/lance_123/archive/2011/01/23/6159325.aspx</guid><dc:creator>lance_123</dc:creator><fs:srclink>http://blog.csdn.net/lance_123/archive/2011/01/23/6159325.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/lance_123/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/lance_123/~1185529/524519506/1185510</fs:itemid></item><item><title>hadoop io Sequence, Map, Set, Array, BloomMap Files(译文)</title><link>http://blog.csdn.net/lance_123/archive/2011/01/18/6150660.aspx</link><description>原文：http://www.cloudera.com/blog/2011/01/hadoop-io-sequence-map-set-array-bloommap-files/         
hadoop的sequenceFile文件为二进制的K-V对提供了可持久的数据结构。与其他的数据结构，像B树索引是有区别的，sequenceFile不支持对特定的key进行修改，插入，删除操作，仅仅支持append操作，如下图所示。         
SequenceFile有三种格式：非压缩，行压缩，块压缩。他们都会共用一个文件头信息。这个文件头信息包括：k,v类名字，版本号，格式化信息（是否压缩，是否是块压缩，如果是压缩格式，还包括压缩算法名字）。         非压缩与记录压缩比较相似，每次调用append方法就会将记录增加到sequence文件中，内容有整个记录的大小(key的长度+value的长度)，key的长度，key,value的原始数据。二者的不同点就是value的原始数据，一个是压缩的，一个是非压缩。&lt;img src=&quot;http://www1.feedsky.com/t1/524519507/lance_123/csdn.net/s.gif?r=http://blog.csdn.net/lance_123/archive/2011/01/18/6150660.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><pubDate>Tue, 18 Jan 2011 19:06:00 +0800</pubDate><author>lance_123</author><guid isPermaLink="false">http://blog.csdn.net/lance_123/archive/2011/01/18/6150660.aspx</guid><dc:creator>lance_123</dc:creator><fs:srclink>http://blog.csdn.net/lance_123/archive/2011/01/18/6150660.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/lance_123/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/lance_123/~1185529/524519507/1185510</fs:itemid></item><item><title>DataNode的分析</title><link>http://blog.csdn.net/lance_123/archive/2011/01/15/6143233.aspx</link><description>&lt;br /&gt;&lt;br /&gt;相对NN,DN主要就是对数据块的副本进行操作，如增删改等操作，管理DN中的这些副本，另外提供对副本的接口给client,NN,其他的DN。&lt;br /&gt;startDataNode()方法：&lt;br /&gt;首先从配置文件中读取与DN
相关的配置参数。&lt;br /&gt;与NN
进行握手。&lt;br /&gt;根据参数配置好的数据块存放的文件目录，为每个目录建立起DataStorage，然后调用该类的recoverTransitionRead方法去读取存储元信息，锁住目录，然后转变文件状态。做一些格式化，恢复，回滚，升级操作。&lt;br /&gt;然后调用FSDataset构造函数，读取上一步的文件目录下的副本文件，将副本状态信息保存到内存列队中，同时创建线程池用于执行对副本的异步删除操作。&lt;br /&gt;实始化数据块扫描类DataBlockScanner。&lt;br /&gt;最后，启动一系列服务端口，如接收数据的端口，web server
访问端口等。&lt;br /&gt;run()方法：&lt;br /&gt;首先启动DN的数据接收服务守护线程DataXceiverServer。&lt;br /&gt;然后循环做以下操作：&lt;br /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/524519508/lance_123/csdn.net/s.gif?r=http://blog.csdn.net/lance_123/archive/2011/01/15/6143233.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><pubDate>Sat, 15 Jan 2011 22:39:00 +0800</pubDate><author>lance_123</author><guid isPermaLink="false">http://blog.csdn.net/lance_123/archive/2011/01/15/6143233.aspx</guid><dc:creator>lance_123</dc:creator><fs:srclink>http://blog.csdn.net/lance_123/archive/2011/01/15/6143233.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/lance_123/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/lance_123/~1185529/524519508/1185510</fs:itemid></item><item><title>datanode中的类结构图</title><link>http://blog.csdn.net/lance_123/archive/2011/01/14/6140435.aspx</link><description>之前大致把DN中的主要类代码看了一下，框架基本了解，刚才用VS简单的把类图模块画了一下，整理自已的思路。涉及比较多的是副本的传输和副本的管理二大块内容。&lt;img src=&quot;http://www1.feedsky.com/t1/524519509/lance_123/csdn.net/s.gif?r=http://blog.csdn.net/lance_123/archive/2011/01/14/6140435.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><pubDate>Fri, 14 Jan 2011 20:28:00 +0800</pubDate><author>lance_123</author><guid isPermaLink="false">http://blog.csdn.net/lance_123/archive/2011/01/14/6140435.aspx</guid><dc:creator>lance_123</dc:creator><fs:srclink>http://blog.csdn.net/lance_123/archive/2011/01/14/6140435.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/lance_123/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/lance_123/~1185529/524519509/1185510</fs:itemid></item><item><title>datanode进程的分析(一)</title><link>http://blog.csdn.net/lance_123/archive/2011/01/08/6124052.aspx</link><description>数据存储结点主类。首先启动一系列服务端口，如接收数据的端口，web server
访问端口等。然后调用startDataNode()
函数去做以下事情。启动DN的数据接收服务守护线程DataXceiverServer。循环判断是否需要更新，如参数发生变化了，则需要重新初始化DN。然后再发送心跳，发送最近接收的block，报告DN当前的block列表给NN。报告DN当前的所有block列表的时间间隔相对要长很多，默认是1个小时报告一次。 run()dataXceiverServer.start();while (shouldRun) {       

startDistributedUpgradeIfNeeded();       

offerService();} offerService()也是一个循环，首先会计算是否到了心跳时间。到了下一次心跳&lt;img src=&quot;http://www1.feedsky.com/t1/524519510/lance_123/csdn.net/s.gif?r=http://blog.csdn.net/lance_123/archive/2011/01/08/6124052.aspx&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;</description><pubDate>Sat, 08 Jan 2011 13:20:00 +0800</pubDate><author>lance_123</author><guid isPermaLink="false">http://blog.csdn.net/lance_123/archive/2011/01/08/6124052.aspx</guid><dc:creator>lance_123</dc:creator><fs:srclink>http://blog.csdn.net/lance_123/archive/2011/01/08/6124052.aspx</fs:srclink><fs:srcfeed>http://blog.csdn.net/lance_123/feed.aspx</fs:srcfeed><fs:itemid>csdn.net/lance_123/~1185529/524519510/1185510</fs:itemid></item></channel></rss>
