wiki:update2012

由于公司里面的Hadoop和Hbase版本比较旧,有很多新功能和性能上的改善都不能在上面实现

近期决定先升级Hadoop和HBase系统 Hadoop 由0.20.2升级为1.0.3 HBase 由0.90.5升级为0.94.1

升级过程要解决西面问题:数据兼容性,程序兼容,安全方式选择

数据兼容性:

在测试环境测试过经过下面步骤升级后,数据不会丢失,在正式环境升级过程中会备份重要的数据,确保出现损坏的时候可以进行出重建

升级步骤:

  1. 停定时任务,禁止执行新任务,包括停止其他系统对dfs系统写数据,已知包括(计数器,广告log, 魔方log)
  2. 备份dfs上面数据,分两个阶段备份,第一阶段长期不变数据,第二部分最近变化的数据,预计3天
  3. 升级HADOOP,HBASE软件版本
  4. 如果数据升级成功,转到6
  5. 倒入数据到dfs中
  6. 转换HBASE的表,做法是先Export出来,然后建一个压缩的表,再import进去
  7. 更新,调试各程序
  8. 调试一下Hive里面的表
  9. 启用定时任务

其中3里面的详细步骤欧彬准备,7和8Larry准备,10还要在测试环境试一下

程序兼容性测试:

定向广告重新编译后主干运行没有问题

广告分析系统:
程序要修改HFileOutputFormat.java文件 在HBase bulk load入库测试的时候遇到一个bug,现在文件不断复制到hbase的目录(正常同一个HDFS系统只是移动文件)
直到RPC request的数量被占满(缺省是10个),实际会复制了10份,而且应为现在storfile的大少缺省是10G,入库的功能很缓慢,并占用大量空间。
 HBASE-6529 这个bug 应该在0.94.2版本修正,根据patch里面所说修改代码,重现打包后再执行入库就没有问题了

经过测试后,hadoop版本和hbase的版本与旧版兼容性比较好,如果里面有引用hbase和zookeeper的jar,要升级一下,增加protobuf-java的jar

安全方式的选择:

安全问题是这次升级的一个主要因素,要做到最低要求,各项目之间的数据安全,HBASE上的表和DFS上的数据不应该被其他项目破坏

被自己删除可以采取另外一种方式,比如删除数据后一天才真正删除来处理

hadoop 在安全方面缺省使用JAAS方式,也可以使用Kerberos安全机制

 Secure Hadoop安装
这个比较接近我们环境 http://hi.baidu.com/goseec/item/1614b21220b7bc0fb98a1a26

试装了一下kerberos,过程如下

hbase 安全方面主要使用Kerberos机制,具体可以参考  http://hbase.apache.org/book/security.html


结论: hadoop + hbase +kerberos 在安装和维护方面比较复杂,在日常维护和查错带来的不便难以评估,而且会带来性能10%左右的损失
决定这次的升级先不是用kerberos,而只使用Simple方面的unix账号,对dfs目录进行控制,而hbase的表的权限,暂时不进行控制