搭建5个节点的hadoop集群环境(CDH5)
提示:如果还不了解Hadoop的,可以下查看这篇文章Hadoop生态系统,通过这篇文章,我们可以首先大致了解Hadoop及Hadoop的生态系统中的工具的使用场景。
搭建一个分布式的hadoop集群环境,下面是详细步骤,使用cdh5 。
操作系统
|
64位
|
CPU
|
(英特尔)Intel(R) I3处理器
|
内存
|
8.00 GB ( 1600 MHz)
|
硬盘剩余空间
|
50G
|
操作系统
|
64位
|
CPU
|
(英特尔)Intel(R) I5处理器或以上配置
|
内存
|
16.00 GB ( 1600 MHz)
|
硬盘剩余空间
|
100G
|
注意:上面是在单个pc机上搭建集群,所以对内存要求较高。若是在多台pc机上搭建集群环境,则只需要内存足够即可。
虚拟机 | VMWare |
操作系统 | CentOS6.5 |
JDK | jdk-7u79-linux-x64.tar.gz |
远程连接 | XShell |
hadoop生态系统 |
hadoop-2.6.0-cdh5.4.5.tar.gz hbase-1.0.0-cdh5.4.4.tar.gz hive-1.1.0-cdh5.4.5.tar.gz flume-ng-1.5.0-cdh5.4.5.tar.gz sqoop-1.4.5-cdh5.4.5.tar.gz zookeeper-3.4.5-cdh5.4.5.tar.gz |
CDHNode1 /192.168.3.188 |
CDHNode2 /192.168.3.189 |
CDHNode3 /192.168.3.190 |
CDHNode4 /192.168.3.191 |
CDHNode5 /192.168.3.192 |
|
---|---|---|---|---|---|
namenode |
是 |
是 |
否 |
否 |
否 |
datanode |
否 |
否 |
是 |
是 |
是 |
resourcemanager |
是 |
是 |
否 |
否 |
否 |
journalnode |
是 |
是 |
是 |
是 |
是 |
zookeeper |
是 |
是 |
是 |
否 |
否 |
注意:Journalnode和ZooKeeper保持奇数个,最少不少于 3 个节点。具体原因,以后详叙。
我的主机分配情况是在两台pc的虚拟机上安装centos系统,具体分配情况如下:
CDHNode1 | CDHNode2 | CDHNode3 | CDHNode4 | CDHNode4 | |
PC1 | 是 | 是 | |||
PC2 | 是 | 是 | 是 |
三、详细安装步骤
我们首先在1个主机(CHDNode1/192.168.3.188)上安装centos6.5操作系统,使用root用户配置网络,创建hadoop用户,关闭防火墙,安装一些必备软件。为记下来的集群软件安装做准备。
CentOS6.5安装
在主机CHDNode1/192.168.3.188,安装CentOS6.5操作系统。详细安装步骤可以查看CentOS安装这篇文章。此处就不再赘叙。
网络配置
1.打开安装好的CentOS虚拟机CDHNode1
2、登录CentOS系统
3.输入ifconfig命令,先查看ip地址
4、这个时候我们发现除了回环地址以外,我们并不能和外界通信,比如我们可以使用ping命令进行测试。
注意:ping 127.0.0.1时,结束icmp报文,使用Ctrl+C命令
第一次ping 百度,ping不通,说明虚拟机无法连接外网
第二次ping 虚拟机NAT网关,ping不通
注:虚拟机网关查看方法
点击虚拟机网络编辑器,点击VMnet8
点击Nat设置
第三次ping物理机ip地址,ping不通
注:查看物理机IP地址,开启cmd.exe ,输入ipconfig
第四次ping虚拟机的回环地址,ping成功,说明虚拟机的网络协议是正确的
5、修改网卡的配置文件
可以看到虚拟机网卡没有开启,因此修改ONBOOT=yes,然后保存退出(按Esc键,然后输入:wq)
6、重启网络服务
7、再次输入ifconfig命令,查看ip地址。
注意:我的虚拟机设置的是桥接模式,所以ip地址是192.168.2.X网段,或192.168.3.X网段;因为桥接模式是直接使用物理网卡,而我的物理主机的网关是192.168.0.1,子网掩码是255.255.252.0,所以我的虚拟机ip地址可以在192.168.0.2-192.168.3.255之间任意选择(除了物理主机的ip)。若你的虚拟机是使用nat模式,可能就是,如:以我的虚拟机为例,nat网关是192.168.117.2,子网掩码为255.255.255.0,所以虚拟机的ip地址可以在192.168.117.3-192.168.117.255之间任意选择。
此时网卡已经成功开启。
8.再次ping步骤4的ip或域名,查看具体情况
检查本机网络协议
检查网卡链路
检查Nat网关
检查外网
此时虚拟机连接互联网成功,但使用dhcp(动态主机配置协议)配置ip地址,此时的IP地址时动态生成的,不方便以后hadoop集群环境的搭建。所以我们还需要配置静态Ip地址,配置详情,下面细说。
9、使用ifconfig命令可以查看动态ip地址为192.168.3.188,所以接下来我们把此ip作为CDHNode1的静态ip地址。注:你可以使用你的动态ip作为你当前主机的静态ip。然后后面几台IP地址可以紧跟着设置成,如192.168.3.189。DHCP生成ip地址是随机的,你可具体问题具体分析。
10、修改网卡配置信息,把BOOTPROTO=dhcp修改为BOOTPROTO=static,并且添加上设置的ip地址,子网掩码,和网关。
注意:由于我是在两台pc上配置集群环境,所以我使用的是桥接模式。若你是在一台主机上建议你使用Nat(网络地址转换)模式。因为nat模式的网关在不同的电脑上虚拟机VMWare虚拟出来的网段是不同的。不方便使用Xshell连接。
下面是桥接模式的配置,IPADDR是设置ip地址,NETMASK(子网掩码)与GATEWAY(网关)可以设置成与物理主机一样的NETMASK(子网掩码)与GATEWAY(网关)。注:物理主机ip配置具体查看,看上面的步骤4。
下面是Nat模式的配置,IPADDR是设置ip地址,NETMASK(子网掩码)与GATEWAY(网关)可以设置成与物理主机一样的NETMASK(子网掩码)与GATEWAY(网关)。注:Nat模式ip配置具体查看,看上面的步骤4。
上面步骤中我们可以看到Nat模式的网关是192.168.117.2,子网掩码为255.255.255.0
所以具体可配置成
BOOTPROTO=static
IPADDR=192.168.117.40
NETMASK=255.255.255.0
GATEWAY=192.168.117.2
最后按Esc,然后:wq保存退出。(注意编辑按i或a即可进入编辑模式,具体操作查看vi命令的使用说明)
11、重启网络服务
至此网络配置完毕。
下载必备软件
注:1、在CDHNode1节点上安装,使用yum命令 ,参数-y表示,下载过程中的自动回答yes,有兴趣的话,可以试试不加的情况;install表示从网上下载安装。
2、使用yum命令安装软件必须是root用户。
1、安装lrzsz,可以方便在Xshell上,上传和下载文件,输入rz命令,可以上传文件,sz命令可以从远程主机上下载文件到本地。
2、安装ssh服务器。
3、安装ssh客户端。
用户创建户
1、使用useradd命令添加用户hadoop,并同时创建用户的home目录,关于useradd的参数使用可以使用 useradd -h查看参数
2、可以切换到/home目录下查看,是否创建成功
3、为hadoop用户创建密码,这是为了接下来使用XShell软件远程连接CDHNode1节点做准备,出现successfully表示创建密码成功,注意:密码创建必须是root用户。
4、可以切换到hadoop用户,使用 su命令,可以看到,此时[email protected]已经改成[email protected]。
5、从hadoop用户退出,使用exit命令
克隆虚拟机
由于我们使用VMware创建的Centos虚拟机,所以我们可以直接克隆虚拟机,就减少了安装的时间,提高效率。
若你是在一台pc机上配置集群环境,就可以按照以下步骤连续克隆出四个虚拟机分别是CDHNode2、CDHNode3、CDHNode4、CDHNode5;我是在两个pc机上配置的所以,我就需要在另一台pc上重新按照第一台pc机上安装CDHNode1一样,再安装CDHNode2,然后从CDHNode2克隆CDHNode4、CDHNode5。
下面我以在CDHNode2上克隆出CDHNode5虚拟机为例,演示以下克隆的步骤。
1、右键CDHNode2虚拟机--》快照--》拍摄快照
2、点击拍摄快照,快照拍摄成功
3、再右键CDHNode2虚拟机--》管理--》克隆
4、下一步
5、选择现有快照--》下一步
6、选择创建完整克隆--》下一步
7、输入虚拟机名称,点击完成,等待克隆完成。
8、至此我们完成了克隆虚拟机的任务
9、接下来是修改配置虚拟机的网卡信息,下面我们在CDHNode5为例,其他节点自己按照下面的自行配置。
首先打开CDHNode5,此时显示的主机名称为CDHNode2,因为CDHNode5是从CDHNode2克隆来的,所以主机名称还是CDHNode2。
10、暂时不该主机名,我们先查看一下,此时显示没有网卡
11、克隆后的网卡变成了eth1,如果想改回eth0,则需要修改配置文件70-persistent-net.rules配置文件
11、我们先设置行号输入:set number,我们需要修改第8行和第11行,然后输入i或a进入编辑模式,使用#注释第8行,并把第10行的eth1改为eth0,可以记一下第二个网卡的mac硬件地址
12、我们先移除网卡e1000,使用modprobe -r e1000命令
13、重新安装网卡e000
14、修改网卡配置信息
15、把设备号修改为DEVICE=eth0,先注释掉mac地址(硬件地址),在修改ip地址。
16、重启网络服务
注意:如果不正确,ip已经被使用,可以重新设置成其他的ip地址,按照以上方式配置。
17、接下来是修改主机名,把CDHNode2改成CDHNode5
18、重启主机后,就可以看到主机名的变成CDHNode5。
19、由于我们注释了mac地址,所以我们开改成新的mac地址,首先使用ifconfig查看新的mac地址,记住下面地址,
20、进入ifcfg-eth0文件,修改HWaddr,改为刚才查看的mac地址
再使用service network restart命令重启网络服务。至此配置完毕,最后按Esc,然后:wq保存退出。
接下来在其他节点上进行相应的配置。
配置host文件
在5个节点上分别配置hosts文件,注意使用root用户配置
最后按Esc,然后:wq保存退出。
关闭防火墙
在所有节点上使用root用户,关闭防火墙。由于要使用ssh协议来进行主机间的无密码访问,所以需要关闭防火墙。
1、首先查看防火墙的状态,显示防火墙正在运行
2、然后永久关闭防火墙,使用chkconfig iptables off命令,此时当前虚拟机的防火墙还没有关闭。只有在关机重启后才能生效。
3、关闭ipv6的防火墙
4、也可以使用service iptables stop命令,暂时关闭当前主机的防火墙。
5、关闭selinux
将其SELINUX=enforcing设置为SELINUX=disabled
最后按Esc,然后:wq保存退出。
时间同步
当我们每一次启动集群时,时间基本上是不同步的,所以需要时间同步。要求所以节点保持一致的时间。
注意:使用root用户修改,5个节点同时修改
1、我们先使用date命令查看当前系统时间
如果系统时间与当前时间不一致,可以按照如下方式修改
2、查看时区设置是否正确。我们设置的统一时区为Asia/Shanghai,如果时区设置不正确,可以按照如下步骤把当前时区修改为上海。
3、下面我们使用ntp(网络时间协议)同步时间。如果ntp命令不存在,则需要在线安装ntp
4、安装ntp后,我们可以使用ntpdate命令进行联网时间同步。
5、最后我们在使用date命令查看,时间是否同步成功。
注意:在桥接模式下,上述同步时钟的方法行不通。换一下方法,我们使用手动配置时间,在xshell中,全部xshell会话的方式的方式同时更改所有节点。
a、使用date查看时间
b、设置日期,比如设置成2016年5月20日
c、设置时间,比如设置成下午1点48分45秒
d、最后将当前时间和日期写入BIOS,避免重启后失效
使用Xshell远程连接centos系统
由于在centos中复制修改等操作方便,我们使用windows上的一款远程连接工具Xshell,下面简单讲一下连接步骤。你需要先从网上下载安装Xshell和Xftp(可以用来可视化的文件传输)这两款工具。
连接步骤如下,以连接CDHNode1为例。
1、首先点击新建按钮,如下;在新建会话属性对话框中输入名称和需要连接的主机ip地址。
2、接下来点击左侧的用户身份验证,输入要登录主机的用户名和密码,点击确定,此时创建成功。
3、在打开会话对话框中选中刚创建的CDHNode1,然后点击连接
4、此时连接成功,即可进行远程操作
5、为了以后方便打开远程主机,我们可以把当前连接的主机添加到链接栏中,只需点击添加到链接栏按钮即可添加
6、为了防止一个命令在多个主机中输入,我们也可以使用撰写栏,快速的把一个命令传送到所以打开的会话框。提示:撰写栏可以在查看菜单栏中打开。
配置免密码登录ssh
接上面的配置,我们已经使用Xshell远程登录上五个节点。下面我们就配置免密码登录hadoop用户,如果你使用root用户登录的,需要先切换到hadoop用户,使用 su hadoop命令切换。步骤如下:
1、首先切换到hadoop的家目录下,使用cd /home/hadoop命令来切换。然后在hadoop家目录下创建 .ssh目录。
2、然后生成hadoop用户的rsa(非对称加密算法),运行如下命令后,一直回车,即可生成hadoop的公钥和私钥
3、切换到 .ssh目录下,即可看到已经生成的公钥和私钥。
4、按照上面的步骤,在所有节点上生成公钥和私钥,接下来需要把所有节点的公钥发到CDHNode1节点的授权文件。如下图,我们使用Xshell最下方的撰写栏向所有节点发送ssh-copy-id CDHNode1命令。
5、执行结果如下,每个节点包括CDHNode1节点,都把自己刚才生成的公钥 id_rsa.pub文件发送到CDHNode1节点的授权文件authorized_keys中。
注意:也可以在所有节点使用
cat ~/.ssh/id_rsa.pub | ssh [email protected] 'cat >> ~/.ssh/authorized_keys' 命令把自己的公钥追加到CDHNode1节点的授权文件authorized_keys中。
6、可以查看CDHNode1节点的授权文件authorized_keys中是否把所有节点的公钥都添加到此文件中,若有节点没有加入,则可以使用上一步命令重新添加。
7、然后我们就把这个文件拷贝到其他节点的.ssh目录下。
8、根据下图,可以看到CDHNode5下已经复制了一份authorized_keys文件。下面以CDHNode5为例,修改.ssh目录以及.ssh目录下的文件的权限。其他节点按照如下步骤 一 一 修改。
9、修改好权限后,至此ssh配置成功,可以使用ssh测试是否配置成功,第一次使用ssh连接其他节点时需要输入yes,退出使用exit命令,在第二次登陆时,就不需要在输入,如下图直接登陆并显示最后登录时间。
提示:rsa非对称加密算法是把公钥发送个对方,对方使用公钥对数据进行加密后,自己在使用私钥对数据进行解密。
免密码登录的原理:
- 需要依靠**,也就是自己创建的一对**,并把公钥放到需要访问的服务器上。
- 如果你需要连接SSH服务器,客户端软件就会向服务器发出请求,请求用你的**进行安全验证。
- 服务器收到请求后,现在该服务器上的主目录下寻找你的公钥,然后把它和你发送过来的公钥进行比较。如果两个**一致,服务端就用公钥加密“质询”(challenge),并把它发送给客户端软件。
- 客户端收到“质询”后,就用你的私钥进行解密。再把它发送个服务器。
- 服务器比较发送来的“质询”和原先的是否一致,如果一致则进行授权,完成建立会话的操作。
脚本工具的使用
此处使用脚本文件的目的是为了简化安装步骤,毕竟有五个节点,如果全部使用命令一个一个操作,太费时费力了。为了简化操作,我们使用脚本文件来帮助我们执行多个重复的命令。就就相当于windows的批处理,把所有的命令集中起来,一个命令完成多个操作。
下面我们在CDHNode1节点上新建三个文件,deploy.conf(配置文件),deploy.sh(实现文件复制的shell脚本文件),runRemoteCdm.sh(在远程节点上执行命令的shell脚本文件)。
1、我们把三个文件放到/home/hadoop/tools目录下,先创建此目录
2、然后切换到tools目录下
[[email protected] ~]$cd tools
3、首先创建deploy.conf文件
先解释一下这个文件,这个文件就是配置在每个几点上的功能,就是上面所讲的 主机规划。比如zookeeper安装在CDHnode1、CDHnode2、CDHnode3这三个主机上。其他的自己对比查看。
4、创建deploy.sh文件
5、创建 runRemoteCmd.sh 脚本文件
6、给脚本文件添加执行权限。
7、把tools目录添加到环境变量PATH中。
添加下面内容
8、是环境变量及时生效
9、在CDHNode1节点上,通过runRemoteCmd.sh脚本,一键创建所有节点的软件安装目录/home/hadoop/app。
我们先来说一下软件的安装步骤:
对于解压安装的软件,安装步骤为:
- 使用rz命令上传要安装的文件,此命令只能在远程连接工具xshell上执行,不能再centos虚拟机上执行
- 使用tar -zxvf softwarename.tar.gz
- 修改配置文件(根据需要而定,有时可省略)
- 在环境变量文件中配置环境变量
- 使用source 是环境变量文件即时生效。
安装JDK
首先在CDHNode1上安装jdk,然后复制到其他节点。
1、上传使用rz后,找到下载的jdk文件(jdk-7u79-linux-x64.tar.gz )即可,选择后就可以上传,上传需要时间。
2、解压jdk-7u79-linux-x64.tar.gz
3、修改jdk的名字,删除上传的压缩文件jdk-7u79-linux-x64.tar.gz
4、配置环境变量
添加
5、使环境变量文件即时生效
6、查看是否安装成功,查看Java版本
CDHNode2、CDHNode3、CDHNode4、CDHNode5加点重复CDHNode1上的jdk配置即可。就是在其他节点上从第4步开始配置。
安装Zookeeper
首先在CDHNode1上安装Zookeeper,然后复制到其他节点。
1、将本地下载好的zookeeper-3.4.6.tar.gz安装包,上传至CDHNode1节点下的/home/hadoop/app目录下。
2、解压zookeeper-3.4.6.tar.gz
3、修改zookeeper的名字,删除上传的压缩文件zookeeper-3.4.6.tar.gz
4、修改Zookeeper中的配置文件。
[[email protected] app]$ cd /home/hadoop/app/zookeeper/conf/
5、配置环境变量
添加
6、使环境变量文件即时生效
7、通过远程命令deploy.sh将Zookeeper安装目录拷贝到其他节点(CDHNode2、CDHNode3)上面
8、通过远程命令runRemoteCmd.sh在所有的zookeeper节点(CDHNode1、CDHNode2、CDHNode3)上面创建目录:
9、然后分别在CDHNode1、CDHNode2、CDHNode3上面,进入zkdata目录下,创建文件myid,里面的内容分别填充为:1、2、3, 这里我们以CDHNode1为例。
//输入数字1
CDHNode2输入数字2、CDHNode3输入数字3。
10、在CDHNode2、CDHNode3上面配置Zookeeper环境变量。按照第5、6步配置。
11、使用runRemoteCmd.sh 脚本,启动所有节点(CDHNode1、CDHNode2、CDHNode3)上面的Zookeeper。
12、查看所有节点上面的QuorumPeerMain进程是否启动。
13、查看所有Zookeeper节点状态。
如果一个节点为leader,另2个节点为follower,则说明Zookeeper安装成功。
注意:QuorumPeerMain可能不显示在jps进程中,可以使用bin/zkServer.sh status 查看状态,无法启动的原因可以查看zookeeper.out文件,查看错误原因
安装hadoop
首先在CDHNode1上安装hadoop,然后复制到其他节点。
1、将本地下载好的hadoop-2.6.0-cdh5.4.5.tar.gz安装包,上传至CDHNode1节点下的/home/hadoop/app目录下。
2、解压hadoop-2.6.0-cdh5.4.5.tar.gz
3、修改 hadoop的名字,删除上传的压缩文件hadoop-2.6.0-cdh5.4.5.tar.gz
4、配置环境变量
添加5、使环境变量文件即时生效
6、切换到/home/hadoop/app/hadoop/etc/hadoop/目录下,修改配置文件。
配置HDFS
配置hadoop-env.sh
[[email protected] hadoop]$ vi hadoop-env.sh export JAVA_HOME=/home/hadoop/app/jdk1.7.0_79
配置core-site.xml
配置hdfs-site.xml
配置 slave
YARN安装配置
配置mapred-site.xml
配置yarn-site.xml
向所有节点分发hadoop安装包。
[[email protected] app]$ deploy.sh hadoop /home/hadoop/app/ slave
按照目录的规划建立好目录(用于存放数据的目录):
当你的在初始化工程中出错,要把相关目录的文件删除,然后再重新初始化
集群初始化
1、启动所有节点上面的Zookeeper进程
[[email protected] hadoop]$ runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh start" zookeeper
2、启动所有节点上面的journalnode进程
[[email protected] hadoop]$ runRemoteCmd.sh "/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh start journalnode" all
3、首先在主节点上(比如,CDHNode1)执行格式化
[[email protected] hadoop]$ bin/hdfs namenode -bootstrapStandby //同步主节点和备节点之间的元数据
5、CDHNode2同步完数据后,紧接着在CDHNode1节点上,按下ctrl+c来结束namenode进程。 然后关闭所有节点上面的journalnode进程
[[email protected] hadoop]$ runRemoteCmd.sh "/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh stop journalnode" all //然后停掉各节点的journalnode
7、验证是否启动成功
通过web界面查看namenode启动情况。
http://CDHNode1:50070
192.168.3.188 CDHNode1
192.168.3.189 CDHNode2
192.168.3.190 CDHNode3
192.168.3.191 CDHNode4
192.168.3.192 CDHNode5
上传文件至hdfs
[[email protected] hadoop]$ vi a.txt //本地创建一个a.txt文件 hadoop CDH hello world CDH hadoop [[email protected] hadoop]$ hdfs dfs -mkdir /test //在hdfs上创建一个文件目录 [[email protected] hadoop]$ hdfs dfs -put djt.txt /test //向hdfs上传一个文件 [[email protected] hadoop]$ hdfs dfs -ls /test //查看a.txt是否上传成功
如果上面操作没有问题说明hdfs配置成功。
启动YARN
1、在CDHNode1节点上执行。
[[email protected] hadoop]$ sbin/start-yarn.sh
2、在CDHNode2节点上面执行。
[[email protected] hadoop]$ sbin/yarn-daemon.sh start resourcemanager
同时打开一下web界面。
http://CDHNode1:8088 http://CDHNode2:8088
关闭其中一个resourcemanager,然后再启动,看看这个过程的web界面变化。
3、检查一下ResourceManager状态
[[email protected] hadoop]$ bin/yarn rmadmin -getServiceState rm1 [[email protected] hadoop]$ bin/yarn rmadmin -getServiceState rm2
4、Wordcount示例测试
[[email protected] hadoop]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /test/a.txt /test/out/
如果上面执行没有异常,说明YARN安装成功。
集群关启顺序
关闭YARN
a、在CDHNode2节点上面执行
b、在CDHNode1节点上执行
c、关闭HDFS
d、关闭zookeeper
再次启动集群
a、启动zookeeper
b、启动HDFS
c、在CDHNode1节点上执行
d、在CDHNode2节点上面执行
后续再编写HBase,hive等的安装
转载来自:http://blog.****.net/u010270403/article/details/51446674