- 1.环境描述
- 已搭建HADOOP 2.2集群,1NameNode,3DataNode,可用
- 已安装配置Pig0.12,可用
- 已安装配置HBase 0.96集群,1MASTER,3RegionServer
- 2.问题描述
按照网上或者相关例子,pig读取一个文件内容,使用HBaseStorage进行Store,第一个遇到的问题是WritableByteArrayComparable NO CLASS FOUND。这个问题是由于HBase版本升级后,这个类已经不存在了。即之前各个版本存在的hbase-{version}.jar已经不再出现在HBase0.96中。经过查询,网上给出各种方法,有一个方法在PIG_CLASSPATH中添加hbase-0.94.1.jar包。该方法的确可以解决WritableByteArrayComparable NO CLASS FOUND的问题。但是随之出现下面的问题。
脚本执行到Will not attempt to authenticate using SASL (unknown error) ,建立SESSION后卡住,经过10多分钟后,脚本执行错误。查看日志发现错误信息:after 10 tries, no region found for table.但是查看namenode:60010/master-status发现一切状态正常。同时在hbase shell下查询、新建表、插入数据都没有任何问题。到这里后发现找不到解决方案,已经无法进行下去。
回到最初出现的问题,明显是由于HBASE升级到0.96后,PIG没有针对进行版本的更新。因此到hotonwork网站上下载RHEL 6 and CentOS 6相应已经编译好的文件
Project | Download |
Hadoop | |
Pig | |
Hive and HCatalog | |
HBase and ZooKeeper | |
Oozie | |
Sqoop | |
Flume | |
Mahout |
将pig安装目录下的 pig-withouthadoop.jar替换掉。
重新开始跑脚本,发现可以生成MR相关JOB,只是跑JOB会报错:
2014-03-20 15:21:59,185 FATAL [main] org.apache.hadoop.mapreduce.v2.app.MRAppMaster: Error starting MRAppMaster
java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/mapreduce/TableInputFormat
查看HBASE安装目录下的相关JAR包,发现该类是存在的,那么肯定是相关变量设置问题,但是设置相关变量后,重启HADOOP\HBASE等,再次跑脚本仍然存在这个问题。因此使用比较笨的方法,每次跑脚本之前,或者在脚本里:
REGISTER /home/sun/hbase/lib/*.jar;
再次执行脚本,插入成功。
转载请标明出处,素质转载。