java.io.IOException: Could not obtain block: blk

67 篇文章 0 订阅
54 篇文章 0 订阅

联系两个晚上跑数据出现这个异常,具体内容如下:

2011-08-10 05:51:21,823 ERRORorg.apache.hadoop.hbase.regionserver.CompactSplitThread: Compaction/Splitfailed for region wb_content,00000000000001231426034_10630922139,1312541358653.19f954eef4d1fa134e71db00f3345f88.

java.io.IOException: Could not seekStoreFileScanner[HFileScanner for readerreader=hdfs://:9000/hbase/wb_content/19f954eef4d1fa134e71db00f3345f88/weiboType/4615137989595256997,compression=none, inMemory=false,firstKey=0000000000000si1231426034_si10630922139/weiboType:weiboType/1312533397173/Put,lastKey=0000000000000si1241801521_si11589283764/weiboType:weiboType/1312539248176/Put,avgKeyLen=68, avgValueLen=1, entries=1397940, length=108760902, cur=null]

       atorg.apache.hadoop.hbase.regionserver.StoreFileScanner.seek(StoreFileScanner.java:104)

       atorg.apache.hadoop.hbase.regionserver.StoreScanner.<init>(StoreScanner.java:106)

       at org.apache.hadoop.hbase.regionserver.Store.compact(Store.java:922)

       at org.apache.hadoop.hbase.regionserver.Store.compact(Store.java:733)

       atorg.apache.hadoop.hbase.regionserver.HRegion.compactStores(HRegion.java:770)

       at org.apache.hadoop.hbase.regionserver.HRegion.compactStores(HRegion.java:715)

       atorg.apache.hadoop.hbase.regionserver.CompactSplitThread.run(CompactSplitThread.java:81)

Caused by: java.io.IOException: Could notobtain block: blk_-7641868513609446401_450401file=/hbase/wb_content/19f954eef4d1fa134e71db00f3345f88/weiboType/4615137989595256997

       atorg.apache.hadoop.hdfs.DFSClient$DFSInputStream.chooseDataNode(DFSClient.java:1993)

       atorg.apache.hadoop.hdfs.DFSClient$DFSInputStream.blockSeekTo(DFSClient.java:1800)

       at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.read(DFSClient.java:1948)

       at java.io.DataInputStream.read(DataInputStream.java:132)

       atorg.apache.hadoop.hbase.io.hfile.BoundedRangeFileInputStream.read(BoundedRangeFileInputStream.java:105)

       at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)

       at java.io.BufferedInputStream.read(BufferedInputStream.java:317)

       at org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:141)

       atorg.apache.hadoop.hbase.io.hfile.HFile$Reader.decompress(HFile.java:1094)

       atorg.apache.hadoop.hbase.io.hfile.HFile$Reader.readBlock(HFile.java:1036)

       atorg.apache.hadoop.hbase.io.hfile.HFile$Reader$Scanner.seekTo(HFile.java:1437)

       atorg.apache.hadoop.hbase.regionserver.StoreFileScanner.seekAtOrAfter(StoreFileScanner.java:139)

       atorg.apache.hadoop.hbase.regionserver.StoreFileScanner.seek(StoreFileScanner.java:96)

       ... 6 more


查了些资料给出的结论是

hdfs-site.xml配置文件中参数限制了datanode所允许同时执行的发送和接受任务的数量,缺省为256,hadoop-defaults.xml中通常不设置这个参数。

这个限制看来实际有些偏小,高负载下,DFSClient 在put数据的时候会报 could not read from stream 的 Exception。

值得注意的是,程序里进行比较的数值来自于java的ThreadGroup,据JDK API文档解释,这个参数并不确保准确,仅供参考用途,Core Java也建议不要使用ThreadGroup,hadoop在此使用ThreadGroup有些值得商榷。

<property>

<name>dfs.datanode.max.xcievers</name>

<value>2047</value>

<description>xcieversnumber</description>

</property>

第一个晚上修改了该参数后仍然抛出异常,后根据异常内容分析应为数据块上锁导致,我 这有两个后台进程,同时对表进行读写操作,当我进行写操作时会进行split,压缩操作,当读操作访问该块时会被限制,后来对一个表单跑一个程序问题目前还没再出现,先记录一下,后面需要对程序及hadoop进行优化



### 回答1: 找不到文件或目录。 简单来说,这个异常是说程序在试图执行读取或写入文件操作时,找不到指定的文件或目录。这可能是因为文件不存在、文件路径不正确、文件被占用或权限不足等原因导致的。 解决方案可能包括检查文件路径是否正确,确保具有正确的读取/写入权限,或确保文件已经正确创建。如果仍然无法解决问题,建议检查程序的错误日志以获取更多的细节信息。 ### 回答2: java.io.ioexception: could not是java程序中的一个错误提示信息,通常表示程序在运行中遇到了读取或写入数据的错误。这个错误信息可能有许多不同的具体原因,如文件权限不足、文件不存在、网络连接中断等等。因此,想要准确地解决这个问题,需要根据具体的提示信息和上下文情况来分析可能的原因。 举个例子,如果错误提示是"java.io.ioexception: could not open file",那么很有可能是因为程序试图打开一个不存在或者没有读写权限的文件。此时我们需要检查程序中相应的文件操作代码是否存在问题,比如是否正确指定了文件路径,是否使用了正确的文件读写模式等等。 如果错误提示是"java.io.ioexception: connection reset",那么就说明程序在进行网络连接时遇到了中断问题。此时我们需要检查网络连接的健康状态,比如是否存在网络延迟、是否出现了网络故障等等。 总之,java.io.ioexception: could not错误提示信息本身并没有给出具体的解决方案,需要根据具体情况去找到问题所在,然后针对性地去解决问题。当然,在日常编程中,我们也可以使用try-catch来捕获并处理这种异常情况,以保证程序能够正常运行并正确处理异常情况。 ### 回答3: java.io.IOException是一种常见的Java异常,它通常表示在读取/写入数据时遇到了某种异常情况。在处理这个异常时,可能会看到一些不同的错误消息,包括“could not create file”、“could not write file”以及其他类似的错误消息。 造成java.io.IOException的原因可能很多,例如: 1. 文件系统错误:当尝试读取或写入磁盘上的文件时,可能会遇到文件系统错误。这些错误可能包括硬盘故障,文件权限问题等。 2. 网络故障:如果在读取或写入数据时使用了网络连接,可能会发生网络故障,例如断开连接或超时等。 3. 代码错误:也可能是代码中的错误导致了IOException异常。例如,可能使用了错误的文件名,或者对不存在的文件进行了操作。除此之外,还可能是在编写读取/写入代码时,忘记关闭数据流,造成了IO资源的耗尽问题。 4. 磁盘满了: 当文件系统的磁盘空间用尽时,会抛出java.io.IOException异常。 解决java.io.IOException异常的方法因情况而异,当遇到此类异常时,可能需要执行各种操作,如检查文件名或路径,检查网络连接状态,也可能需要定位代码错误,并进行修复。 如果是由代码错误引起的java.io.IOException,最好的解决方案是审查和修改代码,并确保对文件和网络资源的操作正确。 当然,预防IO异常的发生,建议在IO操作的时候充实的进行异常处理,保证代码健壮性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值