hadoop - HDFS 配置以及用户目录的用途是什么?

标签 hadoop hdfs

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

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

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

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

有人可以告诉我,只是为了给我一个直觉,具有海量数据的真实 Hadoop 工作流程会是什么样子?我首先要运行什么样的不同节点?

主站(JobTracker)及其从属文件(我将把它放在哪里)允许主站解析所有数据节点。然后是我的 NameNode,它跟踪 block ID 的存储位置。 DataNode 还承担 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 上?在分配 block 的 NameNode 上?毕竟,我不能假设数据只是“存在”,因为名称节点必须知道 block ID。

如果有人能够简短地详细说明这些主题,那就太好了:

  1. 主目录的真正用途是什么?
  2. 是否先将数据迁移到主目录,然后再迁移到真正的分布式系统?
  3. WebHDFS 如何工作以及它在 user.name 变量方面发挥什么作用
  4. 我如何将“大数据”动态迁移到我的 HDFS 中 - 或者即使它不是大数据,我如何以正确的方式填充我的文件系统(也就是说, block 在集群中随机分布?

最佳答案

What is the home directory really for?

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

Do I migrate data to the home directory first and to the real distributed system afterwards?

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

How does WebHDFS work and what role does it play with regards to the user.name variable

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

How would I migrate "big data" into my HDFS on the fly - or even if it's not big data, how do I populate my file system in a proper way (meaning, that the chunks get randomly distributed across the cluster?

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

关于hadoop - HDFS 配置以及用户目录的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14892806/

相关文章:

hadoop - 合并带有标题的两部分文件仅作为第一行 Hadoop

hadoop - hive 如何运行mapreduce算法?

hadoop - 何时以及由谁在 Hadoop 中为 MapReduce 创建输入拆分?

java - 为什么Hadoop FTPFileSystem.listStatus(Path path)不起作用?

mysql - 为什么 "Sqoop import --query ..."插入多行而应该只插入一行?

git - 配置设置的分布式版本控制

apache-spark - 使用 Spark insertInto 时出现 FileAlreadyExistsException

apache-spark - DCOS 集群上的 Spark 提交失败,出现 java.net.UnknownHostException : hdfs

hadoop - HDFS 我可以为每个文件指定复制因子以提高可用性吗

python - 在 python 中使用 pydoop 保存 gzip 文件