大数据从入门到放弃

本文详细介绍了大数据的入门路径,包括基础知识的学习、实践操作和思维导图的构建,帮助读者逐步理解大数据的核心概念和应用场景,旨在为初学者提供全面的入门指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大数据的核心:
					海量数据分析
—————————————————————功能划分—————————————————————————————
海量数据存储
	HDFS,Hive(本质还是HDFS),HBASE(底层依旧是HDFS)
数据清洗
	MapReduce,Hive(ETL),SparkCore
海量数据分析
	MapReduce,SparkSQL,hive(SQL),impala
数据展示
	javaweb,帆软,hcharts,echarts
	幽梦,百度,帆软
	


————————————第一方面:大数据离线分析————————————————————————————————————————————————

Hadoop 2.x(Common,HDFS,MapReduce,Yarn):
		储存,分析
		环境搭建,处理数据思想
	
功能:
		储存数据(HDFS)
		数据分析(mapReduce)
介绍:	
		Apache的顶级项目
包含的模块:	
	Common:公共的工具,为其他模块提供支撑
	
	HDFS:是一个分布式文件系统,提供高吞吐量数据储存
		将数据化为很多小块,默认一块block(128MB)500M分4块,每块存储3份
		主节点:NameNode
				决定数据存储在那个Datanode
				管理元素,索引
				管理元数据
					存在内存,也存在磁盘,就是文件<fsimage>
				管理从节点
				处理客户端发过来的请求
			启动过程:
					 加载Fsimage中内容到内存中,同步HDFS的变化
				SecondaryNameNode功能:
							辅助nameNode同步本地元数据
							fsimge(old)+edits = fsimage(new)
								edits记录了HDFS的修改操作,不能丢失,通过edits日志文件信息,可以解析得到元数据
									合并过程中,合并到fs.temp文件,完成后修改名字为fsimage删除fs.temp		
		从节点:DataNode
				存储,管理(当前机器)
	MapReduce:大数据集合的并行计算,分而治之思想
		将数据划分为多个部分,单独处理,最后将处理结果进行合并
		Map:(MapTask)
			处理数据
		Reduce:(ReduceTask)
			合并MapTask输出的结果数据
	MapReduce编程
		1)工程导入
		2)HDFS API
		3)MapReduce处理数据流程
		在整个MapRedue程序中,所有的数据流程流式都是键值对(Key-value)
	MapReduce执行过程	
		Input->Map->shuffle->Reduce->Output
			Input:读取HDFS上数据 	输出K,v
			Mapper:通过空格分隔,取出里面的单词
					
			shuffle:分区
						决定key交由哪个reduce处理
						默认:按照key的hash值对reduce个数取余
					 分组 将相同Key的value放到一个集合中
					 排序 按照字典顺序排序
****************优化:
					combiner合并
						在map阶段提前进行了一次合并,等同于提前执行reduce操作
						好处:可以降低reduce的压力
							  不是所有程序都适合
					compress压缩
						减少磁盘IO以及网络IO
					 
			Reduce:(处理)将集合里面的值拿出来相加
			Output:将内容写到HDFS文件中
	
			
	YARN:任务调度和分布式集群资源管理框架
		管理CPU和内存,分配给MapReduce 程序的运行
		主节点:Resourcemanager
				管理子
				相应客户要求
				任务调度
		存节点:NodeManager
				管理当前机器的资源(CUP,memory)
		程序提交到yarn上运行只有一种方法bin/yarn jar
		bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /datas/tmp/wordcount  /datas/mapreduce/output1
		8088 和 50070 上查看
				
	数据类型:
			和java相似只是重新封装了一些类型
				BooleanWritable	布尔
				ByteWritable 单字节
				IntWritable	整数
				FloatWritable 浮点
				LongWritable 长整数
				Text UTF8格式文本
				NullWritable <key,value>中为空时使用
		类型转换 ->get
				 <-set
	 
				


	
————————————————————————————————————————————————————————————
达梦数据库:1,通用性
		兼容多种硬件体系
	2,高性能
	     支持列式存储,数据压缩,物化视图等面向联机事务分析场景的优化选项,支持2000个以上的高并发处理
	3,高可用
	     可配置数据守护系统(主备),自动快速故障恢复,具有强大的容灾处理能力
	     支持物理备份和恢复,支持在线和离线备份,支持对库、表空间、表、归档等多种颗粒的备份,支持基于备份集的方式进行备份,支持完全备份、增量备份的备份和还原,支持基于时间点的还原
	4,高可扩展
	支持拓展软件包和多种工具,实现海量数据分析处理、数据共享集群(DSC)和吴共享数据库集群(MPP)等扩展功能
	5,跨平台
	支持主流软硬件体系(linux、windows、中标麒麟、银河麒麟等操作系统),支持主流标准接口
Hive(数据库仓库):分析数据
		通过SQL语句对数据进行操作,SQL和MySQL的SQL基本一样
		底层是mapreduce
	功能:
		 将sql语句转换成MapReduce程序,并且提交到Yarn上运行,读取HDFS上的数据进行处理
	分析数据的流程:
			1)创建数据库,创建表
			2)加载数据
			  方式一:
				加载本地local数据:hdfs put
					Load data local input 'Inpath' into table "目标表"
				加载HDFS数据:hdfs mv
					LOAD DATA INPATH 'Inpath'  INTO TABLE “目标表”;
			  方式二:
				直接使用HDFS中普通命令上传
					将数据上传到对应目录
			3)编写SQL分析数据
			4)数据的保存
	传递参数
		UDF: 一对一 
		UDAT:多对一
		UDTF: 一对多
****数据倾斜:
		hive中的数据倾斜也就是MapReduce的数据倾斜
	   现象:
			当某一种key的值数量过多,导致处理该key的reduce迟迟不能结束
	   原因:
			join
				map join
					小表与大表join
				reduce join
					大表与小表join
				SMB join
					桶join
			group by/distinct
	   参考:		
			https://blog.youkuaiyun.com/weixin_45289456/article/details/98663556
	   解决:
			1)开启提前聚合
			有数据倾斜的时候进行负载均衡,当选项设定为true,生成的查询计划有俩个
			2)添加随机分布reduce
			执行2个MapReduce
			mr1:输出之前key加随机数(位数一样)
			mr2:输出之前key去随机数(位数一样)
			
------------------------------------------------------------		
协作框架:	sqoop:桥梁(HDFS<--->RDBMS)
				  本身就是一个MapReduce程序,只有Map任务(sql+hadoop)
						用于RDBMS与HDFS之间数据导入导出
			Flume:采集数据,可以在多台机器上运行多个flume,	简单,就是一个配置文件
						采集日志文件数据,动态采集日志文件,数据流
						flum采集到的数据,一份给HDFS,用于做离线分析
										  一份给Kafaka,实时处理
				  三大高级组件:拦截器与spring中拦截器相似
								1)时间拦截器
								2)主机名拦截器
								3)自定义拦截器
								   通过自定义正则表达式,实现数据过滤
				  Failover sink processor故障转移:
						启动多个,但是工作的只有一个,只有active状态进程死掉,其他才可能接替工作,
						多个sink,谁权重,谁先干活
							往HDFS写数据,HDFS宕机了,数据不丢失,往文件里写
				  load balancing sink processor负载均衡:
						负载均衡与故障转移,只能实现一个,不能同时实现,往往选择负载均衡
------------------------------------------------------------		
调度框架:	zakaban:		
				优点:想对比较全面,操作性想对比较好
				特点:
					  分布式多执行器
					  mysql重试:元数据放在mysql中
					  友好的UI
					  数据触发器
					  高安全性
					  支持插件,能从web Ui操作创建人物
					  完整的人员管理系统
				组件:
					  web server
						提供用户访问的接口,接收用户提交的工作流程,实现工作流的监控
					  executor
						执行用户提交的工作流任务
					  mysql
						用于储存所有的工作流信息,状态,日志
				定时任务
			  Crontab(Linux自带)
				
			Zookeeper :布式应用程序协调服务
			
HBASE数据库:	NOSQL数据库:
							不仅仅是数据库,将数据存储在内存中
						产生数据时代的3v:
									1海量数据 2多样数据库 3数据实时
						互联网3高:
								1高并发 2高扩展 3高性能
					特点:易扩展,大数据量,高性能,灵活性,高可用
					理论:
*************************关系数据库理论:事务管理(ACID)
									原子性:一个不可分割的工作单位
									一致性:事务前后数据完全一致
									隔离性:不被其他事务操作数据所干扰
									持久性:事务一旦被提交,对数据库中的改变就是永久的,数据库发生故障也不影响
						  分布式系统:CAP
									  Consistency(一致性)
									  Availability(可用性)
									  Partition Tolerance(分区容错性)
						
********************分类:
						1)key-value键值
						   *Redice
							键值对存储,查询快
							内容缓存,主要用于处理大数据的高访问负载,也用于一些日志系统等等
						2)colunmn列式存储
						   *HBase
						   将同一列的数据放在一起,查询非常快
						3)document文档存储
						   *MongoDB		主要用于应用爬虫,JSON组成的文档
						   经典用于web项目中,与KeyValue类似
						4)Graph 图结构存储
						   *neo4j
						   用于社交网络
				redis:单线程框架 客户端调用都经历,发送命令,执行命令,返回结果    支持高并发
*********************单线程是纯内存访问,非阻塞IO,单线程避免线程切换和竞态产生的消耗
				  数据类型:
					1)String字符串
					2)hash哈希
					3)List列表
					4)set集合
					5)zset有序集合
				redis事务:
						  三阶段: 
								 开启 入队 执行
					事务5种情况
						1)正常执行
						2)放弃事务
						3)全体连坐:语法错误导致,比如set key
						4)冤头债主:错的不执行,运行才发生错误,对字符串+1
						5)watch监控:事务开始之前监控,被其他客户修改了,事务不再执行,直接返回失败
**********************秒杀需求
					  数据持久化
				
--------------------------------------------------------------				
扩展前沿框架:
			Impala:游戏公司用的多,耗内存
					用来做数据分析
			ElaticSearch(ES)
					检索的框架
					相当于数据库,即可存储数据库,也可以检索数据

第二方面:大数据实时分析

	Scala语言:OOP+FP
	
	Spark Core, SQL, Streaming
	
	Kafka:消息队列
	
	Flink:前沿框架
	
第三方面:机器学习

	Spark MLib
————————————————————————————————————————————————————————
学大数据统计是为了:
					让数据变现
					具体的体现
维度:
	 分析任何的指标都会有唯独信息,没有唯独信息的指标意义不大,
cdh版本的好处
	1)兼容性问题解决
	2)框架的坑少
————————————————————————————————————————————————————————
网站日志的来源

	web 容器日志:
			接收用户请求并记录
		缺点:
			 收集数据比较少
		   服务器端字段
				主机名,请求的域名,时间
		   客户端字段
				ip,url,refere_url,条件
	JS 埋点:
			通过JS监听用户的操作行为
			JS将收集好的数据发送日志服务器:nginx
		优点:
			 可以采集到客户端所有的用户数据
			  登陆信息
			  cookie
项目架构选型和集群规划

	处理流程:
		数据源
			关系型数据库
				表:订单,用户,地址。。。
			日志文件
				页面数据,埋点数据
		数据采集
			sqoop,kettle
			flume
			kafka:主要用于实时的数据流处理,消息队列,缓存
			shell
		数据存储
			HDFS,hive,hbase(列式存储的数据库)
		数据清洗
			Mapreduce,hive(ETL),sparkCore
		数据处理(分析)
			SparkSQL,hive,mapreduce,impala
		数据应用(展示)
			。。。。。。帆软
——————————————————————————————————————————————————————————————————————			
架构逻辑
	1)用户访问不同的客户端,触发不同的SDK(前端,IOS,Android)
	2)SDK收集所有需要的数据,发送给nginx日志服务器(后台开发)
	3)nginx服务器接收SDK发送过来的日志,并记录下来(后台开发)
	4)使用flume采集所有日志节点上的数据到HDFS统一存放
	5)使用MapReduce对数据进行ETL
	6)使用MapReduce对ETL之后的数据构建分析模型(Hive)
	   按照需求(topic)构建表
	7)使用Hive对模型数据进行指标分析
	8)将Hive分析结果导出Mysql中

——————————————————————————————————————————————————————————————————————————	
数据量大小(中小型电商网站为例)
	访客数:200~500W
	页面上:(平均值)
		电商:20~40个页面
	记录大小:300~1000字节
		20个字段:400字节
	一条的数据量:
		记录数:300W  *20 = 6000W
		数据大小:60000000 * 0.5kb=30GB
	常规的中小型公司一天的数据量:20GB~40GB 

	数据存储3年
		30GB * 365 * 3  * 3(3份)= 98TB
	一台机器:8 *2 = 16TB
		可用空间:16TB *80%  = 12TB
	DataNode:90 /12 = 8 + (1~3) = 9~11台
	公司业务发展比较快,准备的机器就会稍微多一些
——————————————————————————————————————————————————————————————————
所有集群台数
DataNode、Nodemanager、RegionServer:9~11台
Namenode + ResourceManager、HMaster:3~4台
	node1: Namenode(active)
	node2: Namenode/ ResourceManager(standby)
node3: ResourceManager(active)
Hive、azkaban:2台
	hive需要的资源比较少,就是一个MapReduce客户端,所有可以和其他工具放一起
	client(beeline) ->hiverserver2 ->metastore
zookeeper:3台、5台
机器的选择
	8核16GB 、16核32GB 、32核64GB、32核128GB
	Yarn:计算
		task:1核1GB
	NameNode:16GB
	RegionServer(16GB)
系统盘/数据盘:普通硬盘
元数据存储的硬盘/zookeeper的硬盘:SSD
————————————————————————————————————————————————————————————--
ETL的实现
数据过滤:肯定用不到或者非常数据
字段格式化:
	字段处理,日期处理
字段补全
	解析字段:
		ip:省市区信息
		user-agent:浏览器、操作系统
	提取补全
		userid ->age,addr
构建Pageview模型
Map: 
		key  	value
		ip		其他字段
reduce:
	每一个IP调用一次Reduce方法
	将所有的记录放到List
	可以对所有的记录进行排序:访问时间排序
	生成对应的字段
		迭代整个List集合
			如果list的长度为1,
				直接输出结果
			如果拿到的是第一条记录
				i=0,跳过
			循环到达第二个记录·
				i=1,
				sessionId = RandomUUID.toString();
				step=1
				length =list[i].getTime() –list[i-1].getTime
				判定:length >30分钟
				sessionId重置
				step=1
			如果I = list.length-1
				输出上一条和当前条
output

总结:
	(1)通过MapReduce程序得到不同的模型数据
		bin/yarn jar XX.max inpath,outpath
	(2)导入数据
		创建分区目录,
加载数据
修复分区
	(3)分析数据
	
————————————————————————————————————————————————————————
HBeas :
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值