zoukankan      html  css  js  c++  java
  • hadoop集群搭建

    一、发行版本

    ​ Hadoop发行版本分为开源社区版商业版,社区版是指由Apache软件基金会维护的版本,是官方维护的版本体系。商业版Hadoop是指由第三方商业公司在社区版Hadoop基础上进行了一些修改、整合以及各个服务组件兼容性测试而发行的版本,比较著名的有cloudera的CDH、mapR等。

    ​ 我们学习的是社区版:ApacheHadoop。后续如未说明都是指Apache版本。

    ​ Hadoop的版本很特殊,是由多条分支并行的发展着。大的来看分为3个大的系列版本:1.x、2.x、3.x。

    ​ Hadoop1.0由一个分布式文件系统HDFS和一个离线计算框架MapReduce组成。

    ​ Hadoop 2.0则包含一个支持NameNode横向扩展的HDFS,一个资源管理系统YARN和一个运行在YARN上的离线计算框架MapReduce。相比于Hadoop1.0,Hadoop 2.0功能更加强大,且具有更好的扩展性、性能,并支持多种计算框架。

    ​ Hadoop 3.0相比之前的Hadoop 2.0有一系列的功能增强。但目前还是个alpha版本,有很多bug,且不能保证API的稳定和质量。

    二、集群简介

    ​ HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起。

    ​ HDFS集群负责海量数据的存储,集群中的角色主要有:

    ​ NameNode、DataNode、SecondaryNameNode

    ​ YARN集群负责海量数据运算时的资源调度,集群中的角色主要有:

    ​ ResourceManager、NodeManager

    ​ 那mapreduce是什么呢?它其实是一个分布式运算编程框架,是应用程序开发包,由用户按照编程规范进行程序开发,后打包运行在HDFS集群上,并且受到YARN集群的资源调度管理。

    ​ Hadoop部署方式分三种,Standalone mode(独立模式)、Pseudo-Distributedmode(伪分布式模式)、Clustermode(群集模式),其中前两种都是在单机部署。

    ​ 独立模式又称为单机模式,仅1个机器运行1个java进程,主要用于调试。

    ​ 伪分布模式也是在1个机器上运行HDFS的NameNode和DataNode、YARN的 ResourceManger和NodeManager,但分别启动单独的java进程,主要用于调试。

    ​ 集群模式主要用于生产环境部署。会使用N台主机组成一个Hadoop集群。这种部署模式下,主节点和从节点会分开部署在不同的机器上。

    三、网络环境准备

    ​ 采用NAT方式联网

    ​ 可通过编辑ifcfg-eth*配置文件进行配置。

    ​ 注意BOOTPROTO、GATEWAY、NETMASK。

    四、服务器系统设置

    1. 同步时间

      手动同步集群时间

      date -s "2019-04-09 03:03:03"
      

      网络同步时间

      yum install ntpdate
      ntpdate cn.pool.ntp.org
      
    2. 设置主机名

      vim /etc/sysconfig/network
      NETWORKING=yes
      HOSTNAME=node-1
      
    3. 配置IP、主机名映射

      vim /etc/hosts
      192.168.150.102	node-1
      
    4. 配置ssh免密登陆

      生成ssh免密登陆

      ssh-keygen -t rsa (四个回车)
      

      执行完这个命令后,会生成id_rsa(私钥)、id_rsa.pub(公钥)

      将公钥拷贝到要免密登陆得目标机器上

      ssh-copy-id node-02
      
    5. 配置防火墙

      查看防火墙状态

      systemctl status firewalld
      

      关闭防火墙

      systemclt stop firewalld
      

      关闭防火墙开机启动

      systemctl disable firewalld
      

      查看selinux状态

      getenforce
      

      临时关闭selinux

      setenforce 0
      

      永久关闭selinux

      vim /etc/selinux/confing
      SELINUX=disabled
      

    五、JDK环境安装

    卸载系统自带得openjdk

    rpm -qa | grep java
    rpm -e --nodeps xxxxx
    

    上传jdk安装包

    jdk-8u65-linux-x64.tar.gz
    

    解压安装包

    tar -zxvf jdk-8u65-linux-x64.tar.gz -C /opt
    

    配置环境变量 /etc/profile

    export JAVA_HOME=/opt/jdk1.8.0_201
    export PATH=$PATH:$JAVA_HOME/bin
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    

    刷新配置

    source /etc/profile
    

    六、Hadoop安装包目录结构

    解压hadoop-2.7.4-with-centos-6.7.tar.gz,目录结构如下:

    bin:Hadoop最基本的管理脚本和使用脚本的目录,这些脚本是sbin目录下管理脚本的基础实现,用户可以直接使用这些脚本管理和使用Hadoop。

    etc:Hadoop配置文件所在的目录,包括core-site,xml、hdfs-site.xml、mapred-site.xml等从Hadoop1.0继承而来的配置文件和yarn-site.xml等Hadoop2.0新增的配置文件。

    include:对外提供的编程库头文件(具体动态库和静态库在lib目录中),这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce程序。

    lib:该目录包含了Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用。

    libexec:各个服务对用的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息。

    sbin:Hadoop管理脚本所在的目录,主要包含HDFS和YARN中各类服务的启动/关闭脚本。

    share:Hadoop各个模块编译后的jar包所在的目录。

    七、Hadoop配置文件修改

    ​ hadoop安装主要就是配置文件得修改,一般在主节点进行修改,完毕后scp下发给其他各个从节点机器。

    1. hadoop-env.sh

      ​ 文件中设置的是Hadoop运行时需要的环境变量。JAVA_HOME是必须设置的,即使我们当前的系统中设置了JAVA_HOME,它也是不认识的,因为Hadoop即使是在本机上执行,它也是把当前的执行环境当成远程服务器。

      vim hadoop-env.sh
      export JAVA_HOME=/opt/jdk1.8.0_201
      
    2. core-site.xml

      hadoop得核心配置文件,有默认得配置项core-default.xml

      core-default.xml与core-site.xml的功能是一样的,如果在core-site.xml里没有配置的属性,则会自动会获取core-default.xml里的相同属性的值。

      <!-- 用于设置Hadoop的文件系统,由URI指定 -->
      <property>
          <name>fs.defaultFS</name>
          <value>hdfs://node-1:9000</value>
      </property>
      <!-- 配置Hadoop的临时目录,默认/tmp/hadoop-${user.name} -->
      <property>
          <name>hadoop.tmp.dir</name>
          <value>/export/data/hadoop/tmp</value>
      </property>
      
    3. hdfs-site.xml

      HDFS的核心配置文件,有默认的配置项hdfs-default.xml。

      hdfs-default.xml与hdfs-site.xml的功能是一样的,如果在hdfs-site.xml里没有配置的属性,则会自动会获取hdfs-default.xml里的相同属性的值。

      <property> 
          <name>dfs.namenode.name.dir</name> 
          <value>/export/data/hadoop/name</value> 
          <description>为了保证元数据的安全一般配置多个不同目录</description> 
      </property> 
      <property> 
          <name>dfs.datanode.data.dir</name> 
          <value>/export/data/hadoop/data</value> 
          <description>datanode 的数据存储目录</description> 
      </property>
      <!-- 指定HDFS副本的数量 -->
      <property>
          <name>dfs.replication</name>
          <value>2</value>
      </property>
      <!-- secondary namenode 所在主机的ip和端口->
      <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>192.168.150.101:50090</value>
      </property>
      
    4. mapred-site.xml

      MapReduce的核心配置文件,有默认的配置项mapred-default.xml。

      mapred-default.xml与mapred-site.xml的功能是一样的,如果在mapred-site.xml里没有配置的属性,则会自动会获取mapred-default.xml里的相同属性的值。

      <!-- 指定mr运行时框架,这里指定在yarn上,默认是local -->
      <property>
          <name>mapreduce.framework.name</name>
          <value>yarn</value>
      </property>
      
    5. yarn-site.xml

      YARN的核心配置文件,有默认的配置项yarn-default.xml。

      yarn-default.xml与yarn-site.xml的功能是一样的,如果在yarn-site.xml里没有配置的属性,则会自动会获取yarn-default.xml里的相同属性的值。

      <!-- 指定YARN的老大(ResourceManager)的地址 -->
      <property>
      	<name>yarn.resourcemanager.hostname</name>
      	<value>node-1</value>
      </property>
      <!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序默认值:"" -->
      <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
      </property>
      
    6. slaves

      slaves文件里面记录的是集群主机名。一般有以下两种作用:

      一是:配合一键启动脚本如start-dfs.sh、stop-yarn.sh用来进行集群启动。这时候slaves文件里面的主机标记的就是从节点角色所在的机器。

      二是:可以配合hdfs-site.xml里面dfs.hosts属性形成一种白名单机制。

      dfs.hosts指定一个文件,其中包含允许连接到NameNode的主机列表。必须指定文件的完整路径名。如果值为空,则允许所有主机。例如:

      <property>
          <name> dfs.hosts </name>
          <value>/export/server/hadoop/etc/hadoop/slaves </value>
      </property>
      

      那么所有在slaves中的主机才可以加入集群中。

  • 相关阅读:
    为经典版eclipse增加web and JavaEE插件
    类型之间进行隐式和显示转换&创建使用枚举&创建使用结构类型&创建使用数组&;如何处理字符串值
    VS2013秘钥
    VS2013快捷键大全
    2016年4月20日开会学习
    随机验证码.ashx
    关于代码开发的一些心得
    C#list泛型的定义,作用,用法
    String,StringBuffer与StringBuilder的区别??
    C# DataTable的详细用法
  • 原文地址:https://www.cnblogs.com/colden/p/10705312.html
Copyright © 2011-2022 走看看