我目前正在虚拟机中“玩弄”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。
如果有人能很快详细说明这些主题,那就太好了:
- 主目录的真正用途是什么?
- 我是否先将数据迁移到主目录,然后再迁移到真正的分布式系统?
- WebHDFS 如何工作以及它对 user.name 变量的作用
- 我如何将“大数据”即时迁移到我的 HDFS 中 - 或者即使它不是大数据,我如何以适当的方式填充我的文件系统(这意味着,这些块在集群中随机分布?