栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Hadoop学习笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hadoop学习笔记

一.每天的学习笔记

20220703

1.Hadoop是什么

Hadoop是apache开发的分布式系统基础架构

Hadoop主要解决的问题是海量数据的存储和计算(重点)

广义上讲,Hadoop不单指一个框架,指的是整个Hadoop生态圈

2.Hadoop优势

高可靠性:在不同的机器上有多个数据副本

高扩展性:可动态的扩展节点

高效性:并行工作

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

3.组成

MapReduce负责计算

Yarn负责资源调度

HDFS负责存储

还有其他辅助工具

4.HDFS架构

NameNode负责存储元数据

SecondryNameNode负责备份NameNode,当NN出现故障时,由2NN接替管理工作

DataNode负责存储文件块数据,以及块数据的校验和。

5.Yarn架构

ResourceManager负责整个集群的资源调度工作(RM),整个集群的老大

NodeManager负责单节点的资源调度工作(NM),单节点的老大

节点中还存在ApplicationMaster(AM)和Container,前者负责单个任务,后者相当于独立的服务器(微服务),封装了任务运行所需要的各种资源;

一般一个容器最小的内存为1G,1个CPU

6.MapReduce架构

Map阶段将任务分解

Reduce阶段将结果汇总

7.三者间的配合工作(个人理解)

        客户端传来任务,RM查看NN后,负责安排各个节点的NM来创建容器,容器类型有负责AM,MapTask和ReduceTask,各个容器去各自节点的DN执行任务,最后反馈给ReduceTask的容器,并记录在NN,然后给客户端。

        相当于客户端发送请求,Yarn查看HDFS后,分配MapReduce去具体执行,执行完成后将结果返回给HDFS,并反馈给客户端;

8.大数据生态体系

数据库(结构化数据)---Sqoop数据传递---HDFS文件存储---YARN资源管理---MapReduce离线计算(基于硬盘)---Hive数据查询---Oozie任务调度

文件日志(半结构化数据)---Flume日志收集---HDFS文件存储---HBase非关系型数据库---YARN资源管理---Spark Core内存计算---Spark Milb数据挖掘、Spark Sql数据查询{这两个也是离线计算};Spark Streaming实时计算、Storm实时计算、Flink{这三个是实时计算的};---Azkaban任务调度

视频、PPT等(非结构化数据)---Kafka消息队列

数据来源层---数据传输层---数据存储层---资源管理层---数据计算层---任务调度层---业务模型层

1)Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySQL)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

2)Flume:Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;

3)Kafka:Kafka是一种高吞吐量的分布式发布订阅消息系统;

4)Spark:Spark是当前最流行的开源大数据内存计算框架。可以基于Hadoop上存储的大数据进行计算。

5)Flink:Flink是当前最流行的开源大数据内存计算框架。用于实时计算的场景较多。

6)Oozie:Oozie是一个管理Hadoop作业(job)的工作流程调度管理系统。

7)Hbase:HBase是一个分布式的、面向列的开源数据库。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。

8)Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

9)ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。

9.虚拟机配置IP和名称

/etc/sysconfig/network-scripts/ifcfg-ens33(不一定是ens33,具体看文件夹中)

/etc/hostname

配置IP映射文件/etc/hosts

10.Windows主机配置IP映射文件:位置:C:WindowsSystem32driversetc

11.准备虚拟机,关闭防火墙,yum必要软件,配置以上3个文件,就可以作为克隆模板了。

今天把虚拟机克隆好就能休息了!

20:44已处理完,over


20220704

        昨天安装好虚拟机,今天安装jdk和Hadoop,记录一下过程中的问题。

1.课程给的资料包太大,没有下载,所以需要自己找安装包;

最后通过Linux命令:wget  https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.tar.gz

此命令是将链接中的包下载到当前目录;

下载过程中遇到几个问题

第一个问题是网上搜到的链接太老了,wget下载后解压错误,看了文件大小知道是文件有问题,

解决办法是去官网找合适的链接,然后下载(我找的最新版本的);   https://www.oracle.com/java/technologies/downloads/#license-lightboxhttps://www.oracle.com/java/technologies/downloads/#license-lightbox

第二个问题是wget下载时域名解析失败,报错(wget: unable to resolve host address '');

解决办法是修改/etc/resolv.conf文件,添加域名解析器;

vim /etc/resolv.conf
nameserver 8.8.8.8 #google域名服务器

安装JDK后要配置环境变量,集群中其他也要配置,不要忘了这步;

JDK配置在/etc/profile.d/my_env.sh这个文件中,只需要同步后source /etc/profile即可(Hadoop的环境变量也配置在此文件中)

2.Hadoop目录结构

 重要目录

(1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本

(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件

(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)

(4)sbin目录:存放启动或停止Hadoop相关服务的脚本

(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例

3.一台设备上安装好了JDK和Hadoop(包括配置好环境变量)后,直接通过scp -r命令,将JDK和Hadoop传到其他设备,还有/etc/profile.d/my_env.sh也需要传过去,并source一下;

4.用rsync同步数据时,出现错误,当前文件夹中搞了很多系统数据;

解决方法:写了shell脚本,对照其他设备的本目录,比对进行删除;

其中遇到的问题时shell脚本中的循环判断用到了ssh,每次都要手动输入密码,很繁琐,需要优化!

刚看到后边的课程,紧跟着就是SSH免密登录,很好~明天学


20220705

1.配置SSH免密登录

cd到家目录的.ssh目录下,例如/home/dyl/.ssh

生成公钥和私钥

将公钥拷贝到要免密登录的目标机器上

cd /home/dyl/.ssh
ssh-keygen -t rsa
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

注:需要在每台设备上都操作一遍,另外需要在你计划作为主机的设备上用root用户执行一遍;

2.集群配置

A.集群部署规划

注意:

  • NameNode和SecondaryNameNode不要安装在同一台服务器
  • ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。

hadoop102

hadoop103

hadoop104

HDFS

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

YARN

NodeManager

ResourceManager

NodeManager

NodeManager

B.配置文件说明

        Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

(1)默认配置文件:

要获取的默认文件

文件存放在Hadoop的jar包中的位置

[core-default.xml]

hadoop-common-3.1.3.jar/core-default.xml

[hdfs-default.xml]

hadoop-hdfs-3.1.3.jar/hdfs-default.xml

[yarn-default.xml]

hadoop-yarn-common-3.1.3.jar/yarn-default.xml

[mapred-default.xml]

hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml

(2)自定义配置文件:

       core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。

C.配置集群

$HADOOP_HOME/etc/hadoop此目录下修改配置文件

core-site.xml


    
    
        fs.defaultFS
        hdfs://hadoop102:8020
    

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

    
    
        hadoop.http.staticuser.user
        dyl
    

hdfs-site.xml


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

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
    

mapred-site.xml


	
    
        mapreduce.framework.name
        yarn
    

--以上配置完后,在集群上分发配置文件,并去各设备上查看分发情况

xsync /opt/module/hadoop-3.1.3/etc/hadoop/

3.补充一下昨天的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

4.群起集群

A.配置worker

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

加入以下内容
 

hadoop102
hadoop103
hadoop104

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

5.上传HDFS后文件存储路径:/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1436128598-192.168.10.102-1610603650062/current/finalized/subdir0/subdir0

然后用xsync同步所有节点配置文件;

6.Hadoop命令:

hadoop fs 前缀,-put上传,-get下载;

hadoop jar使用share目录下的jar包

7.配置历史服务器

1)配置mapred-site.xml---mapred-site.xml



    mapreduce.jobhistory.address
    hadoop102:10020




    mapreduce.jobhistory.webapp.address
    hadoop102:19888

2)后续操作

#分发配置
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
#启动历史服务器
mapred --daemon start historyserver
#查看启动情况
jps
#查看JobHistory
http://hadoop102:19888/jobhistory

8.配置日志的聚集

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

 1)配置yarn-site.xml



    yarn.log-aggregation-enable
    true


  
    yarn.log.server.url  
    http://hadoop102:19888/jobhistory/logs



    yarn.log-aggregation.retain-seconds
    604800

2)后续操作

#分发配置
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
#重启yarn和historyserver
此处省略
#删除已经存在的输出文件
hadoop fs -rm -r /output
#执行wordcount程序
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
#查看日志(此网站内点开刚才运行的任务,有个logs链接可以点进去)
http://hadoop102:19888/jobhistory

9.shell脚本

1)启停Hadoop集群的脚本,放在家目录的bin下

#!/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

2)查看三台服务器Java进程的脚本

#!/bin/bash

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

3)写完用xsync脚本分发出去

10.常用端口号说明

端口名称

Hadoop3.x

NameNode内部通信端口

8020 / 9000/9820

NameNode HTTP UI

9870

MapReduce查看执行任务端口

8088

历史服务器通信端口

19888

11.集群时间同步

1)首先设置时区

#展示时区列表
timedatectl list-timezones
#设置系统时区
sudo timedatectl set-timezone Asia/Shanghai
#查看系统时区
timedatectl

2)用chrony配置时间同步

主机同步网络的时间,集群中的其他机器同步主机的时间

过程中遇到的问题:

1.vi时总提示Can't write viminfo file /*/.viminfo!

可以使用rm -f .viminf*.tmp解决,但是我这样没解决好;

2.Hadoop3.1.3不能对应JDK18;后来查了资料要对应JDK8;注册了官网账号,从官网上下载了压缩包。

3.同步时间的时候有个问题想不明白;我根据教程把时间同步都配置好了,但是我把主机的时间改了,其他机器的时间并不会同步修改,这点暂时没搞懂,还不知道怎么实现,等一个有缘人解答!!!

二.明天的计划

20220703

        明天要上班啦,正常5点半下班,估计要拖到5点,路程1小时,到家7点,学习俩小时,9点


20220704

        今天的学习中由于出现了问题,不想一直手动删除文件,写了比对其他服务器删除文件的shell脚本,成就感还是有一些的。摸鱼学习了一天,虽然成果不显著,总算是没白费!

三.心得

20220703

        今天看了Hadoop开篇课程,认识了大数据开发的岗位,理清楚了之前的工作做的是以存储过程为工具的ETL工作。后续想去面试中厂大厂,想尽快跳槽,再次进入大数据行业。大厂可能不太现实,可以重新整理一下简历,学习一下大数据必备技能,重新开始面试。

        那么现在就需要学一下基础,去整一些项目,然后开始刷面试题。

        Hadoop环境搭建和简单的使用已经学过了,可以过一遍,主要学习使用,优化和面试部分;


20220704

        公司的游客网络实在太慢,视频也看不了,还是在家学吧, 或者把资料和视频下载下来!

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

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

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