我有一个运行 hdfs (hadoop 2.6.0) 的集群,但它的名称节点向我报告了一个关于丢失 block 的错误:
There are 102 missing blocks. The following files may be corrupted:
当我跳转到名称节点并读取登录(名称节点文件日志)时,我收到许多警告,例如:
Error report from DatanodeRegistration(10.3.24.71, datanodeUuid=b1aa43eb-bd9c-4e1a-b919-d7c99ad0fcdf, infoPort=50075, ipcPort=50020, storageInfo=lv=-56;cid=CID-9f27dfea-17f6-41eb-95d2-50424dc78fa9;nsid=197210444;c=0):
Can't send invalid block BP-352432948-10.3.24.65-1433821675295:blk_1074188011_949972
是我的硬盘有问题还是其他问题?
最佳答案
原因
您的 HDFS 文件系统中的某些文件已损坏,要么是丢失了最后一个 block 副本,要么是复制不足。
注意:临时文件或由 teragen 生成的虚假样本数据发生这种情况的风险很大,因为这些文件通常会将复制因子默认设置为 1,如果托管该副本的数据节点出现故障,文件已不可修复地损坏(例如丢失)。
故障排除步骤
要获取导致问题的文件的完整详细信息,您可以运行以下命令:
$ hdfs fsck / -files -blocks -locations
该命令的输出将识别在损坏的文件上设置的复制因子。
根据您的数据 block ,您可以采用不同的方法来避免此问题。
1) 这种情况可能只是暂时的,如果你有一个数据复制不足,它应该自动将 block 复制到其他数据节点以匹配复制因子
2) 如果它不是在你自己的复制上运行一个平衡器(如果你使用 HBase,不要运行 HDFS 平衡器!)
3) 你可以手动设置一个特定文件的复制,该文件正在复制到比当前更高的水平,诱使集群创建更多副本。
4) 如果它只是一个临时文件,它是在你的推测执行任务很高时在运行作业时创建的,那么让推测执行任务几乎与复制因子匹配,这样它就不会在作业运行。
作为最后的手段,如果您确定不需要这些文件并且只想消除错误,您可以运行此命令以自动删除损坏的文件:
$ hdfs fsck / -delete
关于hadoop - 我的 hdfs 总是向许多损坏的 block 报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37358811/
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
我在理解Enumerator.new方法的工作原理时遇到了一些困难。假设文档中的示例:fib=Enumerator.newdo|y|a=b=1loopdoy[1,1,2,3,5,8,13,21,34,55]循环中断条件在哪里,它如何知道循环应该迭代多少次(因为它没有任何明确的中断条件并且看起来像无限循环)? 最佳答案 Enumerator使用Fibers在内部。您的示例等效于:require'fiber'fiber=Fiber.newdoa=b=1loopdoFiber.yieldaa,b=b,a+bendend10.times.m
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd
我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
我没有理解以下行为(另请参阅inthisSOthread):defdef_testputs'def_test.in'yieldifblock_given?puts'def_test.out'enddef_testdoputs'def_testok'endblock_test=procdo|&block|puts'block_test.in'block.callifblockputs'block_test.out'endblock_test.calldoputs'block_test'endproc_test=procdoputs'proc_test.in'yieldifblock_gi
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri
我需要尝试一些AES片段。我有一些密文c和一个keyk。密文已使用AES-CBC加密,并在前面加上IV。不存在填充,纯文本的长度是16的倍数。所以我这样做:aes=OpenSSL::Cipher::Cipher.new("AES-128-CCB")aes.decryptaes.key=kaes.iv=c[0..15]aes.update(c[16..63])+aes.final它工作得很好。现在我需要手动执行CBC模式,所以我需要单个block的“普通”AES解密。我正在尝试这个:aes=OpenSSL::Cipher::Cipher.new("AES-128-ECB")aes.dec