颤抖吧Hadop 、干碎大数据之Hadoop完全分布式平台搭建

Hadoop完全分布式平台搭建

搭建步骤:

1. 静态IP的配置

2. jdk的安装、克隆虚拟机

3. 修改虚拟机的主机名,并添加映射

4. 配置SSH免密登录

5. 配置时间同步服务

6. Hadoop安装(master上操作)

7. Hadoop文件夹的分发

8. 集群启动

【讲在前面】

Hadoop完全分布式集群的搭建需要多台虚拟机,每台虚拟机单独安装配置比较麻烦,因此我们可以在VMware中创建一个虚拟机后完成公共的基础配置然后直接创建完整克隆,这样效率比较高。

Hadoop完全分布式集群的搭建是典型的主从架构,即一台master节点多台slave节点,这里我采用三台虚拟机,一台作为master节点,另外两台作为slave1节点和slave2节点。

所需安装包:jdk安装包、Hadoop安装包(资源里面有我用的版本)

如果没有特殊说明本操作都是在Xshell中完成的。

扫描二维码关注公众号,回复: 12943517 查看本文章

安装建议:我这里安装统一在根目录下创建一个export文件夹,然后在export文件夹中创建两个文件夹servers(安装软件的文件夹),softwares(存放安装包的目录) or 在/usr/local/下安装。

mkdir -p /export/servers
mkdir -p /export/softwares

1. 静态IP的配置

centos7安装完成后网卡默认是不启动的首先 ifconfigip a查看网卡名称。然后修改相关的配置文件。
vi /etc/sysconfig/network-scripts/ifcfg-ens33
将BOOTPROTO修改为static
BOOTPROTO=static
最后一行ONBOOT改为yes
ONBOOT=yes
添加如下内容:
IPADDR=填IP地址
NETMASK=子网掩码
GATEWAY=网关IP
DNS1=8.8.8.8
DNS2=8.8.4.4

如果能ping同外网说明静态IP配置成功

ping www.qq.com

2. jdk的安装

* 将jdk安装包上传至 softwares文件夹中,并解压缩至servers文件夹中。
	cd /export/softwares/
	rz
	选中jdk压缩包,上传至当前目录下
	mv jdk-8u161-linux-x64.tar.gz jdk
	tar -zxvf jdk -C ../servers/ 

如果<code>rz</code>命令报错,则执行如下安装后再执行
	
	yum -y install lrzsz
  • 配置jdk的环境变量

/etc/profile文件的末尾添加如下环境变量:

export JAVA_HOME=/export/servers/jdk
export PATH=$PAHT:$JAVA_HOME/bin

保存后退出。

  • 重新加载配置文件使刚才配置的环境变量生效。

      source /etc/profile
    
  • 查看是否配置成功:

输入java -version出现jdk的版本信息即为安装配置成功。


上面的静态IP配置和jdk的安装在每台机器上都需要配置,所以在一台机器上配置成功后直接克隆该虚拟机(注意要创建完整克隆),注意,克隆完成后IP地址三台都相同,需要你把克隆的两台虚拟机在配置文件中把IP修改一下,修改完成后,重启网络服务,看看相互间能不能ping同,如果能ping通则说明IP修改成功。
重启网路服务:
systemctl restart network

3. 修改虚拟机的主机名,并添加映射

* 修改 /etc/hostname文件,将默认的第一行删掉,然后改为 master,重启虚拟机,主机名修改生效。
同样的做法修改其他的两台虚拟机的主机名分别为: slave1slave2,并重启虚拟机。 * 编辑 /etc/hosts文件,追加如下内容(注意IP地址要改成自己的IP地址):
	192.168.200.200 master
	192.168.200.201 slave1
	192.168.200.202 slave2

在其他两台机器上也追加同样的内容。

验证是否更改成功就看相互间能不能ping通。例如在任意一台机器上执行如下命令:

ping master
ping slave1
ping slave2

4. 配置SSH免密登录

  • 检查SSH是否已经安装(centos7默认是安装了的)

      rpm -qa | grep ssh 
    

    出现如下结果即为已经安装:

      openssh-7.4p1-21.el7.x86_64
      libssh2-1.8.0-3.el7.x86_64
      openssh-clients-7.4p1-21.el7.x86_64
      openssh-server-7.4p1-21.el7.x86_64
    

    如果没有安装的话则需手动安装:

      yum -y install openssh-server
      yum -y install openssh-clients
    

    提示:如果没有安装openssh-clients的话,当执行ssh和scp命令的时候会报错,提示找不到该命令。

  • 测试SSH是否可用(该IP地址为要登录目标机器的IP地址:也就是子节点的IP地址)

      ssh 192.168.200.201
    

    按照提示输入目标机器的登录密码,登陆成功后说明ssh可用,然后执行如下命令返回最初的主机

      exit
    
  • 生成密钥

      ssk-keygen
    

    该过程需要反复确认,之间按回车就可以,注意:有时候需要回答yes或者no!!!

  • 在master节点上对所有节点进行免密登录操作,包括master节点:

      ssh-copy-id -i ~/.ssh/id_rsa.pub master
      ssh-copy-id -i ~/.ssh/id_rsa.pub slave1
      ssh-copy-id -i ~/.ssh/id_rsa.pub slave2
    

    由于master需要启动slave节点上的服务,所以需要master登录slave,因此把在master节点上执行上面的命令。

5. 配置时间同步服务

  1. 检查是否安装ntp服务

     rpm -qa | grep ntp
    

    没有安装的话安装ntp服务

     yum -y install ntp
    
  2. 设置master节点为NTP时间同步服务的主节点(即以master节点的时间为准)

    编辑/etc/ntp.conf文件,注释掉以server开头的行,并添加如下代码:

     restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
     server 127.127.1.0
     fudge 127.127.1.0 stratum 10
    
  3. 配置节点时间同步(从master节点上获取时间)

    在slave1、slave2节点中同样修改/etc/ntp.conf文件,注释掉以server开头的行,添加如下代码:

     server master
    

    设置子节点每10分钟和master(时间服务器)同步一次时间

     crontab -e
     编写定时任务:
     */10 * * * * /usr/sbin/ntpdate master
    
  4. 启动NTP服务

    1. 在master节点上启动ntp服务并加入开机自启

       service ntpd start & chkconfig ntpd on
      
    2. 在从节点上(slave1、slave2)上手动同步一次时间

       ntpdate master
      
    3. 在从节点上(slave1、slave2)上启动ntp服务并加入开机自启

       service ntpd start & chkconfig ntpd on
      
    4. 查看ntp服务器有无和上层ntp连通

       ntpstat
       这个命令可能会看到 unsynchronised 这是正常情况,因为配置完成后,需要等待一会儿才能和/etc/ntp.conf中配置的标准时间进行同步。
      
    5. 查看ntp服务器和上层ntp的状态

       ntpq -p
       
       参数说明:
       when: 	多少秒前进行过时间同步
       poll:	下次更新在多少秒后
       reach:	已经向上层ntp服务器要求更新的次数
       delay:	网络延迟
       offser:	时间补偿值
       jitter:	系统时间与BIOS时间差
      
  5. 测试是否配置成功

    在任意节点上修改时间:

     date -s "2011-11-11 11:11:11" 
    

    等待十分钟后查看时间是否同步(实验时可以把10分钟调整为1分钟,节省时间)

     date
    

扩展:如果需要和外网时间保持时钟同步的话就需要设置定时任务(其实虚拟机时间已经和网络上的时间同步了),我这里使用阿里云服务器的时间。----在master上操作

	启动定时任务:
	crontab -e

	添加如下代码:分别代表 分 时 日 月 周
	*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com

6. Hadoop安装(master上操作)

  1. 解压Hadoop安装包

     进入到softwares目录
     tar -zxvf hadoop-2.7.2.tar.gz -C ../servers/
     cd ../servers/
     mv hadoop-2.7.2.tar.gz hadoop
    
  2. 配置环境变量

    /etc/profile文件中添加如下内容:

     export HADOOP_HOME=/export/servers/hadoop
     export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    

    保存后记得source /etc/profile

  3. 修改配置文件

    所有的配置文件都在如下路径中:

     hadoop/etc/hadoop/
    

    slaves

    该配置文件保存slave节点的信息即节点的机器名称,删掉localhost修改为如下内容:

     slave1
     slave2
    

    core-site.xml

    Hadoop的核心配置文件

    在<configuration></configuration>之间添加如下内容:

     <property>
     	<name>fs.defaultFS</name>
     	<value>hdfs://master:9000</value>
     </property>
     <property>
     	<name>hadoop.tmp.dir</name>
     	<value>file:/export/servers/hadoop/tmp</value>
     </property>
    

    fs.defaultFS属性是指定默认文件系统,他的值为hdfs以及master节点端口。

    hadoop.tmp.dir属性是指定hdfs临时数据保存在哪个目录,默认值是Linux的tmp目录。

    hdfs-site.xml

    HDFS相关的配置文件

    在<configuration></configuration>之间添加如下内容:

     <property>
     	   <name>dfs.replication</name>
     	   <value>1</value>
     </property>
     <property>
     	  <name>dfs.namenode.name.dir</name>
     	  <value>file:/export/servers/hadoop/tmp/dfs/name</value>
     </property>
     <property>
    		 <name>dfs.datanode.data.dir</name>
    		 <value>file:/export/servers/hadoop/tmp/dfs/data</value>
     </property>
    

    dfs.replication属性表示数据块副本的数量,它的值默认为3,这里我们为了方便测试将它设置为1。

    dfs.namenode.name.dir属性表示NameNode的临时数据存放目录。

    dfs.namenode.data.dir属性表示DataNode的临时数据存放目录。

    mapred-site.xml

    MapReduce的相关配置

    对文件mapred-site.xml重命名,默认文件名为mapred-site.xml.template,并更改mapred-site.xml配置:

     mv mapred-site.xml.template mapred-site.xml
    

    在<configuration></configuration>之间添加如下内容:

     <property>
     	<name>mapreduce.framework.name</name>
     	<value>yarn</value>
     </property>
    

    mapreduce.framework.name属性表示MapReduce程序的运行框架,默认值为local,也就是本地运行,这里我们设置为yarn,让MapReduce程序运行在YARN框架上。

    yarn-site.xml

    YARN框架的配置

    在<configuration></configuration>之间添加如下内容:

     <property>
    		 <name>yarn.resourcemanager.hostname</name>
    		 <value>master</value>
     </property>
     <property>
         <name>yarn.nodemanager.aux-services</name>
         <value>mapreduce_shuffle</value>
     </property>
    

    yarn.resourcemanager.hostname属性指定ResourceManager运行在哪个节点上。

    yarn.nodemanager.aux-services属性指定YARN的默认混洗方式,设置为MapReduce的默认混洗算法。

    hadoop-env.sh

    Hadoop运行基本环境配置,自动化脚本启动的时候要用。

     export JAVA_HOME=/export/servers/jdk
    

    在文件的第25行位置,把前面的注释去掉,然后把后面的路径改为你JAVA_HOME的路径。

  4. 自此Hadoop就算配置完成了,这只是设置了正常启动所必须的设置项!!!

注:有关更多详细的配置信息,可以去Hadoop官网查看,打开后滑到页面的最下方,左下角Configuration下就有各个配置文件详细信息的链接。

7. Hadoop文件夹的分发

在master节点上配置好所有的配置文件后,将Hadoop文件夹分发给另外的两台子节点

scp -r /export/servers/hadoop slave1:/export/servers/
scp -r /export/servers/hadoop slave2:/export/servers/

8. 集群启动

启动集群前一定要关闭防火墙,注意,每台机器的防火墙都要关闭!!!

查看防火墙状态:
systemctl status firewalld

关闭防火墙:
systemctl stop firewalld

设置防火墙开机不启动(永久关闭防火墙,如果后面需要还可以手动打开):
systemctl disable firewalld

打开防火墙:
systemctl start firewalld
  • 第一次启动前要格式化NameNode(后面启动的时候就不需要格式化了)

      hdfs namenode -format
    

    如果忘记格式化启动后,需要关掉所有namenode和datanode进程,然后删掉data和log数据,然后重新格式化。

  • 集群启动方式分为两种,一种是手动启动,一种是自动化脚本启动

    1. 手动启动

       1. 启动HDFS :
       
       启动NameNode(master节点):
       hadoop-daemon.sh start namenode
      
       启动DataNode(在Slave节点):
       hadoop-daemon.sh start datanode
      
       启动SecondaryNameNode(在任意节点):
       hadoop-daemon.sh start secondarynamenode
      
      
       2. 启动YARN :
      
       启动ResourceManager(在Master节点):
       yarn-daemon.sh start resourcemanager
      
       启动NodeManager(在Slave节点):
       yarn-daemon.sh start nodemanager
      
       3. 启动历史任务服务:
      
       mr-jobhistory-daemon.sh start historyserver
      
    2. 自动化脚本启动(master节点上执行)

       1. 启动HDFS :
       
       start-dfs.sh
      
       2. 启动YARN :
      
       start-yarn.sh
      
       3. 启动历史任务服务:
      
       mr-jobhistory-daemon.sh start historyserver
      
      
       注:还有一个脚本是:start-all.sh,但是一般不建议使用,容易出错。
      
  • 查看进程

      jps
    

    在master上看到如下进程即为启动成功:

      [root@master ~]# jps
      2016 ResourceManager
      2353 Jps
      1636 NameNode
      1845 SecondaryNameNode
      2310 JobHistoryServer
      [root@master ~]# 
    

    在slave上看到如下进程即为启动成功:

      [root@slave1 ~]# jps
      1554 DataNode
      1830 Jps
      1671 NodeManager
      [root@slave1 ~]# 
    

    说明:

    NameNode、SecondaryNameNode是HDFS在master上的进程,DataNode是HDFS在slave上的进程,这三个进程存在,说明HDFS启动成功。

    ResourceManager是YARN在master上的进程,NodeManager是YARN在slave上的进程,这两个进程存在,说明YARN启动成功。

    JobHistoryServer是历史服务的进程。

  • 查看网页

    集群启动后可以在浏览器中输入IP地址加端口号,访问它的UI页面,查看集群的详细信息。

      查看HDFS集群详细信息:
      192.168.200.200:50070
    
      查看YARN集群详细信息:
      192.168.200.200:8088
    
      查看historyserver历史服务详细信息:
      192.168.200.200:19888
    
  • 关闭进程

    把开启服务命令中的start改为stop即可。

猜你喜欢

转载自blog.csdn.net/qq_45796486/article/details/115272321
今日推荐