先理一下已经学了哪些,不需要重新看视频,直接看文档就好。很多东西了解即可,面试不会问的,我不知道hadoop的优势我就不能工作了吗。
第一章 hadoop入门
1.hdfs架构:是一个文件系统,包括
namenode:用来存文件的名字、权限等元数据的节点
datanode:存储块数据的节点
secondaryNamenode:隔一段时间存一下元数据作为备份
2.Yarn架构:负责管理系统资源 如cpu等,比如一个任务需要分配多少资源。
ResourceManager:其实我感觉就是项目总监。 首先RM响应客户的请求,然后监控NodeManager的资源情况,根据任务的需要分配一个App Master,你可以理解为派一个小弟去协调(做这个NodeManager的项目经理),你就管这一个NM上面的协调工作。
NodeManager:跟总监汇报资源情况,接受项目总监和项目经理的命令,说白了你的资源就是为项目服务的。
AppMaster:项目经理小弟,就负责那一个NM上面的任务协调,需要什么资源拿什么资源。
Container:你要锤子要斧子,要鸡蛋还是要胡萝卜,要的东西太多,不好描述。直接给你标记个1号麻袋,你要什么都拿麻袋装,到时候把1号麻袋还我就行。
3.MapReduce架构:是一个分而治之的计算框架,框架说白了就是已经做好了骨架,你来填核心内容。分为:
Map:说白了就是把很多任务,切分成很多份发给很多机器去执行,来增加速度。
Reduce:接受很多机器的统计结果,进行一个汇总。比如把每个区的结果汇总在一起才是北京市的统计结果。
4.大数据生态
Sqoop:hadoop和hive《---------》关系型数据库,两者间数据的互相导入。
Flume:日志收集
kafka:分布式订阅消息系统
storm:连续计算,以流的形式输出给用户
spark:基于内存的计算框架
Flink:也是内存计算框架,用于实时计算
Oozie:管理hadoop作业的工作流程调度系统
HBase:分布式、面向列的数据库,适合存储非结构化数据!
Hive:数据仓库工具,可以将结构化的数据文件映射为数据库表,并提供简单的sql查询功能,本质是将sql转化为mapreduce任务进行运行。优点是学习成本低。
Zookeeper:针对分布式系统的可靠协调系统,提供功能包括配置维护、名字服务、分布式同步、组服务等。
5.hadoop搭建:
这个完全按照文档搭建的分布式,我已经搭建好了,就三台。
运行下Jps就知道怎么部署的了,hdfs+yarn+mapreduce,不过我没部署zookeeper好像。
第二章 hdfs
hdfs适合什么?不适合低延时数据访问;不适合存大量小文件;一次写入,多次读出;不支持文件修改,只支持追加;
1.hdfs文件块大小(面试重点)
默认大小hadoop2.x版本是128M,合理的数值设置取决于磁盘传输速率:寻址时间为传输时间的1%。
2.熟练使用hdfs shell命令
3.hdfs客户端开发
(1)hadoop依赖包、设置好hadoop_home和path环境变量----》这里之所以没用Maven是因为还需要加一些winutils。--》这里得以视频为准,不能以文档。
(2)配置maven:junit、hadoop-client、log4j,强调下是导入hadoop-client,模拟hadoop客户端。
(3)写hdfs程序,调用hdfs api。
套路化的东西。
4.熟悉hdfs API
5.hdfs数据流:上传数据其实很简单,客户端发起上传请求,namenode响应同意,然后客户端分片之后上传第一个块,namenode反馈在dn1-3这三个节点上存第一个块,然后客户端向dn1-3建立一条管道,客户端传给dn1,dn1传给dn2,dn2传给dn3。
读数据更简单,从namenode获取一个文件所有块的存储位置,然后依次从位置获取数据块。
6.Namenode和SecondaryNameNode
namenode更新元数据是在内存中,但内存数据断电即失,因此需要备份到磁盘上,但是如果边更新 边备份到FsImage效率就很低。namenode只需要记录客户端最新的一段修改,也就是edits log,这种记录的速度特别快。
秘书SNN负责把最新的一段修改Editslog,合并到FsImage备份上,就专门做这个事儿因为恨耗时。会定期询问namenode是否合并。
7.datanode工作机制(567都是面试重点,不过我想先略过,因为我觉得死记没啥用)
第三章 Mapreduce
有三种提交job来测试的方式:1.win本地测试 2.打好jar包上传给集群测试 3.本地运行程序,程序中设置好jar包地址自动提交集群
【今天最大收获是把第三种给跑通了】
1.主类里面 job.setJar 要设置好jar包位置
2.run-Edit configurations里面要写对参数
3.其次metainf要和jar包在同一个目录下
4.hdfs里面的用户要授权