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();