【问题标题】:HDFS configuration & what is the user directory for?HDFS 配置和用户目录的用途是什么?
【发布时间】:2013-02-15 10:34:14
【问题描述】:

我目前正在虚拟机中“玩弄”Hadoop(来自 cloudera 的 CDH4.1.3 映像)。我想知道的是以下内容(并且文档在这方面并没有真正帮助我)。

按照教程,我将首先格式化 NameNode - 好的,如果使用 cloudera 图像,这已经完成。同样,HDFS 文件结构已经存在。在 hdfs-site.xml 中,datanode 数据目录设置为:

/var/lib/hadoop-hdfs/cache/${user.name}/dfs/data

这显然是在真正的分布式设置中应该将块复制到的位置。在 cloudera 教程中,有人被告知为每个用户 (/users/<username>) 创建 hdfs“主目录”,我不明白它们的用途。它们仅用于单节点设置中的本地测试运行吗? 假设我确实有 PB 类型的数据不适合我的本地存储。这些数据必须立即分发,使本地“主目录”完全无用。

谁能告诉我,只是为了让我有一个直觉,一个包含大量数据的真实 Hadoop 工作流会是什么样子?一开始我会运行哪些不同的节点?

有一个主 (JobTracker) 及其从文件(我将把它放在哪里)允许主解析所有 DataNode。然后是我的 NameNode,它跟踪块 ID 的存储位置。 DataNodes 也承担着 TaskTracker 的责任。在配置文件中,包含 NameNode 的 URI——到目前为止我是正确的吗?然后配置中仍然存在${user.name} 变量,如果我理解正确的话,它显然与WebHDFS 有关,如果有人可以向我解释,这也很好。在运行示例中,方向往往被硬编码为

/var/lib/hadoop-hdfs/cache/1/dfs/data, /var/lib/hadoop-hdfs/cache/2/dfs/data and so on.

所以,回到示例:假设我有我的磁带并想将数据导入我的 HDFS(我需要将数据流式传输到文件系统,因为我缺乏本地存储来将其本地保存在单台机器上) .我将从哪里开始迁移过程?在任意 DataNode 上?在分发块的 NameNode 上?毕竟,我不能假设数据只是“在那里”,因为名称节点必须知道块 ID。

如果有人能尽快详细说明这些主题,那就太好了:

  1. 主目录的真正用途是什么?
  2. 是否先将数据迁移到主目录,然后再迁移到真正的分布式系统?
  3. WebHDFS 的工作原理以及它对 user.name 变量的作用是什么
  4. 我如何将“大数据”即时迁移到我的 HDFS 中 - 或者即使不是大数据,我如何以适当的方式填充我的文件系统(意思是,块在集群中随机分布?

【问题讨论】:

    标签: hadoop hdfs


    【解决方案1】:

    主目录的真正用途是什么?

    你在这里有点困惑。就像 /home 存在于 Linux 上的本地文件系统中,用户拥有自己的存储空间,/users 是 HDFS(分布式 FS)上的家庭挂载。本教程需要您以管理方式为您希望稍后运行数据加载和查询的用户创建一个主目录,以便他们获得足够的权限和对 HDFS 的存储访问。本教程并未要求您在本地创建这些目录。

    我是先将数据迁移到主目录,然后再迁移到真正的分布式系统吗?

    我相信我的上述回答应该为您澄清这一点。您应该在 HDFS 上创建主目录,然后将所有数据加载到该目录中。

    WebHDFS 是如何工作的,它对 user.name 变量的作用是什么

    WebHDFS 是访问 HDFS 的多种方式之一。与 HDFS 对话的常规客户端需要使用 Java API。 WebHDFS(以及 HttpFs)技术被添加到 HDFS 中,通过为 HDFS 提供 REST 前端,让其他语言拥有自己的 API 集。 WebHDFS 允许用户身份验证,以帮助持久化权限和安全模型。

    我如何将“大数据”即时迁移到我的 HDFS 中 - 或者即使它不是大数据,我如何以适当的方式填充我的文件系统(意思是,块在集群中随机分布?

    HDFS 为您解决的大部分问题是管理数据分布。当将文件或数据流加载到 HDFS 时(通过 CLI 工具、Apache Flume 的接收器等),块由 HDFS 本​​身以理想的分布分布,并且分块也由它管理。您需要做的就是使用用户端的常规 FileSystem 样式 API,而忘记下面的内容 - 一切都由您管理。

    【讨论】:

    • 感谢您的澄清!我将它们安装在 HDFS 上,但考虑到无论如何都有数据节点目录,我并没有真正理解为什么需要它们。云您可能会详细说明 user.name 变量的用途(我只是想确保它实际上应该在配置中,而不是一些硬编码的文件夹名称)?我的猜测是它与在集群上运行具有用户特定数据的 HDFS 有关,对吗?毕竟,名称节点目录也是特定于用户的(意思是,它是一个只允许数据所有者许可的基本系统)?谢谢!
    • 嗨@sim - “user.name”是一个特殊的 JVM 系统属性,它会自动设置为执行 JVM 的当前用户。也就是说,在任何 java 程序中, System.getProperty("user.name") 的返回结果默认是实际运行该程序的用户。在 Hadoop 配置类中,我们支持通过让用户传递 JVM 级别属性(通过 JVM 选项上的 -D)来替换某些属性的值,并且支持的默认属性之一是 ${user.name},我们最终会自动利用它为用户特定的操作构建用户特定的路径或数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多