从我阅读的各种博客中,我了解到 HDFS 是存在于计算机本地文件系统之上的另一层。
我还安装了 hadoop,但我无法理解本地文件系统上 hdfs 层的存在。
这是我的问题..
考虑我在伪分布式模式下安装 hadoop。在此安装过程中,引擎盖下会发生什么?我在配置文件中添加了一个 tmp.dir 参数。是namenode守护进程在尝试访问datanode时与之交谈的单个文件夹吗?
从我阅读的各种博客中,我了解到 HDFS 是存在于计算机本地文件系统之上的另一层。
我还安装了 hadoop,但我无法理解本地文件系统上 hdfs 层的存在。
这是我的问题..
考虑我在伪分布式模式下安装 hadoop。在此安装过程中,引擎盖下会发生什么?我在配置文件中添加了一个 tmp.dir 参数。是namenode守护进程在尝试访问datanode时与之交谈的单个文件夹吗?
好的..让我试一试..当您配置 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- 辅助名称节点存储其检查点的目录,默认值是${hadoop.tmp.dir}/dfs/namesecondary
并且可以通过fs.checkpoint.dir
.
因此,最好使用一些适当的专用位置作为这些属性的值,以便进行更清洁的设置。
当需要访问特定数据块时,会搜索存储在 dfs.name.dir 目录中的元数据,并将该块在特定数据节点上的位置返回给客户端(位于 dfs.data.dir 目录中的某个位置)本地FS)。然后客户端直接从那里读取数据(同样适用于写入)。
这里需要注意的一点是 HDFS 不是物理 FS。它是本地 FS 之上的虚拟抽象,不能像本地 FS 一样简单地浏览。您需要使用 HDFS shell 或 HDFS webUI 或可用的 API 来执行此操作。
高温高压
当您以伪分布式模式安装 hadoop 时,所有 HDFS 守护进程 namdenode、datanode 和辅助名称节点都运行在同一台机器上。您配置的临时目录是数据节点存储数据的位置。因此,当您从 HDFS 的角度来看它时,您的数据仍然存储在块中并在多个文件系统级别块上更大(和聚合)的块中读取。