• 1-部署Hadoop环境


    前期准备

    发行版本

    • Apache Hadoop(社区版Hadoop)

    • Cloudera Hadoop(商业版)

      • CDH是Cloudera的hadoop发行版,完全开源,比Apache hadoop在兼容性,安全性,稳定性上有增强。
      • Cloudera Manager是集群的软件分发及管理监控平台,可以在几个小时内部署 好一个Hadoop集群,并对集群的节点及服务进行实时监控。
      • Cloudera Support 即是对Hadoop的技术支持。
    • Hortonworks Hadoop(商业版)

      • Hortonworks Data Platform (HDP):100%开源的产品,包括稳定版本的Apache Hadoop的所有关键组件;安装方便,HDP包括一个现代化的,直观的用户界面的安装和配置工具。
    • MapR

      • mapR有免费和商业两个版本
    • fusionInsight hadoop (华为大数据平台hadoop)

      • 华为的hadoop版本基于自研的Hadoop HA平台,构建NameNode、JobTracker、HiveServer的HA功能,进程故障后系统自动Failover,无需人工干预,这个也是对hadoop的小修补,远不如mapR解决的彻底。
    • DKhadoop发行版

      • 有效的集成了整个HADOOP生态系统的全部组件,并深度优化,重新编译为一个完整的更高性能的大数据通用计算平台,实现了各部件的有机协调。因此DKH相比开源的大数据平台,在计算性能上有了高达5倍(最大)的性能提升。
      • DKhadoop将复杂的大数据集群配置简化至三种节点(主节点、管理节点、计算节点),极大的简化了集群的管理运维,增强了集群的高可用性、高可维护性、高稳定性。

    配置hosts文件

    cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
    192.168.10.190 pg1
    192.168.10.191 pg2
    192.168.10.192 pg3
    

    关闭防火墙

    systemctl status firewalld.service
    systemctl stop firewalld
    systemctl disable firewalld
    
    # 查看防火墙状态
    firewall-cmd --state
    

    创建用户

    groupadd -g 2000 hadoop
    useradd -u 2000 -g 2000 -c "Hadoop Cluster" hadoop
    
    echo "hadoop"|passwd hadoop --stdin
    

    配置sudo权限

    
    

    依赖软件

    安装配置JDK环境

    https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html#license-lightbox
    
    https://download.oracle.com/otn/java/jdk/8u202-b08/1961070e4c9b4e26a04e7f5a083f551e/jdk-8u202-linux-x64.tar.gz?AuthParam=1599271400_d95815df490009af8aebe19f5620bfc2
    
    wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn/java/jdk/8u202-b08/1961070e4c9b4e26a04e7f5a083f551e/jdk-8u202-linux-x64.tar.gz
    
    
    JAVA_HOME='/ups/app/jdk1.8.0'
    tar -xf jdk-8u202-linux-x64.tar.gz --no-same-owner 
    mv jdk1.8.0_202 ${JAVA_HOME}
    
    cat > /etc/profile.d/jdk.sh <<-EOF
    export JAVA_HOME=${JAVA_HOME}
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:${PATH}
    EOF
    
    • ssh(便于Hadoop 脚本管理远端Hadoop守护进程)

    软件下载地址

    http://archive.apache.org/dist/hadoop/
    http://archive.apache.org/dist/hadoop/core/hadoop-3.3.0/hadoop-3.3.0.tar.gz
    
    
    wget https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-2.10.0/hadoop-2.10.0.tar.gz
    
    wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
    
    

    CDH软件下载地址

    # Parcel:
    https://archive.cloudera.com/cdh6/6.3.2/parcels/
    wget https://archive.cloudera.com/cdh6/6.3.2/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
    wget https://archive.cloudera.com/cdh6/6.3.2/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha256
    wget https://archive.cloudera.com/cdh6/6.3.2/parcels/manifest.json
    
    https://archive.cloudera.com/cdh5/parcels/latest/CDH-5.16.2-1.cdh5.16.2.p0.8-el7.parcel
    https://archive.cloudera.com/cdh5/parcels/latest/CDH-5.16.2-1.cdh5.16.2.p0.8-el7.parcel.sha1
    https://archive.cloudera.com/cdh5/parcels/latest/manifest.json
    
    https://archive.cloudera.com/cdh5/repo-as-tarball/5.16.2/cdh5.16.2-centos7.tar.gz
    https://archive.cloudera.com/cdh5/repo-as-tarball/5.16.2/cdh5.16.2-centos7.tar.gz.sha1
    
    # CM:
    wget http://archive.cloudera.com/cm5/installer/5.16.2/cloudera-manager-installer.bin
    
    $ wget https://archive.cloudera.com/cm6/6.3.0/cloudera-manager-installer.bin
    $ chmod u+x cloudera-manager-installer.bin
    $ sudo ./cloudera-manager-installer.bin
    

    配置SSH互信(分布式模式)

    su - hadoop
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    
    # 验证
    ssh pg1 date; ssh pg2 date; ssh pg3 date
    

    时间同步(分布式模式)

    运行方式

    区分依据是NameNode, DataNode, ResourceManager, NodeManager等模块运行在几个JVM进程、几个机器

    • 单机模式
    • 伪分布式模式
    • 完全分布式模式
    模式名称 各模块占用JVM进程数 各模块运行在几个机器上
    本地模式 1 1
    伪分布式 N 1
    完全分布式 N N
    HA完全分布式 N N

    Hadoop安装配置

    解压软件

    su - hadoop
    cd /ups/soft
    tar -xf hadoop-2.10.0.tar.gz -C /ups/app/hadoop --no-same-owner
    
    # chown -R hadoop:hadoop hadoop-2.10.0
    

    配置Hadoop环境

    cat >/etc/profile.d/hadoop.sh <<-EOF
    export HADOOP_HOME=/ups/app/hadoop/hadoop-2.10.0
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
    EOF
    

    单机模式

    所有模块都运行在一个JVM进程中,使用本地文件系统而不是HDFS。

    配置

    官方Grep案例
    # 1. 创建目录
    cd $HDOOP_HOME
    mkdir input
    
    # 2. 
    cp etc/hadoop/*.xml input
    
    # 3. 运行hadoop服务
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.0.jar grep input output 'dfs[a-z.]+'
    
    # 4. 查看结果
    cat output/*
    
    官方WordCount案例
    # 1. 创建wcinput目录
    cd $HDOOP_HOME
    mkdir wcinput
    
    # 2. 编辑MapReduce输入文件wc.input
    cat > wcinput/wc.input <<-EOF
    hadoop yarn
    hadoop mapreduce
    hadooper
    hadooper
    EOF
    
    # 3. 执行程序
    cd $HDOOP_HOME
    bin/hadoop jar  share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.0.jar wordcount wcinput wcoutput
    
    # 查看结果
    cat wcoutput/part*
    

    伪分布式模式(用于学习环境)

    创建HDFS目录

    mkdir -p $HDOOP_HOME/dfs/{name,date,tmp}
    

    配置文件

    配置core-site.xml文件

    vi $HDOOP_HOME/etc/hadoop/core-site.xml

    <!-- 指定HDFS中NameNode 的地址 -->
    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:9000</value>
        </property>
    
    <!-- 指定HDFS运行时产生文件的存储目录 -->
        <property>
            <name>hadoop.tmp.dir</name>
            <value>$HDOOP_HOME/dfs/tmp</value>
        </property>
    </configuration>
    
    配置hdfs-site.xml文件

    vi $HDOOP_HOME/etc/hadoop/hdfs-site.xml

    <configuration>
        <!-- 指定HDFS 副本数量 -->
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
    </configuration>
    

    伪分布环境只有1个节点,因此,这里设置副本数量为1

    格式化HDFS和启动HDFS
    格式化NameNode(首次运行)
    bin/hdfs namenode -format
    
    # 查看NameNode格式化后的目录
    ls -l ${HADOOP_HOME}/dfs/tmp
    
    启动NameNode
    ${HADOOP_HOME}/sbin/hadoop-daemon.sh start namenode
    
    启动DataNode
    ${HADOOP_HOME}/sbin/hadoop-daemon.sh start datanode
    
    启动secondaryNameNode
    ${HADOOP_HOME}/sbin/hadoop-daemon.sh start secondarynamenode
    
    查看集群状态
    jps命令查看
    jps
    
    web中查看
    http://localhost:50070/
    
    HDFS上测试创建目录、上传、下载文件
    创建dfs路径
    ${HADOOP_HOME}/bin/hdfs dfs -mkdir /demo1 
    ${HADOOP_HOME}/bin/hdfs dfs -mkdir -p /demo1/<username>
    
    上传本地文件到HDFS
    ${HADOOP_HOME}/bin/hdfs dfs -put ${HADOOP_HOME}/etc/hadoop/core-site.xml /demo1
    
    读取HDFS上的文件内容
    ${HADOOP_HOME}/bin/hdfs dfs -cat /demo1/core-site.xml
    
    从HDFS下载文件到本地
    cd /tmp
    ${HADOOP_HOME}/bin/hdfs dfs -get /demo1/core-site.xml
    

    配置和启动YARN

    配置文件mapred-site.xml

    指定mapreduce运行在yarn框架上

    cp ${HADOOP_HOME}/etc/hadoop/mapred-site.xml.template ${HADOOP_HOME}/etc/hadoop/mapred-site.xml
    

    vi ${HADOOP_HOME}/etc/hadoop/mapred-site.xml

    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>
    
    配置文件yarn-site.xml

    etc/hadoop/yarn-site.xml

    <configuration>
        <property>
            <!-- 配置yarn的默认混洗方式 -->
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
    </configuration>
    
    启动服务
    # 资源管理器(ResourceManager)
    ${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager
    # 启动nodemanager
    ${HADOOP_HOME}/sbin/yarn-daemon.sh start nodemanager
    
    查看服务状态
    jps
    # yarn的web的端口号为8088
    http://localhost:8088/
    

    运行MapReduce Job

    # 创建测试Input文件,创建输入目录
    ${HADOOP_HOME}/bin/hdfs dfs -mkdir -p wcinput/input
    
    # 将wc.input文件上传到HDFS的wcinput/input目录中
    ${HADOOP_HOME}/bin/hdfs dfs -put ${HADOOP_HOME}/wcinput/wc.input wcinput/input
    
    # 运行mapreduce job
    ${HADOOP_HOME}/bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.0.jar wordcount wcinput/input wcinput/output
    
    
    # 查看输出目录
    ${HADOOP_HOME}/bin/hdfs dfs -ls wcinput/output
    
    # 查看结果文件内容
    ${HADOOP_HOME}/bin/hdfs dfs -cat wcinput/output/part-r-00000
    
    • 运行mapreduce时,可以没有reduce阶段,但肯定有map阶段

    • output目录有2个文件

      • _SUCCESS文件是空文件,表明job执行成功
      • part-r-00000文件是结果文件
        • -r-: 说明是reduce阶段产生的结果
        • -m-: 说明是map阶段产生的结果

    image-20200906124607901

    停止Hadoop服务

    ${HADOOP_HOME}/sbin/hadoop-daemon.sh stop namenode
    ${HADOOP_HOME}/sbin/hadoop-daemon.sh stop datanode
    ${HADOOP_HOME}/sbin/hadoop-daemon.sh stop secondarynamenode
    ${HADOOP_HOME}/sbin/yarn-daemon.sh stop resourcemanager
    ${HADOOP_HOME}/sbin/yarn-daemon.sh stop nodemanager
    

    开启历史服务

    sbin/mr-jobhistory-daemon.sh start historyserver
    
    # 查看
    http://192.168.10.190:19888
    

    开启日志聚集

    日志聚集

    MapReduce在各个机器上运行,运行过程产生的日志存在与各自的机器上,为了能够统一查看各个机器上的运行日志,将日志集中存放在HDFS上,这个过程称为日志聚集。

    开启日志聚集

    vi yarn-site.xml

        <property>
            <!-- 是否启用日志聚集 -->
            <name>yarn.log-aggregation-enable</name>
            <value>true</value>
        </property>
        <property>
            <!-- 设置日志保留时间,单位:秒 -->
            <name>yarn.log-aggregation.retain-seconds</name>
            <value>106800</value>
        </property>
    

    完全分布式模式(生产环境)

    ​ 集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves

    Hadoop配置

    先在一台机器上配置后再分发到其它机器

    规划结构
    模块主机名 pg1(192.168.10.190) pg2(192.168.10.191) pg3(192.168.10.192)
    HDFS datanode datanode datanode
    HDFS namenode secondaryNameNode
    YARN nodemanager nodemanger nodemanger
    YARN resourcemanager
    histroy HistroryServer
    解压文件
    su - hadoop
    cd /ups/soft
    tar -xf hadoop-2.10.0.tar.gz -C /ups/app/hadoop --no-same-owner
    
    配置HDFS存储目录
    cd /ups/app/hadoop
    # 分别存储 namenode文件|数据|临时文件
    mkdir -p data/{name,tmp}
    
    修改配置文件

    配置文件目录:${HADOOP_HOME}/etc/hadoop

    core-site.xml
    vi ${HADOOP_HOME}/etc/hadoop/core-site.xml
    <configuration> 
      <property> 
        <name>fs.defaultFS</name>  
        <value>hdfs://hadoop01:9000</value> 
      </property>  
      <!-- 指定hadoop运行时产生临时文件的存储目录 -->  
      <property> 
        <name>hadoop.tmp.dir</name>  
        <value>/ups/app/hadoop/data/tmp</value> 
      </property>  
    </configuration>
    
    hdfs-site.xml

    指定namenode和datanode存放数据的位置

    <configuration>
        <!--
            这两个配置用于指定namenode和datanode存放数据的位置
            如果不指定,数据会存放到core-site.xml中配hadoop.tmp.dir目录下
        -->
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>/ups/app/hadoop/data/name</value>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>/ups/app/hadoop/data</value>
        </property>
        <!--配置数据副本数,不要超过datanode节点数-->
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
        <!--指定secondarynamenode所在节点-->
        <property>
            <name>dfs.secondary.http.address</name>
            <value>pg3:50090</value>
        </property>
    </configuration>
    
    mapred-site.xml
    cp mapred-site.xml.template mapred-site.xml
    vi  mapred-site.xml
    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>
    
    修改slaves

    指定HDFS上datanode节点

    cat > slaves <<-EOF
    pg1
    pg2
    pg3
    EOF
    
    修改yarn-site.xml
    <configuration>
     <!-- reducer获取数据的方式 -->
     <property>
       <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
     </property>
     <property>
       <name>yarn.resourcemanager.hostname</name>
       <value>hadoop02</value>
     </property>
    </configuration>
    
    分发hadoop到节点
    su - hadoop
    cd /ups/app/hadoop
    scp -r hadoop-2.10.0 pg2:$(pwd)
    scp -r hadoop-2.10.0 pg3:$(pwd)
    
    格式化hdfs

    只有首次部署执行【谨慎操作】

    在namenode机器(即pg1)上,进行格式化,并启动

    # 格式化
    hdfs namenode -format
    
    启动集群
    # 在namenode主节点(pg1)上启动hdfs系统
    start-dfs.sh
    # resourcemanager所在节点(pg2)上启动yarn
    start-yarn.sh
    
    
    # 在pg2上启动resourcemanager
    yarn-daemon.sh start resourcemanager
    
    # 启动
    hadoop-daemon.sh start namenode
    
    # 启动所有datanode
    hadoop-daemons.sh start datanode
    
    # 在pg3上启动secondarynamenode
    hadoop-daemon.sh start secondarynamenode
    
    查看web页面
    # HDFS
    http://192.168.10.190:50070
    
    # yarn
    http://192.168.10.191:8088/cluster
    

    image-20200906122811944

    重装Hadoop集群步骤

    • 删除每个机器中的hadoop日志
      • 日志默认在HADOOP_HOME/logs
    • 删除原来的namenode和datanode产生的数据和文件
      • 删除配置的hadoop.tmp.dir|dfs.datanode.data.dir|dfs.datanode.name.dir
    • 重新修改hadoop配置文件

    Hadoop HA模式

    规划结构
    模块主机名 pg1(192.168.10.190) pg2(192.168.10.191) pg3(192.168.10.192)
    HDFS datanode datanode
    HDFS namenode namenode
    YARN nodemanger nodemanger
    YARN resourcemanager resourcemanager
    histroy HistroryServer
    ZKFC ZKFC
    journalnode journalnode journalnode
    zookeeper zookeeper zookeeper
    配置zookeeper
    su - hadoop
    tar -xf apache-zookeeper-3.6.0-bin.tar.gz -C /ups/app/ --no-same-owner
    mv apache-zookeeper-3.6.0-bin zookeeper
    mkdir -p /ups/app/zookeeper/data
    echo 1 > /ups/app/zookeeper/data/myid
    
    配置环境变量
    cat > /etc/profile.d/zoo.sh <<-EOF
    export ZOOK_HOME=/ups/app/zookeeper
    export PATH=${PATH}:${ZOOK_HOME}/bin
    EOF
    
    scp /etc/profile.d/zoo.sh pg2:/etc/profile.d/zoo.sh
    scp /etc/profile.d/zoo.sh pg3:/etc/profile.d/zoo.sh
    
    编辑配置文件
    cd /ups/app/zookeeper
    cp conf/zoo_sample.cfg conf/zoo.cfg
    
    vi /ups/app/zookeeper/conf/zoo.cfg
    dataDir=/ups/app/zookeeper/data
    server.1=192.168.10.190:2888:3888
    server.2=192.168.10.191:2888:3888
    server.3=192.168.10.192:2888:3888
    
    分发到其它节点
    scp -r /ups/app/zookeeper pg2:/ups/app/zookeeper
    scp -r /ups/app/zookeeper pg3:/ups/app/zookeeper
    
    echo 2 > /ups/app/zookeeper/data/myid
    echo 3 > /ups/app/zookeeper/data/myid
    
    #
    for i in 2 3; do
    	echo "scp -r /ups/app/zookeeper pg$i:/ups/app/zookeeper"
    	echo "ssh pg$i -c "echo $i > /ups/app/zookeeper/data/myid""
    done
    
    启动服务
    zkServer.sh start
    # 查看状态看
    zkServer.sh status
    

    image-20200906130736252

    hadoop配置

    配置文件目录:${HADOOP_HOME}/etc/hadoop

    core-site.xml
    vi ${HADOOP_HOME}/etc/hadoop/core-site.xml
    <configuration> 
      <!-- 把两个NameNode的地址组装成一个集群hacluster -->  
      <property> 
        <name>fs.defaultFS</name>  
        <value>hdfs://hacluster/</value> 
      </property>  
      <!-- 指定hadoop运行时产生临时文件的存储目录 -->  
      <property> 
        <name>hadoop.tmp.dir</name>  
        <value>/ups/app/hadoop/data/tmp</value> 
      </property>
      <!-- 指定ZKFC故障自动切换转移 -->  
      <property> 
        <name>ha.zookeeper.quorum</name>  
        <value>pg1:2181,pg2:2181,pg3:2181</value> 
      </property> 
      <!-- hadoop链接zookeeper的超时时长设置 -->
      <property>
          <name>ha.zookeeper.session-timeout.ms</name>
          <value>1000</value>
          <description>ms</description>
      </property>
    </configuration>
    
    hdfs-site.xml
    <configuration> 
      <!-- 设置dfs副本数,默认3个 -->  
      <property> 
        <name>dfs.replication</name>  
        <value>2</value> 
      </property>
      <!-- 配置namenode和datanode的工作目录-数据存储目录 -->
      <property>
          <name>dfs.namenode.name.dir</name>
          <value>/ups/app/hadoop/data/name</value>
      </property>
      <property>
          <name>dfs.datanode.data.dir</name>
          <value>/ups/app/hadoop/data</value>
      </property>
     
      <!-- 启用webhdfs -->
      <property>
          <name>dfs.webhdfs.enabled</name>
          <value>true</value>
      </property>
        
      <!-- 完全分布式集群名称 -->  
      <property> 
        <name>dfs.nameservices</name>  
        <!-- 与上面fs.defaultFS的值要对应 -->  
        <value>hacluster</value> 
      </property>  
      <!-- 关闭权限检查-->  
      <property> 
        <name>dfs.permissions.enable</name>  
        <value>false</value> 
      </property>  
      <!-- 集群中NameNode节点都有哪些,逻辑名称,相互不重复即可 -->  
      <property> 
        <name>dfs.ha.namenodes.hacluster</name>  
        <value>nn1,nn2</value> 
      </property>  
      <!-- nn1的RPC通信地址 -->  
      <property> 
        <name>dfs.namenode.rpc-address.hacluster.nn1</name>  
        <value>pg1:9000</value> 
      </property>  
      <!-- nn2的RPC通信地址 -->  
      <property> 
        <name>dfs.namenode.rpc-address.hacluster.nn2</name>  
        <value>pg2:9000</value> 
      </property>  
      <!-- nn1的http通信地址 -->  
      <property> 
        <name>dfs.namenode.http-address.hacluster.nn1</name>  
        <value>pg1:50070</value> 
      </property>  
      <!-- nn2的http通信地址 -->  
      <property> 
        <name>dfs.namenode.http-address.hacluster.nn2</name>  
        <value>pg2:50070</value> 
      </property>  
      <!-- 指定NameNode元数据在JournalNode上的存放位置(通常和zookeeper部署在一起) -->  
      <property> 
        <name>dfs.namenode.shared.edits.dir</name>  
        <value>qjournal://pg1:8485;pg2:8485;pg3:8485/hacluster</value> 
      </property>  
      <!-- 声明journalnode服务器本地存储目录-->  
      <property> 
        <name>dfs.journalnode.edits.dir</name>  
        <value>/ups/app/hadoop/data/jn</value> 
      </property>  
      <!-- 访问代理类:client,hacluster,active配置失败自动切换实现方式-->  
      <property> 
        <name>dfs.client.failover.proxy.provider.hacluster</name>  
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> 
      </property>  
      <!-- 配置自动切换的方法 -->  
      <property> 
        <name>dfs.ha.fencing.methods</name>  
        <value>
            sshfence
            shell(/bin/true)
        </value> 
      </property>  
      <!-- 配置自动故障转移-->  
      <property> 
        <name>dfs.ha.automatic-failover.enabled</name>  
        <value>true</value> 
      </property> 
      <!-- 使用sshfence隔离机制时需要ssh无秘钥登录 -->  
      <property> 
        <name>dfs.ha.fencing.ssh.private-key-files</name>  
        <value>/home/hadoop/.ssh/id_rsa</value> 
      </property> 
      <!-- 配置sshfence隔离机制超时时间 -->
      <property>
          <name>dfs.ha.fencing.ssh.connect-timeout</name>
          <value>30000</value>
      </property>
    
      <property>
          <name>ha.failover-controller.cli-check.rpc-timeout.ms</name>
          <value>60000</value>
      </property>
    </configuration>
    
    修改slaves

    指定HDFS上的datanode和NodeManager节点

    cat > slaves <<-EOF
    pg1
    pg2
    pg3
    EOF
    
    mapred-site.xml
    cp mapred-site.xml.template mapred-site.xml
    vi  mapred-site.xml
    <configuration>
    <!-- 指定mr框架为yarn方式 -->
     <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
     </property>
    <!-- 指定mr历史服务器主机,端口 -->
      <property>   
        <name>mapreduce.jobhistory.address</name>   
        <value>pg1:10020</value>   
      </property>   
    <!-- 指定mr历史服务器WebUI主机,端口 -->
      <property>   
        <name>mapreduce.jobhistory.webapp.address</name>   
        <value>pg1:19888</value>   
      </property>
    <!-- 历史服务器的WEB UI上最多显示20000个历史的作业记录信息 -->    
      <property>
        <name>mapreduce.jobhistory.joblist.cache.size</name>
        <value>20000</value>
      </property>
    <!--配置作业运行日志 --> 
      <property>
        <name>mapreduce.jobhistory.done-dir</name>
        <value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
      </property>
      <property>
        <name>mapreduce.jobhistory.intermediate-done-dir</name>
        <value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
      </property>
      <property>
        <name>yarn.app.mapreduce.am.staging-dir</name>
        <value>/tmp/hadoop-yarn/staging</value>
      </property>
    </configuration>
    
    修改yarn-site.xml
    <configuration> 
      <!-- reducer获取数据的方式 -->  
      <property> 
        <name>yarn.nodemanager.aux-services</name>  
        <value>mapreduce_shuffle</value> 
      </property>  
      <!--启用resourcemanager ha-->  
      <property> 
        <name>yarn.resourcemanager.ha.enabled</name>  
        <value>true</value> 
      </property>  
      <!--声明两台resourcemanager的地址-->  
      <property> 
        <name>yarn.resourcemanager.cluster-id</name>  
        <value>rmCluster</value> 
      </property>  
      <property> 
        <name>yarn.resourcemanager.ha.rm-ids</name>  
        <value>rm1,rm2</value> 
      </property>  
      <property> 
        <name>yarn.resourcemanager.hostname.rm1</name>  
        <value>pg1</value> 
      </property>  
      <property> 
        <name>yarn.resourcemanager.hostname.rm2</name>  
        <value>pg2</value> 
      </property>  
      <!--指定zookeeper集群的地址-->  
      <property> 
        <name>yarn.resourcemanager.zk-address</name>  
        <value>pg1:2181,pg2:2181,pg3:2181</value> 
      </property>  
      <!--启用自动恢复-->  
      <property> 
        <name>yarn.resourcemanager.recovery.enabled</name>  
        <value>true</value> 
      </property>  
      <!--指定resourcemanager的状态信息存储在zookeeper集群-->  
      <property> 
        <name>yarn.resourcemanager.store.class</name>  
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> 
      </property>
        <!-- 日志聚集 -->
      <property>
          <name>yarn.log-aggregation-enable</name>
          <value>true</value>
      </property>
      <property>
          <name>yarn.log-aggregation.retain-seconds</name>
          <value>86400</value>
      </property>
    </configuration>
    
    启动集群
    # 1. 启动zookeeper
    zkServer.sh start
    zkServer.sh status
    jps 
    
    # 2. 启动journalnode服务
    hadoop-daemon.sh start journalnode
    
    # 3. 格式化主namenode
    hdfs namenode -format
    
    # 4. 启动主namenode
    hadoop-daemon.sh start namenode
    
    # 5. 同步主namenode信息到备namenode上(在备namenode上执行)
    hdfs namenode -bootstrapStandby
    # OR
    cd /ups/app/hdoop && scp -r data pg2:$(pwd)
    
    # 6. 只在主NameNode上格式化zkfc,创建znode节点
    hdfs zkfc -formatZK
    
    # 7. 停掉主namenode和所有的journalnode进程
    hadoop-daemon.sh stop namenode
    hadoop-daemon.sh stop journalnode
        
    
    # 8. 启动HDFS
    start-dfs.sh
    
    # 9. 启动yarn集群
        # 9.1 在主备 resourcemanager 中随便选择一台进行启动yarn
        start-yarn.sh
        # 9.2 若备用节点的 resourcemanager 没有启动起来,则手动启动起来
        yarn-daemon.sh start resourcemanager
    
    # 10. 启动 mapreduce 任务历史服务器
    mr-jobhistory-daemon.sh start historyserver
    
    

    image-20200906210105902

    查看各主节点的状态
    # 检查服务
      ## web 界面
        # HDFS
        http://192.168.10.190:50070
        http://192.168.10.191:50070
        
        # yarn
        http://192.168.10.190:8088/cluster
        http://192.168.10.191:8088/cluster  # standby节点会自动跳到avtive节点
    
      ## 命令工具
        # HDFS
        hdfs haadmin -getServiceState nn1
        hdfs haadmin -getServiceState nn2
        
        # yarn
        yarn rmadmin -getServiceState rm1
        yarn rmadmin -getServiceState rm2
    
    jps
    
    • HDFS Web界面

    image-20200907090836012

    • Yarn Web界面

    image-20200907090725218

    • MapReduce历史服务器web界面

    image-20200907091003695

  • 相关阅读:
    操作系统知识
    接下来 的 重点 是 运维
    并行计算 排序 是 分布式数据库 能否 突破 传统 数据库 性能 瓶颈 的 关键
    并行计算 是 趋势
    高并发 分布式 架构 的 几大 基本要素
    堆栈趣话
    虚拟机 操作系统 容器
    Lambda 表达式 是 个 好东东
    update set from 语句用法 delete 多表删除的使用 以及异常:table name "temp_new_tel" specified more than once
    我的面试
  • 原文地址:https://www.cnblogs.com/binliubiao/p/13627799.html
Copyright © 2020-2023  润新知