Hadoop集群快速搭建
Hadoop Cluster的搭建
1. 集群部署规划
node-1 | node-2 | node-3 | |
---|---|---|---|
HDFS | NameNode, DataNode | DataNode | DataNode, SecondaryNameNode |
YARN | NodeManager | ResourceManager, NodeManager | Node Manager |
2. Virtual Machine (VM)准备工作
我用的机器是一台Windows的Desktop。也算是配置一般的十年前的老机器了。原来一直闲置在车库,没想到十年后还能工作的这么好。配置VM我用的是Vagrant和VirtualBox,我已经写好用于vm配置和启动的Vagrantfile和bootstrap.sh,同时在bootstarp.sh里也更改了hadoop集群的一些基本配置。
1 | $ git clone https://github.com/xilu-wang/vagrant-hadoop.git |
注:可以在VM跑起来之后删除.vagrant文件夹,重新执行vagrant up,就会新建新的VM。如此重复三次。
3. 登陆VM并更新host
login: admin
password: admin
server-1:
1 | $ sudo hostnamectl set-hostname namenode |
server-2:
1 | $ sudo hostnamectl set-hostname resourcemanager |
server-3:
1 | $ sudo hostnamectl set-hostname secnamenode |
同时,可以通过ifconfig拿到server IP,用来更新host的映射。
结果示例:
1 | $ ifconfig |
在这里,eth1下面的inet 192.168.1.150
既是本机IP。
拿到三个VM的IP后,依次在每个VM的/etc/hosts
文件里加入:
1
2
3192.168.1.149 namenode
192.168.1.150 resourcemanager
192.168.1.151 secnamenode
4. 设置ssh passwordless
1 | $ ssh-keygen |
细节可以参考我的另外一篇博客:**SSH server的无密登陆**
5. 检查hdfs和yarn的配置
Hadoop的配置已经在bootstrap vm的时候已经更新了。
需要检查的文件分别是:
- core-site.xml *
- hdfs-site.xml *
- yarn-site.xml *
- mapred-site.xml
- hadoop-env.sh
- slaves *
*如果在host里面没有添加IP的映射,需要将文件中对应的hostname更新成原IP。
关于hadoop集群的配置介绍,可以参考我的另一篇文章:**如何配置小规模的Hadoop集群**
6. 启动hdfs和yarn
1 | $ cd /home/admin/hadoop/hadoop-2.7.2/ |
第一步:格式化NameNode
- 在node-1(namenode)进行格式化
1 | $ hadoop namenode -format |
第二步:(选择一,不推荐)单点启动/停止
在node-1(namenode)启动namenode
1
$ sbin/hadoop-daemon.sh start namenode
在node-2(resourcemanager)启动yarn
1
$ sbin/yarn-daemon.sh start resourcemanager
在node-3(secnamenode)启动
1
$ sbin/hadoop-daemon.sh start secondarynamenode
在node-1, node-2, node-3启动datanode
1
$ sbin/hadoop-daemon.sh start datanode
在node-1, node-2, node-3启动nodemanager
1
$ sbin/hadoop-daemon.sh start nodemanager
第二步:(选择二,推荐)集群启动/停止
在namenode节点启动/停止:
1
$ sbin/start-dfs.sh
1
$ sbin/stop-dfs.sh
在resourcemanager节点启动/停止:
1
$ sbin/start-yarn.sh
1
$ sbin/stop-yarn.sh
7. 测试hdfs client api和简单map reduce job
我是自己写了一个hdfs的client api,上传/下载文件test.txt
示例client api代码:
1 | $ git clone https://github.com/xilu-wang/hdfs-client-java.git |
测试一下mapreduce
1 | $ cd /home/admin/hadoop/hadoop-2.7.2 |
8. UI
Yarn: http://resourcemanager:8088/
Hadoop overview: http://secnamenode:50090/status.html
潜在问题和Debug:
- 如果执行完vagrant up之后,vm无法登入,可以重新进入本地的git repo再执行一次 vagrant reload
- 如果集群集体启动的时候没有远程启动datanode/nodemanager,可以删掉slaves,新建slaves文件,重新格式化namenode
- 重新格式化namenode的时候,一定要把name & data文件夹全都删除,位置在/home/admin/hadoop下
- 如果mapreduce job起来的时候报错connection confused,可能是好几个vm之间的localhost问题,需要注释掉
/etc/hosts/
里面的所有有关127.0.0.1和127.0.1.1的映射hostname