zoukankan      html  css  js  c++  java
  • Hadoop运行模式

    重要:信息用原生JDK坑太多了,所以卸掉,安装自己的JDK

    参考博客:https://www.cnblogs.com/jpfss/p/9677827.html

    官方:https://hadoop.apache.org/

    文档:http://hadoop.apache.org/docs/r2.7.7/

    一、本地模式(在hadoop目录下进行)

    注意:output不能提前存在

    1、官方Grep案例

    mkdir input
    cp etc/hadoop/*.xml input
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar grep input output 'dfs[a-z.]+'
    cat output/*

    在自己的虚拟机上运行有点慢

    2、官方WordCount案例

    # 创建文件夹
    mkdir wcinput
    # 向文件写入内容
    cd wcinput
    touch wc.input
    vim wc.input
        hadoop yarn
        hadoop mapreduce
        tom
        tom
        tom
    # 运行
    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount wcinput wcoutput

    主要作用:查找wc.input 文件中 相同单词 出现的次数(wordcount)

    二、伪分布式模式

    A、启动HDFS并运行MapReduce程序

    1、配置集群

    a、配置:hadoop-nev.sh

    # 获取JAVA_HOME的路径
    echo $JAVA_HOME
    # 修改文件
    vim etc/hadoop/hadoop-env.sh
    
    # The java implementation to use.
    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64/jre

    b、配置:core-site.xml文件

    vim etc/hadoop/core-site.xml
    
    <!-- 指定HDFS的NameNode -->
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:9000</value>
        </property>
    
    <!-- 指定Hadoop运行时产生文件的存储目录 -->
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/opt/module/hadoop-2.7.7/data/tmp</value>
        </property>

    c、配置:hdfs-site.xml文件(配不配置都行)

    vim etc/hadoop/hdfs-site.xml
    
    <!--指定HDFS的副本数量-->
    <property>
          <name>dfs.replication</name>
          <value>1</value>
     </property>    

    注意:默认副本数是3

    2、启动集群

    a、格式化NameNode(第一次启动时格式化,以后就不要总格式化)

    bin/hdfs namenode -format

    b、启动NameNode

    sbin/hadoop-daemon.sh start namenode

    c、启动DataNode

    sbin/hadoop-daemon.sh start datanode

    d、查看进程

    jps

    3、运行MapReduce程序

    a、访问:http://linuxip:50070

    b、Browse Directory

    1)、创建目录

     bin/hdfs dfs -mkdir -p /usr/tom/input

    dfs后执行类linux命令

    2)、执行WordCount

    # push liunx的文件到HDFS
    bin/hdfs dfs -put wcinput/wc.input /usr/tom/input
    # 执行
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /usr/tom/input /usr/tom/output
    # 查看结果
    bin/hdfs dfs -cat /usr/tom/output/*

    问题:

    1、bash: jps: command not found...

    解决方案:

    # 切换到 root 用户,创建软链接
    su root
    ln -s /opt/module/jdk1.8.0_144/bin/jps /usr/local/bin/jps

    2、访问网页50070端口失败

    http://192.168.8.128:50070/

    解决方案:https://www.cnblogs.com/wt7018/p/13550118.html

    3、格式化NameNode

    # 1、查看进程
    jps
    # 2、杀死 namenode 和 datanode
    # 3、删除tmp文件,路径为自己修改的路径

     B、启动YARN并运行MapReduce程序

    1、配置集群

    a、配置 yarn-env.sh

    vim etc/hadoop/yarn-env.sh
    
    # 获取路径
    echo $JAVA_HOME
    
    # 取消注释,修改 路径
    export JAVA_HOME=/opt/module/jdk1.8.0_261

    b、配置 yarn-site.xml

    vim etc/hadoop/yarn-site.xml

    <!-- Reducer 获取数据的存储方式--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManage 的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>wt.com</value> </property>

     c、配置 mapred-env.sh

    # 1.获取路径
    echo $JAVA_HOME
    # 2.修改配置文件
    vim etc/hadoop/mapred-env.sh
    # 3.取消注释和修改路径
    export JAVA_HOME=/opt/module/jdk1.8.0_261

    d、配置 mapred-site.xml

    # 0.切换目录
    cd /opt/module/hadoop-2.7.7/etc/hadoop
    # 1.修改名称名称
    mv mapred-site.xml.template mapred-site.xml
    # 2.修改配置文件
    vim mapred-site.xml
    <!--指定MapReduce运行在YARN上-->
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>

    2、启动集群

    前提条件 NameNode和DataNode已经启动

    a、开启ResourceManage

    sbin/yarn-daemon.sh start resourcemanager

    b、开启nodemanage

    sbin/yarn-daemon.sh start nodemanager

    c、查看

    jps

    3、运行MapReduence

    a、打开http://192.168.8.128:8088,报错,解决打开8088 port

    b、运行

    # 1. 创建文件夹
    bin/hdfs dfs -mkdir -p /usr/tom/input
    # 2. 推文件到上面
    bin/hdfs dfs -put wcinput/wc.input /usr/tom/input
    # 3. 运行
    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /usr/tom/input /usr/tom/output

    注意:运行的时候,刷新 http://192.168.8.128:8088/cluster 网页 查看变化

     3、配置历史服务器

    a、配置 mapred-site.xml

    <!--历史服务器端地址-->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>wt.com:10020</value>
    </property>
    <!--历史服务器web端地址-->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>wt.com:19888</value>
    </property>

    2、启动历史服务器

    sbin/mr-jobhistory-daemon.sh start historyserver

    3、开启端口 19888

    4、查看jobhistory

    http://wt.com:19888/jobhistory

    C、配置日志的聚集

    注意:开启日志聚集功能,需要重新启动 HistoryManager、ResourceManager、NodeManager

    1、配置 yarn-site.xml

    vim yarn-site.xml
    <!-- 日志聚集功能使用 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!-- 日志保留时间设置为 7 天-->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>

    2、关闭 NodeManager、ResourceManager、HistoryManager

    sbin/yarn-daemon.sh stop resourcemanager
    sbin/yarn-daemon.sh stop nodemanager
    sbin/yarn-daemon.sh stop historyserver

    3、启动 NodeManager、ResourceManager、HistoryServer

    sbin/yarn-daemon.sh start resourcemanager
    sbin/yarn-daemon.sh start nodemanager
    sbin/yarn-daemon.sh start historyserver

    4、删除 HDFS 上已经存在的输出文件

    bin/hdfs dfs -rm -r /usr/tom/output

    5、执行 WordCount 程序

    6、查看日志

    三、完全分布式模式

    注意:

    1、HDFS NmaeNode 只要有 1 个 即可, SecondaryNameNode和 NameNode 不能存储到 1 个节点

    2、HDFS DataNode存储在所有节点上

    3、NmaeNode 和 ResourceManager 不能存放到 1 个 节点

    4、Nodemanager 存储到所有节点

    A、分析

    1、虚拟机准备

    2、安装JDK并配置环境变量

    3、安装Hadoop并配置环境变量

    4、配置集群

    5、单点启动

    6、配置 ssh

    7、群起并测试集群

    B、编写集群分发脚本 xsync  看 xsync即可

    1、scp(secure copy) 安全copy

    a、scp定义:

    scp实现服务器与服务器之间的数据拷贝

    b、基本语法:

    scp    -r        $pdir/$fname               $user@hadoop$host:$pdor/$fname
    命令   递归      要拷贝的文件路径/名称        目的用户@主机:目的路径/名称

    c、案例实操(安装JDK并配置、安装Hadoop并配置)

    0)、推  从wt.com -> wt1.com

    scp -r /opt/module root@wt1.com:/opt/module

    0)、拉  wt2.com <- wt.com

    sudo scp  -r  tom@wt.com:/opt/module  ./

    0)、第三方(wt2.com) 操作 wt1.com -> wt3.com

    scp  -r  tom@wt.com:/opt/module  root@wt3.com:/opt/module

    1)、修改 文件 所有者 所有组

    sudo chown tom:tom module/  -R

    2)、推送 profile

    scp /etc/profile root@wt1.com:/etc/profile

    3)、重新加载 profile

    source /etc/profile

    2、rsync 远程同步工具

    rsync主要用于备份和镜像。且速度快、避免复制相同内容和支持符号链接的优点

    a、基本语法

    rsync    -rvl         $pid/$fname              $user@hadoop$host:$pid/$fname
    命令     选项参数     要拷贝的文件路径/名称      目的用户@主机:目的路径/名称
    
    
    -r    递归
    -v    显示过程
    -l    拷贝软连接

    b、案例实操

    rsync  -rvl  /opt/test.txt       root@wt1.com:/opt

     区别:rsync 速度比 scp快,rsync 后面不用加 路径/文件;scp 后面加 路径/文件

    3、xsync 集群分发脚本

    a、/home/tom 目录下创建bin目录,并在bin目录下创建xsync文件

    cd /home/tom
    mkdir bin
    vim xsync

    b、xsync代码

    #!/bin/bash
    # 1.获取输入参数个数,如果没有参数,直接退出
    pcount=$#
    if((pcount==0)); then
    echo no args;
    exit;
    fi
    # 2. 获取文件名称
    p1=$1
    fname=`basename $p1`
    echo fname=$fname
    # 3. 获取上级目录到绝对路径
    pdir=`cd -P $(dirname $p1); pwd`
    echo pdir=$pdir
    # 4. 获取当前用户名称
    user=`whoami`
    # 5. 循环
    for((host=1; host<3; host++)); do
        echo ------------- hadoop$host -----------------
        rsync -rvl $pdir/$fname $user@wt$host.com:$pdir
    done

    注意:wt是linux的主机名称

    c、修改权限

    chmod +777 xsync

    d、运行

    xsync /home/tom/bin
    xsync 指定目录

     注意:把xsync放到 /home/tom/bin 目录不被识别,放到 /usr/local/bin 目录下

                wt.com         wt1.com            wt2.com                   
    ======================================================================
    HDFS        NameNode                          SecondaryNameNode                       
                DataNode       DataNode           DataNode                                            
    ======================================================================
                               ResourceManager                                   
    YARN                       NodeManager                                   
                NodeManager                       NodeManager            
    ======================================================================
    注意:NameNode 和 ResourceManager 消耗内存较大,因此,不能在同一个节点上

    4、集群配置

    a、核心配置文件

    vim core-site.xml
    <!-- 指定HDFS的NameNode -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://wt.com:9000</value>
    </property>
    
    <!-- 指定Hadoop运行时产生文件的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-2.7.7/data/tmp</value>
    </property>

    b、HDFS 配置文件

    1)、配置hadoop-env.sh

    vim hadoop-env.sh
    export JAVA_HOME=java安装路径

    2)、配置hdfs-site.xml

    vim hdfs-site.xml
    <!-- 指定 Hadoop 辅助名称节点主机配置 -->
    <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>hadoop104:50090</value>
    </property>

     c、YARN 配置文件

    1)、配置 yarn-env.sh

    vim yarn-env.sh
    export JAVA_HOME=java路径

    2)、配置 yarn-site.xml

    vim etc/hadoop/yarn-site.xml
    <!-- Reducer 获取数据的存储方式-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    
    <!-- 指定YARN的ResourceManage 的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>wt1.com</value>
    </property>

    d、MapReduce 配置文件

    1)、配置 mapred-env.sh

    vim mapred-env.sh
    export JAVA_HONE=java安装路径

    2)、配置 mapred-site.xml

    mv mapred-site.xml.template mapred-site.xml
    vim mapred-site.xml
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

    e、在集群上发布配置好的 Hadoop 配置文件

    xsync /opt/module/hadoop-2.7.7

    f、查看文件分发情况

    另外两台节点的 core-site.xml

    5、SSH无密登录

    # wt.com (NameNode)
    cd ~
    ls -al
    cd .ssh/
    ssh-keygen -t rsa (三次回车)
    ssh-copy-id wt1.com
    ssh-copy-id wt2.com
    ssh-copy-id wt.com
    # 配置root
    su root
    cd ~
    cd .ssh/
    ssh-keygen -t rsa (三次回车)
    ssh-copy-id wt1.com
    ssh-copy-id wt2.com
    ssh-copy-id wt.com
     
    # wt1.com (ResourceManager)
    cd ~
    ls -al
    cd .ssh/
    ssh-keygen -t rsa (三次回车)
    ssh-copy-id wt2.com
    ssh-copy-id wt.com
    ssh-copy-id wt1.com

    6、集群单节点启动

    1、删除所有节点的 data logs
    rm -rf data/ logs/
    2、格式化NameNode
    bin/hdfs namenode -format
    3、启动
    sbin/start-dfs.sh 

    7、群起集群

    # a、配置slaves
    # 打开slaves文件
    vim etc/hadoop/slaves
    # 增加相应的节点, 不允许有空格,不允许有空行
    wt.com
    wt1.com
    wt2.com
    # b、同步更新
    xsync slaves
    # c、群起,启动dfs 在NmaeNode的节点; 启动Yarn 在ResourceManager的节点
    sbin/start-dfs.sh
    sbin/start-yarn.sh

     8、集群基本测试

    # 集群文件存储路径
    1、上传小文件
    bin/hdfs dfs -put wcinput.wc,input /
    2、上传大文件
    bin/hdfs dfs -put /opt/software/hadoop-2.7.7.tar.gz /

    9、集群启动/停止方式总结

    # 单点启动
    # 1、启动/停止 HDFS
    hadoop-daemon.sh start/stop namenode/datanode/secondarynode
    # 2、启动/停止 YARN
    yarn-daemon.sh start/stop resourcemanager/nodemanager
    
    # 群启
    # 1、 启动/停止 HDFS 
    start-dfs.sh/stop-dfs.sh
    # 2、 启动/停止 YARN
    start-yarn.sh/stop-yarn.sh



  • 相关阅读:
    BZOJ2738 矩阵乘法
    BZOJ3585 mex
    BZOJ1930 [Shoi2003]pacman 吃豆豆
    BZOJ3858 Number Transformation
    vue2.0学习小列子
    vue2.0 tab切换几种方式
    github学习
    只有自己看的懂的vue 二叉树的3级联动
    vuex学习
    vue2.0 MintUI安装和基本使用
  • 原文地址:https://www.cnblogs.com/wt7018/p/13547247.html
Copyright © 2011-2022 走看看