大数据工程师:大数据的java基础 第十三周

 Maven的设计原则
– 约定优于配置(比如文件目录结构)
– 重用构建逻辑:所有的功能都是插件
– 声明式执行:所有插件均在POM中声明

 Maven依赖项的类型
– Compile(默认),编译时需要
– Runtime,运行时需要,如JDBC驱动
– Provided,已经提供,如部署环境已经提供的
– Test,测试时需要
– System,系统范围

 mvn eclipse:eclipse 打成Eclipse项目,不能被识别为WEB项目,使用下面命令即可
– mvn eclipse:eclipse -Dwtpversion=1.0
 Spring简介
– Spring是轻量级的Java EE应用程序开源框架
– Spring的核心是个轻量级容器(container),实现了IoC(Inversion of Control)模式的容
器,Spring的目标是 实现一个全方位的整合框架,在Spring框架下实现多个子框架的组合,
这些子框架之间彼此可以独立,也可以使用其它的框架方案加以替代,Spring希 望提供onestop shop的框架整合方案
– 提供AOP支持——Aspect Oriented Programming
– 提供持久层的支持——JDBC、 Hibernate
– 提供事务管理框架(Transaction Management)
– 提供MVC框架
– 提供远程调用
• HTTP
• RMI
• SOAP

Hadoop结构
Mapper
Hadoop Map/Reduce框架为每一个InputSplit产生一个map任务,而每个InputSplit
是由该作业的InputFormat产生的。
应用程序可以使用Reporter报告进度,设定应用级别的状态消息,更新Counters(计数器
),或者仅是表明自己运行正常。
JobConf.setOutputKeyComparatorClass(Class)来指定具体负责分组的Comparator
用户可以通过实现自定义的 Partitioner来控制哪个key被分配给哪个Reducer。
用户可选择通过 JobConf.setCombinerClass(Class)指定一个combiner,它负责对中
间过程的输出进行本地的聚集,这会有助于降低从Mapper到 Reducer数据传输量。
这些被排好序的中间过程的输出结果保存的格式是(key-len, key, value-len, value),应用程
序可以通过JobConf控制对这些中间结果是否进行压缩以及怎么压缩,使用哪种CompressionCodec
– Map的数目通常是由输入数据的大小决定的,一般就是所有输入文件的总块(block)数。
– Map正常的并行规模大致是每个节点(node)大约10到100个map,对于CPU 消耗较小的
map任务可以设到300个左右。由于每个任务初始化需要一定的时间,因此,比较合理的情况
是map执行的时间至少超过1分钟。
– 这样,如果你输入10TB的数据,每个块(block)的大小是128MB,你将需要大约82,000个
map来完成任务,除非使用 setNumMapTasks(int)(注意:这里仅仅是对框架进行了一个
提示(hint))将这个数值设置得更高。

Reducer
– Reducer将与一个key关联的一组中间数值集归约(reduce)为一个更小的数值集。
– 用户可以通过 JobConf.setNumReduceTasks(int)设定一个作业中reduce任务的数目。
– 概括地说,对Reducer的实现者需要重写 JobConfigurable.configure(JobConf)方法
,这个方法需要传递一个JobConf参数,目的是完成Reducer的初始化工作。然后,框架为
成组的输入数据中的每个<key, (list of values)>对调用一次
reduce(WritableComparable, Iterator, OutputCollector, Reporter)方法。
之后,应用程序可以通过重写Closeable.close()来执行相应的清理工作。

 Reducer
– Reducer有3个主要阶段:shuffle、 sortreduce
– Shuffle
• Reducer的输入就是Mapper已经排好序的输出。在这个阶段,框架通过HTTP为每个Reducer获得所
Mapper输出中与之相关的分块。
– Sort
• 这个阶段,框架将按照key的值对Reducer的输入进行分组 (因为不同mapper的输出中可能会有相同
的key)。
– Shuffle和Sort两个阶段是同时进行的;map的输出也是一边被取回一边被合并的。
– Secondary Sort
• 如果需要中间过程对key的分组规则和reduce前对key的分组规则不同,那么可以通过
JobConf.setOutputValueGroupingComparator(Class)来指定一个Comparator。再加上
JobConf.setOutputKeyComparatorClass(Class)可用于控制中间过程的key如何被分组,所以
结合两者可以实现按值的二次排序

 Reducer
– Reduce
• 在这个阶段,框架为已分组的输入数据中的每个 <key, (list of values)>对调用一次
reduce(WritableComparable, Iterator, OutputCollector, Reporter)方法。
• Reduce任务的输出通常是通过调用 OutputCollector.collect(WritableComparable,
Writable)写入文件系统的。
– 应用程序可以使用Reporter报告进度,设定应用程序级别的状态消息,更新Counters(计
数器),或者仅是表明自己运行正常。
– Reducer的输出是没有排序的
– 需要多少个Reduce?
– Reduce的数目建议是0.95或1.75乘以 (<no. of nodes> *
mapred.tasktracker.reduce.tasks.maximum)。
– 用0.95,所有reduce可以在maps一完成时就立刻启动,开始传输map的输出结果。用1.75,
速度快的节点可以在完成第一轮reduce任务后,可以开始第二轮,这样可以得到比较好的负
载均衡的效果。

 Reducer
– 增加reduce的数目会增加整个框架的开销,但可以改善负载均衡,降低由于执行失败带来的
负面影响。
– 上述比例因子比整体数目稍小一些是为了给框架中的推测性任务(speculative-tasks) 或失
败的任务预留一些reduce的资源。
– 无Reducer
• 如果没有归约要进行,那么设置reduce任务的数目为是合法的。
• 这种情况下,map任务的输出会直接被写入由 setOutputPath(Path)指定的输出路径。框架在把它
们写入文件系统之前没有对它们进行排序。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值