开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink hbase短路读取datanode报错怎么办?

Flink hbase短路读取datanode报错?java.net.SocketTimeoutException: read(2) error: Resource temporarily unavailable
2024-05-20 08:22:25,735 WARN [RpcServer.default.RWQ.Fifo.read.handler=144,queue=12,port=16020] hdfs.BlockReaderFactory: BlockReaderFactory(fileName=/hbase/data/default/alerts/6aedb1697e29f1e4be88996849fbb716/data/e20886e05d7b4fbcac8e209800a76709, block=BP-1719712434-10.80.10.150-1522218330932:blk_1589343399_515603961): I/O error requesting file descriptors. Disabling domain socket DomainSocket(fd=753,path=/var/lib/hadoop-hdfs/dn_socket)
java.net.SocketTimeoutException: read(2) error: Resource temporarily unavailable
at org.apache.hadoop.net.unix.DomainSocket.readArray0(Native Method)
at org.apache.hadoop.net.unix.DomainSocket.access$000(DomainSocket.java:45)
at org.apache.hadoop.net.unix.DomainSocket$DomainInputStream.read(DomainSocket.java:532)
at java.io.FilterInputStream.read(FilterInputStream.java:83)
at org.apache.hadoop.hdfs.protocolPB.PBHelper.vintPrefixed(PBHelper.java:2292)
at org.apache.hadoop.hdfs.BlockReaderFactory.requestFileDescriptors(BlockReaderFactory.java:542)
at org.apache.hadoop.hdfs.BlockReaderFactory.createShortCircuitReplicaInfo(BlockReaderFactory.java:490)
at org.apache.hadoop.hdfs.shortcircuit.ShortCircuitCache.create(ShortCircuitCache.java:782)
at org.apache.hadoop.hdfs.shortcircuit.ShortCircuitCache.fetchOrCreate(ShortCircuitCache.java:716)
at org.apache.hadoop.hdfs.BlockReaderFactory.getBlockReaderLocal(BlockReaderFactory.java:422)
at org.apache.hadoop.hdfs.BlockReaderFactory.build(BlockReaderFactory.java:333)
at org.apache.hadoop.hdfs.DFSInputStream.actualGetFromOneDataNode(DFSInputStream.java:1161)
at org.apache.hadoop.hdfs.DFSInputStream.fetchBlockByteRange(DFSInputStream.java:1086)
at org.apache.hadoop.hdfs.DFSInputStream.pread(DFSInputStream.java:1439)
at org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:1402)
at org.apache.hadoop.fs.FSDataInputStream.read(FSDataInputStream.java:89)
at org.apache.hadoop.hbase.io.hfile.HFileBlock.positionalReadWithExtra(HFileBlock.java:805)
at org.apache.hadoop.hbase.io.hfile.HFileBlock$FSReaderImpl.readAtOffset(HFileBlock.java:1565)
at org.apache.hadoop.hbase.io.hfile.HFileBlock$FSReaderImpl.readBlockDataInternal(HFileBlock.java:1769)
at org.apache.hadoop.hbase.io.hfile.HFileBlock$FSReaderImpl.readBlockData(HFileBlock.java:1594)
at org.apache.hadoop.hbase.io.hfile.HFileReaderImpl.readBlock(HFileReaderImpl.java:1488)
at org.apache.hadoop.hbase.io.hfile.HFileBlockIndex$CellBasedKeyBlockIndexReader.loadDataBlockWithScanInfo(HFileBlockIndex.java:340)
at org.apache.hadoop.hbase.io.hfile.HFileReaderImpl$HFileScannerImpl.seekTo(HFileReaderImpl.java:852)
at org.apache.hadoop.hbase.io.hfile.HFileReaderImpl$HFileScannerImpl.seekTo(HFileReaderImpl.java:802)
at org.apache.hadoop.hbase.regionserver.StoreFileScanner.seekAtOrAfter(StoreFileScanner.java:326)
at org.apache.hadoop.hbase.regionserver.StoreFileScanner.seek(StoreFileScanner.java:227)
at org.apache.hadoop.hbase.regionserver.StoreFileScanner.enforceSeek(StoreFileScanner.java:470)
at org.apache.hadoop.hbase.regionserver.KeyValueHeap.pollRealKV(KeyValueHeap.java:369)
at org.apache.hadoop.hbase.regionserver.KeyValueHeap.(KeyValueHeap.java:103)
at org.apache.hadoop.hbase.regionserver.KeyValueHeap.(KeyValueHeap.java:81)
at org.apache.hadoop.hbase.regionserver.StoreScanner.resetKVHeap(StoreScanner.java:407)
at org.apache.hadoop.hbase.regionserver.StoreScanner.(StoreScanner.java:257)
at org.apache.hadoop.hbase.regionserver.MobStoreScanner.(MobStoreScanner.java:44)
at org.apache.hadoop.hbase.regionserver.HMobStore.createScanner(HMobStore.java:159)
at org.apache.hadoop.hbase.regionserver.HStore.getScanner(HStore.java:1943)
at org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.initializeScanners(HRegion.java:6181)
at org.apache.hadoop.hbase.regionserver.HRegion$RegionScannerImpl.(HRegion.java:6161)
at org.apache.hadoop.hbase.regionserver.HRegion.instantiateRegionScanner(HRegion.java:2809)

展开
收起
夹心789 2024-05-28 15:18:40 14 0
1 条回答
写回答
取消 提交回答
  • java.net.SocketTimeoutException: read(2) error: Resource temporarily unavailable 这个错误通常表明在尝试从Hadoop的HDFS(Hadoop Distributed FileSystem)的DataNode读取数据时,客户端(在这个上下文中是Flink作业或HBase客户端)遇到了网络问题或HDFS DataNode无法及时响应读取请求。

    这个问题可能由多种原因引起,以下是一些排查和解决问题的步骤:

    网络问题:
    检查Flink作业所在的机器和HDFS DataNode之间的网络连接。
    确保没有防火墙或网络ACLs阻止它们之间的通信。
    尝试ping DataNode的IP地址,看是否有丢包或延迟。
    HDFS性能问题:
    检查HDFS集群的健康状况和性能指标,如磁盘I/O、CPU和内存使用情况。
    查看DataNode的日志,看是否有相关错误或警告。
    如果HDFS集群负载很高,可能需要增加资源或优化作业以减少对HDFS的压力。
    HBase和HDFS配置:
    确保HBase和HDFS的配置文件(如hbase-site.xml和hdfs-site.xml)中的设置是合理的,特别是与I/O、超时和重试相关的设置。
    图片.png

    检查是否有任何自定义配置可能导致此问题。
    Flink配置:
    查看Flink作业的配置,特别是与HDFS和HBase交互的部分。
    尝试调整与超时相关的配置,如taskmanager.network.timeout。
    HBase短路读取(Short-circuit Reads):
    短路读取是HBase为了优化读取性能而引入的一个特性,允许HBase客户端直接从DataNode读取数据,而不需要经过NameNode。
    如果短路读取配置不当或存在兼容性问题,可能会导致上述错误。检查HBase和HDFS的版本兼容性,并确认短路读取的配置是否正确。
    HDFS DataNode问题:
    如果某个DataNode出现问题(如磁盘故障、内存不足等),它可能无法及时响应读取请求。
    使用Hadoop的管理工具(如Hadoop Admin UI或命令行工具)来检查DataNode的健康状况和状态。
    如果需要,重新启动有问题的DataNode或整个HDFS集群。
    日志分析:
    仔细分析Flink、HBase和HDFS的日志文件,以获取更多关于错误的详细信息。
    注意任何与网络连接、I/O错误、超时或重试相关的日志条目。
    资源竞争:
    如果集群中的多个作业同时运行并争用相同的资源(如CPU、内存、磁盘I/O或网络带宽),可能会导致性能下降和超时错误。
    尝试调整作业的执行计划或资源分配,以减少资源竞争。
    升级和补丁:
    确保你正在使用的Flink、HBase和HDFS的版本都是最新的,或者已经应用了所有相关的安全补丁和性能改进。

    2024-06-18 14:13:10
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    大数据时代的存储 ——HBase的实践与探索 立即下载
    Hbase在滴滴出行的应用场景和最佳实践 立即下载
    阿里云HBase主备双活 立即下载