一、Mapreduce的理解?Mapreduce 的执行原理?
Mapper 阶段
1、先将HDFS中的输入文件file按照一定的标准进行切片
2、调用自己编写的map逻辑,将输入的键值对<k1,v1>变成<k2,v2>
3、按照一定的规则对输出的键值对<k2,v2>进行分区
4、对每个分区中的键值对进行排序。
Reduce 阶段1、对多个Mapper任务的输出,按照不同的分区,通过网络拷贝到不同的Reducer节点上进行处理,将数据按照分区拷贝到不同的Reducer节点之后,对多个Mapper任务的输出在进行合并,排序。
2、调用自己的reduce逻辑,将键值对<k2,v2>变为<k3,v3>.在这里注意:每一个键值对<k2,v2>都会调用一次reduce函数。
3、将Reducer任务的输出保存到指定的文件中。
二、Spark工作流程简述
1、构建Spark Application的运行环境(启动SparkContext),SparkContext向资源管理器(Standalone、Mesos或YARN)注册并申请Executor运行资源;
2、资源管理器分配Executor资源并启动StandaloneExecutorBackend,Executor运行情况将随着心跳发送资源管理器上;
3、SparkContext构建成DAG图并分解成Stage,再把Taskset发送给Task Scheduler;
4、Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor,运行同时SparkContext将应用程序代码发放给Executor。
5、Task在Executor上运行,运行完毕释放所有资源。
三、Hadoop 中 job 和 task 之间的区别是什么
JobTracker 是一个 master 服务,软件启动之后 JobTracker 接收 Job,负责调度 Job的每一个子任务, task 运行于 TaskTracker 上,并监控它们,如果发现有失败的 task 就重新运行它。一般情况应该把 JobTracker 部署在单独的机器上。
TaskTracker 是运行在多个节点上的 slaver 服务。TaskTracker 主动与 JobTracker 通信,接收作业,并负责直接执行每一个任务。
四、hive的使用,内外部表的区别,分区作用,UDF和Hive优化
(1)hive使用:仓库、工具
(2)hive内外部表:内部表数据永久删除,外部表数据删除后、其他人依然可以访问
(3)分区作用:防止数据倾斜
(4)UDF函数:用户自定义的函数(主要解决格式,计算问题),需要继承UDF类
java代码实现
class TestUDFHive extends UDF {
public String evalute(String str){
try{
return "hello"+str
}catch(Exception e){
return str+"error"
} } }
Hive优化:看做mapreduce处理
排序优化:sort by 效率高于 order by
分区:使用静态分区 (statu_date="20160516",location="beijin"),每个分区对应hdfs上的一个目录
减少job和task数量:使用表链接操作
解决groupby数据倾斜问题:设置hive.groupby.skewindata=true ,那么hive会自动负载均衡
小文件合并成大文件:表连接操作
使用UDF或UDAF函数:http://www.cnblogs.com/ggjucheng/archive/2013/02/01/2888819.html
五、Hbase的rk(rowkey)设计,Hbase优化
rowkey:hbase三维存储中的关键(rowkey:行键 ,columnKey(family+quilaty):列键 ,timestamp:时间戳)
rowkey字典排序、越短越好
使用id+时间:9527+20160517 \使用hash散列:dsakjkdfuwdsf+9527+20160518
应用中,rowkey 一般10~100bytes,8字节的整数倍,有利于提高操作系统性能
Hbase优化
分区:RegionSplit()方法 \NUMREGIONS=9
column不超过3个
硬盘配置,便于regionServer管理和数据备份及恢复
分配合适的内存给regionserver
其他:
hbase查询
(1)get
(2)scan 使用startRow和endRow限制
六、jvm运行机制及内存原理
运行:
加载.class文件、管理并且分配内存、垃圾回收内存原理:
JVM装载环境和配置、装载JVM.dll 并初始化JVM.dll、处理class类
hdfs、yarn参数调优
mapreduce.job.jvm.num.tasks 默认为1,设置为 -1,重用jvm