CentOS配置Hadoop集群(完全分布式)

一、集群环境介绍

1.1系统环境说明及配置

本人是使用的小型的服务器集群,第一次配置使用了包括主节点在内的5台主机,详细说明见下表:

机器名称 系统环境 ip地址
master.hadoop CentOS 6.5 10.128.0.130
slave1.hadoop CentOS 6.5 10.128.0.131
slave2.hadoop CentOS 6.5 10.128.0.132
slave3.hadoop CentOS 6.5 10.128.0.133
slave4.hadoop CentOS 6.5 10.128.0.134

1.2关闭防火墙(每台主机都要配置)

[root@localhost~]#service iptables stop   #关闭防火墙
[root@localhost~]#chkconfig iptables off  #设置防火墙启动策略为开机不启动

1.3新建用户(每台主机都要配置)

进入系统,使用root用户登录,添加一个新的用户hadoop,并授予该用户权限

[root@localhost~]# useradd hadoop
[root@localhost~]# passwd hadoop
[root@localhost~]# chmod u +w /etc/sudoers
[root@localhost~]# vim /etc/sudoers
#在root ALL=(ALL)ALL下添加hadoop ALL=(ALL)ALL
[root@slave2 ~]# chmod u -w /etc/sudoers 

1.4设置静态IP(每台主机都要配置)

系统默认使用的是DHCP动态获取IP地址,为了方便集群机器之间相互通信,要设置静态ip地址。并修改主机名称

(1)修改/etc/sysconfig/network-scripts/ifcfg-eth0,如果不确定自己的网卡信息,可以使用ifconfig命令查看

图1.1查看网络信息

ifcfg-eth0修改内容如下:

       
 图1.2网络配置信息

DEVICE 接口名(设备,网卡)
BOOTPROTO IP的配置方法(static:固定IP, dhcpHCP, none:手动)
HWADDR MAC地址
ONBOOT 系统启动的时候网络接口是否有效(yes/no)
IPV6INIT IPV6是否有效(yes/no)
TYPE 网络类型(通常是Ethemet)
NETMASK 网络掩码
IPADDR IP地址
GATEWAY 默认网关IP地址

(2)修改主机名称,对/etc/sysconfig/network文件进行修改,修改如下:(以下是master节点的配置信息,如slave1节点HOSTNAME=slave1.hadoop)

vim /etc/sysconfig/network
NETWORKING=YES
HOSTNAME=master.hadoop
NETWORKING 是否利用网络
GATEWAY 默认网关
IPGATEWAYDEV 默认网关的接口名
HOSTNAME 主机名
DOMAIN 域名

(3)配置hosts文件

   /etc/hosts这个文件是用来配置主机的DNS服务信息,是记载主机和ip对应关系,配置好后可以用ip地址或者主机名称访问相应的主机。配置信息如下:

vim /etc/hosts

10.128.0.130 master.hadoop
10.128.0.131 slave1.hadoop
10.128.0.132 slave2.hadoop
10.128.0.133 slave3.hadoop
10.128.0.134 slave4.hadoop

二、SSH免密钥登录配置(重点)

        大数据集群中的Linux主机之间需要频繁的通信,但是Linux在互相通信中需要进行用户身份认证们也就是输入密码。在集群不大的情况下,每次登录少量计算机进行输入密码认证,所需要的操作时间尚且不多。但是,如果集群是几十台、上百台,频繁的认证就会大大降低工作效率,因此,实际生产中的集群都需要进行面密钥登录配置。默认状态下,SSH连接是需要密码认证的,但是可以通过修改系统认证,使系统通信免除密码输入和SSH认证。

2.1Master节点的配置

    首先,我们在终端生成密钥,命令是“ssh-keygen -t rsa”

[hadoop@master~]# ssh-keygen -t rsa

    ssh-keygen是用来生成private和public密钥对的命令,将public密钥拷贝到远程主机后,就可以使用ssh无密码登录到另一台主机,-t rsa 指定加密算法(RSA是一种典型的非对称加密算法)。 

   接下来需要将公钥复制到.ssh目录,复制的目的是为了方便修改该文件的权限

[hadoop@master .ssh]#cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[hadoop@master .ssh]#chmod 600 ~/.ssh/authorized_keys

    最后将authorized_keys文件复制到所有的Slave节点

[hadoop@master .ssh]#scp ~/.ssh/authorized_keys hadoop@slave1:~/
[hadoop@master .ssh]#scp ~/.ssh/authorized_keys hadoop@slave2:~/
[hadoop@master .ssh]#scp ~/.ssh/authorized_keys hadoop@slave3:~/
[hadoop@master .ssh]#scp ~/.ssh/authorized_keys hadoop@slave4:~/

2.2Slave节点的配置(所有Slave节点都要配置,且配置过程相同),以下以Slave1为例

  首先,我们还是在终端生成密钥,命令是“ssh-keygen -t rsa”

[hadoop@slave1~]# ssh-keygen -t rsa

  接下来需要将公钥复制到.ssh目录

[hadoop@slave1 .ssh]#cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[hadoop@slave1 .ssh]#chmod 600 ~/.ssh/authorized_keys

   至此,主机到子节点免登陆密钥配置完毕,可以使用ssh slave1验证一下,如果登录成功,并且无需输入登录密码,证明配置成功。

2.3Slave节点到Master免密钥登录

    slave节点到master节点免密钥登录的原理一样,只不过过程是相反的,就是把slave节点到公钥追加到master的".ssh"文件夹下的"authorized_keys"中

    我们以slave1为例,对master进行面密钥登录

(1)slave1节点配置

[hadoop@slave1 .ssh]# ssh-keygen -t rsa
[hadoop@slave1 .ssh]# scp ~/.ssh/authorized_keys hadoop@master:~/

(2)master节点配置

[hadoop@master~]# cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
[hadoop@master~]# rm ~/id_rsa.pub

    至此slave1节点到master节点的面密钥登录配置完成,最后,测试一下ssh master,如果登录成功,并且无需输入登录密码,证明配置成功。

三、JAVA环境安装

3.1安装JDK(每个节点都要安装)

    由于Hadoop平台是基于Java环境的,因此,我们必须在Linux主机上安装JDK。

    打开终端,切换成root用户(注意,安装JDK必须使用root用户权限)。在usr目录下创建java子目录,然后将jdk压缩包放到该文件夹下,进行解压

[root@master~]# mkdir /usr/java
[root@master~]# tar -zxvf jdk-8u172-linux-x64.tar.gz

3.2配置环境变量

    编辑“/etc/profile”文件,在文件中添加如下内容:

export JAVA_HOME=/usr/java/jdk1.8.0_60
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
    修改完成后保存并退出,执行 source /etc/profile 命令使其配置立即生效。(注意:profile文件谨慎修改,修改错误将导致部分命令不能使用,解决方案见后续博客)

3.3验证

    输入 java -version命令,如下图所示:


图3.1jdk安装环境测试

四、Hadoop集群安装

4.1解压Hadoop安装包

[hadoop@master~]#tar -zxf hadoop/hadoop-2.7.1.tar.gz -C ~/local/opt

4.2设置环境变量

[hadoop@master~]#vim /etc/profile
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH :$HADOOP_HOME/bin
[hadoop@master~]#source /etc/profile

4.3配置hadoop环境变量

(1)配置hadoop-env.sh文件

[hadoop@master~]#vim /usr/cx/hadoop-2.7.1/etc/hadoop/hadoop-env.sh

    在文件的末尾加入下列内容:

export  JAVA_HOME=/usr/cx/jdk1.8.0_60
    编辑完毕,保存并退出。

(2)配置核心组件文件

    Hadoop的核心组件文件是core-site.xml,配置信息如下:

<configuration>
/*这里的值指的是默认的HDFS路径*/
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://10.128.0.130:9000</value>
</property>
/*缓冲区大小:io.file.buffer.size默认是4KB*/
<property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
</property>
/*临时文件夹路径*/
<property>
    <name>hadoop.tmp.dir</name>
    <value>file:/data1/hadooptmp</value>
    <description>Abase for other temporary directories. </description>
</property>
</configuration>

(3)配置文件系统

    Hadoop的文件系统配置文件是hdfs-site.xml,配置信息如下:

<configuration>
/*配置主节点名和端口号*/
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>10.128.0.130:9001</value>
</property>
/*配置从节点名和端口号*/
<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/data1/hdfs/namenode</value>
</property>
/*配置datanode的数据存储目录*/
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/data1/hdfs/datanode</value>
</property>
/*配置副本数*/
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>
</configuration>
    这里的dfs.replication是HDFS数据块的副本数,系统默认值是3,超过3的数是没有意义的,因为HDFS的最大副本数就是3.

(4)配置MapReduce计算框架文件

    在hadoop-2.7.1/etc/hadoop子目录下,系统已经有了一个mapred-site.xml.template文件,我们需要将其复制并改名,命令是“cp ~/hadoop-2.7.1/etc/hadoop/mapred-site.xml.template ~/hadoop-2.7.1/etc/hadoop/mapred-site.xml,文件修改内容如下所示:

<configuration>
/*hadoop对map-reduce运行框架一共提供了3种实现,在mapred-site.xml中通过"mapreduce.framework.name"这个属性来设置为"classic"、"yarn"或者"local"*/
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
<property>
    <name>mapred.job.tracker</name>
    <value>10.128.0.130:9002</value>
     <!-- Default Port: 9001. -->
</property>
</configuration>

(5)配置yarn-site.xml文件

    Yarn站点的配置文件为yarn-site.xml,修改内容如下:

<configuration>
<!-- Site specific YARN configuration properties -->
<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>
/*resourcemanager的地址*/
<property>
    <name>yarn.resourcemanager.address</name>
    <value>10.128.0.130:8032</value>
</property>
/*调度器的端口*/
<property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>10.128.0.130:8030</value>
</property>
<property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>10.128.0.130:8031</value>
</property>
<property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>10.128.0.130:8033</value>
<property>
<property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>10.128.0.130:8033</value>
<property>
</configuration>

(6)配置Master的slaves文件(只需配置master节点即可)

    slaves文件是Hadoop集群的Slave节点列表,集群启动的时候根据该列表启动集群中的节点。该文件中可以配置主机名也可以配置ip地址,配置信息如下:

slave1.hadoop
slave2.hadoop
slave3.hadoop
slave4.hadoop

(7)配置Master的masters文件

master.hadoop

    至此,master节点配置完毕,其余slave节点可以用scp命令将hadoop安装文件复制到各个主机,需要注意的是各个slave节点的profile文件要手动进行配置,配置信息参照master节点的profile文件。

五、Hadoop集群的启动

5.1格式化文件系统(只需在master节点执行一次)

    在master节点上使用如下命令格式化:

hadoop namenode -format
    如果没有出现错误信息,则说明格式化成功。如果格式化失败,需要重新格式化(注意:不可在格式化失败后继续执行格式化),详细操作见另一篇博客。

5.2启动和关闭Hadoop

    完成格式化后即可启动Hadoop了,可以使用sbin子目录下的start-all.sh命令启动Hadoop集群;

start-all.sh

    关闭Hadoop集群

stop-all.sh
    实际上,Hadoop系统建议放弃使用start-all.sh和stop-all.sh一类的命令,而改用start-dfs.sh和start-yarn.sh命令。

5.3验证Hadoop集群是否启动成功

    在终端执行jps命令查看Hadoop是否启动成功,在master节点,执行jps,如下如所示:


图5.1 master节点进程

    注:本人在集群中还安装有其它组件,所有除了hadoop进程还有其它进程。master节点的hadoop相关进程为:NameNode、SecondaryNameNode、ResourceManager和Jps。

    在slave1节点,执行jps,如下如所示:


图5.2 slave1节点进程

    注:slave1节点的hadoop相关进程为:NodeManager、DataNode、Jps。

    我们可以通过Web界面监视系统状况,在浏览器中输入 http://10.128.0.130:50070,如下图所示:


图5.3 利用Web方式检测Hadoop运行状态

六、在Hadoop集群中运行程序

     下面我们使用Hadoop自带的MapReduce程序,验证分布式计算是否可用。

    (1)我们在本地创建"wordtest.txt"文本文件,然后提交到hdfs系统中,命令如下(HDFS基本命令见另一篇博客):

hadoop fs -put /root/wordtest.txt /user/root/input/wordtest.txt

    wordtest.text文件内容如下:

good better best never it rest till good is better and better is best 

    (2)运行,命令如下:

hadoop jar /usr/cx/hadoop-2.7.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /user/root/input/wordtest.txt /user/root/output3


图6.1 运行hadoop-mapreduce-examples-2.7.1.jar程序

    注:

            wordcount:程序的类名;

            /user/root/input/wordtest.txt:文件输入路径;

            /user/root/output3:文件输出路径,该目录不可提前创建,否则会出现错误。

    使用“hadoop fs -ls /user/root/output3”查看输出文件:


图6.2 输出文件

    使用“hadoop fs -cat /user/root/output3/part-r-00000”查看结果,如下图所示:


图6.3 结果

猜你喜欢

转载自blog.csdn.net/u011380972/article/details/80720976