【云计算】在Linux的Centos6.5搭建hadoop集群环境
小标 2018-12-05 来源 : 阅读 787 评论 0

摘要:本文主要向大家介绍了【云计算】在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 来统计某个文件内的信息。


详情请访问:


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据安全频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程