Hadoop大数据基础与应用0001.docx

上传人:太** 文档编号:69706636 上传时间:2023-01-07 格式:DOCX 页数:16 大小:139.73KB
返回 下载 相关 举报
Hadoop大数据基础与应用0001.docx_第1页
第1页 / 共16页
Hadoop大数据基础与应用0001.docx_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《Hadoop大数据基础与应用0001.docx》由会员分享,可在线阅读,更多相关《Hadoop大数据基础与应用0001.docx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第1章Hadoop技术概述.Hadoop2.0包含明B些核心组件?MapReduce、HDFS、YARN.Hadoop包含哪些优势?方便、弹性、健壮、简单.Hadoop有哪些应用领域?运营商、电子商务、在线旅游、欺诈检测、医疗保健、能源开采、金融、直播、在线教育等 等.Hadoop有几种运行模式?单机模式、伪分布模式、完全分布式模式.Hadoop伪分布集群包含哪些守护进程?DataNode NodeManager ResourceManager SecondaryNameNode NameNode第2章Hadoop分布式文件系统(HDFS)1 .简述HDFS的设计理念?HDFS的设计理念来源于

2、非常朴素的思想:即当数据文件的大小超过单台计算机的存储能力 时,就有必要将数据文件切分并存储到由若干台计算机组成的集群中,这些计算机通过网络 进行连接,而HDFS作为一个抽象层架构在集群网络之上,对外提供统一的文件管理功能, 对于用户来说就感觉像在操作一台计算机一样,根本感受不到HDFS底层的多台计算机, 而且HDFS还能够很好地容忍节点故障且不丢失任何数据。2 .简述FSImage和Edit Log的合并过程?FSImage和EditLog合并的详细步骤如下所示。(1) SecondaryNameNode (即从元数据节点)引导NameNode (即元数据节点)滚动更新 EditLog,并开

3、始将新的 EditLog 写进 edits.newo(2)SecondaryNameNode W NameNode 的 FSImage(fsimage)和 EditLog(edits)复制到本地的检 查点目录。(3) SecondaryNameNode 将 FSImage(fsimage)导入内存,并|1|放 EditLog(edits),将其合并到 FSImage(fsimage.ckpt),并将新的 FSImage(fsimage.ckpt)压缩后写入磁盘。(4) SecondaryNameNode 将新的 FSImage(fsimage.ckpt)传回 NameNode。(5) Name

4、Node 在接收新的 FSImage(fsimage.ckpt)后,将 fsimage.ckpt 替换为 fsimage,然后5.如何在Hadoop集群中动态地增加或删除节点?简单的说,Hadoop集群扩容只需要新增节点纳入include文件进行管理即可,Hadoop集群 缩容只需要删除节点纳入exclude文件进行管理即可。第7章Hive数据仓库工具.简述Hive和关系型数据库的异同?Hive和关系型数据库都有数据库和表的概念,都可以使用SQL来处理数据。但是Hive中的 表是逻辑表不是物理表,数据存储在HDFS之上,作业的运行依赖YARN集群,可以基于 Hadoop集群处理海量数据。1 .

5、简述Hive的运行机制?Hive的运行机制包含以下几个步骤:(1)用户通过用户接口连接Hive,发布HQL。(2) Hive解析查询并制定查询计划。(3) Hive将查询转换成MapReduce作业。(4) Hive 在 Hadoop 上执行 MapReduce 作业。2 .简述Hive内部表和外部表的区别与使用?(1)区别删除Hive内部表时,表结构和数据都会被删除。删除Hive外部表时,只删除表结构,数据 不会被删除。(2)使用场景根据实际工作经验,一般会遵循一个经验法则:如果所有数据处理都由Hive来完成, 应该选择使用内部表。如果同一个数据集需要由Hive和其他工具同时来处理,应该选择

6、使 用外部表。一般的做法是将存放在HDFS中的初始数据集使用外部表进行处理,然后使用Hive 的转换操作将数据移到Hive的内部表。3 .简述ORDER BY和SORT BY在使用上的区别和联系?(1)联系order by和sort by都可以对数据进行排序。(2)区别order by排序出来的数据是全局有序的,但是只能有一个partitionsort by排序出来的数据是局部有序的,但是全局无序。即partition内部是有序的,但是 partition与partition之间的数据时没有顺序关系的。4 .简述Hive性能调优的常见手段?Fetch Task的优化、本地模式执行的优化、JVM

7、的优化、task并行度优化等等第8章H Base分布式数据库根据下面给出的表格,用HBase Shell模式设计Score成绩表,并对表进行操作。Score成绩表namescoreChineseMathEnglishLucy959086Lily907688Jack8592781 .查看Score表结构。# 创建表create Score,score# 插入数据put ,Score7Lucy,score:Chinese,/95,put ScoreyLucy/scorerMath/gO,put Score/Lucy/scoreiEnglish/SGput Score/Lily/scoreiChin

8、ese/gOput Score*,Lily,score:Math*,76put coreYLily/scoreiEnglish/SSput Score7Jack7score:Chinese785put Score,Jack/scoreath,92put Score/Jack/scorenglish/yS# 查询表结构describe Score2 .查询Jack同学的Chinese成绩。get Score/Jack/scoreiChinese.将Lucy同学的English成绩修改为90分。put Score1,Lucy/scoreiEnglish/gO第9章Hadoop生态圈其他常用开发技术

9、.如何提高Sqoop导入导出的并发度?Sqoop通过参数-m可以指定作业的并发度。1 .Flume如何保证数据不丢失?Flume中的Event在系统流动过程中,通过事务的方式保证不丢失。Event在Flume节点存储 时,可以选择type的值为file将数据持久化磁盘确保数据不丢失。2 .Kafka的Partition为什么需要副本?Kafka中的一个Topic可以包含多个Partition,为了防止Kafka集群节点宕机或者磁盘损坏, Partition需要副本机制来实现容错,确保在硬件故障的情况下数据不丢失。3 .简述Kafka的优势?Kafka具备高吞吐量、低延迟、持久性、可靠性、容错性

10、和高并发的特点和优势。4 .Spark和Flink编程题目假设日志数据如下所示,格式为:网站ID、访客ID、访问时间sitel/userl/2021-10-20 02:12:22sitel,user2z2021-10-28 04:41:23sitel,user3,2021-10-20 11:46:32sitel,user3,2021-10-23 11:02:11site2,user4,2021-10-20 15:25:22site3/user5/2021-10-29 08:32:54site3,user6,2021-10-22 08:08:26site4,user7,2021-10-20 10

11、:35:37site4,user7,2021-10-24 11:54:58现在要对近7天的日志进行统计,统计结果格式如下。Key: (Date (日期),Hour (时段),Site (网站)。Value: (PV (访问次数),UV (独立访问人数,相同访客id去重)。分别使用Spark和Flink编写执行代码,并将统计结果保存到HBase数据库。Spark示例代码:package com.bigdataimport org.apache.spark.SparkConf, SparkContextobject SparkTest def main(args: ArrayString): Un

12、it = 获取 SparkContextval conf = new SparkConf().setAppName(,SparkTest).setMaster(local2)val sc = new SparkContext(conf)读取日志文件val rdd = sc.textFile(G:learndatauser.log).map(t=解析数据val array = t.split(“J)val day = array(2).split(s+)(0)val hour = array(2).split(s+H)(l).substring(0,2) (array(O),array(l),d

13、ay,hour)/.filter(t=/过滤出最近7天的数据/TimeUtils.getDiffDay(currentDay,t._3)(t._3,t._4,t._l).map(t=(t._l,t._2.size) print(pvRDD.collect().toBuffer)插入HBase省略统计uv独立访问人数-先按照用户去重,然后再聚合统计valuvRDDrdd.groupBy(t=t).map(t=(t. 1. 3,t. 1. 4,t. 1. l),t. 2.size).reduceByKey( + )print(uvRDD.collect().toBuffer)插入HBase省略sc

14、.stop();)Flink示例代码:package com.bigdata;import mon.functions.FilterFunction;import mon.functions.FlatMapFunction;import mon.functions.MapFunction;import org.apache.flink.api.java.DataSet;import org.apache.flink.api.java.ExecutionEnvironment;import org.apache.flink.api.java.tuple.Tuple2;import org.apa

15、che.flink.util.Collector;public class FlinkTest public static void main(String args) throws Exception /获取 ExecutionEnvironmentExecution Environment benv = ExecutionEnvironment.getExecutionEnvironmentf); 读取数据DataSet ds = benv.readTextFileCGAXIearnWdataWuser.log);统计pv访问次数DataSetTuple2StringJnteger pvD

16、S = ds.map(new MapFunctionString, Tuple2StringJnteger() (Override public Tuple2 map(String s) throws Exception String array = s.split。,);String day = array2.split(s+)0;String hour = array2.split(s+)l.substring(0,2);return new Tuple2(day4-+hour+(5)+array0,l); ) ).filter(new FilterFunctionTuple2String

17、, lnteger() Overridepublic boolean filter(Tuple2 t) throws Exception /过滤出最近7天的数据/TimeUtils.getDiffDay(currentDay,t._3)7return true; ) ) .groupBy(0).sum(l); pvDS.print(); 插入HBase省略 System.out.println(H);统计uv独立访问人数.先按用户去重,然后再聚合统计DataSetTuple2String,lnteger uvlDS = ds.map(new MapFunctionString, Tuple2S

18、tring,lnteger() Overridepublic Tuple2 map(String s) throws Exception String array = s.split(,);String day = array2.split(s+)O;String hour = array2.split(s+)l.substring(0/2);return new Tuple2(array0+arrayl+day+hour,l); ).filterfnew FilterFunctionTuple2String, lnteger() Overridepublic boolean filter(T

19、uple2 t) throws Exception /过滤出最近7天的数据/TimeUtils.getDiffDay(currentDay,t._3)7return true; ) ) .groupBy(0).sum(l); DataSetTuple2String,lnteger uv2DS = uvlDS.flatMap(newFlatMapFunctionTuple2String/ Integers Tuple2String, lnteger() Overridepublic void flatMap(Tuple2 t, CollectorTuple2String, lnteger col

20、lector) throws Exception String line = t.fO;String array = line.split(“);collector.collectfnewTuple2(array2+,+array3+array0,l);).groupBy(0).sum(l);uv2DS.print();插入HBase省略)第9章Hadoop生态圈其他常用开发技术.如何提高Sqoop导入导出的并发度?Sqoop通过参数-m可以指定作业的并发度。1 .Flume如何保证数据不丢失?Flume中的Event在系统流动过程中,通过事务的方式保证不丢失。Event在Flume节点存储

21、时,可以选择type的值为file将数据持久化磁盘确保数据不丢失。2 .Kafka的Partition为什么需要副本?Kafka中的一个Topic可以包含多个Partition,为了防止Kafka集群节点宕机或者磁盘损坏, Partition需要副本机制来实现容错,确保在硬件故障的情况下数据不丢失。3 .简述Kafka的优势?Kafka具备高吞吐量、低延迟、持久性、可靠性、容错性和高并发的特点和优势。4 .Spark和Flink编程题目假设日志数据如下所示,格式为:网站ID、访客ID、访问时间sitel,userl,2021-10-20 02:12:22sitel,user2/2021-10-

22、28 04:41:23sitel,user3,2021-10-20 11:46:32sitel,user3,2021-10-23 11:02:11site2,user4,2021-10-20 15:25:22site3,user5,2021-10-29 08:32:54site3,user6,2021-10-22 08:08:26site4,user7,2021-10-20 10:35:37site4,user7,2021-10-24 11:54:58现在要对近7天的日志进行统计,统计结果格式如下。Key: (Date (日期),Hour (时段),Site (网站)。Value: (PV (

23、访问次数),UV (独立访问人数,相同访客id去重)。 分别使用Spark和Flink编写执行代码,并将统计结果保存到HBase数据库。Spark示例代码: package com.bigdata import org.apache.spark.SparkConf, SparkContext object SparkTest def main(args: ArrayString): Unit = 获取 SparkContextval conf = new SparkConf().setAppName(SparkTest).setMaster(,local2) val sc = new Spar

24、kContext(conf)读取日志文件val rdd = sc.textFile(”G:learndatauser.log).map( t=解析数据val array = t.splitC/)val day = array(2).split(s+)(0)val hour = array(2).split(s+n)(l).substring(0,2) (array(O),array(l),day,hour)/.filter(t=/过滤出最近7天的数据/TimeUtils.getDiffDay(currentDay,t._3)(t._3,t._4,t._l).map(t=(t._l,t._2.s

25、ize) print(pvRDD.collect().toBuffer)插入HBase省略统计uv独立访问人数.先按照用户去重,然后再聚合统计valuvRDDrdd.groupBy(t=t).map(t=(t. 1. 3,t. 1. 4,t. 1. l),t. 2.size).reduceByKey( + ) print(uvRDD.collect().toBuffer) 插入HBase省略 sc.stop();Flink示例代码:package com.bigdata;import mon.functions.FilterFunction;import mon.functions.FlatM

26、apFunction;import mon.functions.MapFunction;import org.apache.flink.api.java.DataSet;import org.apache.flink.api.java.ExecutionEnvironment;import org.apache.flink.api.java.tuple.Tuple2;import org.apache.flink.util.Collector;public class FlinkTest public static void main(String args) throws Exception

27、 /获取 ExecutionEnvironmentExecution Environment benv = ExecutionEnvironment.getExecutionEnvironment();读取数据DataSet ds = benv.readTextFile(G:learndatauser.logn);统计pv访问次数DataSetTuple2String,lnteger pvDS = ds.map(new MapFunctionString, Tuple2String,lnteger() Override public Tuple2 map(String s) throws Ex

28、ception String array = s.split(,);String day = array2.split(s+)0;String hour = array2.split(s+H)l.substring(0/2);return new Tuple2(day+hour+,+array0,l); ) ).filter(new FilterFunctionTuple2String, lnteger() Override public boolean filter(Tuple2 t) throws Exception /过滤出最近7天的数据/TimeUtils.getDiffDay(cur

29、rentDay,t._3)7return true; ) ) .groupBy(0).sum(l); pvDS.print(); 插入HBase省略 System.out.println(H);统计uv独立访问人数.先按用户去重,然后再聚合统计DataSetTuple2StringJnteger uvlDS = ds.map(new MapFunctionString, Tuple2String,lnteger() (Overridepublic Tuple2 map(String s) throws Exception String array = s.split(;);String day

30、 = array2.split(s+)0;String hour = array2.split(s+)l.substring(0/2);return new Tuple2(array0+arrayl+(5)+day+,+hour,l); ) ).filter(new FilterFunctionTuple2String, lnteger() (Overridepublic boolean filter(Tuple2 t) throws Exception /过滤出最近7天的数据/TimeUtils.getDiffDay(currentDay,t._3)7return true;).groupB

31、y(0).sum(l);DataSetTuple2String,lnteger uv2DS = uvlDS.flatMap(newFlatMapFunctionTuple2String, Integers Tuple2String, lnteger() Overridepublic void flatMap(Tuple2 t, CollectorTuple2String, lnteger collector) throws Exception String line = t.fO;String array = line.split();collector.collect(newTuple2(a

32、rray2+array3+array0,l);).groupBy(0).sum(l);uv2DS.print();插入HBase省略直接加载和启用该文件。(6) NameNode将新的EditLog(即edits.new)更名为EditLog(即edits)o默认情况下,该过程 1小时发生一次,或者当EditLog达到默认值(如64MB)也会触发,具体控制参数可以通过配 置文件进行修改。3.简述HDFS的数据读写流程?HDFS读取数据流程主要包括以下几个步骤。L客户端通过调用FileSystem对象的open。方法来打开希望读取的文件,对于HDFS来说, 这个对象是DistributedFil

33、eSystem的一个实例。数据节点数据节点数据节点图2-4客户端读取HDFS中的数据2 .DistributedFileSystem通过RPC获得文件的第一批块的位置信息(Locations),同一个块按 照重复数会返回多个位置信息,这些位置信息按照Hadoop拓扑结构排序,距离客户端近的 排在前面。3 .前两步会返回一个文件系统数据输入流(FSDatalnputStream)对象,该对象会被封装为分 布式文件系统输入流(DFSInputStream)对象,DFSInputStream可以方便地管理DataNode 和NameNode数据流。客户端调用read。方法,DFSInputStrea

34、m会找出离客户端最近的 DataNode并连接。4 .数据从DataNode源源不断地流向客户端。5 .如果第一个块的数据读完了,就会关闭指向第一个块的DataNode的连接,接着读取下一 个块。这些操作对客户端来说是透明的,从客户端的角度来看只是在读一个持续不断的数据 流。6 .如果第一批块全部读完了,DFSInputStream就会去NameNode拿下一批块的位置信息,然 后继续读。如果所有的块都读完了,这时就会关闭所有的流。HDFS的写入数据流程主要包括以下儿个步骤。1 .客户端通过调用DistributedFileSystem的create。方法创建新文件。数据节点数据节点数据节点图

35、2-5 HDFS的写数据流程2 .DistributedFileSystem通过RPC调用NameNode去创建一个没有块关联的新文件。在文件 创建之前,NameNode会做各种校验,比如文件是否存在,客户端有无权限去创建等。如 果校验通过,NameNode就会创建新文件,否则就会抛出I/O异常。3 .前两步结束后,会返回文件系统数据输出流(FSDataOutputStream)的对象,与读文件的 时候相似,FSDataOutputStream被封装成分布式文件系统数据输出流(DFSOutputStream), DFSOutputStream 可以协调 NameNode和 DataNode。客

36、户端开始写数据至U DFSOutputStream, DFSOutputStream会把数据切成一个个小的数据包(packet),然后排成数据队列(data quene)。4 .接下来,数据队列中的数据包首先传输到数据管道(多个数据节点组成数据管道)中的第 一个DataNode中(写数据包),第一个DataNode又把数据包发送到第二个DataNode中, 依次类推。5 .DFSOutputStream还维护着一个响应队列(ack quene),这个队列也是由数据包组成,用于 等待DataNode收到数据后返回响应数据包,当数据管道中的所有DataNode都表示已经收 到响应信息的时候,这时a

37、ck quene才会把对应的数据包移除掉。6 .客户端写数据完成后,会调用close。方法关闭写入流。7 .客户端通知NameNode把文件标记为已完成,然后NameNode把文件写成功的结果反馈给 客户端。此时就表示客户端已完成了整个HDFS的写数据流程。4 .简述HDFS的副本存储策略?新版本的副本存放策略的基本思想如下。副本1存放在Client所在的节点上(假设Client不在集群的范围内,则第一个副本存储节点 是随机选取的,当然系统会尝试不选择那些太满或者太忙的节点)。副本2存放在与第一个节点不同机架中的一个节点中(随机选择)。副本3和副本2在同一个机架,随机放在不同的节点中。假设还有

38、很多其他的副本,那么剩余的副本就随机放在集群的各个节点中。5 .简述HDFS的高可用原理?HDFS集群中通常由2台独立的机器来配置NameNode角色,无论在任何时候,集群中只能 有一个NameNode是Active状态,而另一个NameNode是Standby状态。Active状态的NameNode作为主节点负责集群中所有客户端操作,Standby状态的NameNode仅仅扮演一 个备用节点的角色,以便于在Active NameNode挂掉时能第一时间接替它的工作成为主节点, 从而使得NameNode达到一个热备份的效果。为了让主备NameNode的元数据保持一致,它们之间的数据同步通过Jo

39、urnalNode集群完成。 当任何修改操作在主NameNode上执行时,它会将EditLog写到半数以上的JournalNode节 点中。当备用NameNode监测到JournalNode集群中的EditLog发生变化时,它会读取 JournalNode集群中的EditLog,然后同步到FSImage中。当发生故障造成主NameNode宕机 后,备用NameNode在选举成为主NameNode之前会同步JournalNode集群中所有的EditLog, 这样就能保证主备NameNode的FSImage 一致。新的Active NameNode会无缝接替主节点的 职责,维护来自客户端的请求并接

40、受来自DataNode汇报的块信息,从而使得NameNode达 到高可用的目的。为了实现主备NameNode故障自动切换,通过ZKFC对NameNode的主备切换进行总体控制。 每台运行NameNode的机器上都会运行一个ZKFC进程,ZKFC会定期检测NameNode的健康 状况。当ZKFC检测到当前主NameNode发生故障时,会借助Zookeeper集群实现主备选举, 并自动将备用NameNode切换为Active状态,从而接替主节点的工作对外提供服务。第3章Hadoop资源管理系统(YARN).简述YARN解决了哪些问题?YARN解决了 MapReducel.O扩展性差、资源利用率低、

41、通用性差、单点故障问题。1 .简述YARN的基本架构与工作原理?YARN主要是由资源管理器(ResourceManager),节点管理器(NodeManager)、应用程序管 理器(ApplicationMaster)和相应的容器(Container)构成的。YARN的详细工作原理如下所示。(1)客户端(Client)向 ResourceManager 提交一个作业,作业包括 ApplicationMaster 程序、 启动ApplicationMaster的程序和用户程序(如MapReduce)。(2) ResourceManager会为该应用程序分配一个Container,它首先会跟Nod

42、eManager进行 通信,要求它在这个容器中启动应用程序的ApplicationMastero(3) ApplicationMaster 一旦启动以后,它首先会向ResourceManager注册,这样用户可以 直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源并监控 它们的运行状态,直到任务运行结束。它会以轮询的方式通过RPC协议向ResourceManager 申请和领取资源,一旦ApplicationMaster申请到资源,它会与NodeManager进行通信,要 求它启动并运行任务。(4)各个任务通过RPC协议向ApplicationMaster

43、汇报自己的状态和进度,这样会让 ApplicationMaster随时掌握各个任务的运行状态,一旦任务运行失败,ApplicationMaster就 会重启该任务,重新申请资源。应用程序运行完成后,ApplicationMaster就会向 ResourceManager注销并关闭。在应用程序整个运行过程中,可以通过RPC协议向 ApplicationMaster查询应用程序当前的运行状态,当然在YARN的Web界面也可以看到整个作业的运行状态。2 .简述YARN是如何实现容错的?YARN通过以下几个方面来保障容错性。l.ResourceManager的容错性保障ResourceManager存

44、在单点故障,但是可以通过配置实现ResourceManager的HA(高可用), 当主节点出现故障时,可以切换到备用节点继续对外提供服务。2 .NodeManager的容错性保障NodeManager失败之后,ResourceManager会将失败的任务通知对应的ApplicationMaster, 由ApplicationMaster来决定如何去处理失败的任务。3 .ApplicationMaster 的容错性保障ApplicationMaster 失败后,由 ResourceManager 负责重启 即可。其中,ApplicationMaster需要处理内部任务的容错问题。Resource

45、Manager会保存已经运行 的任务,重启后无须重新运行。4 .简述YARN的高可用原理?ResourceManager HA 由一对 Active, Standby 结点构成,ResourceManager 它有个基于 Zookeeper的选举算法,来决定哪个ResourceManager是active状态,哪个 ResourceManager 处于 Standby 状态。ZKFC是ResourceManager进程的一个服务,非独立存在,跟HDFS中的不太一样,而 HDFS中zkfc作为一个独立的进程存在(a)监控ResourceManager的健康状态(b)向ZK定期发送心跳。ResourceManager是通过RMStateStore存储内部数据和主要应用的数据及标记,目前支 持的可替代的RMStat

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁