由于公司里面的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中 7. 转换HBASE的表,做法是先Export出来,然后建一个压缩的表,再import进去 8. 更新,调试各程序 9. 调试一下Hive里面的表 10. 启用定时任务 其中3里面的详细步骤欧彬准备,7和8Larry准备,10还要在测试环境试一下 == 程序兼容性测试:== 定向广告重新编译后主干运行没有问题[[BR]] 广告分析系统:[[BR]] 程序要修改HFileOutputFormat.java文件 在HBase bulk load入库测试的时候遇到一个bug,现在文件不断复制到hbase的目录(正常同一个HDFS系统只是移动文件)[[BR]] 直到RPC request的数量被占满(缺省是10个),实际会复制了10份,而且应为现在storfile的大少缺省是10G,入库的功能很缓慢,并占用大量空间。[[BR]] [https://issues.apache.org/jira/browse/HBASE-6529 HBASE-6529] 这个bug 应该在0.94.2版本修正,根据patch里面所说修改代码,重现打包后再执行入库就没有问题了 经过测试后,hadoop版本和hbase的版本与旧版兼容性比较好,如果里面有引用hbase和zookeeper的jar,要升级一下,增加protobuf-java的jar == 安全方式的选择:== 安全问题是这次升级的一个主要因素,要做到最低要求,各项目之间的数据安全,HBASE上的表和DFS上的数据不应该被其他项目破坏[[BR]] 被自己删除可以采取另外一种方式,比如删除数据后一天才真正删除来处理 hadoop 在安全方面缺省使用JAAS方式,也可以使用Kerberos安全机制 [[BR]] [http://www.cloudera.com/blog/2011/01/configuring-security-features-in-cdh3/ Secure Hadoop安装][[BR]] 这个比较接近我们环境[http://hi.baidu.com/goseec/item/1614b21220b7bc0fb98a1a26][[BR]] 试装了一下kerberos,过程[/wiki/kerberos 如下] hbase 安全方面主要使用Kerberos机制,具体可以参考 [http://hbase.apache.org/book/security.html] ---- 结论: hadoop + hbase +kerberos 在安装和维护方面比较复杂,在日常维护和查错带来的不便难以评估,而且会带来性能10%左右的损失[[BR]] 决定这次的升级先不是用kerberos,而只使用Simple方面的unix账号,对dfs目录进行控制,而hbase的表的权限,暂时不进行控制