Подтвердить что ты не робот

Ошибка отображения базы данных Hbase

Я пишу задание mapreduce.The является таблицей в hbase.

При запуске задания произошла ошибка:

org.apache.hadoop.hbase.client.ScannerTimeoutException: 88557ms, прошедший с момента последнего вызова, тайм-аут в настоящее время установлен в 60000 по адресу org.apache.hadoop.hbase.client.HTable $ClientScanner.next(HTable.java:1196 ) на org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.nextKeyValue(TableRecordReaderImpl.java:133) на org.apache.hadoop.hbase.mapreduce.TableRecordReader.nextKeyValue(TableRecordReader.java:142) на org.apache.hadoop. mapred.MapTask $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) в java.security.AccessController.doPrivileged(собственный метод) в javax.security.auth.Subject.doAs(Subject.java:396) в org.apache.hadoop.security.UserGroupInformation. DOAS (UserGroup Information.java:1083) at 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.HBaseRPC $Server.call(HBaseRPC.java:570) на org.apache.hadoop.hbase.ipc. HBaseServer $Handler.run(HBaseServer.java:1039) на sun.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) на sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) на sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl. java: 27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) на org.ap ache.hadoop.hbase.RemoteExceptionHandler.decodeRemoteException(RemoteExceptionHandler.java:96). вызов (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

Можете ли вы помочь мне исправить это.

4b9b3361

Ответ 1

Исключение времени ожидания сканера. Чтобы избежать тайм-аута Исключение Увеличьте время ожидания, установив свойство в hbase-site.xml, которое будет доступно в hbase- > conf

  <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>

Ответ 2

Как говорится в официальной книге HBase:

Вам может потребоваться найти сладкое пятно между низким количеством RPC и памятью используемый на клиенте и сервере. Настройка кеширования сканера выше улучшит сканирование большую часть времени, но слишком высокая установка может также иметь неблагоприятные последствия: каждый вызов next() будет занимать больше времени по мере поступления большего количества данных и его необходимо транспортировать для клиента, и как только вы превысите максимальную кучу, клиентский процесс доступен он может завершиться с помощью исключения OutOfMemoryException. Когда время, затраченное на передачу строк клиенту, или обработка данных на клиенте, превышает установленный порог аренды сканера, вы в конечном итоге получит ошибку с истекшим сроком аренды, в виде броска ScannerTimeoutException.

Таким образом, было бы лучше не исключать исключение из приведенной выше конфигурации, а установить кеширование вашей карты ниже, позволяя вашим картографам обрабатывать требуемую нагрузку в заранее определенный интервал времени.

Ответ 3

Вы можете использовать метод setCaching(int noOfRows) объекта Scan, чтобы уменьшить количество строк, выбранных сканером одновременно.

Scan scan=new Scan();
scan.setCaching(400);//here 400 is just an example value

Большее значение кеширования может привести к ScannerTimeoutException, так как вашей программе может потребоваться больше времени на потребление/обработку извлеченных строк, чем значение тайм-аута.

Но это может замедлить вашу задачу, так как сканер делает больше запросов на выбор на сервере, поэтому вы должны точно настроить значения caching и timeout в соответствии с потребностями вашей программы.

Ответ 4

Устанавливается следующее свойство hbase-site.xml для меня

  <property>
       <name>hbase.client.scanner.timeout.period</name>
       <value>900000</value>
  </property>

Это выдается, если время между вызовами RPC от клиента до RegionServer превышает тайм-аут проверки. например.

if ( RPC_call_time > Scanner_timeout ){

throw ScannerTimeoutException

}

посетите мой блогпот для деталей