Hadoop 3.1.3 本地、伪分布、完全分布环境搭建 学习笔记

文章目录

  • Hadoop
        • 大数据特点(4V)
        • hadoop的优势
    • 一、Hadoop组成(重点)
            • Modules
        • HDFS架构
        • YARN架构
        • MapReduce架构
          • 大数据生态体系
    • 二、Hadoop运行环境搭建(开发重点)
      • 虚拟机环境准备
      • 安装JDK
      • 安装Hadoop
      • 伪分布式
          • 启动HDFS
          • 启动YARN并运行MapReduce程序
          • 常用端口号
      • 完全分布式
          • 编写集群分发脚本xsync
          • 完全分布式集群规划: (按照3个副本来说)
          • 单节点启动
          • 集群格式化问题
          • SSH无密登录配置
          • 群起集群
          • 配置历史服务器
          • 配置日志的聚集
          • 集群时间同步
    • 三、Hadoop 3.x 和2.x主要区别
          • 2) 引入纠删码(Erasure Coding)
          • 3) 重写了Shell脚本
          • 6) 支持超过两个NN
          • 7) 许多服务的默认端口改变了

Hadoop

大数据特点(4V)

1、Volume(大量)

2、Velocity(告诉)

3、Variety(多样)

4、Value(低价值密度)

hadoop的优势

高可靠性:多个数据副本,不会导致数据丢失

高扩展性:横向扩展

高效性:Hadoop并行工作,加快处理速度

高容错性:能够自动将失败的任务重新分配

一、Hadoop组成(重点)

1.x HDFS(数据存储)+ MapReduce(计算 + 资源调度) + Common(辅助工具)

2.x HDFS(数据存储)+ MapReduce(计算)+ Yarn(资源调度)+ Common(辅助工具)

解偶

Modules

The project includes these modules:

  • Hadoop Common: The common utilities that support the other Hadoop modules.
  • Hadoop Distributed File System (HDFS™): A distributed file system that provides high-throughput access to application data.
  • Hadoop YARN: A framework for job scheduling and cluster resource management.
  • Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.
  • Hadoop Ozone: An object store for Hadoop.

HDFS架构

HDFS(Hadoop Distributed File System)

1.NameNode(nn): 存储文件的 元数据,如文件名、文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表块所在的DataNode等。

2.DataNode(dn): 在本地文件系统存储文件块数据,以及块数据的校验和

​ ——真实数据

3.Secondary NameNode(2nn): 每隔一段时间对NameNode元数据备份。

​ ——辅助NameNode工作,不能替换

YARN架构

1.ResourceManager(RM) ——管理集群中所有资源(每个DataNode上的资源)

(1)处理客户端请求

(2)启动或监控ApplicationMaster

(3)监控Nodemanager

(4)资源的分配和调度

2.NodeManager(NM) ——管理单个节点的资源(单个DataNode资源)

(1)管理单个节点上的资源

(2)处理来自ResourceManager的命令

(3)处理来自ApplicationMaster的命令

3.ApplicationMaster(AM) ——每个MapReduce(MR)任务会启动一个MrAppMaster, 负责为MapReduce向ResourceManager申请资源(MrAppMaster是AM的子类)

(1)负责数据的切分

(2)为应用程序申请资源并分配给内部的任务

(3)任务的监控与容错

4.Container:——对资源的封装,防止资源被侵占

Containe是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等

举例:  
运行一个MapReduce任务,MapReduce需要启动2个MapTask 和 1个 ReduceTask,也就是总共3个Task

首先会启动一个MrAppMaster ,需要用到资源,假如2G内存,此时RM会在有资源的NM上分配资源,运行MrAppMaster[此时就有1个container]
接下来 MrAppMaster 会根据MapReduce的情况, 比如需要总共启动3个Task , MrAppMaster会向RM申请资源,假如
一个Task需要1G的内存, RM会在有资源的NM上分配, 来运行Task. 每个Task单独运行,占用1G内存。此时又有3个Container

需要解释的是 MrAppMaster和所有的Task可以运行在不同的服务器.

最后当所有的Task都运行完成后,MrAppMaster会想RM注销自己,RM回收资源。

MapReduce架构

MapReduce将计算过程分为两个阶段:Map和Reduce

1)Map阶段并行处理输入数据

2)Reduce阶段对Map结果进行汇总

大数据生态体系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FhGJIfeB-1587564742487)(/Users/vanas/Library/Application Support/typora-user-images/截屏2020-04-08下午6.44.05.png)]

二、Hadoop运行环境搭建(开发重点)

虚拟机环境准备

根据前两篇 设置 然后继续

1)虚拟机配置要求如下:

单台虚拟机:内存4G,硬盘50G,安装必要环境(最小化安装)

补充安装各种指令、

sudo yum install -y epel-release

sudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop

修改克隆虚拟机的静态IP(按照自己机器的网络设置进行修改)

sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33

2)修改主机名:

修改主机名称

sudo vim /etc/hostname

配置主机名称映射,打开/etc/hosts

sudo vim /etc/hosts

3)关闭防火墙

sudo systemctl stop firewalld

sudo systemctl disable firewalld

4)创建用户

sudo useradd vanas

sudo passwd 123456

5)配置用户具有root权限

sudo vi /etc/sudoers

修改/etc/sudoers文件,找到下面一行(91行),在root下面添加一行,如下所示:

## Allow root to run any commands anywhere

root   ALL=(ALL)   ALL

Vanas	 ALL=(ALL)   NOPASSWD:ALL

主机联动host映射文件之前已经写好就不用再改了

切换用户

su vanas

6)在/opt目录下创建文件夹

注意目前用户已经不是root

在/opt目录下创建module、software文件夹

sudo mkdir module

sudo mkdir software

修改module、software文件夹的所有者

sudo mkdir /opt/module /opt/software

sudo chown vanas:vanas /opt/module /opt/software

记得重启

reboot

安装JDK

  1. 将JDK安装包上传到Linux /opt/software目录下

  2. 解压JDK到/opt/module目录下

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

3)配置JDK环境变量

新建/etc/profile.d/my_env.sh文件

sudo vim /etc/profile.d/my_env.sh

#JAVA_HOME
JAVA_HOME=/opt/module/jdk1.8.0_212
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME

保存后退出

:wq
  1. 测试JDK是否安装成功
source /etc/profile	
java -version

安装Hadoop

Hadoop下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/

  1. 将hadoop安装包上传到/opt/software目录下

  2. 解压安装文件到/opt/module下面

 tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
  1. 查看是否解压成功
 ls /opt/module/
 hadoop-3.1.3
  1. 将Hadoop添加到环境变量

获取Hadoop安装路径

pwd

/opt/module/hadoop-3.1.3

打开/etc/profile.d/my_env.sh文件(shift+g)

#JAVA_HOME
JAVA_HOME=/opt/module/jdk1.8.0_212
#HADOOP_HOME
HADOOP_HOME=/opt/module/hadoop-3.1.3
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export PATH JAVA_HOME HADOOP_HOME

保存后退出

:wq

让修改后的文件生效

source /etc/profile
  1. 测试是否安装成功
hadoop version
Hadoop 3.1.3
  1. 重启(如果Hadoop命令不能用再重启)
sync
sudo reboot

伪分布式

启动HDFS

(1)配置集群

[vanas@hadoop132 ~]$ cd /opt/
[vanas@hadoop132 opt]$ cd module/hadoop-3.1.3/etc/hadoop/
[vanas@hadoop132 hadoop]$ vim hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_212

[vanas@hadoop132 hadoop]$ vim core-site.xml 
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
    <value>hdfs://hadoop132:9820</value>
</property>

<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
	<name>hadoop.tmp.dir</name>
	<value>/opt/module/hadoop-3.1.3/data/tmp</value>
</property>


[vanas@hadoop132 hadoop]$ vim hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
	<name>dfs.replication</name>
	<value>1</value>
</property>

格式化后多处data 和logs

[vanas@hadoop132 hadoop]$ cd ..
[vanas@hadoop132 etc]$ cd ..
[vanas@hadoop132 hadoop-3.1.3]$ ll
总用量 204
drwxr-xr-x. 2 vanas vanas   4096 9月  12 2019 bin
drwxr-xr-x. 3 vanas vanas   4096 9月  12 2019 etc
drwxr-xr-x. 2 vanas vanas   4096 9月  12 2019 include
drwxrwxr-x. 2 vanas vanas   4096 4月   8 16:43 input
drwxr-xr-x. 3 vanas vanas   4096 9月  12 2019 lib
drwxr-xr-x. 4 vanas vanas   4096 9月  12 2019 libexec
-rw-rw-r--. 1 vanas vanas 147145 9月   4 2019 LICENSE.txt
-rw-rw-r--. 1 vanas vanas  21867 9月   4 2019 NOTICE.txt
-rw-rw-r--. 1 vanas vanas   1366 9月   4 2019 README.txt
drwxr-xr-x. 3 vanas vanas   4096 9月  12 2019 sbin
drwxr-xr-x. 4 vanas vanas   4096 9月  12 2019 share
[vanas@hadoop132 hadoop-3.1.3]$ hdfs namenode -format

[vanas@hadoop132 hadoop-3.1.3]$ ll
总用量 212
drwxr-xr-x. 2 vanas vanas   4096 9月  12 2019 bin
drwxrwxr-x. 3 vanas vanas   4096 4月  10 09:49 data
drwxr-xr-x. 3 vanas vanas   4096 9月  12 2019 etc
drwxr-xr-x. 2 vanas vanas   4096 9月  12 2019 include
drwxrwxr-x. 2 vanas vanas   4096 4月   8 16:43 input
drwxr-xr-x. 3 vanas vanas   4096 9月  12 2019 lib
drwxr-xr-x. 4 vanas vanas   4096 9月  12 2019 libexec
-rw-rw-r--. 1 vanas vanas 147145 9月   4 2019 LICENSE.txt
drwxrwxr-x. 2 vanas vanas   4096 4月  10 09:49 logs
-rw-rw-r--. 1 vanas vanas  21867 9月   4 2019 NOTICE.txt
-rw-rw-r--. 1 vanas vanas   1366 9月   4 2019 README.txt
drwxr-xr-x. 3 vanas vanas   4096 9月  12 2019 sbin
drwxr-xr-x. 4 vanas vanas   4096 9月  12 2019 share

(2)启动、测试集群增、删、查

注意:jps是JDK中的命令,不是Linux命令。不安装JDK不能使用jps

[vanas@hadoop132 hadoop-3.1.3]$ hdfs --daemon start namenode
[vanas@hadoop132 hadoop-3.1.3]$ hdfs --daemon start datanode
[vanas@hadoop132 hadoop-3.1.3]$ jps
14027 Jps
13149 NameNode
13694 DataNode
[vanas@hadoop132 hadoop-3.1.3]$ hdfs dfs -mkdir /input
[vanas@hadoop132 hadoop-3.1.3]$ hdfs dfs -put input/my.txt /input
[vanas@hadoop132 hadoop-3.1.3]$ hdfs dfs -ls /
Found 1 items
drwxr-xr-x   - vanas supergroup          0 2020-04-10 11:57 /input      1
[vanas@hadoop132 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

web端查看HDFS文件系统

http://hadoop132:9870

启动YARN并运行MapReduce程序

(1)配置集群在YARN上运行MR

[vanas@hadoop132 logs]$ cd ..
[vanas@hadoop132 hadoop-3.1.3]$ cd etc/hadoop/
[vanas@hadoop132 hadoop]$ vim yarn-site.xml 
<!-- Reducer获取数据的方式 -->
<property>
 		<name>yarn.nodemanager.aux-services</name>
 		<value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop132</value>
</property>
	  <property>
        <name>yarn.nodemanager.env-whitelist</name>        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
 </property>
 
[vanas@hadoop132 hadoop]$ vim mapred-site.xml 
<!-- 指定MR运行在YARN上 -->

<property>

                <name>mapreduce.framework.name</name>

                <value>yarn</value>

</property>

(2)启动、测试集群增、删、查

[vanas@hadoop132 hadoop]$ cd ..
[vanas@hadoop132 etc]$ cd ..
[vanas@hadoop132 hadoop-3.1.3]$ jps
94464 Jps
13149 NameNode
13694 DataNode

[vanas@hadoop132 hadoop-3.1.3]$ yarn --daemon start resourcemanager
[vanas@hadoop132 hadoop-3.1.3]$ yarn --daemon start nodemanager
[vanas@hadoop132 hadoop-3.1.3]$ jps
97376 Jps
97207 NodeManager
13149 NameNode
95791 ResourceManager
13694 DataNode

(3)在YARN上执行WordCount案例

[vanas@hadoop132 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
[vanas@hadoop132 hadoop-3.1.3]$ hdfs dfs -ls /
Found 4 items
drwxr-xr-x   - vanas supergroup          0 2020-04-10 11:57 /input
drwxr-xr-x   - vanas supergroup          0 2020-04-10 12:55 /output
drwx------   - vanas supergroup          0 2020-04-10 11:04 /tmp

[vanas@hadoop132 hadoop-3.1.3]$ hdfs dfs -ls /output
Found 2 items
-rw-r--r--   1 vanas supergroup          0 2020-04-10 12:55 /output/_SUCCESS
-rw-r--r--   1 vanas supergroup         30 2020-04-10 12:55 /output/part-r-00000
[vanas@hadoop132 hadoop-3.1.3]$ hdfs dfs -cat /output/part-r-00000
2020-04-10 12:56:23,251 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
dfs0509 1
dfs111  1
dfsvanas  1

YARN的浏览器页面查看

http://hadoop132:8088

常用端口号
Daemon App Hadoop2 Hadoop3
NameNode Port Hadoop HDFS NameNode 8020 / 9000 9820
Hadoop HDFS NameNode HTTP UI 50070 9870
Hadoop HDFS NameNode HTTPS UI 50470 9871
Secondary NameNode Port Secondary NameNode HTTP 50091 9869
Secondary NameNode HTTP UI 50090 9868
DataNode Port Hadoop HDFS DataNode IPC 50020 9867
Hadoop HDFS DataNode 50010 9866
Hadoop HDFS DataNode HTTP UI 50075 9864
Hadoop HDFS DataNode HTTPS UI 50475 9865

记下:

NameNode 9820(内部通信) 9870(web端)

2NN 9868(web端)

ResourceManager 8088(web端)

HistoryServer 19888(web端)

完全分布式

克隆三台虚拟机 完成环境准备

sudo mkdir /opt/module /opt/software

sudo chown -R vanas:vanas /opt/module /opt/software
  1. scp(secure copy)安全拷贝

  2. rsync 远程同步工具

    选项 功能
    -a 归档拷贝
    -v 显示复制过程

    rsync用的比较多

scp -r /opt/module/* vanas@hadoop134:/opt/moudle/
<!]--拉过去 -->
scp -r vanas@hadoop132:/opt/module/* /opt/module

scp -r vanas@hadoop132:/opt/module/* vanas@hadoop133:/opt/module/

rsync -av /opt/module/* vanas@hadoop133:/opt/module/

[vanas@hadoop133 opt]$ scp -r vanas@hadoop132:/opt/module vanas@hadoop133:/opt/module

[vanas@hadoop132 bin]$ rsync -av /opt/module/  vanas@hadoop130:/opt/module

编写集群分发脚本xsync
[vanas@hadoop130 hadoop]$ cd ~
[vanas@hadoop130 ~]$ mkdir bin
[vanas@hadoop130 ~]$ cd bin
[vanas@hadoop130 bin]$ touch xsync
[vanas@hadoop130 bin]$ vim xsync

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
  echo Not Enough Arguement!
  exit;
fi
#2. 遍历集群所有机器
for host in hadoop133 hadoop134
do
  echo ====================  $host  ====================
  #3. 遍历所有目录,挨个发送
  for file in $@
  do
    #4 判断文件是否存在
    if [ -e $file ]
    then
      #5. 获取父目录
      pdir=$(cd -P $(dirname $file); pwd)
      #6. 获取当前文件的名称
      fname=$(basename $file)
      ssh $host "mkdir -p $pdir"
      rsync -av $pdir/$fname $host:$pdir
    else
      echo $file does not exists!
    fi
  done
done


[vanas@hadoop130 bin]$ chmod 777 xsync
[vanas@hadoop130 bin]$ ll
总用量 4
-rwxrwxrwx. 1 vanas vanas 621 4月  10 16:03 xsync

测试xsync是否好用

[vanas@hadoop130 bin]$ cd /opt/module/hadoop-3.1.3/
[vanas@hadoop130 hadoop-3.1.3]$ touch aaa.txt
[vanas@hadoop130 hadoop-3.1.3]$ ll
[vanas@hadoop130 hadoop-3.1.3]$ xsync aaa.txt
==================== hadoop133 ====================
The authenticity of host 'hadoop133 (192.168.69.133)' can't be established.
ECDSA key fingerprint is SHA256:yLxOgG/cw1It+0IgoLqv08WlIRDlFBh3jNoPkR7XU48.
ECDSA key fingerprint is MD5:e1:5d:77:03:df:e1:e6:8d:4d:e4:61:8b:a3:c9:9d:3c.
Are you sure you want to continue connecting (yes/no)? yest^H
Warning: Permanently added 'hadoop133,192.168.69.133' (ECDSA) to the list of known hosts.
vanas@hadoop133's password: 
vanas@hadoop133's password: 
sending incremental file list
aaa.txt

sent 103 bytes  received 35 bytes  55.20 bytes/sec
total size is 0  speedup is 0.00
==================== hadoop134 ====================
The authenticity of host 'hadoop134 (192.168.69.134)' can't be established.
ECDSA key fingerprint is SHA256:yLxOgG/cw1It+0IgoLqv08WlIRDlFBh3jNoPkR7XU48.
ECDSA key fingerprint is MD5:e1:5d:77:03:df:e1:e6:8d:4d:e4:61:8b:a3:c9:9d:3c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hadoop134,192.168.69.134' (ECDSA) to the list of known hosts.
vanas@hadoop134's password: 
vanas@hadoop134's password: 
sending incremental file list
aaa.txt

sent 103 bytes  received 35 bytes  39.43 bytes/sec
total size is 0  speedup is 0.00

分别查看hadoop133、和hadoop134都已存在

完全分布式集群规划: (按照3个副本来说)

1个NameNode 3个DataNode 1个SecondaryNameNode 1个ResourceManager 3个NodeManager

理论情况: 需要有6个机器

实际情况: 3台机器

因为NameNode 、SecondaryNameNode 、 ResourceManager运行中需要的资源比较多,因此分布到不同的节点中.

Hadoop130 Hadoop133 Hadoop134
HDFS NameNode
DataNode
DataNode SecondaryNameNode
DataNode
YARN NodeManager ResourceManager
NodeManager
NodeManager

(1)核心配置文件

配置core-site.xml

[vanas@hadoop130 hadoop-3.1.3]$ cd etc/hadoop/
[vanas@hadoop130 hadoop]$ vim core-site.xml 
<configuration>
    <!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop130:9820</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.data.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
</property>



<!-- 下面是兼容性配置,先跳过 -->
<!-- 配置该atguigu(superUser)允许通过代理访问的主机节点 -->
    <property>
        <name>hadoop.proxyuser.vanas.hosts</name>
        <value>*</value>
</property>
<!-- 配置该atguigu(superuser)允许代理的用户所属组 -->
    <property>
        <name>hadoop.proxyuser.vanas.groups</name>
        <value>*</value>
</property>
<!-- 配置该atguigu(superuser)允许代理的用户-->
    <property>
        <name>hadoop.proxyuser.vanas.users</name>
        <value>*</value>
    </property>

</configuration>

(2)HDFS配置文件

配置hdfs-site.xml

[vanas@hadoop130 hadoop]$ vim hdfs-site.xml 
<configuration>
<!-- 指定NameNode数据的存储目录 -->
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file://${hadoop.data.dir}/name</value>
  </property>
 <!-- 指定Datanode数据的存储目录 -->

  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file://${hadoop.data.dir}/data</value>
  </property>
    
   <!-- 指定SecondaryNameNode数据的存储目录 -->

    <property>
    <name>dfs.namenode.checkpoint.dir</name>
    <value>file://${hadoop.data.dir}/namesecondary</value>
  </property>
   
   <!-- 兼容配置,先跳过 -->
    <property>
    <name>dfs.client.datanode-restart.timeout</name>
    <value>30s</value>
  </property>

  <!-- nn web端访问地址-->
<property>
  <name>dfs.namenode.http-address</name>
  <value>hadoop130:9870</value>
</property>
  <!-- 2nn web端访问地址-->

  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop134:9868</value>
  </property>
  </configuration>

(3)YARN配置文件

配置yarn-site.xml

[vanas@hadoop130 hadoop]$ vim yarn-site.xml 
<configuration>
<!--指定mapreduce走shuffle -->
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
     <!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop133</value>
</property>
<!-- 环境变量的继承 -->
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>

(4)MapReduce配置文件

配置mapred-site.xml

<configuration>

<!-- 指定MR运行在YARN上 -->

<property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>

</property>
</configuration>

在集群上分发配置好的hadoop

[vanas@hadoop130 hadoop]$ cd ..
[vanas@hadoop130 etc]$ xsync hadoop
==================== hadoop133 ====================
vanas@hadoop133's password: 
vanas@hadoop133's password: 
sending incremental file list
hadoop/
hadoop/core-site.xml
hadoop/hdfs-site.xml
hadoop/yarn-site.xml

sent 4,305 bytes  received 114 bytes  1,262.57 bytes/sec
total size is 108,704  speedup is 24.60
==================== hadoop134 ====================
vanas@hadoop134's password: 
vanas@hadoop134's password: 
sending incremental file list
hadoop/
hadoop/core-site.xml
hadoop/hdfs-site.xml
hadoop/yarn-site.xml

[vanas@hadoop130 etc]$ cd /etc/profile.d
[vanas@hadoop130 profile.d]$ sudo vim my_env.sh
#JAVA_HOME
JAVA_HOME=/opt/module/jdk1.8.0_212
#HADOOP_HOME
HADOOP_HOME=/opt/module/hadoop-3.1.3
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export PATH JAVA_HOME HADOOP_HOME
[vanas@hadoop130 profile.d]$ sudo scp -r ./my_env.sh root@hadoop133:/etc/profile.d/
The authenticity of host 'hadoop133 (192.168.69.133)' can't be established.
ECDSA key fingerprint is SHA256:yLxOgG/cw1It+0IgoLqv08WlIRDlFBh3jNoPkR7XU48.
ECDSA key fingerprint is MD5:e1:5d:77:03:df:e1:e6:8d:4d:e4:61:8b:a3:c9:9d:3c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hadoop133,192.168.69.133' (ECDSA) to the list of known hosts.
root@hadoop133's password: 
my_env.sh                                                     100%  146   211.6KB/s   00:00    
[vanas@hadoop130 profile.d]$ sudo scp -r ./my_env.sh root@hadoop134:/etc/profile.d/
The authenticity of host 'hadoop134 (192.168.69.134)' can't be established.
ECDSA key fingerprint is SHA256:yLxOgG/cw1It+0IgoLqv08WlIRDlFBh3jNoPkR7XU48.
ECDSA key fingerprint is MD5:e1:5d:77:03:df:e1:e6:8d:4d:e4:61:8b:a3:c9:9d:3c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hadoop134,192.168.69.134' (ECDSA) to the list of known hosts.
root@hadoop134's password: 
my_env.sh                                                     100%  146   386.8KB/s   00:00    
[vanas@hadoop130 profile.d]$ source /etc/profile
[vanas@hadoop133 profile.d]$ source /etc/profile
[vanas@hadoop134 profile.d]$ source /etc/profile
单节点启动

启动HDFS

初始化前注意清空data和logs

[vanas@hadoop130 hadoop-3.1.3]$ rm -rf data/ logs/
[vanas@hadoop133 hadoop-3.1.3]$ rm -rf data/ logs/
[vanas@hadoop134 hadoop-3.1.3]$ rm -rf data/ logs/

[vanas@hadoop130 profile.d]$ hdfs namenode -format
[vanas@hadoop130 hadoop-3.1.3]$ hdfs --daemon start namenode

[vanas@hadoop130 hadoop-3.1.3]$ hdfs --daemon start datanode
[vanas@hadoop130 hadoop-3.1.3]$ jps
36872 NameNode
39448 DataNode
39630 Jps

[vanas@hadoop133 profile.d]$ hdfs --daemon start datanode

[vanas@hadoop134 hadoop-3.1.3]$ hdfs --daemon start datanode
[vanas@hadoop134 hadoop-3.1.3]$ hdfs --daemon start secondarynamenode

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8IFo08td-1587564742488)(https://tva1.sinaimg.cn/large/00831rSTgy1gdox3qrvzgj315g0u0n6c.jpg)]

启动yarn

[vanas@hadoop133 hadoop-3.1.3]$ yarn --daemon start resourcemanager
 
[vanas@hadoop130 hadoop-3.1.3]$ yarn --daemon start nodemanager
[vanas@hadoop130 hadoop-3.1.3]$ jps
52467 Jps
52339 NodeManager
36872 NameNode
39448 DataNode

[vanas@hadoop133 hadoop-3.1.3]$ yarn --daemon start nodemanager
[vanas@hadoop133 hadoop-3.1.3]$ jps
56788 Jps
40039 DataNode
56044 NodeManager
49724 ResourceManager

[vanas@hadoop134 hadoop-3.1.3]$ yarn --daemon start nodemanager
[vanas@hadoop134 hadoop-3.1.3]$ jps
56384 NodeManager
43090 SecondaryNameNode
57557 Jps
41535 DataNode

截屏2020-04-10下午8.05.47

集群格式化问题

集群id问题

  1. 集群是否需要每次都格式化?
    不需要. 正常情况下, 一个新配置好的集群需要格式化,后续就不要再进行格式化操作。
    除非整个集群的数据都不要了,集群遇到严重的问题,需要重新搭建,等搭建好后需要格式化.

  2. 如果要重新格式化集群需要注意什么问题?

    如果要重新格式化需要删除 data目录 和 logs目录 。

    如果不删除 , 重新格式化会生成新的集群id, 而DN记录的还是之前的集群id
    当DN启动以后找不到NN,然后DN直接下线.

    DN启动起来以后,会自动找NN进行注册.

SSH无密登录配置

截屏2020-04-11下午12.56.03

无密钥配置

[vanas@hadoop130 hadoop-3.1.3]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vanas/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/vanas/.ssh/id_rsa.
Your public key has been saved in /home/vanas/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:RnHv4HI/XnZlKv0gXt/IjsjSF5H5YU1dR9UTZ8xXJm8 vanas@hadoop130
The key's randomart image is:
+---[RSA 2048]----+
|        . .   .=^|
|         o .   *X|
|        . . .o oE|
|       . . o+ o..|
|        S o .+ .o|
|       . o ....o.|
|         .  =.B .|
|        ...+.X *.|
|         .o.+.+ +|
+----[SHA256]-----+
[vanas@hadoop130 ~]$ ll -a
总用量 40
drwx------. 4 vanas vanas 4096 4月  10 19:38 .
drwxr-xr-x. 3 root  root  4096 4月   2 19:59 ..
-rw-------. 1 vanas vanas 1714 4月  10 20:32 .bash_history
-rw-r--r--. 1 vanas vanas   18 4月  11 2018 .bash_logout
-rw-r--r--. 1 vanas vanas  193 4月  11 2018 .bash_profile
-rw-r--r--. 1 vanas vanas  231 4月  11 2018 .bashrc
drwxrwxr-x. 2 vanas vanas 4096 4月  10 16:03 bin
drwx------. 2 vanas vanas 4096 4月  11 09:29 .ssh
-rw-------. 1 vanas vanas 5701 4月  10 19:38 .viminfo
[vanas@hadoop130 ~]$ cd .ssh/
[vanas@hadoop130 .ssh]$ ll
总用量 12
-rw-------. 1 vanas vanas 1675 4月  11 09:29 id_rsa    //私钥
-rw-r--r--. 1 vanas vanas  397 4月  11 09:29 id_rsa.pub  //公钥
-rw-r--r--. 1 vanas vanas  372 4月  10 18:07 known_hosts

[vanas@hadoop130 .ssh]$ ssh-copy-id hadoop133
[vanas@hadoop130 .ssh]$ ssh-copy-id hadoop134

[vanas@hadoop130 .ssh]$ ssh hadoop133
Last login: Sat Apr 11 09:19:19 2020 from hadoop130
[vanas@hadoop133 ~]$ exit
登出
Connection to hadoop133 closed.

[vanas@hadoop130 .ssh]$ ssh-copy-id hadoop130
[vanas@hadoop130 .ssh]$ ll
总用量 16
-rw-------. 1 vanas vanas  397 4月  11 09:36 authorized_keys
-rw-------. 1 vanas vanas 1675 4月  11 09:29 id_rsa
-rw-r--r--. 1 vanas vanas  397 4月  11 09:29 id_rsa.pub
-rw-r--r--. 1 vanas vanas  558 4月  11 09:36 known_hosts


.ssh文件夹下(~/.ssh)的文件功能解释

known_hosts 记录ssh访问过计算机的公钥(public key)
id_rsa 生成的私钥
id_rsa.pub 生成的公钥
authorized_keys 存放授权过的无密登录服务器公钥

133、134也如此操作,以134为例

[vanas@hadoop134 ~]$ ssh-keygen -t rsa
[vanas@hadoop134 ~]$ ssh-copy-id hadoop130
[vanas@hadoop134 ~]$ ssh-copy-id hadoop133
[vanas@hadoop134 ~]$ ssh-copy-id hadoop134

当前操作只对当前用户vanas管用

注意:

如果需用root

还需要在hadoop130上采用root账号,配置一下无密登录到hadoop130、hadoop133、hadoop134

还需要在hadoop133上采用vanas账号配置一下无密登录到hadoop130、hadoop133、hadoop134服务器上

群起集群

配置workers

千万别多 换行 或者 空格

[vanas@hadoop130 hadoop]$ vim workers 
hadoop130
hadoop133
hadoop134
[vanas@hadoop130 hadoop]$ xsync workers 

启动hdfs

namenode的服务器

[vanas@hadoop130 hadoop]$ start-dfs.sh

启动yarn

注意在rm在哪个服务器上

[vanas@hadoop133 .ssh]$ start-yarn.sh

关闭集群

stop-yarn.sh
stop-dfs.sh

注意关机前最好要先关闭集群

群起脚本

[vanas@hadoop130 ~]$ cd bin
[vanas@hadoop130 bin]$ vim mycluster
#!/bin/bash
if [ $# -lt 1 ]
 then 
   echo "No Args Input Error!!!!!"
   exit
fi
case $1 in 
"start")
   echo "======================== start hdfs ========================== "
   ssh hadoop130 /opt/module/hadoop-3.1.3/sbin/start-dfs.sh
   echo "======================== start yarn ========================== "
   ssh hadoop133 /opt/module/hadoop-3.1.3/sbin/start-yarn.sh
;;
"stop")
   echo "======================== stop yarn ========================== "
   ssh hadoop133 /opt/module/hadoop-3.1.3/sbin/stop-yarn.sh
   echo "======================== stop hdfs ========================== "
   ssh hadoop130 /opt/module/hadoop-3.1.3/sbin/stop-dfs.sh
;;
*)
  echo "Input Args Error!!!!!"
;;
esac

[vanas@hadoop130 bin]$ vim myjps
#!/bin/bash
for i in hadoop130 hadoop133 hadoop134
do
   echo "====================== $i JPS ======================="
   ssh $i /opt/module/jdk1.8.0_212/bin/jps
done

[vanas@hadoop130 bin]$ chmod 777 myjps
[vanas@hadoop130 bin]$ chmod 777 mycluster

集群基本测试

[vanas@hadoop130 ~]$ hdfs dfs -put /opt/module/hadoop-3.1.3/input/my.txt /user/vanas/input
[vanas@hadoop130 ~]$ cd /opt/module/hadoop-3.1.3/
[vanas@hadoop130 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/vanas/input /user/vanas/output

截屏2020-04-11上午11.22.06

配置历史服务器

查看程序的历史运行情况,需要配置一下历史服务器

配置mapred-site.xml

[vanas@hadoop130 etc]$ cd hadoop/
[vanas@hadoop130 hadoop]$ vi mapred-site.xml 
<!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop130:10020</value>
</property>

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

[vanas@hadoop130 hadoop]$ xsync mapred-site.xml 

[vanas@hadoop130 bin]$ mapred --daemon start historyserver
[vanas@hadoop130 bin]$ jps
82579 DataNode
83714 Jps
82391 NameNode
83113 NodeManager
83563 JobHistoryServer

http://hadoop130:19888/jobhistory

配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

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

配置yarn-site.xml

[vanas@hadoop130 hadoop-3.1.3]$ cd etc/hadoop/
[vanas@hadoop130 hadoop]$ vim yarn-site.xml 
<property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>  
        <name>yarn.log.server.url</name>  
        <value>http://hadoop130:19888/jobhistory/logs</value>  
    </property>
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
</property>

[vanas@hadoop101 hadoop]$ xsync yarn-site.xml 


[vanas@hadoop133 .ssh]$ stop-yarn.sh
[vanas@hadoop130 hadoop]$ mapred --daemon stop historyserver
[vanas@hadoop133 .ssh]$ start-yarn.sh
[vanas@hadoop130 hadoop]$ mapred --daemon start historyserver

[vanas@hadoop130 hadoop]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/vanas/input /user/vanas/output1

//设置虚拟内存超出
[vanas@hadoop130 hadoop]$ vim yarn-site.xml 
 <property>
    <description>Whether virtual memory limits will be enforced for
    containers.</description>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>true</value>
  </property>

http://hadoop130:19888/jobhistory

here查看详情

截屏2020-04-11下午12.50.15

截屏2020-04-11上午11.33.16

集群时间同步

时间服务器配置(必须root用户)

在所有节点关闭ntp服务和自启动(130,133,134都关闭)

修改ntp配置文件

[vanas@hadoop130 hadoop]$ su root
密码:
[root@hadoop130 hadoop]# systemctl stop ntpd
[root@hadoop130 hadoop]# systemctl disable ntpd
[root@hadoop130 hadoop]# vim /etc/ntp.conf 
server 127.127.1.0
fudge 127.127.1.0 stratum 10

截屏2020-04-11上午11.43.37

[root@hadoop130 hadoop]# vim /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes

截屏2020-04-11上午11.44.38

[root@hadoop130 hadoop]# systemctl start ntpd
[root@hadoop130 hadoop]# systemctl enable ntpd

其他机器配置(必须root用户)

[root@hadoop133 ~]# crontab -e 
[root@hadoop133 ~]# crontab -l
*/1 * * * * /usr/sbin/ntpdate hadoop130
[root@hadoop133 ~]# systemctl start ntpd
[root@hadoop133 ~]# systemctl enable ntpd

关闭

[root@hadoop133 ~]# crontab -e

三、Hadoop 3.x 和2.x主要区别

  1. 最低Java版本从7升级到8
2) 引入纠删码(Erasure Coding)

主要解决数据量大到一定程度磁盘空间存储能力不足的问题.

HDFS中的默认3副本方案在存储空间中具有200%的额外开销。但是,对于I/O活动相对较少冷数据集,在正常操作期间很少访问其他块副本,但仍然会消耗与第一个副本相同的资源量。

纠删码能勾在不到50%数据冗余的情况下提供和3副本相同的容错能力,因此,使用纠删码作为副本机制的改进是自然而然,也是未来的趋势.

3) 重写了Shell脚本

重写了Shell脚本,修改了之前版本长期存在的一些错误,并提供了一些新功能,在尽可能保证兼容性的前提下,一些新变化仍然可能导致之前的安装出现问题。

例如:

l 所有Hadoop Shell脚本子系统现在都会执行hadoop-env.sh这个脚本,它允许所有环节变量位于一个位置;

l 守护进程已通过*-daemon.sh选项从*-daemon.sh移动到了bin命令中,在Hadoop3中,我们可以简单的使用守护进程来启动、停止对应的Hadoop系统进程;

  1. 引入了新的API依赖

之前Hadoop客户端操作的Maven依赖为hadoop-client,这个依赖直接暴露了Hadoop的下级依赖,当用户和Hadoop使用相同依赖的不同版本时,可能造成冲突。

Hadoop3.0引入了提供了hadoop-client-api 和hadoop-client-runtime依赖将下级依赖隐藏起来,一定程度上来解决依赖冲突的问题

  1. MapReduce任务的本地化优化

MapReduce引入了一个NativeMapOutputCollector的本地化(C/C++)实现,对于shuffle密集的任务,可能提高30%或者更高的性能

6) 支持超过两个NN

HDFS NameNode高可用性的初始实现为单个Active NameNode 和 单个 Standby NameNode, 将edits复制到三个JournalNode。 该体系结构能够容忍系统中一个NN或者一个JN故障.但是,某些部署需要更高程序的容错能力,Hadoop3.x允许用户运行一个Active NameNode 和 多个 Standby NameNode。

7) 许多服务的默认端口改变了

Hadoop3.x之前,多个Hadoop服务的默认端口位于Linux临时端口范围(63768~61000). 这意味着在启动时,由于与另一个应用程序冲突,服务有时无法绑定到端口.

在Hadoop3.x中,这些可能冲突的端口已移出临时范围,受影响的有NameNode ,

SecondaryNamenode , DataNode 和 KMS

  1. 添加对Microsoft Azure Data Lake 和 阿里云对象存储系统的支持

  2. DataNode内部实现Balancer

一个DN管理多个磁盘,当正常写入时,多个磁盘是平均分配的。然而当添加新磁盘时,这种机制会造成DN内部严重的倾斜。

之前的DataNode Balancer只能实现DN之间的数据平衡,Hadoop3.x实现了内部的数据平衡。

  1. 重做的后台和任务堆内存管理

已实现根据服务器自动配置堆内存,HADOOP_HEAPSIZE变量失效。简化MapTask 和ReduceTask的堆内存配置,现已不必同时在配置中和Java启动选项中指定堆内存大小,旧有配置不会受到影响。

  1. HDFS实现服务器级别的Federation分流

对于HDFS Federation, 添加了一个对统一命名空间的RPC路由层 。 和原来的HDFS Federation没有变化,只是目前挂在管理不必在客户端完成,而是放在的服务器,从而简化了HDFS Federation访问。

  1. Yarn的时间线服务升级到V2

Yarn的时间线服务是MRJobHistory的升级版,提供了在Yarn上运行第三方程序的历史支持,该服务在Hadoop3.0升级为第二版

  1. 容量调度器实现API级别的配置

现在容量调度器可以实现通过REST API来改变配置,从而让管理员可以实现调度器自动配置。

  1. Yarn实现更多种资源类型的管理

Yarn调度器现已可以通过配置实现用户自定义的资源管理。现在Yarn可以根据CPU和内存意外的资源管理其任务队列

你可能感兴趣的:(Hadoop)