Chúng tôi đang làm việc trên một kịch bản mà chúng ta cần phải kiểm tra sự tồn tại của bản ghi trước khi chèn. Nếu bản ghi đã tồn tại, chúng tôi không chèn lại. Chúng tôi đang làm theo lô. Đầu tiên chúng ta tạo một lô Gets để xem sự tồn tại của các bản ghi mà chúng ta muốn chèn vào. Vấn đề này không đến khi kích thước bảng nhỏ hơn và nó cũng rất liên tục. Kích thước lô được đề xuất cho Get là bao nhiêu. Và phương pháp nào tốt nhất để kiểm tra sự tồn tại của các bản ghi trước khi chèn ?? Đánh giá cao trả lời của bạn ..Vấn đề SocketTimeoutException từ HBase Client
Dưới đây là stack trace ..
java.util.concurrent.ExecutionException: java.net.SocketTimeoutException: Call to b16-pf-dv-093.abc.com/10.106.8.103:60020 failed on socket timeout exception: java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for read. ch : java.nio.channels.SocketChannel[connected local=/10.106.8.133:41903 remote=b16-pf-dv-093.abc.com/10.106.8.103:60020]
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
at java.util.concurrent.FutureTask.get(FutureTask.java:83)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatchCallback(HConnectionManager.java:1604)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.processBatch(HConnectionManager.java:1456)
at org.apache.hadoop.hbase.client.HTable.batch(HTable.java:757)
at org.apache.hadoop.hbase.client.HTable.get(HTable.java:726)
at org.apache.hadoop.hbase.client.HTablePool$PooledHTable.get(HTablePool.java:367)
at com.abc.psp.core.metering.util.HBaseClient.get(HBaseClient.java:263)
at com.abc.psp.core.metering.dao.MeteringHBaseDAOImpl.addMeteredRecords(MeteringHBaseDAOImpl.java:374)
at com.abc.psp.core.metering.dao.MeteringHBaseDAOImpl.addMeteredRecords(MeteringHBaseDAOImpl.java:342)
at HBaseTest.main(HBaseTest.java:32)
Caused by: java.net.SocketTimeoutException: Call to b16-pf-dv-093.abc.com/10.106.8.103:60020 failed on socket timeout exception: java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for read. ch : java.nio.channels.SocketChannel[connected local=/10.106.8.133:41903 remote=b16-pf-dv-093.abc.com/10.106.8.103:60020]
at org.apache.hadoop.hbase.ipc.HBaseClient.wrapException(HBaseClient.java:1026)
at org.apache.hadoop.hbase.ipc.HBaseClient.call(HBaseClient.java:999)
at org.apache.hadoop.hbase.ipc.WritableRpcEngine$Invoker.invoke(WritableRpcEngine.java:86)
at $Proxy6.multi(Unknown Source)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$3$1.call(HConnectionManager.java:1433)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$3$1.call(HConnectionManager.java:1431)
at org.apache.hadoop.hbase.client.ServerCallable.withoutRetries(ServerCallable.java:215)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$3.call(HConnectionManager.java:1440)
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation$3.call(HConnectionManager.java:1428)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for read. ch : java.nio.channels.SocketChannel[connected local=/10.106.8.133:41903 remote=b16-pf-dv-093.abc.com/10.106.8.103:60020]
at org.apache.hadoop.net.SocketIOWithTimeout.doIO(SocketIOWithTimeout.java:164)
at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:155)
at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:128)
at java.io.FilterInputStream.read(FilterInputStream.java:116)
at org.apache.hadoop.hbase.ipc.HBaseClient$Connection$PingInputStream.read(HBaseClient.java:373)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
at java.io.DataInputStream.readInt(DataInputStream.java:370)
at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.receiveResponse(HBaseClient.java:646)
at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.run(HBaseClient.java:580)
Cảm ơn rất nhiều vì phản hồi của bạn Tariq. Tôi đã tăng thời gian chờ rpc cho một số lớn hơn và tôi không nhận được điều này ngay bây giờ. Nhưng những gì tôi không thể hiểu được là tại sao nó liên tục. Ý tôi là, tại sao tôi không bị hết thời gian chờ này. Và một vấn đề hiệu suất hơn mà tôi đang phải đối mặt ngay bây giờ là gần 90 - 95% tổng thời gian chèn đã được chi cho kiểm tra duy nhất ngay cả sau khi sử dụng hàng loạt được. Và thời gian kiểm tra cũng rất không nhất quán. Lý do của hành vi này là gì? –
Bạn được chào đón @NareshReddy. Trên thực tế nó phụ thuộc vào rất nhiều thứ, như thiết kế lược đồ của bạn, phân phối dữ liệu của bạn, vv Một lý do có thể có thể là ** RegionServer Hotspotting **. Bạn có các rowkey tuần tự không (như dấu thời gian hoặc thứ gì đó tăng liên tục theo thời gian). Tôi khuyên bạn nên làm theo các thực hành tốt nhất của HBase và phân tích thiết kế của bạn đúng cách, trong trường hợp có một số phạm vi cải tiến. HTH – Tariq