假设有一个Hadoop集群有20台机器.在这20台机器中,18台机器是从机,机器19用于NameNode,机器20用于JobTracker.
现在我知道必须在所有这20台机器上安装hadoop软件.
但我的问题是将文件xyz.txt加载到Hadoop集群中涉及哪台机器.该客户机是否是一台单独的机器.我们是否也需要在该clinet机器中安装Hadoop软件.客户端机器如何识别Hadoop集群?
通常,如果您拥有多租户群集(大多数hadoop群集都必定),那么理想情况下,管理员以外的任何人都无法访问作为群集一部分的计算机.
开发人员设置自己的"边缘节点".边缘节点基本上有hadoop库并且已经部署了客户端配置(各种xml文件告诉本地安装,其中namenode,job tracker,zookeeper等是core-site,mapred-site,hdfs-site.xml).但是边缘节点在集群中没有任何这样的角色,即在该节点上没有运行持久性hadoop服务.
现在,在小型开发环境类型的设置中,您可以使用群集中任何一个参与节点来运行作业或运行shell命令.
因此,根据您的要求,客户的定义和位置会有所不同.
我是hadoop的新手,所以根据我的理解:
如果数据上载不是群集的实际服务(应该在群集的边缘节点上运行),则可以将自己的计算机配置为边缘节点.
边缘节点不需要为集群所知(但对于安全性内容),因为它不存储数据或计算作业.这基本上是边缘节点的意思:它连接到hadoop集群但不参与.
如果它可以帮助某人,这就是我所做的连接到我不管理的集群:
比如,在集群上获得一个帐户 myaccount
在您的计算机上创建一个具有相同名称的帐户: myaccount
配置您的计算机以访问群集计算机(ssh w\out passphphrase,registered ip,...)
从集群的边缘节点获取hadoop配置文件
得到一个hadoop distrib(例如从这里)
比如,将它解压缩到你想要的地方 /home/myaccount/hadoop-x.x
添加以下环境变量:JAVA_HOME
,HADOOP_HOME
(/home/me/hadoop-x.x
)
(如果您愿意)将hadoop bin添加到您的路径: export PATH=$HADOOP_HOME/bin:$PATH
用边缘节点获取的那些替换你的hadoop配置文件.使用hadoop 2.5.2,它是文件夹$HADOOP_HOME/etc/hadoop
另外,我不得不改变$JAVA_HOME
conf文件中定义的一对值.要找到它们使用:grep -r "export.*JAVA_HOME"
那么hadoop fs -ls /
应该列出集群hdfs的根目录.
我推荐这篇文章."客户端计算机安装了Hadoop,其中包含所有集群设置,但既不是主服务器也不是从服务器.相反,客户端计算机的作用是将数据加载到集群中,提交描述如何处理数据的Map Reduce作业,以及然后在完成时检索或查看作业的结果."