大数据-学习实践-5企业级解决方案
(大数据系列)
文章目录 大数据-学习实践-5企业级解决方案 1知识点 2具体内容 2.1小文件问题 2.1.1 SequenceFile 2.1.2 MapFile 2.1.3 小文件存储计算 2.2数据倾斜 2.3 YARN 2.3.1 YARN架构 2.3.2 YARN调度器 2.3.2 YARN多资源队列配置和使用 2.4Hadoop官方文档 2.5总结 3待补充 4Q&A 5code 6参考
1知识点
小文件问题 小文件存储计算 数据倾斜 YARN Hadoop官方
2具体内容
2.1小文件问题
MapReduce框架针对大数据文件设计,小文件处理效率低下,消耗内存资源
每个小文件在NameNode都会占用150字节的内存,每个小文件都是一个block 一个block产生一个inputsplit,产生一个Map任务 同时启动多个map任务消耗性能,影响MapReduce执行效率
2.1.1 SequenceFile
SequenceFile是二进制文件,直接将对序列化到文件 对小文件进行文件合并:文件名为k,文件内容为v,序列化到大文件 但需要合并文件的过程,文件大且合并后的文件不便查看,需要遍历查看每个小文件 读、写试验 SequenceFile在hdfs上合并为一个文件
2.1.2 MapFile
排序后的MapFile,包括index和data index为文件的数据索引,记录每个record的key值,并保存该record在文件中的偏移位 访问MapFile时,索引文件被加载到内存,通过索引映射关系快速定位到指定Record所在文件位置 相对SequenceFile而言,MapFile的检索效率是高效的,缺点是会消耗一部分内存来存储index数据 MapFile在hdfs上包括2个文件,index和data
2.1.3 小文件存储计算
使用SequenceFile实现小文件存储计算
java开发,生成SequenceFile;(人工将一堆小文件处理成一个较大文件,进行MapReduce计算) 开发MapReduce(借助底层),读取Sequencefile,进行分布式计算
2.2数据倾斜
一般不对Map任务进行改动,但为了提高效率,可增加Reduce任务,需要对数据分区 job.getPartitionerClass()实现分区 当MapReduce程序执行时,大部分Reduce节点执行完毕,但有一个或几个Reduce节点运行很慢,导致整个程序处理时间变长,表现为Reduce节点卡着不动
job.setNumReduceTasks(Integer.parseInt(args[2]));
倾斜严重,要把倾斜数据打散(抽样确定哪一类,打散)
String key = words[0];
if ("5".equals(key)) {//把倾斜的key打散,分成10份key = "5" + "_" + random.nextInt(10);
}
2.3 YARN
2.3.1 YARN架构
集群资源的管理和调度,支持主从架构,主节点最多2个,从节点可多个 ResourceManager:主节点负责集群资源分配和管理 NodeManager:从节点负责当前机器资源管理 YARN主要管理内存和CPU两种资源 NodeManager启动向ResourceManager注册,注册信息包含该节点可分配的CPU和内存总量 默认单节点:(yarn-site.xml文件中设置) yarn.nodemanager.resourece.memory-mb:单节点可分配物理内存总量,默认8Mb*1024,8G yarn.nodemanager.resource.cpu-vcores:单节点可分配的虚拟CPU个数,默认是8
2.3.2 YARN调度器
FIFO Scheduler 先进先出 Capacity Scheduler FIFO Scheduler 多队列版本(常用) Fair Scheduler 多队列,多用户共享资源
2.3.2 YARN多资源队列配置和使用
增加online队列和offline队列 修改 capacity-scheduler.xml 文件,并同步其他节点
yarn.scheduler.capacity.root.queues default,online,offline The queues at the this level (root is the root queue).
yarn.scheduler.capacity.root.default.capacity 70 Default queue target capacity.
yarn.scheduler.capacity.root.online.capacity 10 Online queue target capacity.
yarn.scheduler.capacity.root.offline.capacity 20 Offline queue target capacity.
yarn.scheduler.capacity.root.default.maximum-capacity 70 The maximum capacity of the default queue.
yarn.scheduler.capacity.root.online.maximum-capacity 10 The maximum capacity of the online queue.
yarn.scheduler.capacity.root.offline.maximum-capacity 20 The maximum capacity of the offline queue.
- 重新启动
stop-all.sh
start-all.sh
向offline队列提交MR任务 online队列里面运行实时任务 offline队列里面运行离线任务
#解析命令行通过-D传递参数,添加至conf;也可修改java程序解析各参数
String[] remainingArgs = new GenericOptionsParser(conf,args).getRemainingArgs();
Job job = Job.getInstance(conf);
job.setJarByClass(WordCountJobQueue.class);#必须有,否则集群执行时找不到wordCountJob这个类
#重新编译上传执行
hadoop jar db_hadoop-1.0-SNAPSHOT-jar-with-dependencies.jar com.imooc.mr.WordCountJobQueue -Dmapreduce.job.queue=offline /test/hello.txt /outqueue
2.4Hadoop官方文档
官方文档 在CDH中的使用 在HDP中的使用 -(1080端口) Ambari组件,提供web界面
2.5总结
MapReduce 原理 计算过程 执行步骤 wordcount案例 日志查看:开启YARN日志聚合,启动historyServer进程 程序扩展:去掉Reduce Shuffle过程 序列化 源码分析 性能优化 YARN 资源管理:内存+CPU 调度器:常用CapacityScheduler
3待补充
无
4Q&A
无
5code
无
6参考