hadoop hdfs中的块概念

llmtgqce  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(434)

我有一些关于hadoop中的块的问题。我听说hadoop使用hdfs来创建特定大小的块。
第一个问题是,这些块实际上存在于普通文件系统(如ntfs)的硬盘上,即我们可以看到托管文件系统(ntfs)上的块,还是只能使用hadoop命令看到这些块?
第二个问题hadoop是在运行任务之前创建块的,也就是说,只要有文件,块就从一开始就存在,还是hadoop只在运行任务时创建块。
第三个问题,在分割之前(即inputformat类的getsplits方法)是否会确定和创建块,而不管分割的数量是多少,还是取决于分割之后?
第四个问题是运行任务前后的块是相同的还是取决于配置,是否有两种类型的块—一种用于存储文件,另一种用于将文件分组并通过网络发送到数据节点以执行任务?

laik7k3q

laik7k3q1#

这些块是否物理上存在于普通文件系统(如ntfs)的硬盘上,即我们可以看到宿主文件系统(ntfs)上的块,还是只能使用hadoop命令看到这些块?
是的,这些块物理上存在于集群中数据节点的磁盘上。我想如果你在其中一个datanode上并且你真的想看到它们,你可以“看到”它们,但是这可能不会很有启发性。它只会是一个随机的128m(或者别的什么) dfs.block.size 设置为in hdfs-site.xml )没有有意义文件名的文件片段。这个 hdfs dfs 命令使您能够将hdfs视为“真正的”文件系统。
hadoop是在运行任务之前创建块的,也就是说,只要有文件,块就从一开始就存在,还是hadoop只在运行任务时创建块。
当您将文件放入hdfs时(通过任何适用于您的情况的方法),hadoop负责将文件分割成块并在datanodes之间分发它们。
在拆分之前(即inputformat类的getsplits方法)是否会确定和创建块,而不管拆分的数量是多少,还是取决于拆分之后?
不完全确定您的意思,但是这些块存在于之前,并且与您对它们所做的任何处理无关。
运行任务前后的块是相同的还是取决于配置,是否有两种类型的块—一种用于存储文件,另一种用于将文件分组并通过网络发送到数据节点以执行任务?
同样,hdfs中的块是在任何处理完成之前确定的,如果有任何处理完成的话。hdfs只是一种以分布式方式存储大文件的方法。当您进行处理时,例如使用mapreduce作业时,hadoop会将中间结果写入磁盘。这与hdfs中原始文件的阻塞无关。

ttcibm8c

ttcibm8c2#

1.这些块是否物理上存在于普通文件系统(如ntfs)的硬盘上,即我们是否可以看到宿主文件系统(ntfs)上的块,或者只能使用hadoop命令看到这些块?
对。块在物理上存在。您可以使用以下命令 hadoop fsck /path/to/file -files -blocks 有关查看块的命令,请参阅以下se问题:
在hadoop中查看文件的块数
2.hadoop是否在运行任务之前创建块,即只要有文件,就从一开始就存在块,或者hadoop仅在运行任务时创建块。
hadoop=分布式存储(hdfs)+分布式处理(mapreduce&yarn)。
mapreduce作业处理输入分割=>输入分割是从datanodes中的数据块创建的。数据块是在文件的写操作期间创建的。如果在现有文件上运行作业,则在Map操作期间,将在创建作业和InputSplit之前预先创建数据块。您可以将数据块视为物理实体,将inputsplit视为逻辑实体。mapreduce作业不会更改输入数据块。reducer将输出数据生成为新的数据块。
Map程序进程输入拆分并将输出发送到reducer作业。
3.第三个问题,在拆分之前(即inputformat类的getsplits方法)是否会确定和创建块,而不管拆分的数量是多少,还是取决于拆分之后?
输入已可用于physicals dfs块。mapreduce作业在inputsplit中工作。块和输入拆分可能相同,也可能不同。块是物理实体,inputsplit是逻辑实体。有关更多详细信息,请参阅以下问题:
hadoop如何执行输入拆分?
4.第四个问题运行任务前后的块是相同的还是取决于配置,是否有两种类型的块—一种用于存储文件,另一种用于将文件分组并通过网络发送到数据节点以执行任务?
Map器输入:输入块预先存在。Map过程从输入块/分割开始,这些块/分割在Map程序作业开始之前已存储在hdfs中。
Map器输出:不存储在hdfs中,在复制因子x大于1的hdfs上存储中间结果是没有意义的。
减速机输出:减速机输出存储在hdfs中。块的数量将取决于减速机输出数据的大小。

相关问题