1637 1

[Hadoop] Hadoop从初级到资深的必知必会35问(2) [推广有奖]

  • 0关注
  • 66粉丝

教授

55%

还不是VIP/贵宾

-

威望
1
论坛币
13016 个
通用积分
63.9949
学术水平
26 点
热心指数
25 点
信用等级
15 点
经验
8663 点
帖子
617
精华
0
在线时间
170 小时
注册时间
2016-12-6
最后登录
2017-4-8

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

此文为Hadoop从初级到资深的必知必会35问(1)续篇,欲了解全文,请点击查看。


16、MapReduce原理
       1. MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题。
       2. MR由两个阶段组成:Map和Reduce,用户只需要实现map()和reduce()两个函数,即可实现分布式计算,非常简单。
       3. 这两个函数的形参是key,value对,表示函数的输入信息。
      
17、MapReduce执行过程
   1.map任务处理
           1.1. 读取输入文件内容,解析成key,value对,对输入文件的每一行,解析成key,value对。每一个键值对调用一次map函数。
           1.2. 写自己的逻辑,对输入的key,value处理,转换成新的key、value输出。
           1.3. 对输出的key,value进行分区。
           1.4. 对不同分区的数据,按照key进行排序,分组。相同key的vale放到一个集合中。
           1.5. (可选)分组后的数据进行规约。
       2. reduce任务处理
          2.1. 对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。
          2.2. 对多个map任务的输出进行合并,排序。写reduce函数自己的逻辑,对输入的key,value处理,转换成新的key,value输出。
          2.3. 把reduce的输出保存到文件中。
         
18、最小的MapReduce驱动
       Configuration configuration = new Configuration();
       Job job = new Job(configuration, “HelloWorld”);                //
       job.setInputFormatClass(TextInputFormat.class);                        //指定如何对输入文件格式化的
       job.setMapperClass(IdentityMapper.class);                            //指定自定义Map类
       job.setMapOutputKeyClass(LongWritable.class);                    //Map输出的类型,k类型
       job.setMapOutputValueClass(Text.class);                                //Map输出的类型,v类型
       job.setPartitionerClass(HashPartitioner.class);                //分区
       job.setNumReduceTasks(1);                                                            //一个reduce任务运行
       job.setReducerClass(IdentityReducer.class);                        //自定义reduce类
       job.setOutputKeyClass(LongWritable.class);                        //指定reduce的输出类型
       job.setOutputValueClass(Text.class);                                    //指定reduce的输出类型
       job.setOutputFormatClass(TextOutputFormat.class);            //指定输出文件的格式化类
       job.waitForCompletion(true);                                                    //把job提交给JobTracker运行

19、数据类型与格式
20、Writable接口与序列化机制
   1. 序列化概念
      1.1 序列化(Serializable)是指把结构化对象转化为字节流
      1.2 反序列化(Deserialization)是序列化的逆过程。即把字节流转回结构化对象。
      1.3 Java序列化(java.io.Serializable)
       2. hadoop序列化的特点
          2.1 序列化格式特点:
                      ①紧凑:高效使用存储空间。
                      ②快速:读写数据的额外开销小。
                      ③可扩展:可透明地读取老格式的数据。
                      ④互操作:支持多语言的交互。
       3. hadoop的序列化格式:Writable
       4. hadoop序列化的作用
          4.1 序列化在分布式环境两大作用:进程间通信,永久存储。
          4.2 Hadoop节点间通信。
       5、自定义Writable类,重写write、readFields方法
               5.1 write是把每个对象序列化到输出流。
               5.2 readFields是把输入字节流反序列化。

21、实现WritableComparable
       Java值对象的比较:一般需要重写toString(),hashCode(),equals()方法。

——————-问答开始——————
问:MapReduce框架的结构是什么?
   答:主从结构,主节点(JobTracker)只有一个,从节点(TaskTracker)有多个
   
问:Map在整个MR框架中作用是什么?
   答:打散数据,把原数据,按我们自定义的map方法,将数据打散
   
问:Reduce在整个MR框架中作用是什么?
   答:将数据进行汇总,把多个Map输出的数据,进行汇总
        ——————-问答结束——————

——————-问答开始——————

问:如何使用计数器
   答:
   
问:Combiner(规约)的作用是什么,应用场景是什么
   答:作用
       1. combiner最基本是实现本地key的聚合,对Map输出的key排序,value进行迭代。如下所示:
            map:(k1,v1)——>list(k2,v2)
            combiner:(k2,list(v2))——>list(k2,v2)
            reduce:(k2,list(v2))——>list(k3,v3)
       2. combiner还具有类似本地的reduce功能。
            例如:hadoop自带的wordcount的例子和找出value的最大值得程序,combiner和redure完全一致。如下所示:
            map:(k1,v1)——>list(k2,v2)
            combiner:(k2,list(v2))——>list(k3,v3)
            reduce:(k3,list(v3))——>list(k4,v4)
       3. 如果不用combiner,那么,所有的结果都是reduce完成,效率相对低下。
            使用combiner,先完成会在本地聚合,提升速度。
       4. 对于hadooop自带的wordcount的例子,value就是一个叠加的数字,所以map一结束就可以进行reduce的value叠加,
            而不必等到所有的map结束再去进行reduce的value叠加。
           
       应用场景:
           单词个数,求和,最大值等等
       不适合场景
           求平均数
      
问:为什么使用Combiner?
   答:Combiner发生在Map端,对数据进行规约处理,数据量变小了,传送到reduce端的数据量变小了,传输时间变短,作业的整体时间变短。

问:Combiner本身已经执行了reduce操作,为什么在Reducer阶段还要执行reduce操作哪?
   答:combiner操作发生在map端的,处理一个任务所接收的文件中的数据,不能跨map任务执行;只有reduce可以接收多个map任务处理的数据。

问:Partitioner的作用是什么,应用场景是什么
   答:
       作用:对map端输出的数据key作一个散列,使数据能够均匀分布在各个reduce上进行后续操作,避免产生热点区。
      
       场景解析:
       (Partition)分区出现的必要性,如何使用Hadoop产生一个全局排序的文件?最简单的方法就是使用一个分区,但是该方法在处理大型文件时效率极低,因为一台机器必须处理所有输出文件,从而完全丧失了MapReduce所提供的并行架构的优势。事实上我们可以这样做,首先创建一系列排好序的文件;其次,串联这些文件(类似于归并排序);最后得到一个全局有序的文件。主要的思路是使用一个partitioner来描述全局排序的输出。比方说我们有1000个1-10000的数据,跑10个ruduce任务, 如果我们运行进行partition的时候,能够将在1-1000中数据的分配到第一个reduce中,1001-2000的数据分配到第二个reduce中,以此类推。即第n个reduce所分配到的数据全部大于第n-1个reduce中的数据。这样,每个reduce出来之后都是有序的了,我们只要cat所有的输出文件,变成一个大的文件,就都是有序的了
       基本思路就是这样,但是现在有一个问题,就是数据的区间如何划分,在数据量大,还有我们并不清楚数据分布的情况下。一个比较简单的方法就是采样,假如有一亿的数据,我们可以对数据进行采样,如取10000个数据采样,然后对采样数据分区间。在Hadoop中,patition我们可以用TotalOrderPartitioner替换默认的分区。然后将采样的结果传给他,就可以实现我们想要的分区。在采样时,我们可以使用hadoop的几种采样工具,RandomSampler,InputSampler,IntervalSampler。
      这样,我们就可以对利用分布式文件系统进行大数据量的排序了,我们也可以重写Partitioner类中的compare函数,来定义比较的规则,从而可以实现字符串或其他非数字类型的排序,也可以实现二次排序乃至多次排序。
   
问:Shuffler的过程是什么
   答:
  ————-问答结束—————

22. Hadoop管理员常用命令
   1. hadoop job –list  #列出正在运行的Job
   2. hadoop job –kill #kill job
   3. hadoop fsck / #检查HDFS块状态,是否损坏
   4. hadoop fsck / -delete #检查HDFS块状态,删除损坏块
   5. hadoop dfsadmin –report #检查HDFS状态,包括DN信息
   6. hadoop dfsadmin –safemode enter | leave

23. 常见分布模式安装错误
   1. Namenode与Datanode是互相都可以ssh无密码访问
   2. 在hosts文件中127.0.0.1 不要与hadoop0一起设置

24. 什么是Zookeeper?
   1. Zookeeper是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务。
   2. 它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。

25. 为什么使用Zookeeper?
   1. 大部分分布式应用需要一个主控,协调器或控制器来管理物理分布的子进程(如资源,任务分配等)。
   2. 目前,大部分应用需要开发一个私有的协调程序,缺乏一个通用的机制。
   3. 协调程序的反复编写浪费,难以形成通用,伸缩性好的协调器。
   4. Zookeeper:提供通用的分布式锁服务,用以协调分布式应用。
   
26. Zookeeper能帮我做我们做什么?
   1. hadoop,使用zookeeper的事件处理确保整个集群只有一个namenode,存储配置信息等。
   2. HBase,使用zookeeper的事件处理确保整个集群只有一个HMaster,察觉HRegionServer联机或宕机,存储访问控制列表等。
   
27. Zookeeper的特性
   1. zookeeper是简单的。
   2. zookeeper是富有表现力的。
   3. zookeeper具有高可用性。
   4. zookeeper采用松耦合交互方式。
   5. zookeeper是一个资源库。

28. Zookeeper的读写机制。
   1. Zookeeper是一个由多个server组成的集群.
   2. 一个leader,多个follower.
   3. 每个server保存一份数据副本.
   4. 全局数据一致.
   5. 分布式读写.
   6. 更新请求转发,由leader实施.

29. Zookeeper的保证
   1. 更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行。
   2. 数据更新原子性,一次数据更新要么成功,要么失败!
   3. 全局唯一数据视图,client无论连接到哪个server,数据视图都是一致的
   4. 实时性,在一定事件范围内,client能读到最新数据。
   
30. 观察(watcher)
   1. Watchker在Zookeeper是一个核心功能。Watcherkey监控目录节点的数据变化以及子目录的变化,
        一旦这写状态发生变化,服务器就会通知所有设置在这个目录节点上的Watcher,从而每个客户端都很快
        知道它所关注的目录节点的状态发生变化,而做出相应的反应!
   2. 可以设置观察的操作:exists,getChildren,getData
3. 可以触发观察的操作:create,delete,setData

31. Zookeeper工作原理
   1. 广播模式需要保证proposal被按顺序处理,因此zk采用了递增的事务id号(zxid)来保证。
        所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64为的数字,
        它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch。低32位是个递增计数。
   2. 当leader崩溃或者leader失去大多数的follower,这时候zk进入恢复模式,
        恢复模式需要重新选举出一个新的leader,让所有的server都恢复到一个正确的状态。

32. Zookeeper总结
   1. Zookeeper 作为 Hadoop项目中的一个子项目,是 Hadoop 集群管理的一个必不可少的模块,
      它主要用来控制集群中的数据,如它管理 Hadoop 集群中的 NameNode,还有 Hbase 中 Master Election、Server 之间状态同步等。
   2. Zoopkeeper 提供了一套很好的分布式集群管理的机制,就是它这种基于层次型的目录树的数据结构,
        并对树中的节点进行有效管理,从而可以设计出多种多样的分布式的数据管理模型

33. HBASE基础知识
   1. HBase简介
       1.1 HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,
             利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase利用Hadoop HDFS作为其文件存储系统,
             利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协调工具。
   2. 架构体系
       2.1 Client  包含访问hbase 的接口,client 维护着一些cache 来加快对hbase 的访问,比如regione 的位置信息
       2.2 Zookeeper
           2.2.1 保证任何时候,集群中只有一个running master
           2.2.2 存贮所有Region 的寻址入口
           2.2.3 实时监控Region Server 的状态,将Region server 的上线和下线信息,实时通知给Master
           2.2.4 存储Hbase 的schema,包括有哪些table,每个table 有哪些column family
       2.3 Master 可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行
           2.3.1 为Region server 分配region
           2.3.2 负责region server 的负载均衡
           2.3.3 发现失效的region server 并重新分配其上的region

HBASE是什么数据库,与普通RDBMS有什么区别
HBASE的结构
HBASE的常用命令

34. 什么是Hive
   1. Hive是建立在Hadoop上的数据仓库基础架构。
   2. Hive是SQL解析引擎,它将SQL语句转译成M/R Job然后在hadoop执行
   3. Hive的表现就是HDFS的目录/文件,按表名把文件夹分开。
   
35. Hive的metastore
   1. metastore是hive元数据的集中存放地。metastore默认使用内嵌的derby数据库作为存储引擎。
   2. derby引擎的缺点:一次只能打开一个会话。
   3. 使用Mysql作为外置存储引擎,多用户同时访问


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Hadoop Had Comparable Completion ZooKeeper Hadoop Hadoop基础知识 Hadoop入门基础 Hadoop核心项目 Hadoop集群

沙发
rainhousehappy 发表于 2016-12-8 08:37:26 来自手机 |只看作者 |坛友微信交流群
数据分析闯天下 发表于 2016-12-7 18:40
此文为Hadoop从初级到资深的必知必会35问(1)续篇,欲了解全文,请点击查看。

16、MapReduce原理
谢谢分享

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-26 20:13