我目前在VM中使用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)带有其从属文件(我将把它放在哪里),允许主机解析所有数据节点。然后是我的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。
如果有人能够在短时间内详细阐述这些主题,那就太棒了:
答案 0 :(得分: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并忘记底层的内容 - 它们都是为您管理的。