迁移到Hadoop 0.20.2后的一些感想

来源:互联网 发布:echarts 实时数据折线 编辑:程序博客网 时间:2024/05/17 23:27

迁移到Hadoop 0.20.2后的一些感想
------------------------------------------------

1. 问题:

离Hadoop 0.20.2的发布也有三个月了,平时一直在用http://www.cloudera.com/提供的一个Hadoop版本,它也是基于Hadoop 0.18.3开发的,因为它的一个比较稳定的版本。但是最近在用hypertable 0.9.2.7的时候发现我本地jni调用老是会出现Hyperspace COMM already commected,查了一下原因,是hyperspace的COMM被占用,连接出错,网上找了一下,作者也说有这个问题,还说什么修改一下也不是很难。看了一下它的源代码,是socket连接抛出来的,要改的话要修改hyperspace模块的代码,由于hyperspace底层是用oracle的berkeley db的,对它也不是很熟悉,所以没去改了,想直接升级到0.9.3.1,看它有没有解决这个问题,但是让我失望的是它还是没有解决这个问题,到是在它的thrift端做了很多改动,而且把对hypertable表的TableSplit也加入了它的thrift服务端中,也正是我想要的,呵呵,这样也可以绕过前面的hyperspace的问题,因为它在thrift的服务端只生成了一个Hypertable Client,这样就不会出现COMM connected的问题了,而且对它的Cell也做了比较大的改动,用了最新的Hadoop 0.20.2。没办法,要升就一起升吧,Hadoop 0.18.3->Hadoop 0.20.2 ; hypertable 0.9.2.7 -> hypertable 0.9.3.1,原来的TableInputFomat和TableOutputFormat看来都要做修改了,于是就有了下面的这些感想。

2. Hadoop 0.20.2的一些变化

    新的版本不管从目录结构和API上都有了比较大的变化,不管从0.18到0.19,还是从0.19到0.20目录结构都发生了很大的变化,第一感觉就是模块化的意识越来越强了,而且看起来也更清晰了。

     2.1 目录结构的变化

     主要有三个目录,core,hdfs,mapred。
     * 主要是把原来共用的功能都提取到了core中,其中有conf, fs , io ,ipc , net,record等。还加入了类似于unix目录的权限功能。
     *把hdfs单独放入了一个目录中,而且把hdfs的配置文件也提取了出来,叫hdfs-default.xml,其中hdfs目录又分了protocol,提供了一些Client端的通讯协议,还有server和tools目录,其中server目录又分成了balancer,common,datanode,namenode,protocol , 这里的protocol目录中提供了DataNode和NameNode的通讯协议,还有DataNode之间的通讯协议等。
     *把mapred也独立出来,而且也把mapred的配置文件也提取出来,放入了mapred-default.xml中,它也有两个子目录,一个是mapred,其中放了一些mapreduce的核心类,还有一些Deprecated的类,用于向后兼容,不过一般都不提倡用这些接口和类了。另一个目录是mapreduce目录,这里有一些对外的抽象类和接口,用于进行根据自己的需要进行扩展,在这个目录中有一个叫lib的目录,它提供了一些框架提供的常用的input,output,map,reduce方法。

     2.2 API的变化

     在Hadoop 0.20.2中,API的变化也是很大的,主要把一些接口变成了抽象类,以此在提高可扩展性,进行了一些重构,变化还是满大的。下面举一个例子来说明这里的变化。
        2.2.1 Hadoop的一个example
        这是Hadoop中的一个WordCount的例子,从中你可以发现Map和Reduce的接口变化,还有JobClient的变化。
       
      
          注:
          1. 这里的Job好像只有setNumReduceTasks方法了,没有setNumMapTasks方法了,它在原来的JobConf里有,但是JobContext没有开放出来。
          2. JobContext组合了org.apache.hadoop.mapred.JobConf类,而这个JobConf类已经是deprecated,估计JobConf也是个过渡产品。
         

3.     Hypertable 0.9.3.1的一些变化

    主要感觉它的thrift的java客户端变化很大。为了支持mapreduce,很多东西都集成到了thrift服务端。加入了MapReduce connector,Hyperspace的replication,还有DUMP TABLE等。在它的thrift的客户端中加入了InputFormat和OutputFormat,还有TableSplit,可以用来对Hypertable中的表进行Key和Value对的读取,还是很方便的。但是它没有对TableSplit后的range_location进行处理,只是用了“localhost“来进行Host的连接,不知道是为什么?
    看来要在Hypertable中使用kfs还是要进行源代码的编译还有kfs的动态库。头大啊。
   

原创粉丝点击