黑洞

这里藏着一些独特的想法

0%

Hadoop基础配置

配置文件的修改

官网文档:https://hadoop.apache.org/docs/r3.3.0/

  • 第一类 1个 hadoop-env.sh

  • 第二类 4个 core|hdfs|mapred|yarn-site.xml

    • site 表示的是用户定义的配置,会覆盖 default 中的默认配置。

    • core-site.xml 核心模块配置

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

    • mapred-site.xml MapReduce模块配置

    • yarn-site.xml yarn模块配置

  • 第三类 1个 workers


  • hadoop-env.sh

    1
    2
    3
    4
    5
    6
    7
    8
    export JAVA_HOME=/export/server/jdk1.8.0_65

    #文件最后添加
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root
  • core-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://node1:8020</value>
    </property>

    <!-- 设置Hadoop本地保存数据路径 -->
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/export/data/hadoop-3.3.0</value>
    </property>

    <!-- 设置HDFS web UI用户身份 -->
    <property>
    <name>hadoop.http.staticuser.user</name>
    <value>root</value>
    </property>

    <!-- 整合hive 用户代理设置 -->
    <property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
    </property>

    <property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
    </property>
  • hdfs-site.xml

    1
    2
    3
    4
    5
    <!-- 设置SNN进程运行机器位置信息 -->
    <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>node2:9868</value>
    </property>
  • mapred-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>

    <!-- MR程序历史服务器端地址 -->
    <property>
    <name>mapreduce.jobhistory.address</name>
    <value>node1:10020</value>
    </property>

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

    <property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>

    <property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>

    <property>
    <name>mapreduce.reduce.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
  • yarn-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <!-- 设置YARN集群主角色运行机器位置 -->
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>node1</value>
    </property>

    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>

    <!-- 是否将对容器实施物理内存限制 -->
    <property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</value>
    </property>

    <!-- 是否将对容器实施虚拟内存限制。 -->
    <property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
    </property>

    <!-- 开启日志聚集 -->
    <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
    </property>

    <!-- 设置yarn历史服务器地址 -->
    <property>
    <name>yarn.log.server.url</name>
    <value>http://node1:19888/jobhistory/logs</value>
    </property>

    <!-- 保存的时间7天 -->
    <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
    </property>
  • workers

    1
    2
    3
    node1
    node2
    node3
  • 分发同步hadoop安装包

    1
    2
    3
    4
    cd /export/server

    scp -r hadoop-3.3.0 root@node2:$PWD
    scp -r hadoop-3.3.0 root@node3:$PWD
  • 将hadoop添加到环境变量(3台机器)

    1
    2
    3
    4
    5
    6
    vim /etc/proflie

    export HADOOP_HOME=/export/server/hadoop-3.3.0
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    source /etc/profile

Namenode format

新安装 Hadoop 后,必须在首次启动前对 Namenode 进行 format 操作。

  • 通常在namenode所在的机器执行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #部署为 namenode 的机器上执行

    hadoop namenode -format

    #执行成功 日志会有如下显示
    21/05/23 15:38:19 INFO common.Storage: Storage directory /export/data/hadoopdata/dfs/name has been successfully formatted.

    [root@node1 server]# ll /export/data/hadoopdata/dfs/name/current/
    total 16
    -rw-r--r-- 1 root root 321 May 23 15:38 fsimage_0000000000000000000
    -rw-r--r-- 1 root root 62 May 23 15:38 fsimage_0000000000000000000.md5
    -rw-r--r-- 1 root root 2 May 23 15:38 seen_txid
    -rw-r--r-- 1 root root 207 May 23 15:38 VERSION

禁止多次format!

如果不小心执行了多次,主从之间将会互相不识别。

解决方法:

删除每台机器上hadoop.tmp.dir配置指定的文件夹/export/data/hadoop-3.3.0
重新format。


Hadoop集群启动

单节点单进程逐个手动启动

  • HDFS集群

    1
    2
    3
    4
    5
    #hadoop2.x版本命令
    hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode

    #hadoop3.x版本命令
    hdfs --daemon start|stop namenode|datanode|secondarynamenode
  • YARN集群

    1
    2
    3
    4
    5
    #hadoop2.x版本命令
    yarn-daemon.sh start|stop resourcemanager|nodemanager

    #hadoop3.x版本命令
    yarn --daemon start|stop resourcemanager|nodemanager
  • 优点:精准的控制每个角色每个进程的启停。避免了群启群停(时间成本)。

脚本一键启动

  • 前提:配置好免密登录

    1
    2
    3
    ssh-copy-id node1.xxx.com
    ssh-copy-id node2.xxx.com
    ssh-copy-id node3.xxx.com
  • HDFS集群

    1
    2
    start-dfs.sh 
    stop-dfs.sh
  • YARN集群

    1
    2
    start-yarn.sh
    stop-yarn.sh
  • 启动与关闭所有模块

    1
    2
    3
    4
    5
    start-all.sh
    stop-all.sh

    [root@node1 ~]# start-all.sh
    This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh

集群进程确认和错误排查

  • 确认是否成功

    1
    2
    3
    4
    5
    6
    [root@node1 ~]# jps
    8000 DataNode
    8371 NodeManager
    8692 Jps
    8264 ResourceManager
    7865 NameNode
  • 如果进程不在,看启动运行日志!

    1
    2
    3
    4
    #默认情况下 日志目录
    cd /export/server/hadoop-3.3.0/logs/

    #注意找到对应进程名字 以 log 结尾的文件

Web 页面

  • Hadoop Web 页面
    • HDFS集群 http://namenode_host:9870
    • YARN集群 http://resourcemanager_host:8088

辅助功能

jobhistory 服务

默认情况下,yarn 上关于 MapReduce 程序执行历史信息、执行记录不会永久存储;一旦yarn集群重启,之前的信息就会消失。

开启 jobhistory 服务后即可保存 yarn 上已经完成的 MapReduce 的执行信息。

  1. 配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    vim mapred-site.xml

    <property>
    <name>mapreduce.jobhistory.address</name>
    <value>node1:10020</value>
    </property>

    <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>node1:19888</value>
    </property>
  2. scp同步给其他机器

    1
    2
    3
    scp /export/server/hadoop-3.3.0/etc/hadoop/mapred-site.xml node2:/export/server/hadoop-3.3.0/etc/hadoop/

    scp /export/server/hadoop-3.3.0/etc/hadoop/mapred-site.xml node3:/export/server/hadoop-3.3.0/etc/hadoop/
  3. 重启hadoop集群

自己手动启停jobhistory服务。

1
2
3
4
5
6
7
8
9
10
11
12
13
#hadoop2.x版本命令
mr-jobhistory-daemon.sh start|stop historyserver

#hadoop3.x版本命令
mapred --daemon start|stop historyserver

[root@node1 ~]# jps
13794 JobHistoryServer
13060 DataNode
12922 NameNode
13436 NodeManager
13836 Jps
13327 ResourceManager

HDFS 垃圾桶机制

在默认情况下 hdfs没有垃圾桶 意味着删除操作直接物理删除文件。

1
2
[root@node1 ~]# hadoop fs -rm /test/1.txt
Deleted /test/1.txt
  • 配置

    1
    2
    3
    4
    5
    6
    7
    8
    在core-site.xml中开启垃圾桶机制

    指定保存在垃圾桶的时间。单位分钟

    <property>
    <name>fs.trash.interval</name>
    <value>1440</value>
    </property>
  • 集群同步配置 重启hadoop服务。

    1
    2
    3
    4
    5
    6
    [root@node1 hadoop]# pwd
    /export/server/hadoop-3.3.0/etc/hadoop
    [root@node1 hadoop]# scp core-site.xml node2:$PWD
    core-site.xml 100% 1027 898.7KB/s 00:00
    [root@node1 hadoop]# scp core-site.xml node3:$PWD
    core-site.xml
  • 配置好之后 再删除文件 直接进入垃圾桶

    1
    2
    [root@node1 ~]# hadoop fs -rm /a.txt
    INFO fs.TrashPolicyDefault: Moved: 'hdfs://node1:8020/a.txt' to trash at: hdfs://node1:8020/user/root/.Trash/Current/a.txt
  • 垃圾桶的本质就是hdfs上的一个隐藏目录。

    1
    hdfs://node1:8020/user/用户名/.Trash/Current
  • 后悔了 需要恢复怎么做?

    1
    hadoop fs -cp /user/root/.Trash/Current/a.txt /
  • 就想直接删除文件怎么做?

    1
    2
    [root@node1 ~]#  hadoop fs -rm -skipTrash /a.txt
    Deleted /a.txt
如果觉得文章写得不错或对您有帮助,请我喝杯柠檬茶吧!