我试图从HDFS和/或文件系统中读取一些文件,但我得到了这个异常Driverstacktrace:][unreadblockdata]]org.apache.spark.SparkException:Jobabortedduetostagefailure:Task0instage0.0failed4times,mostrecentfailure:Losttask0.3instage0.0(TID6,C-4073.CM.ES,executor1):java.lang.IllegalStateException:unreadblockdataatjava.io.ObjectInputStr
我的问题是我有一个文本文件,其中有100个单词,用空格分隔,我需要做一个单词计数程序。那么,当我的名称节点将文件拆分为HDFSblock时,我们如何确保拆分仅在单词末尾完成?即,如果我将文本文件中的第50个单词作为Hadoop,如果将其拆分为64MBblock时,当前block的存储可能在单词Hadoop的中心达到64MB,因此一个block包含'had'和其他block中的另一个'oop'。抱歉,如果这个问题听起来很愚蠢,但请提供答案。谢谢。 最佳答案 你的答案是输入拆分。因为HDFS不知道文件的内容。在将数据存储到多个block
我正在尝试为分布式系统类(class)的期末项目制作一个简化的HDFS(Hadoop分布式文件系统)。因此,我尝试的第一件事是编写一个程序,将任意文件拆分为任意维度的block(block)。我找到了this有用的例子,代码是:packagejavabeat.net.io;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;/***SplitFileExam
我在单节点集群中运行Hadoop0.21.0来处理一个大于200GB的大文件。为了减少执行时间,我分别尝试了不同的HDFSblock大小(128、256、512MB、1、1.5、1.75GB)。但是,当使用block大小>=2GB时出现以下异常。注意:我使用的是java-8-oracle。2015-08-0512:02:12,524WARNorg.apache.hadoop.mapred.Child:Exceptionrunningchild:java.lang.IndexOutOfBoundsExceptionatorg.apache.hadoop.fs.FSInputChecker
我的文件大小为10MB,我将其存储在hadoop中,但hdfs中的默认block大小为64MB。因此,我的文件使用了64MB中的10MB。HDFS将如何利用同一block中剩余的54MB空闲空间? 最佳答案 从逻辑上讲,如果您的文件小于block大小,HDFS会将该特定文件的block大小减小到文件的大小。所以HDFS只会使用10MB来存储10MB的小文件。它不会浪费54MB或留空。这里详细描述了HDFS的小文件:http://blog.cloudera.com/blog/2009/02/the-small-files-proble
继续提问:datablocksizeinHDFS,why64MB?我知道在分发中的所有数据节点中,HDFS中的块大小为一致/相同(大小取决于配置)。我的问题是:为什么此块大小在所有NameNode中保持一致?我问这个问题是因为,我有10个高端处理机作为DataNode,还有20个低端硬件。如果我们在这10台计算机的HDFS中保留更高块的块,它可以更快地处理吗?另外,NameNode具有元数据以标识DataNode中的块,因此机器之间块大小不一致的问题是什么? 最佳答案 letsayIhave10higherendprocessing
我正在尝试创建集群的HDFSblock分布的可视化。我计划使用Tableau创建这个,但想知道哪种类型的可视化能够让您了解哪些节点需要重新平衡,以及将服务器日志数据导入tableau的有效方式? 最佳答案 在投入太多时间之前,您可能想看看Twitter的开源HDFS-DU项目。这提供了基于文件系统内的路径而不是集群内的DataNode的利用率View,但也许这对您的需求仍然有帮助。如果目标只是识别需要重新平衡的节点,那么可以在NameNode网络用户界面的“数据节点”选项卡上访问此信息。你也可以运行hdfsdfsadmin-repo
我想运行一个hadoop单元测试,使用本地文件系统模式...我希望看到几个part-m-*文件被写入磁盘(而不是只有1个)。但是,由于它只是一个测试,我不想处理64M的数据(我相信默认大小是每个block~64megs)。在分布式模式下我们可以使用dfs.block.size我想知道是否有一种方法可以让我的本地文件系统写出小的part-m文件,也就是说,这样我的单元测试将用几个(尽管非常小)文件模拟大规模数据的内容。 最佳答案 假设您的输入格式可以处理可拆分文件(参见org.apache.hadoop.mapreduce.lib.i
我是Hadoop新手。部署后,我运行了基准测试,$hadoopjarhadoop-0.20.0-test.jarTestDFSIO-write-nrFiles1000-fileSize10。完成工作后,我查看了集群摘要,假设有1000个文件和目录,1000个block=总共2000个。然后我使用shellcmd删除相应的文件。那么ClusterSummary是:0个文件和目录1000个block=总共1000个。我认为删除后ClusterSummary中应该没有文件和block。但实际情况是:在我问这个问题之前是1000个区block。但是现在有0个block。这怎么会发生?
例如,我使用复制因子2将文件写入HDFS。我正在写入的节点现在拥有文件的所有block。文件所有block的其他副本分散在集群中所有剩余的节点周围。这是默认的HDFS策略。如果我将文件的复制因子降低到1,到底会发生什么?HDFS如何决定从哪些节点删除哪些block?我希望它尝试从文件block数最多的节点中删除block?为什么我要问-如果是这样,那将是有道理的-它会减轻文件的处理。因为如果所有block只有一个副本,并且所有block都位于同一节点上,那么由于数据传输到集群中的其他节点,使用map-reduce处理文件会更加困难。 最佳答案