收藏 分销(赏)

大厂数据仓库面试题.docx

上传人:二*** 文档编号:4710170 上传时间:2024-10-10 格式:DOCX 页数:122 大小:223.66KB
下载 相关 举报
大厂数据仓库面试题.docx_第1页
第1页 / 共122页
本文档共122页,全文阅读请下载到手机保存,查看更方便
资源描述
大厂数据仓库面试题 导读:此套面试题来自于各大厂的真实面试题及常 问的知识点,如果能理解吃透这些问题,你的大数 据能力将会大大提升,进入大厂指日可待。 本文目录: —、Hadoop —、Hive 三、Spark 五、HBase 六、Flink 七、数仓业务方面 八、算法 Secondary NameNode加载编辑日志和镜像文件到内存,并合 并; 10. 生成新的镜像文件fsimage.chkpoint; 11. 拷贝 fsimage.chkpoint 至U NameNode; 12. NameNode 将 fsimage.chkpoint 重新命名成 fsimage; 所以如果NameNode中的元数据丧失,是可以从Secondary NameNode恢复一局部元数据信息的,但不是全部,因为 NameNode正在写的edits日志还没有拷贝到Secondary NameNode,这局部恢复不了。 6. Secondary NameNode 不能恢复 NameNode 的全部数 据,那如何保证NameNode数据存储平安 这个问题就要说NameNode的高可用了,即NameNode HAo 3. Fl ink集群运行时角色Flink运行时由两种类型的进程组成:一个JobManager和一 个或者多个TaskManagero(Worker) (Worker) (Worker) TaskManagerTaskManager Flink ProgramProgram / Dataflow /Program code Optimizer / Graph Builder ClientDataflow graph 代 4.♦一 ActorSystem --一 TaskSlot TaskSlot I TaskTas< Task Slot Memory & I/O ManagerI Network ManagerMemory & I/O Manager TaskSlot Task Slot Network ManagerActor System Task Status /;Heartbeats ; \ / \ Statistics : Actor System /Deploy, / CancelStatus updates Statistics & — results JobManager \ Submity(send dataflow) Cance//*' update jobDataftow Graph Actor SystemScheduler Checkpoint Coordinator / Trigger /Checkpoints (Master / YARN Application Master) Client不是运行时和程序执行的一局部,而是用于准备数据 流并将其发送给JobManagero之后,客户端可以断开连接 (别离模式),或保持连接来接收进程报告(附加模式)。 客户端可以作为触发执行Java/Scala程序的一局部运行,也 可以在命令行进程./bin/flink run ...中运行。 可以通过多种方式启动JobManager和TaskManager:直接 在机器上作为standalone集群启动、在容器中启动、或者 通过YARN等资源框架管理并启动。TaskManager连接到 JobManagers,宣布自己可用,并被分配工作。 JobManager: JobManager具有许多与协调Flink应用程序的分布式执行 有关的职责:它决定何时调度下一个task (或一组task)、 对完成的task或执行失败做出反响、协调checkpoints并 且协调从失败中恢复等等。这个进程由三个不同的组件组 成: ResourceManagerResourceManager负责Flink集群中的资源提供、回收、分 配,管理 task slotSo DispatcherDispatcher提供了一个REST接口,用来提交Flink应用程 序执行,并为每个提交的作业启动一个新的JobMastero它 还运行FlinkWebUI用来提供作业执行信息。 JobMasterJobMaster负责管理单个JobGraph的执行。Flink集群中可 以同时运行多个作业,每个作业都有自己的JobMastero TaskManagers: TaskManager (也称为worker)执行作业流的task,并且缓 存和交换数据流。 必须始终至少有一个TaskManager。在TaskManager中资源 调度的最小单位是tasksloto TaskManager中task slot的数 量表示并发处理task的数量。请注意一个task slot中可以 执行多个算子。 4. Flink相比Spark Streaming有什么区别.架构模型 Spark Streaming在运行时的主要角色包括:Master、Worker、 Driver> Executor, Flink 在运行时主要包含:Jobmanager> Taskmanager 和 Sloto.任务调度 Spark Streaming连续不断的生成微小的数据批次,构建有向 无环图 DAG, Spark Streaming 会依次创立 DStreamGraph> JobGenerator> JobScheduleroFlink根据用户提交的代码生成StreamGraph,经过优化生成 JobGraph,然后提交给 JobManager 进行处理,JobManager 会根据 JobGraph 生成 ExecutionGraph, ExecutionGraph 是 Flink调度最核心的数据结构,JobManager根据 ExecutionGraph 对 Job 进行调度。 1 .时间机制Spark Streaming支持的时间机制有限,只支持处理时间。 Flink支持了流处理程序在时间上的三个定义:处理时间、事 件时间、注入时间。同时也支持watermark机制来处理滞后 数据。 2 .容错机制对于Spark Streaming任务,我们可以设置checkpoint,然 后假如发生故障并重启,我们可以从上次checkpoint之处 恢复,但是这个行为只能使得数据不丧失,可能会重复处理, 不能做到恰一次处理语义。 Flink那么使用两阶段提交协议来解决这个问题。 3 .介绍下Flink的容错机制(checkpoint)Checkpoint机制是Flink可靠性的基石,可以保证Flink集群 在某个算子因为某些原因(如异常退出)出现故障时,能够将 整个应用流图的状态恢复到故障之前的某一状态,保证应用 流图状态的一致性。Flink的Checkpoint机制原理来自 Xhandy-Lamport algorithm〃算法。 每个需要Checkpoint的应用在启动时,Flink的JobManager 为其创立一个Checkpointcoordinator(检查点协调器), Checkpointcoordinator全权负责本应用的快照制作。 Checkpointcoordinator(检查点协调器),Checkpointcoordinator 全权负责本应用的快照制作。 1. Checkpointcoordinator(检查点协调器)周期性的向该流应用 的所有source算子发送barrier(屏阐。 2. 当某个source算子收到一个barrier时,便暂停数据处理过 程,然后将自己的当前状态制作成快照,并保存到指定的持 久化存储中,最后向Checkpointcoordinator报告自己快照制 作情况,同时向自身所有下游算子广播该barrier,恢复数据 处理 3. 下游算子收到barrier之后,会暂停自己的数据处理过程,然 后将自身的相关状态制作成快照,并保存到指定的持久化存 储中,最后向Checkpointcoordinator报告自身快照情况,同 时向自身所有下游算子广播该barrier,恢复数据处理。 4. 每个算子按照步骤3不断制作快照并向下游广播,直到最后 barrier传递到sink算子,快照制作完成。 8. 9. 当Checkpointcoordinator收到所有算子的报告之后,认为该 周期的快照制作成功;否那么,如果在规定的时间内没有收到 所有算子的报告,那么认为本周期快照制作失败。 10. 文章推荐: Flink可靠性的基石-checkpoint机制详细解析 6. Flink checkpoint Spark Streaming 的有什么 区别或优势吗 spark streaming的checkpoint仅仅是针对driver的故障恢 复做了数据和元数据的checkpointo而flink的checkpoint 机制要复杂了很多,它采用的是轻量级的分布式快照,实 现了每个算子的快照,及流动中的数据的快照。 7. Flink是如何保证Exactly-once语义的 Flink通过实现两阶段提交和状态保存来实现端到端的一致性 语义。分为以下几个步骤: 开始事务(beginTransaction)创立一个临时文件夹,来写把 数据写入到这个文件夹里面 预提交(preCommit)将内存中缓存的数据写入文件并关闭 正式提交(commit)将之前写完的临时文件放入目标目录下。 这代表着最终的数据会有一些延迟 丢弃(abort)丢弃临时文件 假设失败发生在预提交成功后,正式提交前。可以根据状态来 提交预提交的数据,也可删除预提交的数据。 两阶段提交协议详解:八张图搞懂Flink的Exactly-once 8. 如果下级存储不支持事务,Flink怎么保证 exactly-once 端到端的exactly-once对sink要求比拟高,具体实现主要有 幕等写入和事务性写入两种方式。 募等写入的场景依赖于业务逻辑,更常见的是用事务性写 入。而事务性写入又有预写日志(WAL)和两阶段提交(2PC) 两种方式。 如果外部系统不支持事务,那么可以用预写日志的方式,把 结果数据先当成状态保存,然后在收到checkpoint完成的 通知时,一次性写入sink系统。 9. Fl ink常用的算子有哪些 分两局部: 1. 数据读取,这是Flink流计算应用的起点,常用算子有: 从内存读:fromElements 从文件读:readTextFile Socket 接入:socketTextStream 自定义读取:createlnput1.处理数据的算子,常用的算子包括:Map (单输入单输出)、 FlatMap (单输入、多输出)、Filter (过滤)、KeyBy (分组)、 Reduce (聚合)、Window (窗口)、Connect (连接)、Split (分 割)等。 推荐阅读:一文学完Flink流计算常用算子(Flink算子大全) 10. Flink任务延时高,如何入手 在Flink的后台任务管理中,我们可以看到Flink的哪个算 子和task出现了反压。最主要的手段是资源调优和算子调 优。资源调优即是对作业中的Operator的并发数 (parallelism) 、 CPU (core)、堆内存(heap_memory)等 参数进行调优。作业参数调优包括:并行度的设置,State的 设置,checkpoint的设置。 11. Flink是如何处理反压的 Flink内部是基于producer-consumer模型来进行消息传递 的,Flink的反压设计也是基于这个模型。Flink使用了高效 有界的分布式阻塞队列,就像Java通用的阻塞队列 (BlockingQueue) 一样。下游消费者消费变慢,上游就会受 到阻塞。 12. 如何排查生产环境中的反压问题 1 .反压出现的场景 反压经常出现在促销、热门活动等场景。短时间内流量陡增 造成数据的堆积或者消费速度变慢。 它们有一个共同的特点:数据的消费速度小于数据的生产速 度。 2 .反压监控方法 通过Flink Web UI发现反压问题。 Flink的TaskManager会每隔50 ms触发一次反压状态监 测,共监测100次,并将计算结果反响给JobManager,最 后由JobManager进行计算反压的比例,然后进行展示。 这个比例展示逻辑如下: 0K: 0 <= Ratio <= 0.10,表示状态良好正; LOW: 0.10 < Ratio <= 0.5,表示有待观察; HIGH: 0.5 < Ratio <=1,表示要处理了(增加并行度/subTask/ 检查是否有数据倾斜/增加内存)。 0.01,代表100次中有一次阻塞在内部调用。 3 .flink反压的实现方式 Flink任务的组成由基本的〃流〃和〃算子〃构成,〃流〃中的数据 在〃算子〃间进行计算和转换时,会被放入分布式的阻塞队列 中。当消费者的阻塞队列满时,那么会降低生产者的数据生产 速度 4 .反压问题定位和处理 Flink会因为数据堆积和处理速度变慢导致checkpoint超时, 而checkpoint是Flink保证数据一致性的关键所在,最终会导 致数据的不一致发生。 数据倾斜:可以在Flink的后台管理页面看到每个Task处 理数据的大小。当数据倾斜出现时,通常是简单地使用类似 KeyBy等分组聚合函数导致的,需要用户将热点Key进行预 处理,降低或者消除热点Key的影。 一个NameNode有单点故障的问题,那就配置双NameNode, 配置有两个关键点,一是必须要保证这两个NameNode的元 数据信息必须要同步的,二是一个NameNode挂掉之后另一 个要立马补上。 1. 元数据信息同步在HA方案中采用的是〃共享存储〃。每次写文 件时,需要将日志同步写入共享存储,这个步骤成功才能认 定写文件成功。然后备份节点定期从共享存储同步日志,以 便进行主备切换。 2. 监控NameNode状态采用zookeeper,两个NameNode节点 的状态存放在zookeeper中,另外两个NameNode节点分别 有一个进程监控程序,实施读取zookeeper中有NameNode 的状态,来判断当前的NameNode是不是已经down机。如 果Standby的NameNode节点的ZKFC发现主节点已经挂掉, 那么就会强制给原本的Active NameNode节点发送强制关闭 请求,之后将备用的NameNode设置为Active0 如果面试官再问HA中的共享存储 是怎么实现的知 道吗? 可以进行解释下:NameNode共享存储方案有很多, GC:不合理的设置TaskManager的垃圾回收参数会导致严 重的GC问题,我们可以通过-XX:+PrintGCDetails参数查看 GC的日志。 代码本身:开发者错误地使用Flink算子,没有深入了解算 子的实现机制导致性能问题。我们可以通过查看运行机器节 点的CPU和内存情况定位问题。 13. Fl ink中的状态存储 Flink在做计算的过程中经常需要存储中间状态,来防止数据 丧失和状态恢复。选择的状态存储策略不同,会影响状态持 久化如何和checkpoint交互。Flink提供了三种状态存储方 式:MemoryStateBackend > FsStateBackend> RocksDBStateBackend。 14. Operator Chains (算子链)这个概念你了解吗 为了更高效地分布式执行,Flink会尽可能地将operator的 subtask链接(chain)在一起形成task。每个task在一个 线程中执行。将operators链接成task是非常有效的优化: 它能减少线程之间的切换,减少消息的序列化/反序列化,减 少数据在缓冲区的交换,减少了延迟的同时提高整体的吞吐 量。这就是我们所说的算子链。 15. Flink的内存管理是如何做的 Flink并不是将大量对象存在堆上,而是将对象都序列化到一 个预分配的内存块上。此外,Flink大量的使用了堆外内存。 如果需要处理的数据超出了内存限制,那么会将局部数据存储 到硬盘上。Flink为了直接操作二进制数据实现了自己的序列 化框架。 16. 如何处理生产环境中的数据倾斜问题 L flink数据倾斜的表现: 任务节点频繁出现反压,增加并行度也不能解决问题; 局部节点出现00M异常,是因为大量的数据集中在某个节 点上,导致该节点内存被爆,任务失败重启。 2 .数据倾斜产生的原因: 业务上有严重的数据热点,比方滴滴打车的订单数据中北 京、上海等几个城市的订单量远远超过其他地区; 技术上大量使用了 KeyBy、GroupBy等操作,错误的使用了 分组Key,人为产生数据热点。 3 .解决问题的思路: 业务上要尽量防止热点key的设计,例如我们可以把北京、 上海等热点城市分成不同的区域,并进行单独处理;技术上出现热点时,要调整方案打散原来的key,防止直接 聚合;此外Flink还提供了大量的功能可以防止数据倾斜。 17. Flink中的Time有哪几种 Flink中的时间有三种类型,如下列图所示: Event Time:是事件创立的时间。它通常由事件中的时间戳描 述,例如采集的日志数据中,每一条日志都会记录自己的生 成时间,Flink通过时间戳分配器访问事件时间戳。 Ingestion Time:是数据进入Flink的时间。 Processing Time :是每一个执行基于时间操作的算子的本地系 统时间,与机器相关,默认的时间属性就是Processing Time。 例如,一条日志进入Flink的时间为2021-01-22 10:00:00,123, 到达 Window的系统时间为2021-01-22 10:00:01.234,日志的内 容如下: 2021-01-06 18:37:15.624 INFO Fail over to rm2 对于业务来说,要统计lmin内的故障日志个数,哪个时间 是最有意义的? 一一eventTime,因为我们要根据日志的生成 时间进行统计。 18. Flink对于迟到数据是怎么处理的 Flink中WaterMark和Window机制解决了流式数据的乱 序问题,对于因为延迟而顺序有误的数据,可以根据 eventTime进行业务处理,对于延迟的数据Flink也有自己的 解决方法,主要的方法是给定一个允许延迟的时间,在该时 间范围内仍可以接受处理延迟数据 设置允许延迟的时间是通过allowedLateness(lateness: Time) 设置 保存延迟数据那么是通过sideOutputLateData(outputTag: OutputTag[T])保存 获取延迟数据是通过 DataStream.getSideOutput(tag: OutputTag[X])获取 文章推荐: Flink中极其重要的Time与Window详细解析 19. Flink中window出现数据倾斜怎么解决 window产生数据倾斜指的是数据在不同的窗口内堆积的数 据量相差过多。本质上产生这种情况的原因是数据源头发送 的数据量速度不同导致的。出现这种情况一般通过两种方式 来解决: 在数据进入窗口前做预聚合 重新设计窗口聚合的key 20. Fl ink CEP编程中当状态没有到达的时候会将数 据保存在哪里 在流式处理中,CEP当然是要支持EventTime的,那么相对 应的也要支持数据的迟到现象,也就是watermark的处理逻 辑。CEP对未匹配成功的事件序列的处理,和迟到数据是类 似的。在Flink CEP的处理逻辑中,状态没有满足的和迟到的 数据,都会存储在一个Map数据结构中,也就是说,如果我 们限定判断事件序列的时长为5分钟,那么内存中就会存储 5分钟的数据,这在我看来,也是对内存的极大损伤之一。 推荐阅读:一文学会FlinkCEP 21. Flink设置并行度的方式 们在实际生产环境中可以从四个不同层面设置并行度: 1. 操作算子层面(Operator Level) .map(new RollmgAdditionMapper()).setParallelism(l 0) 〃将操作算了设置并行度执行环境层面(Execution Environment Level) $FLINK_HOME/bin/flink的-p参数修改并行度1. 客户端层面(Client Level) env.setParallelism( 10)系统层面(System Level) 全局配置在 flink-conf.yaml 文件中,parallelism.default,默认 是1:可以设置默认值大一点 需要注意的优先级:算子层面〉环境层面〉客户端层面〉系统层 面。 22. Flink中Task如何做到数据交换 在一个Flink Job中,数据需要在不同的task中进行交换, 整个数据交换是有TaskManager负责的,TaskManager的网 络组件首先从缓冲buffer中收集records,然后再发送。 Records并不是一个一个被发送的,是积累一个批次再发送, batch技术可以更加高效的利用网络资源。 23. Flink的内存管理是如何做的 Flink并不是将大量对象存在堆上,而是将对象都序列化到一 个预分配的内存块上。此外,Flink大量的使用了堆外内存。 如果需要处理的数据超出了内存限制,那么会将局部数据存储 到硬盘上。Flink为了直接操作二进制数据实现了自己的序列 化框架。 24. 介绍下Flink的序列化 Flink摒弃了 Java原生的序列化方法,以独特的方式处理数 据类型和序列化,包含自己的类型描述符,泛型类型提取和 类型序列化框架。 Typeinformation是所有类型描述符的基类。它揭示了该类型 的一些基本属性,并且可以生成序列化器。 Typeinformation支持以下几种类型: BasicTypelnfo:任意Java基本类型或String类型 BasicArrayTypelnfo:任意Java基本类型数组或String数组 WritableTypelnfo:任意 Hadoop Writable 接口的实现类 TupleTypelnfo:任意的 Flink Tuple 类型(支持 Tuplel to Tuple25)0 Flink tuples是固定长度固定类型的Java Tuple实 现 CaseClassTypelnfo:任意的 Scala CaseClass(包括 Scala tuples) PojoTypelnfo:任意的 POJO (Java or Scala),例如,Java 对象 的所有成员变量,要么是public修饰符定义,要么有 getter/setter 方法 GenericTypelnfo:任意无法匹配之前几种类型的类 25. Fl ink海量数据高效去重1. 基于状态后端。 2. 基于HyperLogLog:不是精准的去重。 4. 基于布隆过滤器(BloomFilter);快速判断一个key是否存 在于某容器,不存在就直接返回。 5. 基于BitMap;用一个bit位来标记某个元素对应的Value,而 Key即是该元素。由于采用了 Bit为单位来存储数据,因此可 以大大节省存储空间。 6. 基于外部数据库;选择使用Redis或者HBase存储数据,我 们只需要设计好存储的Key即可,不需要关心Flink任务重启 造成的状态丧失问题。 7. 26. Flink SQL的是如何实现的 构建抽象语法树的事情交给了 Calcite去做。SQL query会经 过Calcite解析器转变成SQL节点树,通过验证后构建成 Calcite的抽象语法树(也就是图中的Logical Plan) o另一 边,Table API上的调用会构建成Table API的抽象语法树, 并通过Calcite提供的RelBuilder转变成Calcite的抽象语 法树。然后依次被转换成逻辑执行计划和物理执行计划。 在提交任务后会分发到各个TaskManager中运行,在运行 时会使用Janino编译器编译代码后运行。 业务方面 1. 0DS层采用什么压缩方式和存储格式? 压缩采用Snappy,存储采用orc,压缩比是100g数据压缩完 10g左右。 2. DWD层做了哪些事? 1. 数据清洗・空值去除 比方Linux HA, VMware FT, QJM等,目前社区已经 把由Clouderea公司实现的基于QJM(Quorum Journal Manager)的方案合并到HDFS的trunk之中并且作为 默认的共享存储实现。 基于QJM的共享存储系统主要用于保存EditLog,并 不保存FSImage文件。FSImage文件还是在NameNode 的本地磁盘上。 Q川共享存储的基本思想来自于Paxos算法,采用多 个称为JournalNode的节点组成的JournalNode集群 来存储EditLogo每个JournalNode保存同样的 EditLog副本。每次NameNode写EditLog的时候,除 了向本地磁盘写入EditLog之外,也会并行地向 JournalNode集群之中的每一个JournalNode发送写 请求,只要大多数的JournalNode节点返回成功就认 为向JournalNode集群写入EditLog成功。如果有 2N+1台JournalNode,那么根据大多数的原那么,最多 可以容忍有N台JournalNode节点挂掉。 7.在NameNode HA中,会出现脑裂问题吗?怎么解 决脑裂假设 NameNode 1 当前为 Active 状态,NameNode2 当前为Standby状态。如果某一时刻NameNode 1对过滤核心字段无意义的数据,比方订单表中订单id为null, 支付表中支付id为空对手机号、身份证号等敏感数据脱敏 • 对业务数据传过来的表进行维度退化和降维。 • 将用户行为宽表和业务表进行数据一致性处理清洗的手段 • Sql、mr> rdd> kettle> Python (工程中采用 sql 进行清除) 3. DWS层做了哪些事? 1. DWS层有3-5张宽表(处理100-200个指标 70%以上的 需求) 具体宽表名称:用户行为宽表,用户购买商品明细行为宽表, 商品宽表,购物车宽表,物流宽表、登录注册、售后等。 1. 哪个宽表最宽?大概有多少个字段?最宽的是用户行为宽 表。大概有60-100个字段 1 .在处理大数据过程中,如何保证得到期望值1. 保证在数据采集的时候不丧失数据,这个尤为重要,如果在 数据采集的时候就已经不准确,后面很难到达期望值 3. 在数据处理的时候不丧失数据,例如sparkstreaming处理 kafka数据的时候,要保证数据不丧失,这个尤为重要4. 5. 前两步中,如果无法保证数据的完整性,那么就要通过离线计算进行数据的校对,这样才能保证我们能够得到期望值 6. 2.你感觉数仓建设中最重要的是什么数仓建设中,最重要的是数据准确性,数据的真正价值在于 数据驱动决策,通过数据指导运营,在一个不准确的数据驱 动下,得到的一定是错误的数据分析,影响的是公司的业务 开展决策,最终导致公司的策略调控失败。 3.数据仓库建模怎么做的数仓建设中最常用模型-Kimball维度建模详解 4.数据质量怎么监控单表数据量监控 一张表的记录数在一个的范围内,或者上下浮动不会超 过某个阈值 SQL 结果:var 数据量=select count (*) from 表 where 时 间等过滤条件 1. 报警触发条件设置:如果数据量不在[数值下限,数值上限], 那么触发报警 2. 同比增加:如果((本周的数据量-上周的数据量)/上周的数据 量*100)不在[比例下线,比例上限],那么触发报警 3. 环比增加:如果((今天的数据量-昨天的数据量)/昨天的数 据量*100)不在[比例下线,比例上限],那么触发报警 4. 报警触发条件设置一定要有。如果没有配置的阈值,不能做 监控日活、周活、月活、留存(日周月)、转化率(日、 周、月)GMV (日、周、月)复购率(日周月) 单表空值检测 某个字段为空的记录数在一个范围内,或者占总量的百分比 在某个阈值范围内 目标字段:选择要监控的字段,不能选〃无〃 1. SQL 结果:var 异常数据量=select count(*) from 表 where 目标字段is null 2. 单次检测:如果(异常数据量)不在[数值下限,数值上限],那么 触发报警 单表重复值检测 一个或多个字段是否满足某些规那么 目标字段:第一步先正常统计条数;select count(*) form表; 1. 第二步,去重统计;select count(*) from 表group by某个字 段 第一步的值和第二步的值做减法,看是否在上下线阀值之内 单次检测:如果(异常数据量)不在[数值下限,数值上限],那么 触发报警8. 跨表数据量比照 主要针对同步流程,监控两张表的数据量是否一致1. SQL结果:count(本表)-count(关联表)2. 3. 阈值配置与〃空值检测〃相同4. 5.数据分析方法论了解过哪些? 数据商业分析的目标是利用大数据为所有职场人员做出迅 捷,高质,高效的决策提供可规模化的解决方案。商业分析 是创造价值的数据科学。 数据商业分析中会存在很多判断: 1.观察数据当前发生了什么? 比方想知道线上渠道A、B各自带来了多少流量,新上线的 产品有多少用户喜欢,新注册流中注册的人数有多少。这些 都需要通过数据来展示结果。 1. 理解为什么发生? 我们需要知道渠道A为什么比渠道B好,这些是要通过数据 去发现的。也许某个关键字带来的流量转化率比其他都要 低,这时可以通过信息、知识、数据沉淀出发生的原因是什 么。 1.预测未来会发生什么? 在对渠道A、B有了判断之后,根据以往的知识预测未来会 发生什么。在投放渠道C、D的时候,猜想渠道C比渠道D 好,当上线新的注册流、新的优化,可以知道哪一个节点比 较容易出问题,这些都是通过数据进行预测的过程。 1. 商业决策 所有工作中最有意义的还是商业决策,通过数据来判断应该 做什么。这是商业分析最终的目的。 算法 大数据面试中考察的算法相对容易一些,常考的有排序算 法,查找算法,二叉树等,下面讲解一些最容易考的算法。 1.排序算法 十种常见排序算法可以分为两大类: 比拟类排序:通过比拟来决定元素间的相对次序,由于其时 间复杂度不能突破O(nlogn),因此也称为非线性时间比拟类 排序。 非比拟类排序:不通过比拟来决定元素间的相对次序,它可 以突破基于比拟排序的时间下界,以线性时间运行,因此也 称为线性时间非比拟类排序。 算法复杂度: 相关概念: 稳定:如果a原本在b前面,而a二b,排序之后a仍然在b 的前面。 不稳定:如果a原本在b的前面,而a二b,排序之后a可能 会出现在b的后面。 时间复杂度:对排序数据的总的操作次数。反映当n变化时, 操作次数呈现什么规律。 空间复杂度:是指算法在计算机内执行时所需存储空间的度 量,它也是数据规模n的函数。 下面讲解大数据中最常考的两种:快排和归并 1)快速排序 快速排序的基本思想:通过一趟排序将待排记录分隔成独立 的两局部,其中一局部记录的关键字均比另一局部的关键字 小,那么可分别对这两局部记录继续进行排序,以到达整个序 列有序。 算法描述 快速排序使用分治法来把一个串(list)分为两个子串(sub-lists) o具体算法描述如下: 从数列中挑出一个元素,称为〃基准〃(pivot); 重新排序数列,所有元素比基准值小的摆放在基准前面,所 有元素比基准值大的摆在基准的后面(相同的数可以到任一 边)。在这个分区退出之后,该基准就处于数列的中间位置。 这个称为分区(partition)操作; 递归地(recursive)把小于基准值元素的子数列和大于基准 值元素的子数列排序。 代码实现: function quickSort(air, left, right) {len 二 left = typeof left != 'number1 ? 0 : left, right = typeof right != ’number' ? len - 1 : right;|if (left < right) { artitionlndex = partition(arr, left, right);uickSort(arr, left, partitionindex-1); uickSort(arr,j)artitionlndex+l, right);return arr; function partition(air, left jight) {〃分区操片var pivot = left, var pivot = left, //设定基准值(pivot) for (var i = index; i v= right; i++) { s\vap(airi, iiule\++: for (var i = index; i v= right; i++) { s\vap(airi, iiule\++: swap(arr, pivot, index - MH\ ai- temp = arr[i];^^J arr| i | = 应的ZKFailoverController进程发生了 “假死”现 象,那么Zookeeper服务端会认为NameNodel挂掉 了,根据前面的主备切换逻辑,NameNode2会替代 NameNodel 进入 Active 状态。但是此时 NameNodel 可能仍然处于Active状态正常运行,这样 NameNodel 和 NameNode2 都处于 Active 状态,都 可以对外提供服务。这种情况称为脑裂。 脑裂对于NameNode这类对数据一致性要求非常高的系统来 说是灾难性的,数据会发生错乱且无法恢复。zookeeper社 区对这种问题的解决方法叫做fencing,中文翻译为隔离, 也就是想方法把旧的Active NameNode隔离起来,使它不能 正常对外提供服务。 在进行fencing的时候,会执行以下的操作: 1. 首先尝试调用这个旧Active NameNode的 HAServiceProtocol RPC 接口的 transitionToStandby 方法,看 能不能把它转换为Standby状态。 2. 如果transitionToStandby方法调用失败,那么就执行 Hadoop配置文件之中预定义的隔离措施,Hadoop目前主要 提供两种隔离措施,通常会选择sshfence: arr[j]二 tem 2)归并排序 归并排序是建立在归并操作上的一种有效的排序算法。该算 法是采用分治法(D
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 考试专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服