Hadoop分布式集群搭建

HADOOP集群具体来说包含两个:HDFS 集群和YARN 集群,两者逻辑上分离但物理集群。
一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。
YARN集群主要负责海量数据运算时的资源调度,集群中角色主要有 ResourceManager/NodeManager

学习hadoop首先是要把hadoop分布式集群搭建起来。所以如何通过虚拟机来搭建hadoop分布式集群是本文的写作目的。

1. 软件说明

搭建hadoop集群需要什么样的电脑配置和软件呢?以下是我的电脑配置:

  • CPU:i7-4700MQ 2.4Ghz
  • 内存: 8G
  • 硬盘: 1T
  • 系统:Windows 8.1

在搭建过程中,使用到以下几个软件:

  • VMware® Workstation 12 Pro
  • CentOS-6.5-x86_64-bin-DVD1.iso
  • jdk-7u65-linux-x64.tar.gz
  • hadoop-2.6.1.tar.gz

2. 网络环境说明

Hadoop集群中包括3个节点:1个namenode,2个datanode,采用NAT方式联网,子网掩码: 255.255.255.0
节点IP地址分布如下:

IP地址主机名角色
192.168.48.101hdp-node-01namenode
192.168.48.102hdp-node-02datanode
192.168.48.103hdp-node-03datanode

3. 虚拟机环境配置

3.1 安装Vmware

下载VMware文件,一直点击“下一步”就可以安装,非常的简单。安装成功后打开如图所示。这里写图片描述

3.2 安装centos-6.5-x86_64-bin-DVD1.iso

点击创建新的虚拟机,点击下一步到新建虚拟机向导界面,勾选安装程序光盘映像文件,选择ios文件地址。
这里写图片描述
点击下一步,输入信息,其中全名和用户名是用户名,后期设置跟这个有关,3个虚拟机都设为相同的用户名
这里写图片描述
点击下一步,输入虚拟机的名字和位置后,一直点击“下一步”至完成后会自动进行虚拟机的安装。
这里写图片描述

3.3 设置固定IP

这里写图片描述
其中Address根据自己的情况进行设置,Gateway和DNS servers相同。

3.4 分配用户hadoop的sudoer权限

su root
visudo

在root ALL=(ALL) ALL后面增加一条:用户名 ALL=(ALL) ALL,我的用户名是hadoop,所以我增加的是hadoop ALL=(ALL) ALL
这里写图片描述

3.5 设置主机名和内网映射

在/etc/sysconfig/network文件里修改主机名:

HOSTNAME=hdp-node-01。

在/etc/hosts文末追加如下三行内容,设置内网映射:

192.168.48.101 hdp-node-01
192.168.48.102 hdp-node-02
192.168.48.103 hdp-node-03

3.6 关闭防火墙

将/etc/selinux/config文件内容改为

SELINUX=disabled

在root下或者用sudo执行这三条命令
成功关闭后会显示iptables: Firewall is not running.

service iptables stop
chkconfig iptables off
service iptables status

service iptables stop是临时关闭防火墙命令
chkconfig iptables off是永久关闭防火墙命令
service iptables status是查看防火墙状态命令

3.7 配置两个datanode节点

根据3.2到3.7的要求,创建两个新的虚拟机并将主机名设为hdp-node-02(ip为192.168.48.102)和hdp-node-03(ip为192.168.48.103),用户名均为hadoop。
设置完后把三个虚拟机都重启,以防3.8配置SSH免密登录时主机名没有生效

3.8 SSH免密码登录配置

分别在三台虚拟机上以hadoop用户身份来执行以下三条指令。

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

将hdp-node-02和hdp-node-03的authorized_keys文件内容追加到hdp-node-01节点的authorized_keys文件里。在hdp-node-01的hadoop用户下操作。

scp hadoop@hdp-node-02:~/.ssh/authorized_keys/ ~/.ssh/authorized_keys1
cat ~/.ssh/authorized_keys1 >> ~/.ssh/authorized_keys
scp hadoop@hdp-node-03:~/.ssh/authorized_keys/ ~/.ssh/authorized_keys1
cat ~/.ssh/authorized_keys1 >> ~/.ssh/authorized_keys

将hdp-node-01的authorized_keys发送给hdp-node-02和hdp-node-03。在hdp-node-01的hadoop用户下操作。

scp ~/.ssh/authorized_keys hadoop@hdp-node-02:~/.ssh
scp ~/.ssh/authorized_keys hadoop@hdp-node-03:~/.ssh

设置完成后,3台虚拟机里的authorized_keys内容理应相同,且有三个主机名。如下图圈中所示。
这里写图片描述
测试是否成功: 第一次ssh主机名时,会要求输入密码,第二次ssh时,则不用输入密码即可登录。
这里写图片描述

4. JDK安装

下载JDK有好几种方式,我这里选择了最简单的方式,安装VMware Tools工具后,直接把JDK拖到虚拟机里。我分别在三个虚拟机里在用户根目录下创建apps目录,把JDKHadoop都放在此目录下,解压jdk。

mkdir ~/apps
tar -zxvf jdk-7u65-linux-x64.tar.gz

在/etc/profile文件里设置java的环境变量。

export JAVA_HOME=~/apps/jdk1.7.0_65
export JRE_HOME=~/apps/jdk1.7.0_65/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
source /etc/profile

检测jdk是否安装完成,若正确安装则将文件夹拷贝给hdp-node-02和hdp-node-03,然后按照前面相同的方法设置java的环境变量。

java -version
scp -r ~/apps/jdk1.7.0_65/ hadoop@hdp-node-02:~/apps/jdk1.7.0_65/
scp -r ~/apps/jdk1.7.0_65/ hadoop@hdp-node-03:~/apps/jdk1.7.0_65/

5. Hadoop安装

在~/apps目录下解压hadoop。

tar -zxvf hadoop-2.6.1.tar.gz

在/etc/profile文件里设置Hadoop的环境变量。

export HADOOP_HOME=~/apps/hadoop-2.6.1
source /etc/profile

按要求设置如下配置:

vi ~/apps/hadoop-2.6.1/etc/hadoop/hadoop-env.sh
export JAVA_HOME=~/apps/jdk1.7.0_65
vi ~/apps/hadoop-2.6.1/etc/hadoop/core-site.xml
<property> 
<name>fs.defaultFS</name>
<value>hdfs://hdp-node-01:9000</value>
</property>
<property> 
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/apps/hadoop-2.6.1/tmp</value>
</property>
vi ~/apps/hadoop-2.6.1/etc/hadoop/hdfs-site.xml
 <property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/data/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/data/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>hdp-node-01:50090</value>
</property>
<property> 
<name>dfs.permissions</name> 
<value>false</value> 
</property>
vi ~/apps/hadoop-2.6.1/etc/hadoop/mapred-site.xml
 <configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
vi ~/apps/hadoop-2.6.1/etc/hadoop/yarn-site.xml
 <property>
<name>yarn.resourcemanager.hostname</name>
<value>hdp-node-01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
vi ~/apps/hadoop-2.6.1/etc/hadoop/slaves
hdp-node-01
hdp-node-02
hdp-node-03

设置完成后,则将文件夹拷贝给hdp-node-02和hdp-node-03。

scp -r ~/apps/hadoop-2.6.1/ hadoop@hdp-node-02:~/apps/hadoop-2.6.1/
scp -r ~/apps/hadoop-2.6.1/ hadoop@hdp-node-03:~/apps/hadoop-2.6.1/

6. Hadoop运行

在hdp-node-01主机上操作,
初始化HDFS

~/apps/hadoop-2.6.1/bin/hadoop namenode -format

启动HDFS

~/apps/hadoop-2.6.1/sbin/start-dfs.sh

启动YARN

~/apps/hadoop-2.6.1/sbin/start-yarn.sh

这里写图片描述

输入jps可查看进行的进程

hdp-node-01hdp-node-02hdp-node-03
NodeManagerNodeManagerNodeManager
DataNodeDataNodeDataNode
ResourceManager
NameNode
SecondaryNameNode

WEB控制台查看集群信息,浏览器打开 http://192.168.48.101:50070/ ,可看到有3个datanode存活着。
这里写图片描述

上传文件到HDFS中:

~/apps/hadoop-2.6.1/bin/hadoop fs -mkdir -p /input
~/apps/hadoop-2.6.1/bin/hadoop fs -put ~/Desktop/somewords.txt /input
~/apps/hadoop-2.6.1/bin/hadoop fs -ls /input

运行MapReduce程序来统计somewords.txt里的单词:

~/apps/hadoop-2.6.1/bin/hadoop jar ~/apps/hadoop-2.6.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.1.jar wordcount /input /output

完成之后/output目录下多了两个文件,_SUCCESS表示MapReduce运行成功,part-r-00000是运行后的结果。
这里写图片描述

关机前需要先在hdp-node-01上执行:

~/apps/hadoop-2.6.1/sbin/stop-yarn.sh
~/apps/hadoop-2.6.1/sbin/stop-dfs.sh

7. 常见问题FAQ

7.1 只启动一个与NameNode同机的datanode,其他两个datanode未启动。

我没遇到过这种情况,但是听说是防火墙没关闭完全。检查防火墙配置。

7.2 免密码登录配置时,【SSH 主机名】无效,但【ssh 用户名@主机名】有效。

这种情况下,我也遇到过,不知道怎么解决, 感觉hadoop默认是用【SSH 主机名】的方式,所以我推荐把3台虚拟机的用户名改成一样。

7.3 免密码登录配置时,authorized_keys中的主机名是修改前的主机名。

在/etc/sysconfig/network文件里修改主机名后,推荐重启一下虚拟机。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值