【发布时间】:2013-05-24 14:23:19
【问题描述】:
从我阅读的各种博客中,我了解到 HDFS 是存在于计算机本地文件系统之上的另一层。
我也安装了 hadoop,但我无法理解本地文件系统上 hdfs 层的存在。
这是我的问题..
考虑我在伪分布式模式下安装 hadoop。在此安装过程中,引擎盖下会发生什么?我在配置文件中添加了一个 tmp.dir 参数。是 namenode 守护进程在尝试访问数据节点时与之交谈的单个文件夹吗??
【问题讨论】:
标签: hadoop
从我阅读的各种博客中,我了解到 HDFS 是存在于计算机本地文件系统之上的另一层。
我也安装了 hadoop,但我无法理解本地文件系统上 hdfs 层的存在。
这是我的问题..
考虑我在伪分布式模式下安装 hadoop。在此安装过程中,引擎盖下会发生什么?我在配置文件中添加了一个 tmp.dir 参数。是 namenode 守护进程在尝试访问数据节点时与之交谈的单个文件夹吗??
【问题讨论】:
标签: hadoop
好的..让我试一试..当您配置 Hadoop 时,它会在您的本地 FS 之上放置一个虚拟 FS,即 HDFS。 HDFS 以复制的方式将数据存储为块(类似于本地 FS,但比它大得多)。但 HDFS 目录树或文件系统命名空间与本地 FS 相同。当您开始将数据写入 HDFS 时,它最终只会写入本地 FS,但您无法直接看到它。
临时目录实际上有 3 个用途:
1- namenode 存储其元数据的目录,默认值为${hadoop.tmp.dir}/dfs/name,可以通过dfs.name.dir 显式指定。如果您指定 dfs.name.dir,则 namenode 元数据将存储在作为该属性值给出的目录中。
2- 存储HDFS数据块的目录,默认值为${hadoop.tmp.dir}/dfs/data,可以通过dfs.data.dir显式指定。如果您指定 dfs.data.dir,则 HDFS 数据将存储在作为该属性值给出的目录中。
3- 二级namenode存储其检查点的目录,默认值为${hadoop.tmp.dir}/dfs/namesecondary,可以通过fs.checkpoint.dir明确指定。
因此,最好使用一些适当的专用位置作为这些属性的值,以便进行更简洁的设置。
当需要访问特定数据块时,会搜索存储在 dfs.name.dir 目录中的元数据,并将该块在特定数据节点上的位置返回给客户端(位于 dfs.data.dir 中的某处本地 FS 上的目录)。然后客户端直接从那里读取数据(同样适用于写入)。
这里需要注意的一点是 HDFS 不是物理 FS。它是本地 FS 之上的虚拟抽象,不能像本地 FS 一样简单地浏览。您需要使用 HDFS shell 或 HDFS webUI 或可用的 API 来执行此操作。
HTH
【讨论】:
当您以伪分布式模式安装 hadoop 时,所有 HDFS 守护进程 namdenode、datanode 和辅助名称节点都运行在同一台机器上。您配置的临时目录是数据节点存储数据的位置。因此,当您从 HDFS 的角度来看它时,您的数据仍然存储在块中并在多个文件系统级别块上更大(和聚合)的块中读取。
【讨论】: