Java项目jre升级至1.8,兼容Hbase碰到的若干问题

1.使用hbase shell时,执行list命令报错:

ERROR: can not resolve ‘hostname

解决办法,在hbase的conf目录下有一个regionservers文件,编辑它,将hostname加入其中,再重启hbase,问题解决

2.jre替换成1.8后,执行代码,发生错误:

ClassNotFoundException: org.apache.commons.lang3.NotImplementedException

在做ES的时候也碰到了同样原因导致的错误:

java.lang.invoke.LambdaConversionException: Invalid receiver type interface org.apache.http.Header; not a subtype of implementation type interface org.apache.http.NameValuePair

都是因为在jre1.6的包在新环境下被淘汰了,替换新包:httpclient-4.5.10.jar、httpcore-4.4.12.jar、commons-lang3-3.9.jar等,总之jre升级项目依赖的其它jar也都尽量跟着升级

3.代码读取hbase中表的数据,示例代码

Table table = connection.getTable(TableName.valueOf("tableName"));
Scan scan = new Scan();
scan.addFamily("familyName");
ResultScanner scanner = table.getScanner(scan);
Iterator<Result> iterator = scanner.iterator();
while(iterator.hasNext()){
    Result result = iterator.next();
    CellScanner cellScanner = result.cellScanner();
    while(cellScanner.advance()){
	    Cell cell = cellScanner.current();
	    StringBuffer sb = new StringBuffer();
	    String row = Bytes.toString(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());
	    sb.append("row=" + row + ", ");
	    String family = Bytes.toString(cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength());
	    String qualifier = Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
	    sb.append("column=" + family + ":" + qualifier + ", ");
	    sb.append("timestamp=" + cell.getTimestamp() + ", ");
	    String value = Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()).trim();
	    sb.append("value=" + value);
	    system.out.println(sb.toString());
    }
}
scanner.close();
经验分享 程序员 微信小程序 职场和发展