摘要:本文主要向大家介绍了【云计算】在Linux的Centos6.5搭建hadoop集群环境,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。
本文主要向大家介绍了【云计算】在Linux的Centos6.5搭建hadoop集群环境,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。
Centos6.5搭建hadoop集群环境
先概括一下整体思路
安装centos6.5主机 关闭防火墙和selinux 配置网络 时间同步 ssh无密码登录设置 安装jdk 安装hadoop 启动 wordcount测试 安装centos6.5主机 使用vmware创建三台centos操作系统
本人的三台主机名与IP如下:
master 192.168.9.128
slave1 192.168.9.129
slave2 192.168.9.130
添加用户
三台主机都添加相同名称与密码的普通用户,如 michael
useradd michael
passwd michael --------设置密码
修改hosts文件
修改三台虚拟主机的hosts文件,保持一样
vi /etc/hosts,
注释掉前两行,追加:
192.168.9.128 master
192.168.9.129 slave1
192.168.9.130 slave2
关闭防火墙与SELINUX
1、防火墙
#service iptables stop
#service ip6tables stop
这个命令可以临时关闭防火墙
#chkconfig iptables off
#chkconfig ip6tables off
这个命令可以永久关闭防火墙
#chkconfig iptables --list
#chkconfig ip6tables --list
这个命令可以查看防火墙的状态
2、SELINUX服务
# vi /etc/selinux/config
将文件里标红的部分改为disabled
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
重启后永久关闭selinux
#sestatus -v
这个命令可以查看selinux的状态
#setenforce 0
这个命令可以临时关闭selinux
三、配置网络
配置IP有两种方式:自动获取ip和设置静态IP
A、自动获取ip
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes---------设置开机自动激活网卡
1、桥接模式:
相当于连接到物理机所在的网络中,与物理机的ip处在同一ip段位上,物理机网络的DHCP会自动分配ip给虚拟主机
2、Nat模式:
相当于连接到物理机的VMnet8网络中,与VMnet8处在同一ip段位上,同样,VMnet8会自动分配ip给虚拟主机
修改设置后,重置网络服务
# service network restart
B、设置静态ip
只需要查看我注释的几项即可,没有就添加
1、桥接模式:
DEVICE=eth0
TYPE=Ethernet
UUID=edece2c6-947e-4e8b-ab2e-43ed59c6a614
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static ----------修改成static或none都行
HWADDR=00:0C:29:5e:1f:c3
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
IPADDR=192.168.1.200 ----------设置成你想要的IP(与物理机在同一段位)
NETMASK=255.255.255.0 --------子网掩码
GATEWAY=192.168.1.1 ----------网关(与物理机一致)
2、Nat模式
DEVICE=eth0
TYPE=Ethernet
UUID=edece2c6-947e-4e8b-ab2e-43ed59c6a614
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static -----------修改成static
HWADDR=00:0C:29:5e:1f:c3
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
IPADDR=192.168.9.200 -----------设置成你想要的(与VMnet8在同一段位即可)
NETMASK=255.255.255.0 --------子网掩码
GATEWAY=192.168.9.2 ----------网关(需设置成VMnet8提供的网关,一般结尾都是2)
DNS1=192.168.9.2 --------------DNS设置成与网关一致即可
PS:不管什么模式,去修改/etc/resolv.conf 添加
nameserver 网关ip
3、总结:
我们的目的是,三台主机能互相ping通,并能ping通物理机或者外网,以及物理机能ping通虚拟主机
四、时间同步
在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。所有Linux相关指令与函数都是读取系统时钟的设定。因为存在两种不同的时钟,那么它们之间就会存在差异。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。
因此我们需要通过hwclock命令将系统时钟同步到硬件时钟。
1、查看系统当前时间
例子1
[root@master michael]# date
2018年 05月 10日 星期四 15:19:12 CST
例子2
[root@master michael]# date '+%y-%m-%d %H:%M:%S'
18-05-10 15:23:14
2、设置系统时间
#只有root权限才能设置,其他只能查看。
例子1:
[root@master michael]# date -s 20180510
2018年 05月 10日 星期四 00:00:00 CST
例子2:
[root@master michael]# date -s "20180510 15:18:00"
2018年 05月 10日 星期四 15:18:00 CST
3、Linux系统时间同步
一台机器时间好设置,如果是一个集群呢,很麻烦。这个时候,我们可以使用时间同步命令(此时,可以忽略第二步)
格式如下:
# ntpdate -u时间服务器IP
例子1:
[root@master michael]# ntpdate -u time.windows.com
10 May 15:26:28 ntpdate[6453]: adjust time server 52.168.138.145 offset -0.010554 sec
若不加上-u参数, 会出现以下提示:no server suitable for synchronization found;连不上时间服务器IP也会出现此提示,这个时候可以换一个时间服务器。
-u:此参数可以越过防火墙与主机同步
最后,我们将系统时间同步到硬件时钟上,输入命令:
hwclock -w
备注: ntp常用服务器:
中国国家授时中心:210.72.145.44
NTP服务器(上海) :ntp.api.bz
美国: time.nist.gov
复旦: ntp.fudan.edu.cn
微软公司授时主机(美国) :time.windows.com
北京邮电大学 : s1a.time.edu.cn
清华大学 : s1b.time.edu.cn
北京大学 : s1c.time.edu.cn
台警大授时中心(台湾):asia.pool.ntp.org
五、ssh无密码登录
Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到NameNode。
SSH无密码原理
Master(NameNode)作为客户端,要实现无密码连接到服务器Slave(DataNode)上时,需要在Master上生成一个密钥对,即一个公钥和一个私钥,然后将公钥复制到所有的Slave上。当Master通过SSH连接Slave时,Slave就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码
我们所需要做的就是将客户端Maste的公钥复制到Slave上。
Master无密码登录slave1
使用普通用户进行设置,尽可能的不要使用root用户
生成密钥
输入命令:ssh-keygen –t rsa
一路回车下去,就会在相应的用户的主目录下生成隐藏目录.ssh。里面有一个私钥文件id_rsa和一个公钥文件id_rsa.pub
无密码登录自己
进入.ssh目录,将公钥文件更名为authorized_keys文件,即可实现ssh连接自己不再需要密码。确保authorized_keys的权限为600。
$ mv id_rsa.pub authorized_keys
结果验证
ssh localhost
成功后,最好删除id_rsa.pub文件
拷贝authorized_keys到虚拟主机slave1
首先要确保slave1的用户的主目录下有隐藏目录.ssh
没有的话,创建出来
$ mkdir ~/.ssh
修改权限为700
$ chmod 700 ~/.ssh
然后拷贝
scp ~/.ssh/authorized_keys michael@slave1:~/.ssh/authorized_keys
输入yes,回车输入密码
结果验证
复制成功后,开始连接进行验证
ssh michael@slave1
此时,发现连接slave1时,无需在输入密码了 ^_^
PS: master无密码登录slave2,就重复第三步和第四步
slave1无密码登录master
依然使用普通用户michael进行设置
生成密钥
通过输入命令:ssh-keygen -t rsa ,一路回车,生成slave1的私钥和公钥文件
无密码登录自己
进入隐藏目录~/.ssh
将公钥文件内容追加到authorized_keys文件中。(注意,此时authorized_keys里已经存在master主机的公钥)
$ cat id_rsa.pub >> authorized_keys
进行验证:ssh localhost
拷贝公钥文件到master
我们需要将slave1的公钥备份到master主机上
scp ~/.ssh/id_rsa.pub michael@master:~/.ssh/id_rsa.pub_slave1
yes
输入密码,回车
追加slave1公钥文件到authorized_keys中
然后连接master, 将slave1的公钥追加到master的authorized_keys文件中
ssh michael@master 输入密码登录
cat ~/.ssh/id_rsa.pub_slave1 >> ~/.ssh/authorized_keys
进行验证
退回到slave1中,
$ exit
进行验证,输入
$ ssh michael@master, 看看是否需要密码,应该成功。
如果想slave2无密码登录master,只需要重复slave1登录master的步骤即可
六、安装jdk
很多新手在安装软件时,安装路径都是模棱两可的,对于安装后产生的软件文件,存储位置更是乱七八糟,甚至一个目录中有好几个软件的相关文件。这是一个非常不好的习惯。所以,我们最好养成一个良好习惯,所有的软件都安装到某一个父目录中,比如:/home/michael/soft。然后我们在此目录下再创建相应软件名的子目录管理安装时产生的软件文件~~~如下:
/home/michael/soft/jdk
/home/michael/soft/hadoop
/home/michael/soft/eclipse
在这里,我只讲.tar.gz格式的jdk安装 (点这里进入jdk各个历史版本下载页面)
准备工作:使用普通用户michael 上传jdk-8u162-linux-x64.tar.gz安装包到master主机的目录soft下
第一步:查看
查看是否安装过其他的jdk软件包:# rpm -qa | grepjava
第二步: 卸载
如果第一步中有查出安装过,此时需要切换到root用户下进行卸载。
命令格式: # rpm -e --nodeps 软件包名
第三步:解压
注意:一定要切换回普通用户
将压缩包解压到当前目录下
$ tar -zvxf jdk-8u162-linux-x64.tar.gz
查看一下:ls
第四步: 建软链接文件
最好创建软连接,方便以后更换jdk版本时,不用更改环境变量配置
命令格式:
$ ln-sjdk1.8.0_162jdk
第五步:配置环境变量
配置环境变量有三种文件可修改(/etc/profile ~/.bash_profile ~/.bashrc),在这里,我选择了/etc/profile,这个文件需要切换成root用户
# vi /etc/profile --追加如下信息:
JAVA_HOME=/home/michael/soft/jdk
JRE_HOME=$JAVA_HOME/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASSPATH PATH
第六步: 生效配置文件
重启机器
# reboot
或者也可以使用命令
# source /etc/profile
第七步:测试
使用命令
$ java -version回车
$ javac回车
出现信息翻滚,即配置成功
第八步:其他机器安装JDK
其他两台虚拟主机slave1,slave2也可以安装上述步骤去安装。 也可以使用scp命令将解压好的软件包和配置文件拷贝过去。拷贝时一定要思考,应该使用什么用户去做。否则出现权限问题。
我选择拷贝。
使用普通用户michael,拷贝安装包
$ scp ~/soft/ jdk1.8.0_162 michael@slave1:~/soft/ jdk1.8.0_162
(ps:如果@slave1不好使的话,写slave1的IP地址)
使用root用户拷贝配置文件
# scp /etc/profile root@slave1:/etc/profile
PS:如果slave1中没有soft目录,在拷贝时可能会出现错误,建议先创建出来。
然后ssh连接slave1创建软链接。
$ ln-sjdk1.8.0_162jdk
slave2亦是如此
PS:详情可见//blog.sina.com.cn/s/blog_182e362f60102x0uh.html
七、安装hadoop
准备工作,使用普通用户将安装包hadoop2.7.3.tar.gz上传到master主机中的soft目录下
1、解压
$ tar -zvxf hadoop2.7.3.tar.gz
查看 $ ls
2、创建软连接
$ ln -s hadoop-2.7.3 hadoop
4、配置环境变量
此时,要切换到root用户下,进行修改文件/etc/profile,追加内容
HADOOP_HOME=/home/michael/soft/hadoop
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_HOME PATH
保存退出,重置文件生效。hdfs -version查一下
5、创建目录
我们需要在hadoop的根目录~/soft/hadoop下创建四个目录,用于进行存放以后产生的数据。 命令:mkdir dfs dfs/name dfs/data tmp
dfs是name和data的父目录
name:--------------------namenode实例的存储目录
data:---------------------datanode实例的存储目录
tmp:---------------------临时文件的存储目录
6、修改hadoop的配置文件
我们需要修改hadoop中etc/hadoop下的六个文件:core-site.xml、hdfs-site.xml、
mapred-site.xml、yarn-site.xml、以及hadoop-env.sh、slaves
1)、修改core-site.xml
fs.defaultFS #默认文件系统名称,用于指定host,post
hdfs://master:9000
hadoop.tmp.dir #指定临时文件的存储路径
file:/home/michael/soft/hadoop/tmp
io.file.buffer.size #用于指定序列文件的缓冲区大小
131702
2)、修改hdfs-site.xml
dfs.namenode.name.dir #用于指定namenode存储路径
file:/home/michael/soft/hadoop/dfs/name
dfs.datanode.data.dir #用于指定datenode存储路径
file:/home/michael/soft/hadoop/dfs/data
dfs.replication #用于指定副本个数
3
dfs.namenode.secondary.http-address #二主节点的端口
master:9001
dfs.webhdfs.enabled
true #启用webHDFS检测namenode和datanode
3)、修改mapred-site.xml
此目录下没有该文件,我们需要将mapred-site.xml.template 复制一份,改成此名。
然后再修改:
mapreduce.framework.name
yarn
mapreduce.jobhistory.address # Server IPC host:port
master:10020
mapreduce.jobhistory.webapp.address
master:19888 # Server Web UI host:port
4)、修改yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.nodemanager.aux-services.mapreduce.shuffle.class
org.apache.hadoop.mapred.ShuffleHandler
yarn.resourcemanager.address
master:8032
yarn.resourcemanager.scheduler.address
master:8030
yarn.resourcemanager.resource-tracker.address
master:8031
yarn.resourcemanager.admin.address
master:8033
yarn.resourcemanager.webapp.address
master:8088
5)、修改hadoop-env.sh
打开此文件,重新设置JAVA_HOME的值。否则不能启动
# The java implementation to use.
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/home/michael/soft/jdk
6)、修改slaves文件
打开此文件,删除默认的localhost,增加两个从节点
slave1
slave2
7)、修改yarn-env.sh
我们最好也重新设置一下此文件的java_home。
# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
export JAVA_HOME=/home/michael/soft/jdk---------------------增加内容
if [ "$JAVA_HOME" != "" ]; then
7、拷贝文件
为了节省时间,不再重新配置hadoop的配置文件和profile,我们将hadoop整个安装包和profile通过scp命令 复制到另外两台slave1和slave2上的相应位置,不需要修改任何东西。
$ scp -r ~/soft/hadoop michael@slave1:~/soft/ hadoop-2.7.3
$ scp -r ~/soft/hadoop michael@slave2:~/soft/ hadoop-2.7.3
切换root用户
# scp /etc/profile root@slave1:/etc/profile
# scp /etc/profile root@slave2:/etc/profile
别忘记创建软链接文件
$ ln -s hadoop-2.7.3 hadoop
8、重启
此时,我们集群搭建成功了,为了确保配置文件生效,我们最好reboot所有的机器
八、启动集群
格式化
$ hdfs namenode -format ------开始格式化分布式文件系统
格式化过程中:查看是否有什么warn:有的话,请百度,修正后再进行后续操作
ps:格式化文件系统就相当于格式化磁盘。频繁的格式化会出现master不能启动slave上的服务。
启动
$ start-all.sh -----------启动集群
查看相关日志信息,有错排错
查看进程
Jps
查看三台虚拟主机的hadoop相关进程
[michael@Master hadoop]$ jps --------------------master四个进程
10210 Jps
9698 SecondaryNameNode
9864 ResourceManager
9497 NameNode
[michael@slave1 hadoop]$ jps --------------------slave1三个进程
8071 NodeManager
8279 Jps
7961 DataNode
[michael@slave2 hadoop]$ jps --------------------slave2三个进程
5266 NodeManager
5155 DataNode
5444 Jps
Web访问网页
192.168.9.128:50070
192.168.9.128:8088
都出现两个活跃节点,就完全配置成功
如果想使用master:50070 ,即用主机名代替ip,请修改window系统:
C:\Windows\System32\drivers\etc下的hosts文件,添加ip-hostname键值对
如:
192.168.9.128 master
关闭集群
stop-all.sh 关闭所有主机
总结
如果格式化期间没有错误、警告等,以后调错,就不要再格式化,只需要进行 启动,关闭,启动等操作即可。
九、案例测试
我们可以使用自带的一个单词统计程序wordcount 来统计某个文件内的信息。
详情请访问:
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据安全频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号