《Hadoop》之"踽踽独行"(四)CentOS 6.5搭建hadoop2.7.3集群环境

在VMware虚拟软件中,我们要如何模拟hadoop集群搭建呢?我来整理一下思路,希望对大家有所帮助!!

1.        安装centos6.5主机
2.        关闭防火墙和selinux
3.        配置网络
4.        时间同步
5.        ssh无密码登录设置
6.        安装jdk
7.        安装hadoop
8.        启动
9.        wordcount测试

一、虚拟机的准备工作

1、vmware下创建三台centos操作系统

本人的三台主机名与IP如下:

master               192.168.9.128
slave1                192.168.9.129
slave2                192.168.9.130

2、添加用户

三台主机都添加相同名称与密码的普通用户,如michael

# useradd   michael
# passwd    michael      --------设置密码

3、修改hosts文件

修改三台虚拟主机的hosts文件,进行IP地址与主机名的绑定工作。三台机器的此文件内容要相同

# 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服务

修改/etc/selinux/config的参数信息

# vi /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy isenforced.
#     permissive - SELinux prints warningsinstead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=
disabled                           <======= #  将文件里标红的部分改为disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes areprotected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

重启后永久关闭selinux

#sestatus -v
这个命令可以查看selinux
的状态

#setenforce 0
这个命令可以临时关闭selinux

三、配置网络

配置IP有两种方式:自动获取ip和设置静态IP,但是由于我们要搭建集群环境,因此我们要选择设置静态IP,可以直接看B

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

打开/etc/sysconfig/network-scripts/ifcfg-eth0,进行如下配置(只需要查看我注释的几项即可,没有就添加)。

1、桥接模式:

DEVICE=eth0
TYPE=Ethernet
UUID=edece2c6-947e-4e8b-ab2e-43ed59c6a614
ONBOOT=yes       ----------------修改成开机启动
NM_CONTROLLED=yes
BOOTPROTO=static  ----------修改成staticnone都行
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    ----------网关(与物理机一致)
DNS1=192.168.1.1     --------------DNS设置成与网关一致即可

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设置成与网关一致即可

不管你选择的是桥接模式,还是nat模式,都去/etc/resolv.conf文件查看是否有以下内容,没有就 添加:

nameserver  网关ip

然后,重置网络服务

#  service  network  restart

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@mastermichael]# date -s 20180510
2018年 05月 10日星期四 00:00:00 CST

例子2:
[root@mastermichael]# date -s "20180510 15:18:00"
2018年 05月 10日星期四 15:18:00 CST

3、Linux系统时间同步

一台机器时间好设置,如果是一个集群呢,很麻烦。这个时候,我们可以使用时间同步命令(此时,可以忽略第二步)

格式如下:
ntpdate      -u   时间服务器IP

例子1:
[root@master michael]# ntpdate -utime.windows.com
10 May 15:26:28 ntpdate[6453]: adjust timeserver 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。

1、SSH无密码原理

Master(NameNode)作为客户端,要实现无密码连接到服务器Slave(DataNode)上时,需要在Master上生成一个密钥对,即一个公钥和一个私钥,然后将公钥复制到所有的Slave上。当Master通过SSH连接Slave时,Slave就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码

我们所需要做的就是将客户端Maste的公钥复制到Slave上。

2、 Master无密码登录slave1

使用普通用户进行设置,尽可能的不要使用root用户

1)    生成密钥。输入命令:

$ ssh-keygen     –t     rsa 
一路回车下去,就会在相应的用户的主目录下生成隐藏目录.ssh。里面有一个私钥文件id_rsa和一个公钥文件id_rsa.pub

2)  无密码登录自己

进入.ssh目录,将公钥文件更名为authorized_keys文件,即可实现ssh连接自己不再需要密码。确保authorized_keys的权限为600

$  mv    id_rsa.pub    authorized_keys

结果验证

$ ssh      localhost

成功后,最好删除id_rsa.pub文件

3)    拷贝authorized_keys到虚拟主机slave1

首先要确保slave1的用户的主目录下有隐藏目录.ssh ,没有的话,创建出来

$ mkdir  ~/.ssh

修改权限为700

$ chmod 700 ~/.ssh

然后拷贝

scp ~/.ssh/authorized_keys  michael@slave1:~/.ssh/authorized_keys

输入yes,回车输入密码

4)    结果验证

复制成功后,开始连接进行验证

ssh  michael@slave1

此时,发现连接slave1时,无需在输入密码了 ^_^。PS: master无密码登录slave2,就重复第三步和第四步

3、 slave1无密码登录master

依然使用普通用户michael进行设置

1)    生成密钥

 通过输入命令:ssh-keygen -t  rsa  ,一路回车,生成slave1的私钥和公钥文件

2)    无密码登录自己

进入隐藏目录~/.ssh,将公钥文件内容追加到authorized_keys文件中。(注意,此时authorized_keys里已经存在master主机的公钥)

$  cat  id_rsa.pub >>  authorized_keys

进行验证:ssh  localhost

3)    拷贝公钥文件到master

我们需要将slave1的公钥备份到master主机上

scp  ~/.ssh/id_rsa.pub  michael@master:~/.ssh/id_rsa.pub_slave1
yes
输入密码,回车

4)    追加slave1公钥文件到authorized_keys中

然后连接master,  将slave1的公钥追加到master的authorized_keys文件中

ssh  michael@master 输入密码登录
cat ~/.ssh/id_rsa.pub_slave1 >>  ~/.ssh/authorized_keys

5)    进行验证

退回到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 | grep  java

第二步: 卸载

如果第一步中有查出安装过,此时需要切换到root用户下进行卸载。 命令格式: # rpm -e--nodeps  软件包名

第三步:解压

注意:一定要切换回普通用户

将压缩包解压到当前目录下

$  tar   -zvxf  jdk-8u162-linux-x64.tar.gz

查看一下:ls

第四步: 建软链接文件

最好创建软连接,方便以后更换jdk版本时,不用更改环境变量配置

命令格式:

$ ln  -s  jdk1.8.0_162   jdk

第五步: 配置环境变量

配置环境变量有三种文件可修改(/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

使用root用户拷贝配置文件

#  scp  /etc/profile root@slave1:/etc/profile

PS:如果slave1中没有soft目录,在拷贝时可能会出现错误,建议先创建出来

 

然后ssh连接slave1创建软链接。

$  ln  -s  jdk1.8.0_162   jdk

slave2亦是如此

PS:详情可见http://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

<configuration>
  <property>
        <name>fs.defaultFS</name>    #默认文件系统名称,用于指定host,post
       <value>hdfs://master:9000</value>
  </property>
  <property>
       <name>hadoop.tmp.dir</name>  #指定临时文件的存储路径
       <value>file:/home/michael/soft/hadoop/tmp</value>
  </property>
  <property>
      <name>io.file.buffer.size</name>  #用于指定序列文件的缓冲区大小
       <value>131702</value>
  </property>
</configuration>

2)、修改hdfs-site.xml

<configuration>
             <property>
                <name>dfs.namenode.name.dir</name>      #用于指定namenode存储路径
           <value>file:/home/michael/soft/hadoop/dfs/name</value>
       </property>
       <property>
                <name>dfs.datanode.data.dir</name>  #用于指定datenode存储路径
                <value>file:/home/michael/soft/hadoop/dfs/data</value>
       </property>
       <property>
               <name>dfs.replication</name> #用于指定副本个数
                <value>3</value>
       </property>
       <property>
               <name>dfs.namenode.secondary.http-address</name>  #二主节点的端口
               <value>master:9001</value>
       </property>
       <property>
               <name>dfs.webhdfs.enabled</name> 
                <value>true</value>        #启用webHDFS检测namenode和datanode
       </property>
</configuration>

3)、修改mapred-site.xml

此目录下没有该文件,我们需要将mapred-site.xml.template 复制一份,改成此名。然后再修改:

<configuration>
         <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
       </property>
       <property>
               <name>mapreduce.jobhistory.address</name>  # Server IPC host:port
               <value>master:10020</value>
       </property>
       <property>
                <name>mapreduce.jobhistory.webapp.address</name>
               <value>master:19888</value>      # Server Web UI host:port
       </property>
</configuration>

4)、修改yarn-site.xml

<configuration>
<!-- Site specific YARN configurationproperties -->
         <property> 
                       <name>yarn.nodemanager.aux-services</name> 
                <value>mapreduce_shuffle</value> 
       </property> 
       <property> 
               <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> 
                <value>org.apache.hadoop.mapred.ShuffleHandler</value> 
       </property> 
      <property> 
               <name>yarn.resourcemanager.address</name> 
               <value>master:8032</value> 
      </property> 
      <property> 
                <name>yarn.resourcemanager.scheduler.address</name> 
               <value>master:8030</value> 
       </property> 
       <property> 
               <name>yarn.resourcemanager.resource-tracker.address</name> 
               <value>master:8031</value> 
       </property> 
       <property> 
               <name>yarn.resourcemanager.admin.address</name> 
               <value>master:8033</value> 
       </property> 
       <property> 
               <name>yarn.resourcemanager.webapp.address</name> 
               <value>master:8088</value> 
       </property> 
</configuration>

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
# exportJAVA_HOME=/home/y/libexec/jdk1.6.0/
exportJAVA_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 来统计某个文件内的信息。详情请访问:http://blog.sina.com.cn/s/blog_182e362f60102x0mq.html

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值