Hadoop集群配置

Hadoop集群配置


内容

实验环境及软件:

  • VMware Workstation15
  • CentOS 7.0或8.0
  • Hadoop-2.7.3
  • JDK

步骤:

  • 启动至少两台虚拟客户机
    自己安装俩或以上CentOS虚拟机,HadoopMaster和HadoopSlave

    注意,所有虚拟机创建的用户名应该相同,Hadoop通过主机名分辨不同的结点,不同结点主机名应该不同,但用户名建议相同(可以减少需要修改的配置),如果不做配置,Hadoop文件系统会默认读取操作系统的用户作为Hadoop的用户名

  • Linux系统配置

  • Hadoop配置部署

  • 启动Hadoop集群


Linux系统配置

  1. 下载拷贝软件包和数据包
    可以通过U盘、vmtools、共享文件夹、直接在虚拟机内下载等方式获取,需要注意的是,之后的静态IP配置可能导致暂时通不了外网等情况,建议优先下载到Master服务器。

    Hadoop的版本建议使用2.6.0左右,如果需要使用java插件跑MapReduce,慎重选择高版本Hadoop,Hadoop的eclipse插件在2014年已经停止更新,最后版本为2.6.0。对于新版本的Hadoop而言,插件所需要jar依赖包在版本和数量上已经发生了一些变化,即使可以通过修改插件源文件配置进行适配,也很可能在使用过程中产生问题。当然,也可以采用idea上的HadoopIntellijPlugin(适配3.2.1版本,没用过):

    https://github.com/fangyuzhong2016/HadoopIntellijPlugin

    原Hadoop的eclipse插件:

    https://github.com/winghc/hadoop2x-eclipse-plugin

  2. 配置自动时钟同步

    这一步是为了能集群内所有服务器都用同一个时间,防止相互之间的日志出错。

    自动时钟同步通过'crontab命令+ntpdate'或chrony实现。

    crontab是用来定期执行程序的命令,当安装完成操作系统之后,默认便会启动此任务调度命令。而crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
    参考:https://www.runoob.com/linux/linux-comm-crontab.html

    NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。
    从CentOS7.2开始,CentOS支持chrony(网络时间协议(NTP)的通用实现),而从CentOS8开始,不再支持ntp,只能使用chrony。
    安装过程可参考:

    https://blog.csdn.net/weixin_42758707/article/details/94738761
    https://www.cnblogs.com/liushui-sky/p/9203657.html
    https://www.cnblogs.com/jhxxb/p/11526098.html
    https://blog.csdn.net/gaofei0428/article/details/103644371

    通过这些网站可知,crontab+ntpdate会定时即刻同步时间,会产生时间上的跳跃,在有其他定时程序的情况下可能会出错。

    chrony的使用方法:

    首先修改时间源服务器:

    打开chrony配置文件

    vim /etc/chrony.conf
    

    将第三行的地址改为:

    server us.pool.ntp.org iburst
    

    打开并开机自动启动chrony守护服务

    systemctl start chronyd.service
    systemctl enable chronyd.service
    
  3. 配置节点主机名和网络

    这一步是为了能识别集群中的各个节点,将不同的节点用不同的主机名标识,如:namenode用master,而datanode用slave1、slave2、slave3等等

    1. 配置各节点主机名

      CentOS6下:

      vim /etc/sysconfig/network
      

      内容修改:

      NETWORKING=yes
      HOSTNAME=相应主机名
      

      CentOS7、8下:

      vim /etc/hostname
      

      直接修改主机名,所有的节点主机名应不同,可以为:master、slave1、slave2、slave3等等。

    2. 配置网络环境

      这一步是为了让集群内节点相互正常访问,分为配置静态IP和关闭防火墙。

      由于我们是通过主机名来标识,如果采用DHCP,可能会有节点的IP变化,导致与所设置的主机名对应IP不一致,无法正常使用,所以要配置静态IP,具体方法建议百度。

      另外是关闭防火墙(简单粗暴):

      systemctl stop firewalld.service
      systemctl disable firewalld.service
      systemctl status firewalld.service
      

      依次为停止、禁止启动、查看防火墙状态。

      配置hosts列表:

      vim /etc/hosts
      

      将其中添加 ip 主机名对:

      节点ip ip对应的主机名
      

      之后可以ping相应主机名进行测试。

    3. 安装JDK

      Hadoop是基于java的,JDK自然不必多说,之后使用MapReduce编程也需要用到。

      将JDK解压并放在/usr/java目录下:

      mkdir /usr/java
      mv jdkgz压缩文件 /usr/java/
      cd /usr/java
      tar –xvf /usr/java/jdkgz压缩文件
      

      配置java用户下的环境变量

      vim /home/用户名/.bash_profile
      

      添加以下内容:

      export JAVA_HOME=/usr/java/jdk文件夹名/
      export PATH=$JAVA_HOME/bin:$PATH
      

      通过:

      source .bash_profile
      

      终端内生效,或者重启虚拟机永久生效

      然后可以通过java版本命令查看是否安装成功:

      java -version
      
    4. 免密钥登录设置

      Hadoop集群相互访问时要通过ssh远程登录到其他节点,为了避免每次访问都需要输入密码,我们需要设置免密登录。

      在Master节点的用户主目录下,用以下命令生成ssh下的rsa密钥

      ssh-keygen -t rsa
      

      会生成一个.ssh的隐藏文件夹,里面有一个rsa密钥文件和一个rsa.pub的公钥文件:

      cd .ssh
      ls -l
      

      将公钥文件复制为另一个suthorized_keys用于免密钥登录的身份认证文件,修改其权限为仅创建者读写

      cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
      chmod 600 authorized_keys
      

      然后将免密文件发送到各slave节点上

      scp authorized_keys 用户名@相应节点名:~/
      

      同样地,在各slave节点用户主目录生成密钥文件,并将从master节点得到的authorized_keys文件移动到.ssh目录:

      ssh-keygen -t rsa
      mv authorized_keys ~/.ssh/
      

      通过ssh远程连接验证免密登录:

      ssh 节点主机名
      

至此,Hadoop需要的Linux环境基本搭建完成。


Hadoop配置部署及启用

  1. 文件拷贝

    在自定义用户主目录下,解压hadoop压缩包:

    # 以下将压缩包移动到主目录
    # cp hadoop压缩包 ~/
    # cd ~
    tar -zxvf hadoop压缩包
    # 查看hadoop文件
    cd hadoop文件夹
    
  2. 属性配置

    • 配置JDK环境路径

      vim /home/用户名/hadoop-2.5.2/etc/hadoop/hadoop-env.sh
      

      去掉其中的JAVA_HOME的注释并修改路径为之前安装的JDK路径

      # The java implomentation to use .....
      export JAVA_HOME=/usr/java/jdk...
      
    • 配置核心组件core-site.xml

      vim /home/用户名/hadoop-2.5.2/etc/hadoop/core-site.xml
      
      <configuration>
      <property>
      <name>fs.default.name</name>  /*2.0后用fs.defaultFS代替*/  
      <value>hdfs://master:9000</value>
      </property>
      <property>
      <name>hadoop.tmp.dir</name>
      <value>/home/dhx/hadoopdata</value>
      </property>
      </configuration> 
      
      
      • hadoop分布式文件系统文件存放位置都是基于hadoop.tmp.dir目录的,namenode的名字空间存放地方就是{hadoop.tmp.dir}/dfs/name,datanode数据块的存放地方就是{hadoop.tmp.dir}/dfs/data,所以设置好hadoop.tmp.dir目录后,其他的重要目录都是在这个目录下面,这是一个根目录。

      • fs.default.name,设置namenode所在主机,端口号是9000

      • core-site.xml 对应有一个core-default.xml, hdfs-site.xml对应有一个hdfs-default.xml,mapred-site.xml对应有一个mapred-default.xml。这三个defalult文件里面都有一些默认配置,现在我们修改这三个site文件,目的就覆盖default里面的一些配置

    • 配置文件系统hdfs-site.xml

      vim /home/用户名/hadoop-版本号/etc/hadoop/hdfs-site.xml
      
      <configuration>
      <!-- appoint HDFS transcript counts -->
      <property>
      <name>dfs.replication</name>
      <value>3</value>
      </property>
      <!-- appoint blocksize -->
      <property>
      <name>dfs.block.size</name>
      <value>64M</value>
      </property>
      </configuration>
      

      dfs.replication,设置数据块的复制次数,默认是3,如果slave节点数少于3,则写成相应的1或者2

    • 配置计算框架mapred-site.xml

      vim /home/用户/hadoop-版本号/etc/hadoop/mapred-site.xml
      
      <configuration>
      <property>
      <name>mapred. job.tracker</name>
      //2.0  后   mapreduce.framework.name
      <value>master:9001</value>
      //2.0 后 yarn
      </property>
      </configuration>
      

      mapred.job.tracker,设置jobtracker所在机器,端口号9001,对于2.0以后的hadoop而言,多了一个yarn框架,因此要改成yarn

    • 配置yarn-site.xml

      vim /home/用户/hadoop-版本号/etc/hadoop/yarn-site.xml
      
      <property>             	
          <name>yarn.resourcemanager.hostname</name>
          <value>master</value>
      </property>
      <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
      </property>
      
    • 配置主节点masters(2.0后不需要设置):

      vim /home/用户/hadoop-版本号/etc/hadoop/masters
      

      添加master主机名

    • 配置从节点slaves(3.0改为workers):

      vim /home/用户/hadoop-版本号/etc/hadoop/slaves
      

      添加所有datanode的主机名(按行分割)

    • 将该hadoop文件复制到slave节点:

      scp -r hadoop-版本号 slave:~/
      
  3. 启动Hadoop文件系统

    • 格式化文件系统:
      由于尚未配置用户下的hadoop环境变量,需要手动在文件中启用脚本(或者在配置完环境变量后再格式化):

      cd /home/用户名/hadoop-版本号/bin/
      ./hdfs namenode -format
      

      在datanode中:

      cd /home/用户名/hadoop-版本号/bin/
      ./hdfs datanode -format
      
    • 配置Hadoop的用户环境变量,主目录下:

      vim .bash_profile
      
      export HADOOP_HOME=/home/用户名/hadoop-版本号
      export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
      

      环境生效:

      source .bash_profile
      

      启动hadoop:

      cd ~/hadoop-版本号
      bin/start-all.sh
      

      查看进程:

      jps
      
    • WebUI查看集群是否安装成功:

      在HadoopMaster上启动Fixefox浏览器,在浏览器地址栏中输入http://master:50070/,检查namenode和datanode是否正常。
      在HadoopMaster上启动Fixefox浏览器,在浏览器地址栏中输入http://master:50030/,检查JobTracker和TaskTracker是否正常,在hadoop3.0以后,一些默认端口已经改变,可以百度查询。

    • 运行PI实例检查集群是否成功

      cd /home/用户/hadoop-版本号
      hadoop jar ~/hadoop-版本号/share/hadoop/mapreduce/hadoop-mapreduce-examples-版本号.jar pi 10 10
      

      结果为一个不准确的圆周率数

posted @ 2020-12-14 21:04  醉笑天苍  阅读(136)  评论(0)    收藏  举报