2

我目前正在虚拟机中“玩弄”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 中 - 或者即使它不是大数据,我如何以适当的方式填充我的文件系统(这意味着,这些块在集群中随机分布?
4

1 回答 1

5

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

你在这里有一个小小的困惑。就像 /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,而忘记下面的内容 - 一切都为您管理。

于 2013-02-17T08:30:01.943 回答