29.大数据之旅--最后总结再过一遍 补充

本文回顾了大数据领域的基础知识,包括NIO的概念、粘包问题及常见协议;深入探讨了Google的GFS、MapReduce、BigTable三篇论文以及Apache Hadoop的实现,如HDFS、MapReduce、Yarn;同时提到了大数据实时分析的关键技术——Kafka,作为分布式消息队列在大数据生产环境中的重要角色。
摘要由CSDN通过智能技术生成

高并发基础
!!NIO - NIO的概念和作用 粘包问题 常见协议 基本概念
Connect Accept Read Write
BIO - 面向流操作字节字符

	NIO - 面向通道操作缓冲区
		Buffer Channel Selector
	Buffer
		capacity position limit
	Channel
		SocketChannel ServerSocketChannel
	Selector
		select()
	粘包问题
		使用协议约定传输规则
			固定长度数据
			约定分隔符
			使用特定格式传输
	公有协议/私有协议
	BIO 同步阻塞 
	NIO 同步非阻塞
	AIO 异步非阻塞
	阻塞 非阻塞 - 线程 
	同步 异步 - 参与并发的双方的协调机制是否需要互相等待
	
!!Concurrent - java的并发包 - jdk5 - 大量的工具类
	!!!BlockingQueue - 阻塞式队列 - 生产者消费者问题
	!!!!!!ConcurrentMap - 线程安全的Map - 锁更加的精细 - 读写锁
	!!!CountDownLatch - 闭锁
	CyclicBarrier
	Exchanger
	Semaphore
	!!!!!!!!!ExecutorService - 执行器服务 - 线程池
		手动创建线程池 - ThreadPoolExecutor
			ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler) 
			shutdown
			shutdownNow
		通过工具类创建线程池
			Executors
	!!!!!!Lock - 锁 - 线程同步 - Synchronized
		lock()
		unlock()
		tryLock()
		-ReadWriteLock
			读锁和读锁可以共存
			写锁和任何锁都不能共存
		
	Atomic
!序列化反序列化 - 概念 应用 常见都序列化反序列化技术 为什么不用java序列化反序列化
	将内存中动态对象信息 固定为 确定字节信息 - 序列化
	将序列化都对象信息 恢复为内存中都对象信息 - 反序列化

	持久化
	RPC

	java原生都序列化反序列化
	GoogleProtoBuffer
	Thrift
	AVRO
!RPC - 掌握概念 - 不需要掌握实现过程
	java远程方法调用 是java分布式程序的基础
	并不是一项新的技术 而是对若干技术对整合 是一种解决方案
	序列化反序列化 网络通信 代理技术。。
	

!!!Zookeeper
	概念
		分布式资源协调 分布式环境下的数据的一致性保证
		数据发布订阅、负载均衡、命名服务、分布式协调/通知、集群管理、分布式锁、分布式队列等功能

离线分析
!!!hadoop
Google三篇论文 GFS MapReduce BigTable
Apache开源实现 HDFS MapReduce HBase
Hadoop -> HDFS MapReduce Yarn

	HDFS - hadoop分布式文件系统
		Block - 块
			128MB --> 如果数据不足128MB,存储该数据的Block该多大就多大,128MB是最大大小
			默认3个副本
		NameNode 
			存储元数据信息
			在内存和文件(FsImage Edits FsTime)中同时存在
			[/aaa/bbb/x.txt [b1,b2] 3 b1:DN01 DN02 DN03 b2:DN02 DN04 DN05]
			内存:文件及目录结构 组成文件的块的信息 副本数量信息 块和DataNode的映射关系
			[/aaa/bbb/x.txt [b1,b2] 3]
			文件:文件及目录结构 组成文件的块的信息 副本数量信息
		SecondaryNameNode
			帮助NameNode来合并元数据的
			什么时候合并
				时间条件
					如果距离上一次合并超过指定时长(3600秒),会触发合并
				大小条件
					如果edits文件达到来64MB会触发合并
			怎么合并	
				达到合并条件时
				NN生成edits.new文件,不再想edits文件中写入新的日志
				SNN复制NN中的fsimage和edits文件 将edits合并到fsimage文件中 得到fsimage.ckpt
				将该文件复制回NN中,删除edits,将edits.new重命名为edits,删除fsimage,将fsimage.ckpt重命名为fsimage
				
		DataNode
			真正存储数据的节点,以Block为单位来存储数据,DataNode并不知道也不关系Block属于哪个文件,只是根据要求以Block为单位处理数据。
			和NameNode保持心跳 告知自己的存活状态,并在心跳包的响应中接受NameNode的指令
			
			副本存放策略:
				如果当前上传者就是一个DataNode节点,则自己传自己
				如果不是则挑选一个空闲DataNode上传
				选择和当前DataNode不在同一个机架的节点复制数据
				和第二个节点相同机架的节点
				再多久随意放

	HDFS重要流程
		合并流程

		写流程
		
		读流程
			
		删流程
		
		启动流程
			NameNode启动 合并edits和fsimage得到最新的fsimage 并回复到内存中
			NameNode接着等待DataNode的节点的心跳,并根据DataNode报告的持有的block的信息在内存中回复出 块和DataNode的映射关系
			并且在需要时会复制或删除Block
			等到有足够数量的DataNode后,NameNode开始对外提供服务
			这个启动过程可能需要耗费一定的时间,这段时间内HDFS无法对外通服务,称之为HDFS处在安全模式下
			遇到安全模式 - 等一会 - 检查无法退出安全模式的原因,通常是DataNode启动的数量不足 - 强制退出安全模式,但是非常不推荐这样做,可能损坏元数据
	MapReduce
		海量数据分布式计算框架
		map阶段 reduce阶段
		分而治之 然后汇总
		ResourceManager NodeManager

		基本原理
		执行流程

		序列化机制 - Writable WritableComparable
		分区机制 - Partitioner - k2.hashCode() % rnums
		排序机制 - mr自带排序能力,可以实现海量数据的排序
		合并机制 - Combiner - 在map阶段先做一个reduce操作 - Combiner无论用或不用 无论执行几次,都应该不影响最终计算的结果

	shuffle流程
		map阶段
			split input map buffer(100MB 0.8) spill(partition sort combiner) merge(partition sort combiner*)
		reduce阶段
			fetch merge(combiner*) grouping sort reduce output
	mr的输入控制
		InputFormat - FileInputFormat
		MultipleInputs
	mr的输出控制
		OutputFormat - FileOutputFormat
		MultipleOutpus
	GroupingComparator SortComparator
				
	小文件处理 - har机制
		小文件的问题:
			hdfs来说大量占用来NameNode的内存控制
			mr来说,默认一个block对应一个split对应一个Mapper,大量小文件对应大量block对应大量split对应大量Maper,处理时大量mapper同时启动容易内存溢出
		若干小文件打成har包 har包可以直接在hdfs中访问
	数据倾斜
		mr在处理数据时比较容易遇到的问题
		如果是简单的分区数据不均,则通过自定义Paritionoer来解决
		如果是数据本身就存在倾斜的特点,建议通过多步骤处理减轻数据倾斜带来的危害
	
	
	hadoop完全分布式安装配置
		多NameNode互为热备 - JN集群
flume - 会用即可 - 没有太多面试的点
	分布式日志收集框架 - 从不同来源收集日志传输到不同的目的地
	Agent
		Source	
			..
		Channel
			MemoryChannel FileChannel SpillableMemoryChannel
		Sink
			..
		Selector - 选择器
		Interceptor - 拦截器
		Processor - 处理器
!!!!hive
	基于hadoop的数据仓库工具
	数据库
		线上系统 实时数据存取 增删改查 避免冗余
	数据仓库
		线下系统 实现离线数据存储处理 一次写入多次查询不支持行级别的增删改 人为制造冗余提高效率

	原理:
		在hadoop的基础之上 增加来sql操作的接口 使我们可以通过sql来操作hdfs中的数据

	!!hive的元数据库 - 存储hive的元数据信息 - 库 表 列 相关的信息 - Derby - mysql
		|- DBS TBLS ColumnsV2 SDS

	!!!内部表 
		先有表后有数据 数据存储到表对应的文件夹中
		删除内部表时 元数据和数据都会被删除
	!!!外部表
		先有数据后有表 表关联到数据存放的位置来管理数据
		删除外部表时 只删除元数据 数据本身不会被删除
		external location
	!!!分区表
		hive表还可以进行分区操作 基于分区分开存放数据 提升根据分区字段查询的效率
		所谓的分区本质上就是一层文件夹,数据根据分区字段分文件夹存储 后续按照分区字段查询时 效率比较高
		partition by

	!分桶表
		hive表还可以进行分桶,根据指定列的值计算hash模余桶的数量,决定数据分配到哪个桶
		通过分桶表可以实现数据的抽样
		clustered by 

	!hive的内置函数
		hive内置来大量函数 大大的增强来hive的处理能力

	!!!hive的UDF - hive的自定义函数
		写一个类集成UDF
		在类中写一个方法evaluate 接受任意参数 返回任意类型的返回值
		将该项目达成jar 上传
		add jar 增加到hive中
		create temporary function fname as '类的全路径名';
	!hive的UDAF - hive的自定义函数 - 聚合函数

	hive的语法

!!!!hbase
	给予hadoop的数据库工具
	nosql数据库 
	面向列 
	存储半结构化非结构化的数据 
	适合存储稀疏数据 
	实时的增删改查 
	海量数据存储 
	没有严格的事务能力


	!!!!逻辑结构
		行键
		列族
		列
		时间戳
		单元格

	命令行操作
		不支持sql 有自己的语法 

	!!!!!hbase的原理
	HBase中的数据按照行键的字典顺序排序后存储
		HBase表在水平方向上切分成多个HRegion
		HRegion是HBase进行分布式存储和负载均基本单位
		HRegion内部还有若干store,一个列族对应一个store
		store内部必然有一个memStore,还有0个或多个StoreFile
		storeFile其实是存在hdfs中的文件 也叫hfile

		hbase写入数据流程 
		hbase读取数据流程
		HFile文件结构
		hbase的region寻址

		hbase的理论基础 - LSM树
			hash存储 - HashMap
			B+树存储
			LSM树存储

		HBase架构
			HMaster
			HRegionSever
			Client
			Zookeeper
	
	HBase为什么可以很快
	HBase为什么可以存很多数据
	HBase为什么可靠
	HBase和 hive 和 mysql比较
	!!!!HBase的表设计
		列族
			列族不宜过多 - 不超过3个 越少越好
			经常要一起查询的列要设计到同一个列族中
			如果设计列多个列族要考虑好列族间数据均匀的问题
		行键
			必须唯一
			最好有意义
			最好是字符串
			最好具有固定长度
			不宜过长
				64KB - 10~100字节 - 16字节 

			散列原则
				如果数据存在热点 应该合理的设计行键 将热点数据分开存储
			有序原则
				如果经常要查询大段的数据 可以通过设计行键 将这些数据连续的存放 可以提高查询的效率
	sqoop
		联系关系型数据库和hdfs的桥梁 可以双向的导入导出数据
	
!!!!电信日志分析 - zebra
	知识点
		Flume日志收集 --> flume脚本...
		HDFS数据存储 -->
		Hive清洗数据 处理数据 --> 创建外部分区表 数据清洗 处理。。
		Sqoop导出数据 --> 
		数据可视化 --> 
	架构设计
		略
	业务背景 
		电信基站处理提供3g4g信后提供上网能力之外,还会记录经过基站的流量数据
		希望能够收集并处理这些数据,得到其中隐含的价值信息

实时分析
kafka
分布式消息队列
大数据生产环境下的唯一的选择

	Topic 主题
	partition 分区
	offset序号
	replication 副本

	Producer
		
	Consumer
		发布订阅 - 数据共享
		队列模式 - 数据竞争

		消费者组 - 组内竞争 组间共享

		
	kafka的可靠性保证
		kafka存储策略
		kafka中的可靠性保障
		
		
	
storm

内存计算

上一篇 28.大数据之旅总结 (hadoop,spark生态)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值