资源规划

组件 LTSR003 LTSR005 LTSR006 LTSR007 LTSR008
OS centos7.6 centos7.6 centos7.6 centos7.6 centos7.6
JDK jvm jvm jvm jvm jvm
HDFS DataNode/HTTPFS DataNode/HTTPFS DataNode/HTTPFS DataNode/HTTPFS NameNode/DataNode/HTTPFS
YARN NodeManager NodeManager NodeManager NodeManager ResourceManager/NodeManager/mr-jobhistory

安装介质

版本:hadoop-2.7.2.tar.gz
下载:http://archive.apache.org/dist/hadoop/core

环境准备

安装JDK

参考:《CentOS7.6-安装JDK-1.8.221

SSH免密

参考:《CentOS7.6-SSH免密-bigdata
参考:《CentOS7.6-SSH免密-root

安装Hadoop

先在节点LTSR008上安装,之后分发到LTSR003、LTSR005、LTSR006、LTSR007。

  1. cd ~/software/
  2. wget http://archive.apache.org/dist/hadoop/core/hadoop-2.7.2/hadoop-2.7.2.tar.gz
  3. tar -zxvf hadoop-2.7.2.tar.gz -C ~/modules/
  4. rm -rf hadoop-2.7.2.tar.gz
  5. # 清理安装介质
  6. rm -rf ~/modules/hadoop-2.7.2/share/doc
  7. rm -rf ~/modules/hadoop-2.7.2/*/*.cmd
  8. rm -rf ~/modules/hadoop-2.7.2/*/*/*.cmd

(1).HDFS单机部署

  • 创建相关目录

    # hadoop临时目录,core-site.xml的hadoop.tmp.dir属性相关(所有节点执行)
    sudo mkdir -p /data/hdfs/tmp
    sudo chmod -R a+w /data/hdfs/tmp
    sudo chown -R bigdata:bigdata /data/hdfs/tmp
    
  • hdfs配置

1.配置hadoop-env.sh。

export HADOOP_HOME=/home/bigdata/modules/hadoop-2.7.2
vi ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh

配置如下:

export JAVA_HOME=/home/bigdata/modules/jdk1.8.0_221

2.配置core-site.xml。

export HADOOP_HOME=/home/bigdata/modules/hadoop-2.7.2
vi ${HADOOP_HOME}/etc/hadoop/core-site.xml

配置如下:

<!--默认文件系统的名称(uri's的authority部分用来指定host, port等。默认是本地文件系统。)-->
<property>
            <name>fs.defaultFS</name>
            <value>hdfs://LTSR008:9000</value>
</property>
<!--WEB UI访问数据使用的用户名 -->
<property>
            <name>hadoop.http.staticuser.user</name>
            <value>bigdata</value>
</property>
<!-- Hadoop的临时目录,服务端参数,修改需重启。NameNode的Image/Edit目录依赖此配置 -->
<property>
            <name>hadoop.tmp.dir</name>
            <value>/data/hdfs/tmp</value>
</property>

3.配置hdfs-site.xml。

export HADOOP_HOME=/home/bigdata/modules/hadoop-2.7.2
vi ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml

配置如下:

<!--解决内部网络和外部网络访问的问题 -->
<property>
            <name>dfs.http.address</name>
            <value>0.0.0.0:50070</value>
</property>
<property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>LTSR008:50090</value>
</property>
<!-- HDFS数据副本数,默认3副本:本节点+同机架节点+其他机架节点,一般不大于datanode的节点数,建议默认3副本-->
<property>
            <name>dfs.replication</name>
            <value>1</value>
</property>
<!-- HDFS中启用权限检查配置-->
<property>
            <name>dfs.permissions.enabled</name>
            <value>false</value>
</property>
  • 格式化**NameNode**

    格式化HDFS用于初始化NameNode管理的镜像和操作日志文件。

    # 清理logs和tmp
    rm -rf ~/modules/hadoop-2.7.2/logs/*
    rm -rf /data/hdfs/tmp/*
    cd ~/modules/hadoop-2.7.2/
    bin/hdfs namenode -format
    

    出现下列提示表示格式化成功。

    INFO common.Storage: Storage directory /*/*/tmp/dfs/name has been successfully formatted.
    
  • 单机启动**hdfs**

     core-site.xml,这里配哪一台(LTSR008),哪一台启动namenode。
    
    cd ~/modules/hadoop-2.7.2/
    # 启动NameNode
    sbin/hadoop-daemon.sh start namenode
    # 启动DataNode
    sbin/hadoop-daemon.sh start datanode
    

    启动完成后,输入jps查看进程,如果看到以下进程,表示NameNode节点基本ok了。

    jps
    **** DataNode
    **** NameNode
    

    Web UI验证:http://LTSR008:50070

  • 单机停止**hdfs**

    cd ~/modules/hadoop-2.7.2/
    # 停止NameNode
    sbin/hadoop-daemon.sh stop namenode
    # 停止DataNode
    sbin/hadoop-daemon.sh stop datanode
    

    (2).YARN单机部署

  • yarn__配置

1.配置mapred-env.sh。

export HADOOP_HOME=/home/bigdata/modules/hadoop-2.7.2
vi ${HADOOP_HOME}/etc/hadoop/mapred-env.sh

配置如下:

export JAVA_HOME=/home/bigdata/modules/jdk1.8.0_221

2.配置mapred-site.xml。

export HADOOP_HOME=/home/bigdata/modules/hadoop-2.7.2
cp ${HADOOP_HOME}/etc/hadoop/mapred-site.xml.template ${HADOOP_HOME}/etc/hadoop/mapred-site.xml
vi ${HADOOP_HOME}/etc/hadoop/mapred-site.xml

配置如下:

<!-- 配置MapReduce运行环境 ,yarn/yarn-tez -->
<property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
</property>
<!-- 日志查看IPC及WEB UI配置-->
<property>
            <name>mapreduce.jobhistory.address</name>
            <value>LTSR008:10020</value>
</property>
<property>
            <name>mapreduce.jobhistory.webapp.address</name>
            <value>LTSR008:19888</value>
</property>

3.配置yarn-env.sh。

export HADOOP_HOME=/home/bigdata/modules/hadoop-2.7.2
vi ${HADOOP_HOME}/etc/hadoop/yarn-env.sh

配置如下:

export JAVA_HOME=/home/bigdata/modules/jdk1.8.0_221

4.配置yarn-site.xml。

export HADOOP_HOME=/home/bigdata/modules/hadoop-2.7.2
vi ${HADOOP_HOME}/etc/hadoop/yarn-site.xml

配置如下:

<!-- ResourceManager节点 -->
<property>
            <name>yarn.resourcemanager.hostname</name>
            <value>LTSR008</value>
</property>
<!--解决内部网络和外部网络访问的问题 -->
<property>
            <name>yarn.resourcemanager.webapp.address</name>
            <value>0.0.0.0:8088</value>
</property>
<!--日志聚合到HDFS提供给WEB UI查看 -->
<property>
            <name>yarn.log-aggregation-enable</name>
            <value>true</value>
</property>
<property>
            <name>yarn.log-aggregation.retain-seconds</name>
            <value>10000</value>
</property>
<!-- NodeManager上运行的附属服务,用于提升Shuffle计算性能。mapreduce_shuffle/spark_shuffle -->
<property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
</property>
<!-- 如果没配置ApplicationMaster入口无法使用 -->
<property>
            <name>yarn.resourcemanager.webapp.address</name>
            <value>10.8.0.113:8088</value>
</property>
  • 单机启动YARN

     yarn-site.xml,这里配哪一台(LTSR008),哪一台启动ResourceManager。
    
    cd ~/modules/hadoop-2.7.2/
    ## 启动resourcemanager
    sbin/yarn-daemon.sh start resourcemanager
    ## 启动nodemanager
    sbin/yarn-daemon.sh start nodemanager
    ## 启动log服务,默认日志路径:/tmp/hadoop-yarn/staging/history
    sbin/mr-jobhistory-daemon.sh start historyserver
    

    输入jps查看进程,如果看到以下进程,表示ResourceManager节点基本ok了。

    jps
    **** ResourceManager
    **** NodeManager
    **** JobHistoryServer
    

    Web UI验证:http://LTSR008:8088

  • 单机停止YARN

    cd ~/modules/hadoop-2.7.2/
    sbin/yarn-daemon.sh stop resourcemanager
    sbin/yarn-daemon.sh stop nodemanager
    sbin/mr-jobhistory-daemon.sh stop historyserver
    

    (3).HDFS集群部署

  • 配置slaves

    export HADOOP_HOME=/home/bigdata/modules/hadoop-2.7.2
    vi ${HADOOP_HOME}/etc/hadoop/slaves
    

    配置如下:

    LTSR003
    LTSR005
    LTSR006
    LTSR007
    LTSR008
    

    第一次启动前,清除各节点tmp目录,并重新格式化NameNode。

    ## 清理logs和tmp
    rm -rf ~/modules/hadoop-2.7.2/logs/*
    rm -rf /data/hdfs/tmp/*
    cd ~/modules/hadoop-2.7.2/
    bin/hdfs namenode -format
    
  • 环境变量设置

    vi ~/.bashrc # :$到达行尾添加
    

    配置如下:

    export HADOOP_HOME=/home/bigdata/modules/hadoop-2.7.2
    export PATH=$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH
    
  • 分发Hadoop

    scp -r ~/modules/hadoop-2.7.2 bigdata@LTSR003:~/modules/
    scp -r ~/modules/hadoop-2.7.2 bigdata@LTSR005:~/modules/
    scp -r ~/modules/hadoop-2.7.2 bigdata@LTSR006:~/modules/
    scp -r ~/modules/hadoop-2.7.2 bigdata@LTSR007:~/modules/
    scp ~/.bashrc bigdata@LTSR003:~/.bashrc
    scp ~/.bashrc bigdata@LTSR005:~/.bashrc
    scp ~/.bashrc bigdata@LTSR006:~/.bashrc
    scp ~/.bashrc bigdata@LTSR007:~/.bashrc
    

    注:如果Hadoop临时目录(tmp)不在Hadoop包中,slaves上仍然要先手动创建并赋权。
    环境变量生效:

    source ~/.bashrc
    
  • 集群启动hdfs

     core-site.xml,这里配哪一台(LTSR008),哪一台启动namenode。
    
    cd ~/modules/hadoop-2.7.2/
    sbin/start-dfs.sh
    

    启动完成后,输入jps查看进程,如果看到以下进程,表示NameNode节点基本ok了。

    jps
    **** DataNode
    **** NameNode
    **** SecondaryNameNode
    

    Web UI验证:http://LTSR008:50070

  • 集群停止hdfs

    cd ~/modules/hadoop-2.7.2/
    sbin/stop-dfs.sh
    

    (4).YARN集群部署

  • 集群启动YARN

     配哪一台(LTSR008),哪一台启动ResourceManager。
    
    cd ~/modules/hadoop-2.7.2/
    sbin/start-yarn.sh
    ## 启动log服务,默认日志路径:/tmp/hadoop-yarn/staging/history
    sbin/mr-jobhistory-daemon.sh start historyserver
    

    输入jps查看进程,如果看到以下进程,表示ResourceManager节点基本ok了。

    jps
    **** ResourceManager
    **** NodeManager
    **** JobHistoryServer
    

    Web UI验证:http://LTSR008:8088

  • 集群停止YARN

    cd ~/modules/hadoop-2.7.2
    ## 停止log服务
    sbin/mr-jobhistory-daemon.sh stop historyserver
    sbin/stop-yarn.sh
    
  • MR作业验证

    cd ~/modules/hadoop-2.7.2
    ## 创建MR输入目录
    bin/hdfs dfs -mkdir -p /tmp/input
    ## bin/hdfs dfs -rm -r /tmp/output # 删除MR输出目录
    ## 上传文件到input目录
    bin/hdfs dfs -put ~/modules/hadoop-2.7.2/etc/hadoop/core-site.xml /tmp/input
    bin/hdfs dfs -ls /tmp/input
    bin/hdfs dfs -text /tmp/input/core-site.xml
    ## hadoop jar按mr1或mr2(yarn)运行job,决定是否配置yarn;yarn jar按yarn方式运行job。
    bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /tmp/input /tmp/output
    bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /tmp/input /tmp/output
    ## 查看job结果
    bin/hdfs dfs -cat /tmp/output/part*
    

    注意:MR输出目录不要提前建立,如果存在则删除或者修改为别的输出路径。

    常见问题

    (1).Hadoop关闭不掉

  • 描述:当Hadoop开启一段时间(或其它情况),有时会出现无法关闭的情况:

    [bigdata@ltsr008 hadoop-2.7.2]$ sbin/stop-dfs.sh
    Stopping namenodes on [LTSR008]
    LTSR008: no namenode to stop
    LTSR003: no datanode to stop
    LTSR008: no datanode to stop
    LTSR006: no datanode to stop
    LTSR007: no datanode to stop
    LTSR005: no datanode to stop
    Stopping secondary namenodes [0.0.0.0]
    0.0.0.0: no secondarynamenode to stop
    [bigdata@ltsr008 hadoop-2.7.2]$ jps
    16552 Jps
    18873 NodeManager
    18074 NameNode
    18461 SecondaryNameNode
    18238 DataNode
    18735 ResourceManager
    [bigdata@ltsr008 hadoop-2.7.2]$
    
  • 解决:参考https://blog.csdn.net/GYQJN/article/details/50805472