一、CentOS7 hadoop3.3.1安装(单机分布式、伪分布式、分布式)

前言

官方镜像下载地址: CentoshadoopJava
Centos为CentOS-7-x86_64-DVD-2009
Hadoop为hadoop-3.3.1.tar.gz
Java为jdk-8u301-linux-x64.tar.gz
PS:Hadoop3.X Java最低版本为1.8
纯原生态安装,非CDH和HDP,或是Ambari

预先设置

修改主机名

修改 /etc/sysconfig/network中的hostname

vi /etc/sysconfig/network中的hostname

或者这样

hostnamectl set-hostname Hadoop
#secureCRT 中ctrl+D

修改/etc/hosts文件

vi /etc/hosts

vi /etc/hosts
# 这里我除了修改127.0.0.1里的localhost.localdomain,还把其它服务器的ip和对应名称添加进来
127.0.0.1   localhost hadoop1 localhost4 localhost4.localdomain4
::1         localhost hadoop1 localhost6 localhost6.localdomain6
192.168.100.10 hadoop1
192.168.100.20 hadoop2
192.168.100.30 hadoop3

重启服务器

关闭防火墙

# 关闭
systemctl stop firewalld
# 禁止开机自启
systemctl disable firewalld

创建hadoop用户

# 创建用户并使用 /bin/bash 作为shell
$ useradd -m hadoop -s /bin/bash

# 给hadoop用户设置密码,若提示密码无效,不用管,接着输入一次即可
$ passwd hadoop

# 给hadoop增加执行权限
$ visudo
#98行  输入 :98 跳转至98行,增加一行 hadoop  ALL=(ALL) ALL
$ root ALL=(ALL) ALL
$ hadoop ALL=(ALL) ALL

SSH安装免密登陆

单机免密登陆——linux配置ssh免密登录

检查是否安装SSH

systemctl status sshd

已安装会显示ssh服务的状态(actving),否则,执行下面命令安装

# -y表示全部同意,不用每次都按y
yum install openssh-clients -y
yum install openssh-server -y

测试是否可用

#按提示确认连接后,输入当前用户密码即可,初始没有密码会提示创建密码
ssh localhost

设置无密码登录

#~ 代表的是用户的主文件夹,即 “/home/用户名” 这个目录,如你的用户名为 hadoop,则 ~ 就代表 “/home/hadoop/”
cd ~/.ssh/                     # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa              # 会有提示,都按回车就可以
cat id_rsa.pub >> authorized_keys  # 加入授权
chmod 600 ./authorized_keys    # 修改文件权限

此时再用 ssh localhost 命令,无需输入密码就可登陆

linux环境配置Java变量

查找当前是否有java安装目录
如果有则卸除自带的Java环境

[root@localhost ~]# java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
[root@localhost ~]# which java
/usr/bin/java
[root@localhost ~]# ls -lrt /usr/bin/java 
lrwxrwxrwx. 1 root root 22 Aug  6  2020 /usr/bin/java -> /etc/alternatives/java
[root@localhost ~]# ls -lrt /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 Aug  6  2020 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre/bin/java

额外知识
安装目录在 /usr/lib/jvm
1.通过rpm等方式安装的jdk,我们在 profile 文件里是没有看到环境变量配置的。我们调用java命令时可以正常执行,是他们是严格安装linux对环境变量的路径要求进行安装,并将相关命令链接到 /usr/bin 目录下,当我们在任意位置执行时,系统都会到 /usr/bin 下来执行。

/usr/bin 可执行的命令安装目录
/usr/lib 程序所使用的库函数保存位置
/usr/share/doc 基本的软件使用手册保存位置
/usr/share/man 帮助文件保存位置

使用 yum install java-1.8.0-openjdkl.x86_64 默认是只有jre的,jps,jstat等命令是不存在的,这个时候还需要安装开发包,找到后缀是devel的,执行 yum install java-1.8.0-openjdk-devel.x86_64 即可。
再加个 卸载java

rpm -qa | grep jdk
# 会出来一个类似下面这个的
copy-jdk-configs-3.3-10.el7_5.noarch

# 执行卸载
yum -y remove copy-jdk-configs-3.3-10.el7_5.noarch

如果没有Java环境,则

配置Java环境变量

一种是全局,修改 /etc/profile 文件,
一种是当前角色,修改 ~/.bash_profile 文件。

在文件中增加下面内容:

export JAVA_HOME=/usr/local/java/jdk1.8.0_301
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

保存退出后,执行 source /etc/profile(如果是当前角色,刷新对应的bash_profile) 刷新环境变量

安装Hadoop-3.3.0.tar.gz

上传至服务器,或者从服务器中下载
找个目录解压,比如/opt下

# -C 是指定解压目录
tar -zxvf hadoop-3.3.0.tar.gz -C /opt

解压完检查hadoop是否可用

#切换到hadoop的安装目录执行, 成功则显示版本信息
$ cd /opt/hadoop-3.3.0
$ ./bin/hadoop version

这里我们可以将hadoop也加入环境变量,就不需要每次到bin目录下执行

# 编辑profile文件
vi /etc/profile
# 增加hadoop环境变量
export HADOOP_HOME=/opt/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 保存后刷新下环境变量
source /etc/profile

运行

单机非分布式

主要用来调试时使用。
Hadoop 附带了丰富的例子(运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。
这里 我们试验的是 grep .

$ mkdir ./input
$ cp ./etc/hadoop/*.xml ./input   # 将配置文件作为输入文件
$ ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
$ cat ./output/*

伪分布式

1.修改配置文件

Hadoop 的配置文件位于 安装目录下 /etc/hadoop/ 中

[root@hadoop1 hadoop]# pwd
/opt/hadoop-3.3.0/etc/hadoop

伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml

#修改配置文件hadoop-env.sh

 # set to the root of your Java installation
export JAVA_HOME=/usr/local/java/jdk1.8.0_301

#修改配置文件 core-site.xml
<configuration>
	<!--指定Hadoop运行时产生文件的存储目录-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/data/hadoop/tmp</value>
    </property>
    <!--指定HDFS中NameNode的地址-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop2:9000</value>
    </property>
</configuration>

#修改配置文件 hdfs-site.xml, 
#搭建集群后,hadoop本身自带了一个webUI访问页面
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

2.格式化NameNode

./bin/hdfs namenode -format

3.开启 NaneNode 和 DataNode 进程

./sbin/start-dfs.sh

#启动完成后,可以通过命令 jps 来判断是否成功启动
[hadoop@localhost hadoop-3.3.0]$ jps
32081 NameNode
32561 Jps
32234 DataNode

#停止
./sbin/stop-dfs.sh

如果出现
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
解决方法:
方法一、
在Hadoop安装目录下找到sbin文件夹
在里面修改四个文件

1、对于start-dfs.sh和stop-dfs.sh文件,添加下列参数:
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

2、对于start-yarn.sh和stop-yarn.sh文件,添加下列参数:

#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

然后重新启动
建议第二种(推荐,实用)

cd /opt/hadoop-3.3.0/etc/hadoop
vim /hadoop-env.sh
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

日志文件输出在 安装目录下的logs文件夹中。
可以访问web页面,前面配置过的 http://localhost:9870/

4. 操作集群

  1. 在HDFS系统上创建一个input文件夹
./bin/hdfs dfs -mkdir -p /user/test/input
  1. 将测试文件内容上传到文件系统上
./bin/hdfs dfs -put input/core-site.xml  /user/test/input/
  1. 查看上传的文件是否正确
./bin/hdfs dfs -ls /user/test/input/

./bin/hdfs dfs -cat /user/test/input/core-site.xml

  1. 运行mapReduce程序
./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /user/test/input/core-site.xml /user/test/output/

./bin/hdfs dfs -cat /user/test/output/*

在浏览器中查看:在这里插入图片描述

5. 启动yarn(伪分布式也可以不启动)

上述通过 ./sbin/start-dfs.sh 启动 Hadoop,是启动 MapReduce 环境,我们可以启动 YARN ,让 YARN 来负责资源管理与任务调度。

  1. 修改配置文件 mapred-site.xml:
#修改内容如下
<configuration>
		<!--指定MR运行在YARN上-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
</configuration>
  1. 修改配置文件 yarn-site.xml:
<configuration>
		<!--Reducer获取数据的方式-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</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>

PS:这里不需要配置resourceManagerName.hostname。
3. 启动 YARN
启动前必须保证NameNode和DataNode已经启动:

# 启动YARN
./sbin/start-yarn.sh    

# 停止
./sbin/stop-yarn.sh

这里可以访问 ResourceManager - http://localhost:8088/
4. 开启历史服务器
在Web中查看任务运行情况 - http://localhost:19888/

mapred --daemon start historyserver

关闭

./sbin/stop-all.sh
# 历史进程要单独关闭
mapred --daemon stop historyserver

6.运行测试实例

  $ bin/hdfs dfs -mkdir /user
  $ bin/hdfs dfs -mkdir /user/input
  # 将配置文件作为输入文件
  $ bin/hdfs dfs -put etc/hadoop/*.xml /user/input   
  $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /user/input/core-site.xml /user/output/

  $ bin/hdfs dfs -cat /user/output/*

  # Hadoop 运行程序时,输出目录不能存在
  $ bin/hdfs dfs -rm -r /user/output

7. 配置日志保存在HDFS

应用运行完成以后,将程序运行日志信息上传到HDFS系统上,方便的查看到程序运行详情,方便开发调试。

修改配置文件 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>

注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
重新执行上面的wordcount,然后在JobHistory里面可以找到相应的日志。
http:localhost:8088

分布式

准备好三台服务器,按照前面的前置操作(注意SSH免密要配置好),下载安装的步骤准备好。(如果是Vmware则关机克隆)
注意!!!三台均要配置SSH免密
此处使用ssh-copy-id命令,可以把本地主机的公钥复制到远程主机的authorized_keys文件上,ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。

[root@hadoop1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
[root@hadoop1 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
#另外同理

Linux手册——ssh-copy-id

规划

hadoop1 hadoop2 hadoop3
HDFS NameNode SecondaryNameNode
DataNode DataNode DataNode
YARN ResourceManager
NodeManager NodeManager NodeManager
#### 集群:修改主机名
[[email protected] ~] hostnamectl set-hostname hadoop1
[[email protected] ~] hostnamectl set-hostname hadoop2
[[email protected] ~] hostnamectl set-hostname hadoop3

如果在SecureCRT中,可以用Ctrl+D重新登陆就可显示为hadoop主机名

修改配置文件

hadoop-env.sh、core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、workers

位置在hadoop文件路径/etc/hadoop
定位52行,配置自己的jdk路径即可

  1. hadoop-env.sh
cd /opt/{
    
    hadoop}/etc/hadoop
# 指定jdk路径
export JAVA_HOME=/usr/local/java/jdk1.8.0_301
  1. core-site.xml
    <!--指定HDFS中NameNode的地址-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop1:9000</value>
    </property>
		<!--指定HDFS中NameNode的地址-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/data/hadoop/tmp</value>
    </property>
  1. hdfs-site.xml
    <!--指定备份数-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!--nn web端访问地址-->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>hadoop1:9870</value>
	</property>
	<!--指定辅助名称节点-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop3:9868</value>
    </property>
  1. yarn-site.xml
    <!--Reducer获取数据的方式-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!--指定resourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop2</value>
    </property>
		<!--日志聚集功能开启-->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!--日志保留时间设置7天-->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>
  1. mapred-site.xml
    <!--指定MR运行在YARN上-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
  1. workers 添加主从节点【都要添加】删除localhost
hadoop1
hadoop2
hadoop3

在hadoop3.2之前workers还是为slaves
主节点修改【Hadoop1】传送给其他两个节点

单点启动

先格式化NameNode,在hadoop1上执行

hdfs namenode -format

注意,尽量少格式化NameNode

在master节点启动start.sh

sh /export/servers/hadoop-3.3.1/sbin/start-all.sh 
#或者进入sbin路径
./start-all.sh
启动服务如果出现这样的错误

Starting namenodes on [hadoop1]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [hadoop3]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
Starting resourcemanager
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
Starting nodemanagers
ERROR: Attempting to operate on yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation.

解决方案一
vi /etc/profile
#输入如下命令,在环境变量中添加下面的配置
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

生效

source /etc/profile
解决方案二:

将start-dfs.sh,stop-dfs.sh(在hadoop安装目录的sbin里)两个文件顶部添加以下参数

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

将start-yarn.sh,stop-yarn.sh(在hadoop安装目录的sbin里)两个文件顶部添加以下参数

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

按规划启动对应服务

# hadoop1
bin/hdfs --daemon start namenode
bin/hdfs --daemon start datanode

bin/yarn --daemon start nodemanager

如果dataNode节点未启动成功或者是启动自动宕掉
一、清理hadoop数据temp文件
二、重新把初次得namenode clusterID
通过日志查看,得到/var/data/hadoop/dfs/data/current

# hadoop2
bin/hdfs --daemon start datanode

bin/yarn --daemon start resourcemanager
bin/yarn --daemon start nodemanager
# hadoop3
bin/hdfs --daemon start datanode
bin/hdfs --daemon start secondarynamenode

bin/yarn --daemon start nodemanager

这里要把/etc/hosts里面的127.0.01的映射注释掉,在没有注释掉的时候启动时节点之间不能连接。

群集启动

直接在NameNode节点执行 sbin/start-dfs.sh

# hadoop1
sbin/start-dfs.sh

# hadoop2,hadoop3 这里单独去启动了dataNode
bin/hdfs --daemon start datanode


# hadoop2
sbin/start-yarn.sh 

# hadoop1,hadoop3
bin/yarn --daemon start nodemanager

Shell定时采集数据到HDFS

找到对应的data/logs。不存在则提前创建

配置环境变量

该目录下创建upload2HDFS.sh 脚(jio)本文件。写入java环境变量,主要是为了提高系统的可靠性,哪怕没有配置环境变量也能运行

vi upload2HDFS.sh

输入命令

export JAVA_HOME = "你的jdk安装路径"
export JRE_HOME = ${JAVA_HOME}/jre
export CLASSPATH = .:{
    
    JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH = ${JAVA_HOME}/bin:$PATH

export HADOOP_HOME = "你的Hadoop路径"
export PATH = ${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH

准备日志存放目录和待上传文件

##需要提前创建好文件目录
#日志存放的目录
log_src_dir = "自定义" #/export/data/logs/log
#待上传存放的目录
log_toupload_dir = "自定义/toupload" #/export/data/log/toupload

设置日志文件上传的路径

命名格式以时间结尾、并输出打印信息

#设置日期
date1=`date-d last-day + %Y_%m_%d`
#日志文件上传到hdfs的根目录
hdfs_root_dir=/data/clickLog/$date1/
#打印环境变量信息
echo "envs: hadoop_home: $AHDOOP_HOME"
#读取日志文件的目录,判断是否有需要上传的文件
echo "log_src_dir:"$log_src_dir

实现文件上传

ls $log_src_dir | while read fileName
do
  if [[ "$fileName"==access.log.* ]];then
      date = `date + %Y%d_%H_%M_%S`
      #将文件移动到待上传目录并重命名
      echo "moving $log_src_dir$fileName to
                   $log_toupload_dir"xxxxx_click_log_$fileName"date"
      mv $log_src_dir$fileName
                     $log_toupload_dir"xxxxx_click_log_$fileName"date
      #将待上传的文件path写入一个列表文件willDoing,
      echo $log_toupload_dir"xxxxx_click_log_$fileName"date >>
                             $log_toupload_dir"willDoing."date
  fi
done               

最后将文件从待上传目录传至HDFS中

#找到列表文件willDoing
ls $log_toupload_dir | grep will | grep -v "_COPY_" | grep -v "_HOME_" | while
read line
do
    #打印信息
    echo "toupload is in file:"$line
    #将待上传文件列表willDoing改名为willDoing_COPY_
    mv $log_toupload_dir$line $log_toupload_dir$line"_COPY_"
    # 读列表文件willDoing_COPY_的内容(一个一个的待上传文件名)
    # 此处的line就是列表中的一个待上传文件的path
    cat $log_toupload_dir$line"_COPY_" | while read line
    do
        #打印信息
        echo "puting...$line to hdfs path...$hdfs_root_dir"
        hadoop fs -mkdir -p $hdfs_root_dir
        hadoop fs -put $line $hdfs_root_dir
    done
    mv $log_toupload_dir$line"_COPY_" $log_toupload_dir$line"_DONE_"
done

现在每天12点执行一次,Linux crontab表达式执行定时任务

0 0 * * * /shell/upload2HDFS.sh

上述Crontab6个参数,分时日月周命令组成

启动命令汇总说明

sbin/start-all.sh 启动所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、ResourceManager、NodeManager
sbin/stop-all.sh 停止所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、ResourceManager、NodeManager

sbin/start-dfs.sh 启动Hadoop HDFS守护进程NameNode、SecondaryNameNode、DataNode
sbin/stop-dfs.sh 停止Hadoop HDFS守护进程NameNode、SecondaryNameNode、DataNode

sbin/start-yarn.sh 启动ResourceManager、NodeManager
sbin/stop-yarn.sh 停止ResourceManager、NodeManager

# 单独启动/停止的
bin/hdfs --daemon start namenode
bin/hdfs --daemon start datanode
bin/hdfs --daemon start secondarynamenode

bin/yarn --daemon start resourcemanager
bin/yarn --daemon start nodemanager

mapred --daemon start historyserver 
mapred --daemon stop historyserver  

--------------------------------------------------------------------------

# 旧版本的命令
sbin/hadoop-daemons.sh start namenode 单独启动NameNode守护进程

sbin/hadoop-daemons.sh stop namenode 单独停止NameNode守护进程

sbin/hadoop-daemons.sh start datanode 单独启动DataNode守护进程

sbin/hadoop-daemons.sh stop datanode 单独停止DataNode守护进程

sbin/hadoop-daemons.sh start secondarynamenode 单独启动SecondaryNameNode守护进程

sbin/hadoop-daemons.sh stop secondarynamenode 单独停止SecondaryNameNode守护进程

sbin/yarn-daemon.sh start resourcemanager 单独启动ResourceManager

sbin/yarn-daemons.sh start nodemanager  单独启动NodeManager

sbin/yarn-daemon.sh stop resourcemanager 单独停止ResourceManager

sbin/yarn-daemons.sh stopnodemanager  单独停止NodeManager

sbin/mr-jobhistory-daemon.sh start historyserver 手动启动jobhistory

sbin/mr-jobhistory-daemon.sh stop historyserver 手动停止jobhistory

云服务器
虚拟机和配置网卡 建议使用NAT模式

Hadoop 3 端口号的改变

分类 应用 Haddop 2.x port Haddop 3 port
NNPorts Namenode 8020 9820
NNPorts NN HTTP UI 50070 9870
NNPorts NN HTTPS UI 50470 9871
SNN ports SNN HTTP 50091 9869
SNN ports SNN HTTP UI 50090 9868
DN ports DN IPC 50020 9867
DN ports DN 50010 9866
DN ports DN HTTP UI 50075 9864
DN ports Namenode 50475 9865
## Hadoop 3 新特征
  • 基于JDK1.8(最低版本要求)
  • 剔除过期的API和实现,废弃hftp转为webhfs替代
  • Classpath isolation:新增的防止不同版本 jar 包冲突
  • Shell重写 (修复了Hadoop2脚本的bug,启动时的脚本命令也有不同,建议运行Hadoop3的脚本,大概有三分之一的地方不一样)
  • 支持HDFS的擦除编码 Erasure Encoding:默认EC策略可以节省50%的存储空间,同时还可以承受更多的存储故障(还在Haddoop2的基础上增加恢复功能)
  • DataNode 内部添加了负载均衡 Disk Balancer,磁盘之间的负载均衡(假定有3台服务器的磁盘都满了数据,数据存储在DataNode当中,可以在买一块磁盘插入,但其他磁盘还是满的,新磁盘是空的,这就产生了数据倾斜,所以Hadoop3提供了 Disk Balancer 磁盘平衡器自动帮我们将满磁盘分配到其他磁盘当中)
  • MapReduce任务级本地优化
  • MapReduce内存参数自动推断
    • mapreduce.{map,reduce}.memory.mb和mapreduce.{map,reduce}.java.opts (在Hadoop2中是需要配置这两项,但在3中就会根据任务执行级别自动推断所需要的内存,所以3比2要快)
    • 基于 cgroup 的内存隔离和 IO Disk 隔离
    • 支持更改分配容器的资源 Container resizing

参考:https://blog.csdn.net/qq_35975685/article/details/84311627

猜你喜欢

转载自blog.csdn.net/m0_52426915/article/details/120734512
今日推荐