我写了job mapreduce.输入是hbase中的一个表.
工作运行时出错:
org.apache.hadoop.hbase.client.ScannerTimeoutException:自上次调用以来传递了88557ms,当前在org.apache.hadoop.hbase.client.HTable $ ClientScanner.next(HTable.java:1196)的org上将超时设置为60000 org.apache.hadoop.mapred.MapTask上的org.apache.hadoop.hbase.mapreduce.TableRecordReader.nextKeyValue(TableRecordReader.java:142)中的.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.nextKeyValue(TableRecordReaderImpl.java:133) $ NewTrackingRecordReader.nextKeyValue(MapTask.java:532)在org.apache.hadoop.mapreduce.MapContext.nextKeyValue(MapContext.java:67)在org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143)在org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)在org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)在org.apache.hadoop.mapred.Child $ 4.run (Child.java:255)位于org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInf)的javax.security.auth.Subject.doAs(Subject.java:396)的java.security.AccessController.doPrivileged(Native Method)ormation.java:1083)在org.apache.hadoop.mapred.Child.main(Child.java:249)引起的:org.apache.hadoop.hbase.UnknownScannerException:org.apache.hadoop.hbase.UnknownScannerException:名称: 1502530095384129314在org.apache.hadoop.hbase.regionserver.HRegionServer.next(HRegionServer.java:1837)在sun.reflect.GeneratedMethodAccessor19.invoke(未知来源)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)在java.lang.reflect.Method.invoke(Method.java:597)位于org.apache.hadoop.hbase.ipc的org.apache.hadoop.hbase.ipc.HBaseRPC $ Server.call(HBaseRPC.java:570). HBaseServer $ Handler.run(HBaseServer.java:1039)at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl. java:27)atg.apach的java.lang.reflect.Constructor.newInstance(Constructor.java:513)e.hadoop.hbase.RemoteExceptionHandler.decodeRemoteException在org.apache.hadoop.hbase.client.ScannerCallable(RemoteExceptionHandler.java:96)在org.apache.hadoop.hbase.client.ScannerCallable.call(ScannerCallable.java:83).调用(ScannerCallable.java:38)在org.apache.hadoop.hbase.client.HConnectionManager $ HConnectionImplementation.getRegionServerWithRetries(HConnectionManager.java:1226)在org.apache.hadoop.hbase.client.HTable $ ClientScanner.next(HTable. java:1187)......还有12个
你能帮帮我解决吗?
Bal*_*aji 11
扫描程序超时异常已发生.避免超时异常通过在hbase-> conf中设置hbase-site.xml中的属性来增加超时
<property>
<name>hbase.client.scanner.timeout.period</name>
<value>900000</value> <!-- 900 000, 15 minutes -->
</property>
<property>
<name>hbase.rpc.timeout</name>
<value>900000</value> <!-- 15 minutes -->
</property>
Run Code Online (Sandbox Code Playgroud)
小智 9
正如HBase官方书中所述:
您可能需要在较少数量的RPC与客户端和服务器上使用的内存之间找到最佳位置.将扫描器缓存设置得更高将在大多数情况下提高扫描性能,但将其设置得太高也会产生不利影响:每次调用next()将需要更长时间,因为需要更多数据并且需要传输到客户端,并且一旦超过客户端进程可用的最大堆,它可能会以OutOfMemoryException终止.将行传输到客户端或处理客户端上的数据所花费的时间超过配置的扫描程序租约阈值时,最终会以抛出ScannerTimeoutException的形式收到租约过期错误.
因此,最好不要通过上述配置来避免异常,而是将Map端的缓存设置得更低,使映射器能够将所需的负载处理到预先指定的时间间隔.
归档时间: |
|
查看次数: |
10162 次 |
最近记录: |