我目前正在虚拟机中“玩”hadoop(cloudera的cdh4.1.3映像)。我想知道的是以下内容(文档在这方面并没有真正帮助我)。
在教程之后,我将首先格式化namenode—好的,如果使用cloudera图像,这已经完成了。同样,hdfs文件结构已经存在。在hdfs-site.xml中,datanode data dir设置为:
/var/lib/hadoop-hdfs/cache/${user.name}/dfs/data
很明显,在真正的分布式设置中,块应该被复制到这个位置。在cloudera教程中,我们被告知为每个用户创建hdfs“主目录”( /users/<username>
)我不明白他们是干什么的。它们是否仅用于单节点设置中的本地测试运行?假设我的本地存储中确实有数PB的类型数据。这些数据必须立即分发,使得本地“主目录”完全无用。
有人能告诉我,只是给我一个直觉,一个真正的hadoop工作流与海量数据是什么样的吗?我首先要运行哪种不同的节点?
有一个主(jobtracker)和它的从属文件(我把它放在哪里),允许主解析所有的数据节点。然后是我的namenode,它跟踪块id的存储位置。数据节点还承担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(我被要求将数据流到文件系统中,因为我缺少本地存储来将数据保存在一台机器上)。从哪里开始迁移过程?在任意数据节点上?在分发块的namenode上?毕竟,我不能假设数据只是“在那里”,因为name节点必须知道块id。
如果有人能很快详细阐述一下这些主题,那就太好了:
主目录的真正用途是什么?
我是否先将数据迁移到主目录,然后再迁移到真正的分布式系统?
webhdfs是如何工作的,它在user.name变量中扮演什么角色
我该如何动态地将“大数据”迁移到我的hdfs中?或者即使它不是大数据,我该如何以适当的方式填充我的文件系统(也就是说,数据块在集群中随机分布?
1条答案
按热度按时间6yjfywim1#
主目录的真正用途是什么?
你有点困惑。就像linux上的本地文件系统存在/home一样,/users是hdfs(分布式fs)上的主挂载。本教程需要您管理性地为希望稍后运行数据加载和查询的用户创建一个主目录,以便他们获得对hdfs的足够权限和存储访问。本教程没有要求您在本地创建这些目录。
我是否先将数据迁移到主目录,然后再迁移到真正的分布式系统?
我相信我的上述回答应该能为你澄清这一点。您应该在hdfs上创建主目录,然后将所有数据加载到该目录中。
webhdfs是如何工作的,它在user.name变量中扮演什么角色
webhdfs是访问hdfs的各种方法之一。与hdfs对话的常规客户机需要使用javaapi。webhdfs(还有httpfs)技术被添加到hdfs中,通过向hdfs提供rest前端,让其他语言拥有自己的api集。webhdfs允许用户身份验证,以帮助持久化权限和安全模型。
我该如何动态地将“大数据”迁移到我的hdfs中?或者即使它不是大数据,我该如何以适当的方式填充我的文件系统(也就是说,数据块在集群中随机分布?
hdfs为您解决的大部分问题是管理数据的分发。当将文件或数据流加载到hdfs时(通过cli工具、apacheflume的接收器等),这些块由hdfs本身以理想的分布方式分布,分块也由hdfs管理。您所需要做的就是使用用户端的常规文件系统风格的API,忘记下面的内容—它们都是为您管理的。