HDFS块分割

3

我对Hadoop的了解仅有4周。我正在使用一个Hadoop沙盒。

根据理论,当一个文件被复制到HDFS文件系统中时,它将会被分割成128MB的块。每个块然后会被复制到不同的数据节点上并且被复制到其他数据节点上。

问题:

  1. 当我将一个数据文件(~500MB)从本地文件系统复制到HDFS(put命令)时,整个文件仍在HDFS中(-ls命令)。我原本期望看到128MB的块。我做错了什么?

  2. 如果我设法将数据文件分割并分发到HDFS中,是否有一种方法将其重新组合并检索回本地文件系统?

1个回答

8
  1. -ls 命令不会显示单个块,这相当于硬盘上的块在 Linux 的 ls 或 Windows 资源管理器中不显示。您可以通过命令行执行 hdfs fsck /user/me/someFile.avro -files -blocks -locations 来实现此功能,或者使用 NameNode UI 查看哪些主机拥有文件的块,并查看每个块在哪些主机上进行了复制。
  2. 可以像这样执行操作:hdfs dfs -get /user/me/someFile.avro,或者使用 HUE 或 NameNode UI 下载该文件。所有这些选项都将流式传输适当的块给您以组装逻辑文件。

谢谢Keegan。这是否意味着,如果我在HDFS中创建一个数据节点的目录,同样的目录将在另一个数据节点中可用?在您的示例中,/user/me/someFile.avro将在所有数据节点(ls命令)中看到吗? - Pradeep Krishnaraj
2
你不需要在单个节点上创建文件或文件夹。你只需告诉HDFS要创建一个文件,它就会在它认为合适的节点上创建该文件。默认情况下,你的操作将在3个节点上复制(如果可能,至少有1个在不同的机架上)以进行故障转移。HDFS向你呈现一个逻辑文件系统,在这个系统中,作为最终用户的你不知道也无法控制数据的物理位置。这就是这个系统的美妙之处,所有这些都被抽象化了。 - Keegan
@pradeep-krishnaraj,你能否也接受这个答案呢?我想提高一下我的声望 :) - Keegan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接