我正在尝试为分布式系统类(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
专家,我们可能会看到我们的hadoop集群中的block数增长。“太多”block会导致数据节点堆需求增加、执行速度下降、GC次数增多等后果。当block数超过某个“阈值”时,我们应该引起注意。我见过不同的阈值静态数字,例如200,000或500,000——“神奇”数字。它不应该是节点内存的函数(DataNode的Java堆大小,以字节为单位)吗?其他有趣的相关问题:高block数表示什么?一种。小文件太多?b.产能不足?是(a)还是(b)?如何区分两者?什么是小文件?大小小于block大小(dfs.blocksize)的文件?每个文件是否在磁盘上占用一个新的数据block?还是与
我正在尝试创建集群的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处理文件会更加困难。 最佳答案
由于一系列不幸的事件,一个程序从/dataN/dfs/dn/current/BP-XXXXXXX/current/finalized/subdirN/subdirN/blk_NNNNNNNNNN进入/tmp/blk_NNNNNNNNNN我没有从程序中获取任何日志记录来判断原始subdirN/subdirN/目录的位置。有什么方法可以根据fsimage文件、block文件本身或其他一些元数据找出这个block应该在哪里?我通过查找相应的*.meta文件能够恢复一些block,但仍然存在一些漏洞。复制使我免于最糟糕的情况,但我仍然缺少5个我想尝试恢复的“关键任务”文件。从hdfsfsck/