Hadoop分布式集群搭建

来源:互联网 发布:知乎ps实例教程 编辑:程序博客网 时间:2024/05/17 01:29

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.101 hdp-node-01 namenode 192.168.48.102 hdp-node-02 datanode 192.168.48.103 hdp-node-03 datanode

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 rootvisudo

在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-01192.168.48.102 hdp-node-02192.168.48.103 hdp-node-03

3.6 关闭防火墙

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

SELINUX=disabled

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

service iptables stopchkconfig iptables offservice 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_dsacat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keyschmod 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_keys1cat ~/.ssh/authorized_keys1 >> ~/.ssh/authorized_keysscp hadoop@hdp-node-03:~/.ssh/authorized_keys/ ~/.ssh/authorized_keys1cat ~/.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:~/.sshscp ~/.ssh/authorized_keys hadoop@hdp-node-03:~/.ssh

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

4. JDK安装

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

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

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

export JAVA_HOME=~/apps/jdk1.7.0_65export JRE_HOME=~/apps/jdk1.7.0_65/jreexport CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/libexport PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/binsource /etc/profile

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

java -versionscp -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.1source /etc/profile

按要求设置如下配置:

vi ~/apps/hadoop-2.6.1/etc/hadoop/hadoop-env.shexport 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/slaveshdp-node-01hdp-node-02hdp-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-01 hdp-node-02 hdp-node-03 NodeManager NodeManager NodeManager DataNode DataNode DataNode 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文件里修改主机名后,推荐重启一下虚拟机。

原创粉丝点击