Невозможно отсканировать EMR HBase, запеченный репликой чтения S3 из Java API - PullRequest
0 голосов
/ 15 марта 2019

То, что я хочу построить, выглядит так:

  • Время от времени запускайте кратковременный кластер для записи в HBase, запеченный на S3
  • Запуск долго работающего кластера для той же базы данных S3, что и для реплики чтения
  • Мое приложение живет в Kubernetes POD в EC2, и им нужно запросить реплику чтения HBase из Java API, что-то вроде сканирования. Не пишите здесь.

Я экспериментирую со следующим. Я написал тестовую программу и использую плагин для сборки maven для подготовки jar-файлов в папке:

    val hbaseConfig = new Configuration()
    hbaseConfig.clear()
    hbaseConfig.set("hbase.zookeeper.quorum", "ip-10-0-xxx-xxx.ec2.internal")
    dumpConfiguration(hbaseConfig)
    HBaseAdmin.checkHBaseAvailable(hbaseConfig)

    val connection = ConnectionFactory.createConnection(hbaseConfig)
    val table = connection.getTable(TableName.valueOf("test-messages-01"))

    val scan = new Scan()
    scan.addColumn("msgs".getBytes(), "msg".getBytes)
    val scanner = table.getScanner(scan)

    println(s"scanner: $scanner")

    import scala.collection.JavaConverters._
    scanner.iterator().asScala.toStream.take(20).foreach(x => println(s"--> $x"))

    scanner.close()
    table.close()
    connection.close()

Я запустил эту маленькую программу с той же машины EMR, и она работает.

Я также запустил эту маленькую программу из POD (где я, конечно, изменил группу безопасности), и она также отлично работает.

Теперь я запустил новый кластер EMR, где HBase является репликой чтения.

Я могу подключиться к машине EMR и запустить hbase shell, затем count 'test-messages-01', и это также работает.

Я немного изменил программу, просто добавлю идентификатор кластера в качестве суффикса мета таблицы:

    val hbaseConfig = new Configuration()
    hbaseConfig.clear()
    hbaseConfig.set("hbase.zookeeper.quorum", "ip-10-0-xxx-xxx.ec2.internal")
    hbaseConfig.set("hbase.meta.table.suffix", "j-xxxxxxxx")
    dumpConfiguration(hbaseConfig)
    HBaseAdmin.checkHBaseAvailable(hbaseConfig)

    val connection = ConnectionFactory.createConnection(hbaseConfig)
    val table = connection.getTable(TableName.valueOf("test-messages-01"))

    val scan = new Scan()
    scan.addColumn("msgs".getBytes(), "msg".getBytes)
    val scanner = table.getScanner(scan)

    println(s"scanner: $scanner")

    import scala.collection.JavaConverters._
    scanner.iterator().asScala.toStream.take(20).foreach(x => println(s"--> $x"))

    scanner.close()
    table.close()
    connection.close()

Затем я пытаюсь запустить его с главного компьютера EMR, но он больше не работает.

Из журнала я вижу, что он успешно подключен к zookeeper, а также установил соединение HBase, и сканер также создан. Но он зависает, повторяя сканер, где я получил много org.apache.hadoop.hbase.NotServingRegionException исключений:

[main] INFO org.apache.zookeeper.ZooKeeper - Initiating client connection, connectString=ip-10-0-104-68.ec2.internal:2181 sessionTimeout=90000 watcher=org.apache.hadoop.hbase.zookeeper.PendingWatcher@625732
[main-SendThread(ip-10-0-104-68.ec2.internal:2181)] INFO org.apache.zookeeper.ClientCnxn - Opening socket connection to server ip-10-0-104-68.ec2.internal/10.0.104.68:2181. Will not attempt to authenticate using SASL (unknown error)
[main-SendThread(ip-10-0-104-68.ec2.internal:2181)] INFO org.apache.zookeeper.ClientCnxn - Socket connection established to ip-10-0-104-68.ec2.internal/10.0.104.68:2181, initiating session
[main-SendThread(ip-10-0-104-68.ec2.internal:2181)] INFO org.apache.zookeeper.ClientCnxn - Session establishment complete on server ip-10-0-104-68.ec2.internal/10.0.104.68:2181, sessionid = 0x1000001ffb70011, negotiated timeout = 40000
[main] INFO org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation - Closing master protocol: MasterService
[main] INFO org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation - Closing zookeeper sessionid=0x1000001ffb70011
[main] INFO org.apache.zookeeper.ZooKeeper - Session: 0x1000001ffb70011 closed
[main-EventThread] INFO org.apache.zookeeper.ClientCnxn - EventThread shut down for session: 0x1000001ffb70011
[main] INFO org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper - Process identifier=hconnection-0x52d239ba connecting to ZooKeeper ensemble=ip-10-0-104-68.ec2.internal:2181
[main] INFO org.apache.zookeeper.ZooKeeper - Initiating client connection, connectString=ip-10-0-104-68.ec2.internal:2181 sessionTimeout=180000 watcher=org.apache.hadoop.hbase.zookeeper.PendingWatcher@315f43d5
[main-SendThread(ip-10-0-104-68.ec2.internal:2181)] INFO org.apache.zookeeper.ClientCnxn - Opening socket connection to server ip-10-0-104-68.ec2.internal/10.0.104.68:2181. Will not attempt to authenticate using SASL (unknown error)
[main-SendThread(ip-10-0-104-68.ec2.internal:2181)] INFO org.apache.zookeeper.ClientCnxn - Socket connection established to ip-10-0-104-68.ec2.internal/10.0.104.68:2181, initiating session
[main-SendThread(ip-10-0-104-68.ec2.internal:2181)] INFO org.apache.zookeeper.ClientCnxn - Session establishment complete on server ip-10-0-104-68.ec2.internal/10.0.104.68:2181, sessionid = 0x1000001ffb70012, negotiated timeout = 40000
scanner: org.apache.hadoop.hbase.client.ClientSimpleScanner@696f0212
[hconnection-0x52d239ba-metaLookup-shared--pool4-t1] INFO org.apache.hadoop.hbase.client.RpcRetryingCaller - Call exception, tries=10, retries=31, started=38396 ms ago, cancelled=false, msg=org.apache.hadoop.hbase.NotServingRegionException: Region hbase:meta,,1 is not online on ip-10-0-122-64.ec2.internal,16020,1552648181048
    at org.apache.hadoop.hbase.regionserver.HRegionServer.getRegionByEncodedName(HRegionServer.java:3086)
    at org.apache.hadoop.hbase.regionserver.RSRpcServices.getRegion(RSRpcServices.java:1275)
    at org.apache.hadoop.hbase.regionserver.RSRpcServices.newRegionScanner(RSRpcServices.java:2678)
    at org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:3012)
    at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:36613)
    at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2380)
    at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:124)
    at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:297)
    at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:277)
 row 'test-messages-01,,99999999999999' on table 'hbase:meta' at region=hbase:meta,,1.1588230740, hostname=ip-10-0-122-64.ec2.internal,16020,1552648181048, seqNum=0
[hconnection-0x52d239ba-metaLookup-shared--pool4-t1] INFO org.apache.hadoop.hbase.client.RpcRetryingCaller - Call exception, tries=11, retries=31, started=48452 ms ago, cancelled=false, msg=org.apache.hadoop.hbase.NotServingRegionException: Region hbase:meta,,1 is not online on ip-10-0-122-64.ec2.internal,16020,1552648181048
    at org.apache.hadoop.hbase.regionserver.HRegionServer.getRegionByEncodedName(HRegionServer.java:3086)
    at org.apache.hadoop.hbase.regionserver.RSRpcServices.getRegion(RSRpcServices.java:1275)
    at org.apache.hadoop.hbase.regionserver.RSRpcServices.newRegionScanner(RSRpcServices.java:2678)
    at org.apache.hadoop.hbase.regionserver.RSRpcServices.scan(RSRpcServices.java:3012)
    at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:36613)
    at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2380)
    at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:124)
    at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:297)
    at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:277)
 row 'test-messages-01,,99999999999999' on table 'hbase:meta' at region=hbase:meta,,1.1588230740, hostname=ip-10-0-122-64.ec2.internal,16020,1552648181048, seqNum=0

Я даже пытался использовать библиотеку hbase на машине EMR /usr/lib/hbase/*, но она все еще не работает.

Я немного растерялся и не смог найти решение по поиску.

...