栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hadoop 3.x(入门搭建+安装调优)(一)

Hadoop 3.x(入门搭建+安装调优)(一)

整体介绍





P2 大数据的概念

P3 大数据特点




P7 hadoop是什么


hadoop发展历史

P10 hadoop三大发行版本


hadoop优势


P12 hadoop 2.x和3.x区别

P13 HDFS架构概述

namenode,记录每个文件块存储位置,数据存储在什么位置,防止单节点故障,会有secondary namenode作为秘书
datanode,具体存储数据

P14 yarn架构概述

yarn是一个资源管理器,cpu,内存。
resourcemanager 是整个集群资源管理的老大
node manager是单节点资源管理老大
客户提交任务给resourcemanager,
applicationmaster是单个任务运行的老大,会去给resourcemanager申请资源,可以多节点,多任务
任务是在container运行的。
客户端可以有多个
集群上可以运行多个applicationmaster
每个nodemanager上可以有多个container

P15 mapreduce概述


P16 HDFS和YARN和MAP-REDUCE关系

namenode告诉别人数据存储在哪个节点上, datanode真正存储数据。
namenode宕机了,2nn就会想办法从namenode的备份中恢复数据

yarn负责整个集群资源调度管理。
client发送请求 ,resourcemanager就会找一个节点开启一个任务applicationmaster,开启一个container,applicationmaster找到有资源的节点,开启container创建map阶段的任务,每个map的结果汇总写到datanode

P17 大数据技术生态体系

mapreduce基于硬盘,spark基于内存,hive类似sql查询

P18 vmware安装

P24 jdk安装


解压到安装目录

配置环境变量



etc/profile会循环遍历环境变量文件

P25 hadoop安装

解压

配置环境变量


hadoop的目录介绍
bin目录下可执行文件后期会用到
etc下有很多组件的配置文件

inclue类似c语言的头文件

lib是本地动态链接库

sbin是一些启动服务的脚本,hadoop-daemon启动单节点

share是一些学习文档

P26 本地运行模式



一些需要准备的东西




创建个文件随机放单词,统计单词个数

执行一个mapreduce统计,必须有输入输出的位置

查看结果

再执行一次,文件提示已经存在,因为输出的路径在执行的时候是不能存在的

P27 scp和rsync命令详解



把jdk拷贝到其他机器上

103拷贝102的文件,一种拉数据,一种推数据

也可以指定一台主机到另一台主机

rsync是同步工具

删除103之前的文件夹

把102的hadoop文件夹同步到103,实际相差就是wcinput和wcoutput两个文件,时间很短
第一次可以用scp,后面同步可以rsync

P28 xsync分发脚本

#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi

#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
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

获取当前文件父目录


随便测试一下

P29 ssh免密登录

配置102免密登录103,104

拷贝公钥至103,104




允许谁免密登录自己

103和104也互相配置免密登录








102的root用户最好也配置下免密登录

现在就不需要输入密码了

P30 集群配置

hadoop配置文件分两大类,默认配置文件和自定义配置文件


(1)核心配置文件
配置core-site.xml
[atguigu@hadoop102 ~]$ cd H A D O O P H O M E / e t c / h a d o o p [ a t g u i g u @ h a d o o p 102 h a d o o p ] HADOOP_HOME/etc/hadoop [atguigu@hadoop102 hadoop] HADOOPH​OME/etc/hadoop[atguigu@hadoop102hadoop] vim core-site.xml
文件内容如下:





    
    
        fs.defaultFS
        hdfs://hadoop102:8020内部通信端口,有些使用9000,9820
    

    
    
        hadoop.tmp.dir
        /opt/module/hadoop-3.1.3/data
    

    
    
        hadoop.http.staticuser.user
        atguigu
    

默认数据存在/tmp目录下,默认情况tmp会一个月删除一次

102修改core-site

(2)HDFS配置文件
配置hdfs-site.xml
[atguigu@hadoop102 hadoop]$ vim hdfs-site.xml
文件内容如下:





	
	
        dfs.namenode.http-address
        hadoop102:9870
    
	
    
        dfs.namenode.secondary.http-address
        hadoop104:9868
    


(3)YARN配置文件
配置yarn-site.xml
[atguigu@hadoop102 hadoop]$ vim yarn-site.xml
文件内容如下:





    
    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    

    
    
        yarn.resourcemanager.hostname
        hadoop103
    

    
    
        yarn.nodemanager.env-whitelist
        JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
    

整个配置和默认的区别就是HADOOP_MAPRED_HOME,属于3.1.3小bug,到了3.2之后,不需要配置环境变量,HADOOP_MAPRED_HOME也帮你加上了



(4)MapReduce配置文件
配置mapred-site.xml
[atguigu@hadoop102 hadoop]$ vim mapred-site.xml
文件内容如下:





	
    
        mapreduce.framework.name
        yarn
    

默认是在本地进行调度


102把配置好的文件分发过去

P31 启动集群并进行测试



注意不允许有空格

分发配置好的workers文件


第一次启动之前需要格式化

初始化后data下会生成一个dfs目录


version里会有当前服务器的版本号

启动集群,在sbin,start-dfs.sh



现在hdfs就启动完成了

现在启动resourcemanager,在103上

yarn也有web页面

集群启动后,做基本测试

创建一个目录


上传文件



传一个大文件


![
存数据的目录
![](https://img-blog.csdnimg.cn/4dab24f2cae84b19ab954ce791aa9431.png)

这个就是刚才传的文件

查看刚才存的jdk



这就是一个jdk

hdfs的存储位

执行一个任务,让yarn调度

输入输出的路径就是要在hadoop跟目录下

多了个任务


然后就可以在hdfs查看结果

P32 集群崩溃处理方法

假如现在集群 异常了

data数据也删除

把103的数据也删除

但是现在数据还是能下载下来

104的数据也删除

现在就无法删除了

无法恢复,第一种可以先格式化

集群停掉之前先把yarn停止


查看是否能正常启动

现在就没有namenode了,因为之前把data删除了


新恢复的节点的namenode版本号和原先不一样
但是 namenode没起来

正确的处理如下,先杀死进程


删除每个集群上的data和logs




第三步,接下来开始 格式化

初始化后开始启动集群

集群已经恢复,但现在没有历史数据

原因在于,之前namenode有版本号,配套的datanode也有版本号

之前新老版本不一致,就无法访问

P33 历史服务器配置


5)查看JobHistory
http://hadoop102:19888/jobhistory

10020是内部通信用,19888是给用户 浏览web的地址


分发配置文件

如果yarn已经启动,需要把yarn重启

历史服务器需要手动启动


上传一个数据

进行单词统计


现在就可以点击history了

P34 日志聚集功能配置

这里是记录程序运行的日志

提示聚集功能 无法使用

只有开启 了聚集日志,用户才能通过接口查看日志
默认的日志聚集功能是一个关闭状态



分发配置文件

重启历史服务器,但是基于单节点

重启yarn
再启动历史服务器

再次执行一次任务


这里就是详细的日志信息

P35 两个常用脚本


单独启动datanode

单节点启动停止yarn

编写Hadoop集群常用脚本
1)Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver):myhadoop.sh
[atguigu@hadoop102 ~]$ cd /home/atguigu/bin
[atguigu@hadoop102 bin]$ vim myhadoop.sh
输入如下内容

#!/bin/bash

if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit ;
fi

case $1 in
"start")
        echo " =================== 启动 hadoop集群 ==================="

        echo " --------------- 启动 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " =================== 关闭 hadoop集群 ==================="

        echo " --------------- 关闭 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac

保存后退出,然后赋予脚本执行权限
[atguigu@hadoop102 bin]$ chmod +x myhadoop.sh




先试试关闭

测试启动

2)查看三台服务器Java进程脚本:jpsall
[atguigu@hadoop102 ~]$ cd /home/atguigu/bin
[atguigu@hadoop102 bin]$ vim jpsall
输入如下内容**

#!/bin/bash

for host in hadoop102 hadoop103 hadoop104
do
        echo =============== $host ===============
        ssh $host jps 
done

保存后退出,然后赋予脚本执行权限
[atguigu@hadoop102 bin]$ chmod +x jpsall
3)分发/home/atguigu/bin目录,保证自定义脚本在三台机器上都可以使用
[atguigu@hadoop102 ~]$ xsync /home/atguigu/bin/

P36 两道面试题

P37 集群时间同步


2)时间服务器配置(必须root用户)
(1)查看所有节点ntpd服务状态和开机自启动状态
[atguigu@hadoop102 ~]$ sudo systemctl status ntpd
[atguigu@hadoop102 ~]$ sudo systemctl start ntpd
[atguigu@hadoop102 ~]$ sudo systemctl is-enabled ntpd
(2)修改hadoop102的ntp.conf配置文件
[atguigu@hadoop102 ~]$ sudo vim /etc/ntp.conf
修改内容如下
(a)修改1(授权192.168.10.0-192.168.10.255网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
为restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
(b)修改2(集群在局域网中,不使用其他互联网上的时间)
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
(c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(3)修改hadoop102的/etc/sysconfig/ntpd 文件
[atguigu@hadoop102 ~]$ sudo vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
(4)重新启动ntpd服务
[atguigu@hadoop102 ~]$ sudo systemctl start ntpd
(5)设置ntpd服务开机启动
[atguigu@hadoop102 ~]$ sudo systemctl enable ntpd
3)其他机器配置(必须root用户)
(1)关闭所有节点上ntp服务和自启动
[atguigu@hadoop103 ~]$ sudo systemctl stop ntpd
[atguigu@hadoop103 ~]$ sudo systemctl disable ntpd
[atguigu@hadoop104 ~]$ sudo systemctl stop ntpd
[atguigu@hadoop104 ~]$ sudo systemctl disable ntpd
(2)在其他机器配置1分钟与时间服务器同步一次
[atguigu@hadoop103 ~]$ sudo crontab -e
编写定时任务如下:
*/1 * * * * /usr/sbin/ntpdate hadoop102
(3)修改任意机器时间
[atguigu@hadoop103 ~]$ sudo date -s “2021-9-11 11:11:11”
(4)1分钟后查看机器是否与时间服务器同步
[atguigu@hadoop103 ~]$ sudo date

启动时间同步服务

这个配置代表允许192.168.10网段的机器访问本机进行同步

不连接外网时钟

当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步


让硬件时间与系统时间一起同步

让103,104周期性和102同步

103和104关闭对外同步


crontab设置每分钟同步

测试修改103时间,后面进行同步

一分钟后时间 已经同步

P38 常见问题总结

1)防火墙没关闭、或者没有启动YARN
INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032
2)主机名称配置错误
3)IP地址配置错误
4)ssh没有配置好
5)root用户和atguigu两个用户启动集群不统一
6)配置文件修改不细心
7)不识别主机名称
java.net.UnknownHostException: hadoop102: hadoop102
at java.net.InetAddress.getLocalHost(InetAddress.java:1475)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:146)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
解决办法:
(1)在/etc/hosts文件中添加192.168.10.102 hadoop102
(2)主机名称不要起hadoop hadoop000等特殊名称
8)DataNode和NameNode进程同时只能工作一个。

9)执行命令不生效,粘贴Word中命令时,遇到-和长–没区分开。导致命令失效
解决办法:尽量不要粘贴Word中代码。
10)jps发现进程已经没有,但是重新启动集群,提示进程已经开启。
原因是在Linux的根目录下/tmp目录中存在启动的进程临时文件,将集群相关进程删除掉,再重新启动集群。
11)jps不生效
原因:全局变量hadoop java没有生效。解决办法:需要source /etc/profile文件。
12)8088端口连接不上
[atguigu@hadoop102 桌面]$ cat /etc/hosts
注释掉如下代码
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 hadoop102

配置hdfs网页登录使用的静态用户为atguigu,否则无法删除文件




重启hadoop

现在就可以删除了

这个blocksize ,是指这个块最多128M,也就是word.txt最多128M,现在只有36b,128M其余的还是可以让其他文件使用的

也试一下


查看使用几个块进行存储的

block1就是剩下的内容

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/728791.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号