一.Hadoop基础
1.什么是Hadoop
Hadoop是一个分布式系统基础架构,主要解决海量数据的存储和海量数据的分析计算问题。
2.Hadoop的优缺点
优点:
高可靠性:Hadoop底层维护多个数据副本,所以即使某个计算元素或者存储出现故障,也不会出现数据的丢失。
高扩展性:在集群间分配任务数据,方便扩展数以千计的节点。
高效性:并行工作。
高容错性:能够自动将失败的任务自动分配。
3.Hadoop运行模式
本地模式:单机运行
伪分布模式:也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境。
完全分布模式:多台服务器组成分布式的环境。
4.辨析Hadoop和Hadoop生态系统的概念
Hadoop是指Hadoop框架本身;Hadoop生态系统是指Hadoop及能够保证Hadoop正常运行的其他框架。如Zookeeper,Flume,Hive等。
5.Hadoop生态圈的组件
1)Zookeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护,名字服务,分布式同步等。
2)HBase:它是一个分布式的,面向列的开源数据库。它是一个适合非结构化数据存储的数据库。
3)Hive:它是一个基于Hadoop的数据仓库工具,提供简单的SQL语句,可以将SQL语句转换为MapReduce任务进行运行。
4)Flume:它是一个高可用的,高可靠的,分布式的海量日志采集,聚合和传输的系统。
5)Sqoop:主要用于Hadoop,Hive和MySQL之间数据的传递
6)Spark:开源大数据内存计算框架
6.Hadoop集群正常工作中需要启动的进程及其作用:
NameNode:存储文件的元数据(如文件名,文件目录结构,文件属性)
DataNode:在本地文件系统存储文件块数据
SecondaryNameNode:每隔一段时间对NameNode元数据备份
NodeManager:执行任务
ResourceManager:负责调度DataNode上的工作
二.HDFS
1.HDFS定义
它是一个文件系统,用于存储文件,通过目录树来定位文件;它是分布式的,有很多服务器联合起来实现其功能;适合一次写入,多次读出的场景。
2.HDFS优缺点
优点:
1)高容错性:数据自动保存多个副本;某一个副本丢失后,可以自动恢复。
2)适合处理大数据。
3)可构建在廉价机器上。
缺点:
1)不适合低延时数据访问。
2)无法高效的对对大量小文件进行存储。
3)不支持文件并发写入,文件随即修改。
3.HDFS组成架构
1)NameNode:相当于Master,就是一个主管,管理者。
管理HDFS的空间名称;
配置副本策略;
管理数据块映射信息;
处理客户端读写请求。
2)DataNode:相当于Slave,实行命令。
存储实际的数据块;
执行数据块的读写操作。
3)Client:就是客户端。
文件切分;
与NameNode交互,获取文件的位置信息;
与DataNode交互,进行数据块的读写操作;
4)Secondary NameNode:并不是NameNode的热备,当NameNode挂掉的时候,它并不能马上替换NameNode并提供工作。
辅助NameNode,分担其工作量。帮助NameNode合并日志,减少NameNode启动时间。
HDFS组成架构图
4.HDFS文件块大小
HDFS的文件在物理上是分块储存,块的大小通过配置参数配置(dfs.blocksize),默认大小是128MB。
5.为什么快的大小不能设置太大,也不能设置太小?
如果HDFS块的大小设置太小,则会增加寻址时间,程序一直在寻找块的开始位置;
如果块的大小设置太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需要的时间。导致程序处理非常慢。
HDFS块的大小设置取决于磁盘传输速率。
6.HDFS的shell操作
#1.命令大全:
bin/hadoop fs
#2.启动Hadoop集群:
sbin/start-dfs.sh
sbin/start-yarn.sh
#3.输出某一命令参数
hadoop fs -help rm
#4.创建文件夹
hadoop fs -mkdir bigdata
#5.上传操作
#5.1 从本地剪切粘贴到HDFS上
hadoop fs -moveFromLocal
#5.2 从本地系统拷贝到HDFS上
hadoop fs -copyFromLocal
#5.3 等同于copyFromLocal
hadoop fs -put
#5.4 追加一个文件到已经存在的文件末尾
hadoop fs -appendToFile
#6.下载操作
#6.1 从HDFS拷贝到本地
hadoop fs -copyToLocal
hadoop fs -get
#7.直接操作
显示目录信息 hadoop fs -ls /shu
显示文件内容 hadoop fs -cat 文件名字
修改文件属性 -chmod -chown
创建路径 -mkdir
从HDFS的一个路径拷贝到另一个路径 -cp
在HDFS中移动文件 -mv
设置文件的副本数量 -setrep
7.HDFS的写数据流程
8.HDFS的读数据流程
三.MapReduce
1.什么是MapReduce?
MapReduce是一个分布式运算程序的编程框架,它的核心功能是将用户编写的业务逻辑代码和自带默认组件代码整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。
2.MapReduce的核心编程思想
1)MapReduce运算程序一般分成两个阶段,Map阶段和Reduce阶段。
2)Map阶段的Map Task,完全并发运行,互不相干。
3)Reduce阶段的Reduce Task,完全互不相干,但是他们的数据依赖于上一个阶段的所有Map Task并发实例的输出。
4)MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段
3.Hadoop序列化
1)序列化:序列化就是把内存中的对象,转换成字节序列以便于存储到磁盘(持久化)和网络传输。
2)反序列化:将收到字节序列或者是磁盘的持久化数据,转换成内存中的对象。
3)为什么要序列化:
“活的”对象只生存在内存里,关机断电就没有了,而且“活的”的对象只能在本地的进程中使用,不能被发送到网络上的另一台计算机。然而序列化可以存储“活的”对象,可以将活的对象发送到远程计算机中。
4)为什么不用Java的序列化:
Java的序列化是一个重量级序列化框架,一个对象被序列化后,会附带很多额外的信息,不便于在网络中高效传输,所以,Hadoop自己开发了一套序列化机制。
5)Hadoop序列化的特点:
紧凑:高效使用存储空间
快速:读写数据的额外开销小
互操作:支持多语言的交互
6)自定义bean对象实现序列化接口步骤:
必须实现Writable接口;
反序列化时,需要反射调用空参构造函数,所以必须有空参构造;
重写序列化方法;
重写反序列化方法;
注意:反序列化和序列化的顺序完全一致。
要想把结果显示文件中,需要重写toString方法
如果需要将自定义的bean放在key中传输,则还需要实现Comparable接口,因为MapReduce框中的shuffle对key进行排序。
4.MapReduce框架原理
4.1 InputFormat
1)MapTask并行度决定机制
数据块:Block是HDFS物理上把数据分成一块一块,数据块是HDFS数据存储单位。
数据切片:数据切片是MapReduce程序计算输入数据的单位,一个切片会对应启动一个MapTask。
2)FileInputFormat切片源码解析
a.程序找到你数据存储的目录。
b.开始遍历处理(规划切片)目录下的每一个文件
c.遍历第一个文件:
c.1 计算文件大小:fs.sizeOf(文件名)
c.2 计算切片大小: computeSplitSize(Math.max(minSize,min(maxSize,blockSize)))=blockSize=128M
默认情况下,切片大小=blocksize
c.3 开始切,形成第一个切片,ss.txt:0-128M;形成第二个切片,ss.txt:128-256M;第三个切片,ss.txt:256-300M。(每次切片时都要判断剩下的部分是否大于块的1.1倍,若不大于,就划分为一个切片)。
c.4 将切片信息写到一个切片规划文件中。
c.5 这个切片的核心过程在getSplit()方法中完成。
c.6 InputSplit只记录了切片的元数据信息。
d.提交切换规划文件到Yarn中
3)切片大小的参数配置:
计算切片大小的公式:
切片大小的设置:
maxSize(切片最大值):参数如果调得比blockSize小,则会让切片变小,而且就等于配置的这个参数的值。
minSize(切片最小值):参数调得比blockSize大,则会让切片变得比blockSize大。
4.2 判定一个job的Map和Reduce数量
1)map数量由处理的数据分成的block数量决定,default_num=total_size/split_size。
2)resude数量由job.setNumReduceTasks(x)决定。
4.3 一个job的MapTask个数有什么决定
一个job阶段的MapTask并行度个数由客户端提交job时的切片个数决定。
5.MapReduce中的排序操作
1)部分排序:
MapReduce根据输入记录的键对数据集排序,保证输出的每个文件内部有序。
2)全排序:
最终输出结果只有一个文件,且文件内部有序。
3)辅助排序:
在Reduce端对key进行分组,应用于:在接收key为bean对象时,想让一个或多个字段的key进入到同一个reduce方法时,可以采用分组排序。
4)二次排序:在自定义排序过程中,如果compareTo中的判断条件为两个即为二次排序。
总结感悟
通过本期学习基本能掌握的技术如下:
1.掌握Hadoop基本知识,进行Hadoop的HDFS和MapReduce应用开发,搭建Hadoop
集群。
2.掌握Hbase基本知识,搭建Hbase集群,Hbase的基本操作
3.掌握数据仓库基本知识,用Hive建立数据仓库,并进行多维分析
Hadoop核心项目:HDFS(用于存储)和MapReduce (用于计算)
Hdfs:分布式文件系统
但是基础不是很扎实,还要学会温习让自己从头开始多做几遍牢记各种命令,学会很好的对数据进行掌控。