大数据阶段资料巩固

本文是关于大数据技术的复习资料,涵盖了Linux操作系统的基本指令、常用软件如Tomcat、MySQL、Redis、ElasticSearch的使用,以及Hadoop生态系统的组件如HDFS、YARN、MapReduce、HBase和Flume、Kafka的详细解析。还讨论了Flink和Spark的特点与工作原理,以及在大数据处理中的优化策略和容错机制。

大数据复习

概念

巨量数据集合,指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

特点

大量化Volume价值化Value多样化Variety真实性Veracity

Linux操作系统

版本

CentOS7.2

指令

文件操作相关
  • ls 、ll、mkdir、cp、mv、rm、pwd、find、touch、rmdir、rm 、scp远程拷贝等
    • ll 列出来的结果详细,有时间,是否可读写等信息 ,象windows里的 详细信息
    • ls 只列出文件名或目录名 就象windows里的 列表
    • Find / -mtime 1 查找一天前修改过的文件
    • touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间(若文件不存在,系统会建立一个新的文件 )
查看文件内容相关
  • cat、more、head -n、less、tail(tail -n 行数 | tail -f )、vim、vi等
    • tail -f :动态监测文本行 tail -n:看文本前几行 head -n:看文本后几行
    • more :分页(通过光标往下分页) less:分页(可以上下分页)
权限组相关
  • chown、chmod、useradd、grpadd等

    chown 修改属主属组

    chmod 修改权限 drwxr-xr-x 7 [4,2,1]

chmod [a|u|g|o][+|-][rwx] 文件名、chown / chgroup

  • [a|u|g|o] a:所有 u:当前用户 g:当主用户 o:其它用户
  • [rwx] 读操作
服务进程相关
  • ps、kill、jps、du | df(磁盘使用情况 空间或者使用率)、top(动态查看系统运行情况,常用于应用故障监控)等

  • systemctl 动作 服务名

软件安装相关
  • rpm | tar | yum

    rpm: JDK

    tar: Redis\Tomcat\Nginx

    yum: mysql\git

  • tar解压安装 tar -zxf 文件 tomcat ,创建压缩 tar -czf 压缩文件名 需要压缩的文件

  • rpm安装 rpm -ivh rpm包 | rpm -e xxx | rpm -qa |grep 安装包 -i | -U

  • yum安装:联网下载rpm包 ,解析rpm、依赖关系

  • 编译安装:一般需要下载gcc-c++/gcc

    • ./configure --prefix=安装目录 --add-modual=安装模块 #检查安装环境,产生MakeFile文件
    • make 编译、产生可执行文件 | make clean 清除编译结果
    • make install 将make后的结果复制到安装目录下,创建程序执行连接
网络相关
  • ip a | ping | ifup | ifdown等
    • ifup | ifdown系统启动异常诊断
补充

配置环境变量(家目录:home):~/.bashrc|.bash_profile 用户变量、/etc/profile 系统变量

网卡配置:/etc/sysconfig/network-script/ifcfg-ethx (基于Centos6)

去除服务自启动:chkconfig 服务名 off|on,查看所有系统服务:chkconfig --list

关闭防火墙:service iptables stop | chkconfig iptables off

查找看系统进程: ps -aux

文本内容查找:grep [-i] 搜索关键字 --color=always 搜索目标文件

查找指定进程:ps -aux | grep -i ‘sbin/sshd’ --color

只查询指定进程进程号:ps -aux | grep -i ‘sshd’ --color | grep sbin| awk ‘{print $2}’

杀死进程:kill -9 进程号 强制退出、kill -s TERM 进程号 优雅退出

查看端口:netstat -anp

查看磁盘容量: du -h /root/ #disk useage

​ df -h /root/ #disk free

常用软件

Tomcat | Nginx
  • tomcat: 处理动态请求,会话管理(session复制、ip黏着、redis|memcached分布式会话服务器)
  • nginx(静态): 高性能的web服务器和反向代理服务器
MySQL
  • 主从复制(网络同步binlog写指令日志文件)
  • 读写分离(数据库中间件mycat、动态数据源、支持读写操作的MySQL驱动)
Redis
ElasticSearch

端口大全

50070:HDFSwebUI的端口号

8485:journalnode默认的端口号

9000:HDFS服务端口

8020:高可用访问数据rpc

8088:yarn的webUI的端口号

7077:spark基于standalone的提交任务的端口号

8081:worker的webUI的端口号

18080:historyServer的webUI的端口号

4040:application的webUI的端口号

2181:zookeeper的rpc端口号

9083:hive的metastore的端口号

60010:Hbase的webUI的端口号

6379:Redis的端口号

8080:sparkwebUI的端口号(master的webUI,Tomcat的端口号)

9092:kafka broker的端口

Hadoop生态系统

Hadoop(分布式存储和计算平台)

两个核心组件:MapReduce和Hadoop Distributed File System(HDFS)

HDFS:负责将海量数据进行分布式存储

MapReduce:负责提供对数据的计算结果的汇总

生态系统:

HDFS:Hadoop Distribute File Sysytem

Map Reduce:Hadoop 中的分布式计算框架 实现对海量数据并行分析和计算

HBase:是一款基于列式存储的NOSql

Hive:是一款sql解释引擎,可以将SQL语句翻译成MR 代码,并在集群中运行

Flume:分布式日志收集系统

Kafka: 消息队列 ,分布式的消息系统

Zookeeper:分布式协调服务 用于 注册中心 配置中心 集群选举 状态监测 分布式锁

HDFS(Hadoop分布式文件系统)

Hadoop版本2.9.2/2.6.0 Web UI端口:50070 操作端口:9000

擅长大数据集的可靠存储

基本Shell命令

hadoop fs -x * /* *代表文件 x代表shell命令

-put(上传) -get(下载)-ls(显示)-cp(复制) -mkdir(创建文件夹)

-moveFromLocal(从本地移动文件)-copyToLocal(从Hdfs复制到本地)

-rm -r -f(删除文件)-rmdir(删除文件夹)-cat(显示文件内容)

-tail -f(显示文件最新内容)-appendToFile(追加文件内容)

基本架构

HDFS Architecture

HDFS具有主/从体系结构。 HDFS群集由单个NameNode和管理文件系统名称空间并控制客户端对文件的访问的主服务器组成。此外,还有许多数据节点,通常是集群中每个节点一个,用于管理与它们所运行的节点相连的存储。 HDFS公开了文件系统名称空间,并允许用户数据存储在文件中。在内部,文件被分成一个或多个块,这些块存储在一组DataNode中。 NameNode执行文件系统名称空间操作,例如打开,关闭和重命名文件和目录。它还确定块到DataNode的映射。 DataNode负责处理来自文件系统客户端的读写请求。 DataNode还根据NameNode的指令执行块创建,删除和复制

HDFS DataNodes

检查节点机制
  • dfs.namenode.checkpoint.period(默认设置为1小时)指定两个连续检查点之间的最大延迟
  • dfs.namenode.checkpoint.txns(默认设置为100万)
    • 定义了NameNode上的非检查点事务数,即使尚未达到检查点期限,该事务也会强制执行紧急检查点。
安全模式(默认开启,只读模式)

发现绝大多数的Block块可用的时候,会自动退出安全模式。

常见问题
  • NameNode和SecondaryNameNode关系?

    伪分布式集群;

    主要作用:用以合并NameNode产生的editslog(写命令日志文件)+fsimage(内存快照文件),加快NameNode在启动时元数据恢复速度

  • HDFS不擅长小文件的存储?

    1. 小文件过多导致NameNode的内存浪费
    2. 不符合HDFS的设计原则,寻道时间大于IO读写时间
HA集群

解决NameNode单点故障问题

架构

image-20200311105513910

  • namenode:存储系统的元数据(用于描述数据的数据),例如 文件命名空间、block到DataNode的映射,负责管理DataNode

    datanode: 用于存储数据的节点 负责相应客户端读写请求 向NameNode 汇报块信息

    block:数据块 是对文件拆分的最小单元 表示 一个默认为128MB的切分 尺度,每个数据块副本,默认的副本因子为3,通过dfs.replication进行配置,另外用户还可以通过 dfs.blcoksize 设置块的大小

    rack:机架 使用机架对存储节点做物理编排 用于优化存储和计算

  • Zookeeper(配置维护、域名服务、分布式同步、组服务):一个分布式的、开放源码的分布式应用协调服务,是Hadoop和HBase的重要组件。

  • JournalNode:日志服务,主要用于主备NameNode元数据的同步;运行的JournalNode进程非常轻量,可以部署在其他的服务器上。注意:节点数至少3个

  • ZKFC:ZooKeeperFailoverController作为一个ZK集群的客户端,主要用来监控NameNode的状态信息

  • fsimage:元数据信息的备份,会被加载到内存中

  • editlog:Edits文件帮助记录文件增加和更新的操作 提高效率

什么是Rack机架感知?

在集群规模比较大时,机架感知能告诉集群哪台机器属于哪台机架。

Hadoop集群分辨某台lave机器属于哪个机架是需要Hadoop的管理者人为地告知Hadoop哪台机器属于哪个机架,会将这些机器与Rack的对应信息保存在内存中,用来作为对接下来所有的HDFS的写块操作分配datanode列表时的选择策略(尽量将多个副本分布在不同的Rack)。

机架感知需要考虑的情况:

  • 不同节点的通信能够尽量发生在同一个机架之内

  • 为了提高容错能力,namenode节点会尽可能把数据的副本放到多个机架上

HDFS读写流程?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2TnXNW4y-1586439283507)(C:\Users\战神\AppData\Roaming\Typora\typora-user-images\1584347822598.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d9sFB3vt-1586439283508)(C:\Users\战神\AppData\Roaming\Typora\typora-user-images\1584347837459.png)]

Data工作机制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L68g3nOS-1586439283509)(C:\Users\战神\AppData\Roaming\Typora\typora-user-images\1584347865047.png)]

YARN(分布式资源管理调度系统)

Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

架构

MapReduce NextGen Architecture

YARN的基本思想是将资源管理和作业调度/监视的功能拆分为单独的守护程序。这个想法是拥有一个全局ResourceManager(RM)和每个应用程序ApplicationMaster(AM)。应用程序可以是单个作业,也可以是作业的DAG。

ResourceManager具有两个主要组件:Scheduler和ApplicationsManager

NodeManager:管理主机上计算资源,是每台机器的框架代理,向RM 汇报自身的状态信息。

ResourceManager:负责集群计算资源的统筹规划,拥有着集群资源的最终决策权。

ApplicationMaster:计算任务的Master,负责申请资源,协调计算任务。

YARNChild:负责最实际的计算任务(MapTask|ReduceTask)

Container:是计算资源的抽象,代表着一组内存、CPU、网络的占用,无论是ApplicationMaster和YARNChild都需要消耗一个Container。

HA集群

由ZooKepper集群选举实现RM的主备服务切换;

MapReduce(分布式并行计算框架)

五大核心组件

InputFormat、Mapper、Partitioner(默认HashPartitioner)、Reducer、OutPutForMat

Combiner:用于优化MR程序,需要根据具体业务场景而定。

对与每一个MapTask的输出做局部汇总,以减少网络使用量

是MR程序中Mapper和Reducer之外的一种组件

父类就是Reducer

Combiner和Reducer 的区别在于运行位置

  • Combiner 是在每一个Task所在的节点上运行
  • Reducer 是在接收全局所有的Mapper的输出结果

适合累加 不适合求平均数

Combiner输出的KV 要与Reducer 的KV相对应

使用

  • 新建CombinerClass 继承Reducer
  • 直接使用Redcuer
核心思想

化繁为简、分而治之

工作原理图

img

MapTask 映射

将输入数据映射为KV结构

  • InputFormat 数据的输入格式
    • 决定了如何对数据集进行**逻辑(start-end)**切割;如:TextInputFormat,数据集剩余大小 > 128MB*1.1
    • 数据切片(Split)对应一个MapTask进行处理;
    • 决定了如何读取数据切片中的数据 RecordReader
    • 决定了MapTask中的keyIn和valueIn类型
  • MapTask
    • 根据业务需求,将数据映射kv
    • 将kv输出
Shuffle 洗牌
  • Map端Shuffle

    • 将映射KV首先存放到内存缓冲区(100MB)中,一旦到达阈值100*0.8,产生溢写
    • 对数据进行分区(Hash分区器,k.hashCode%reduceTaskNum = 分区中)、排序、合并并溢写到磁盘,产生小的溢写文件;
    • MapTask在运行中可能会产生多次溢写,MapTask运行结束后会将内存缓冲区中剩余数据和小的溢写文件合并,合并最终的结果文件;
  • Reduce端Shuffle

    • ReduceTask拉取当前任务所负责的分区数据,最终将小的分区数据进行排序合并产生最终的输入文件;
    • 将最终处理的结果作为ReduceTask任务输入
ReduceTask 计算
  • ReduceTask
    • 根据输入的K,对VList进行统计计算,得到一个最终K,V结果
    • 将结果通过OutputFormat输出到指定的存储系统
  • OutputFormat
    • 决定了计算结果的输出格式
MapReduce 优缺点
  • 优点
    • 易于编写分布式应用程序
    • 有良好的拓展机制
    • 适合离线批处理
    • 高容错性
  • 缺点
    • 不适合流处理
    • 不擅长图计算
常见问题
MR应用执行流程?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YZi5FSqD-1586439283511)(C:\Users\战神\AppData\Roaming\Typora\typora-user-images\1584348049648.png)]

  1. 首先通过程序员所编写的MR程序通过命令行提交

  2. 开始运行后称之为Job(一个MR程序就是Job),Job会向RM申请注册(会带一些信息)

  3. 如果RM注册通过,Job会从共享的文件系统中拷贝相关信息

  4. Job紧着着会向RM提交完整的应用信息

  5. a RM会计算出Job启动所需要的资源

    b.连接到对应的NM启动一个MRAppMaster

  6. MRAppMaster 在启动的时候会初始化Job

  7. 初始化Job 后,会去共享文件系统中回去切片

  8. MRAppMaster 向RM 请求计算资源

  9. 连接到对应的NM ,消耗Container 启动YARNChild

  10. 获取完整的Job资源

  11. 计算

Job类的书写步䠫
  • 封装Job对象

  • 设置读入写出的格式

  • 设置写入写出的路径

  • 设置计算逻辑

  • 设置Map和Reduce的泛型

  • 提交Job

Job提交流程
  • Check Space 校验空间
  • 创建资源路径:staging 路径
  • 创建Job 路径 (在staging路径下创建以JobID 为名字的文件夹)
  • 拷贝相关资源到集群
  • 计算切片 ,生成切片规划文件
  • 向Staging 路径写入配置文件
数据倾斜怎么处理?

由于某些key设计不合理,导致了数据负载不均衡的现象

  • 自定义分区规则
  • 调整ReduceTask任务数量
  • 调整任务节点JVM空间大小
优化?

参考资料:https://blog.csdn.net/qq_43193797/article/details/86005144

  • 数据输入端:将小文件划分到一个数据切片中;建议CombineTextInputFormat
  • Map任务:减少溢写次数,减少溢写文件合并,合理使用combiner
  • Reduce任务:合理设置任务数量,设置map和reduce共存,合理设置reduce buffer大小等;
  • IO传输:map端压缩(gzip)和序列化文件
常用的InputFormat和OutputFormat?
  • TextInputFormat和TextOutputFormat(文本)
  • DBInputFormat和DBOutputFormat (关系型数据库)
  • TableInputFormat和TableOutFormat(HBase)
序列化类型?

implements Writable

  • IntWritable
  • Text
  • NullWritable
  • LongWritable
MapTask并行度&Reduce阶段并行度控制?
  • MapTask,由InputFormat#getSplits方法计算的切片数目所决定
  • ReduceTask:由job.setNumberReduceTask(3)//默认值1

HBase(基于列存储非关系数据库)

版本1.2.4 WebUI http://hostname:16010

解决了大规模结构化数据的存储

是一个基于Google BigTable论文设计的高可靠性、高性能、可伸缩的分布式存储系统

HDFS只能存储大文本文件,最多算是文件系统,文件系统对数据的管理粒度比较粗糙,无法完成单条记录级别的数据CRUD,因此当需要对海量数据进行随机读写的时候,HDFS就无能为力。因此HBase作为构建在HDFS之上一款NoSQL数据服务,可实现对海量数据集高效的随机读写。

基本名词
  • NameSpace:类似于关系型数据库的DataBase
  • BigTable:大表
  • RowKey:主键,读写操作时唯一依据
  • ColumnFamily:列簇,组织管理列
  • Timestamp:时间戳,数据版本
  • Cell:单元格, rowkey + cf:cloumn + timestamp
HBase和关系数据库区别
  • 数据库类型:HBase中的数据类型都是字符串类型(string)

  • 数据操作:HBase只有普通的增删改查等操作,没有表之间的关联查询

  • 存储模式:HBase是基于列式存储模式,而RDBMS是基于行式存储的

  • 应用场景:HBase适合存储大量数据,查询效率极高

基本操作

架构原理

https://www.cnblogs.com/frankdeng/p/9310278.html

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dXzfENdY-1586439283511)(C:\Users\战神\AppData\Roaming\Typora\typora-user-images\1584348769246.png)]

Zookeeper

HBase通过zk来做Master的高可用,RegionServer的监控、元数据的入口以及集群配置的维护工作

HMaster
  • 为 RegionServer 分配 Region

  • 负责 RegionServer 的负载均衡,发现失效的 RegionServer 并重新分配其上的 Region

发现失效的Region,将失效的Region分配到正常的R

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值