3.15刷题整理

一、项目:

1. 项目中最大的收获是啥

2. 担任角色

3. 在什么模式上提交

4. sprak的组件

1.Spark SQL

Spark SQL是Spark用来操作结构化数据的组件。通过Spark SQL,用户可以使用SQL或者Apache Hive版本的SQL方言(HQL)来查询数据。Spark SQL支持多种数据源类型,例如Hive表、Parquet以及JSON等。Spark SQL不仅为Spark提供了一个SQL接口,还支持开发者将SQL语句融入到Spark应用程序开发过程中,无论是使用Python、Java还是Scala,用户可以在单个的应用中同时进行SQL查询和复杂的数据分析。由于能够与Spark所提供的丰富的计算环境紧密结合,Spark SQL得以从其他开源数据仓库工具中脱颖而出。Spark SQL在Spark l.0中被首次引入。在Spark SQL之前,美国加州大学伯克利分校曾经尝试修改Apache Hive以使其运行在Spark上,进而提出了组件Shark。然而随着Spark SQL的提出与发展,其与Spark引擎和API结合得更加紧密,使得Shark已经被Spark SQL所取代。

2.Spark Streaming

众多应用领域对实时数据的流式计算有着强烈的需求,例如网络环境中的网页服务器日志或是由用户提交的状态更新组成的消息队列等,这些都是实时数据流。Spark Streaming是Spark平台上针对实时数据进行流式计算的组件,提供了丰富的处理数据流的API。由于这些API与Spark Core中的基本操作相对应,因此开发者在熟知Spark核心概念与编程方法之后,编写Spark Streaming应用程序会更加得心应手。从底层设计来看,Spark Streaming支持与Spark Core同级别的容错性、吞吐量以及可伸缩性。

3.MLlib

MLlib是Spark提供的一个机器学习算法库,其中包含了多种经典、常见的机器学习算法,主要有分类、回归、聚类、协同过滤等。MLlib不仅提供了模型评估、数据导入等额外的功能,还提供了一些更底层的机器学习原语,包括一个通用的梯度下降优化基础算法。所有这些方法都被设计为可以在集群上轻松伸缩的架构。

4.GraphX

GraphX是Spark面向图计算提供的框架与算法库。GraphX中提出了弹性分布式属性图的概念,并在此基础上实现了图视图与表视图的有机结合与统一;同时针对图数据处理提供了丰富的操作,例如取子图操作subgraph、顶点属性操作mapVertices、边属性操作mapEdges等。GraphX还实现了与Pregel的结合,可以直接使用一些常用图算法,如PageRank、三角形计数等。

上述这些Spark核心组件都以jar包的形式提供给用户,这意味着在使用这些组件时,与MapReduce上的Hive、Mahout、Pig等组件不同,无需进行复杂烦琐的学习、部署、维护和测试等一系列工作,用户只要搭建好Spark平台便可以直接使用这些组件,从而节省了大量的系统开发与运维成本。将这些组件放在一起,就构成了一个Spark软件栈。基于这个软件栈,Spark提出并实现了大数据处理的一种理念——“一栈式解决方案(one stack to rule them all)”,即Spark可同时对大数据进行批处理、流式处理和交互式查询,如图5所示。借助于这一软件栈用户可以简单而低耗地把各种处理流程综合在一起,充分体现了Spark的通用性。

二、技术面:

1. jvm

①什么是jvm

是JAVA虚拟机,他的作用是将字节码解释为各个操作系统平台能够执行的指令,并且执行。它好比一台独立的机器。

JRE JVM虚拟机在解释执行字节码的时候需要调用类库,JVM虚拟机和其执行字节码所需调用的类库合起来称为 JRE.

JDK:JDK中包含JRE,除了JRE外还有一个编译器(javac.exe)可以用来将java源码编译为字节码。

总结:JDK包含JRE, JRE包含JVM. JDK可以用来开发和运行J

AVA。JRE由于缺少编译器,只能运行JAVA程序而不能开发。

②jvm是怎么编译的

  1. 前端编译,指的是.java文件变为.class的过程
  2. JIT编译,指的是将热点字节码编译为机器码的过程(方法级)
  3. AOT编译,指的是直接将Java文件编译成为机器码的过程。(Java9

③jvm的加载器

启动类加载器(引导类加载器、Bootstrap ClassLoader)

由c/c++语言实现的,嵌套在jvm内部

用来加载java核心库

并不继承java.lang.ClassLoader,没有父加载器

为扩展类加载器和系统类加载器的父加载器

只能加载java、javax、sun开头的类

扩展类加载器(Extension ClassLoader)

java语言编写,sun.misc.Launche包下。

派生于ClassLoader类,父类加载器为Bootstrap ClassLoader

从java.ext.dirs系统属性指定的目录中加载类库或者加载jre/lib/ext子目录下的类库(用户可以在该目录下编写JAR,也会由此加载器所加载)

系统类加载器(System ClassLoader\AppClassLoader)

派生于ClassLoader,父类加载器为Extension ClassLoader

负责加载classpath或者系统属性java.class.path指定路径下的类库

java语言编写,sun.misc.Launche包下。

负责加载程序中默认的类,可以通过getSystemClassLoader()方法获取该类的加载器。

用户自定义类加载器(后面详细介绍)

隔离加载类

修改类加载的方式

扩展加载源

防止源码泄漏(可以对字节码文件加密)

继承ClassLoader类方式实现自定义类加载器

2. java

①Java的集合

②说说Hashmap

③java中有哪几种线程池

3.数据库

①什么索引

索引(Index)是帮助MySQL高效获取数据的数据结构。

②写一个sql

4.hdfs

①说说hdfs的读流程

HDFS的写数据原理

  a.客户端与NN发送写数据请求

  b.NN响应客户端,可以上传数据

  c.客户端的每个block块分别与NN发送请求,请求可以存储当前块的DN节点

  d.NN分配DN列表

  e.客户端与被分配到的DN进行连接

  f.这个节点与客户端进行响应

  g.客户端开始发送数据给第一个节点

  h.由第一个节点传递给第二个节点,以此类推

  i.n个副本存储完毕,客户端通知NN,传递完成

  j.NN记录元数据

HDFS的读数据原理

  a.客户端向NN发送读数据的请求

  b.NN响应客户端,把数据所有的block块的元数据信息返回

  c.客户端根据块信息找最优的节点进行连接

  d.这个DN返回给客户端相应的块的真实数据(三个副本只读一份)

  e.客户端读取所有block块之后,在本地进行合并,形成完整文件

  f.读数据不需要删除真实数据也不需要删除原数据

  5。选举机制

         zookeeper集群内的节点启动过程中,已经开始投票,

         遵循半数原则,确定某个节点为leader。

       半数原则

         在zookeeper集群中

         启动服务:

           只要有节点获得了超过半数的投票,可以直接充当leader角色。

           其余节点为follower角色

         集群可用:

           只要有超过半数的节点能正常使用,集群就可用

           a.启动超过半数节点,集群可用

           b.如果宕机数量小于半数,集群可用

             1)如果是follower宕机,一切正常

             2)如果是leader宕机,从剩余follower中重新选举leader

           c.如果宕机的节点数量超过一半,不管是什么角色,集群不可用

6.持久化

  在java中,把数据写入数据库的过程

  在spark中,把RDD临时永久地写入到节点的某个位置(磁盘或内存)

    永久:避免当前RDD被当做垃圾回收掉,对其永久保存

    临时:即使做了持久化,在内存中也不是绝对的安全

         a.由于某种特殊情况,会被当做垃圾回收掉

         b.没有意外情况下,根据LRU也会被当做垃圾回收掉

  容错机制

    如果持久化的数据丢失了,

    spark会自动从HDFS上找数据重新计算到这个位置,自动持久化。

  使用

    缓存算子;

      cache   persist

    这两个算子完全等价

    相当于使用了默认的仅用内存的持久化策略

    RDD.cache() / persist()

    RDD.persist(StorageLevel.xxx)

   移除持久化:

     a.根据LRU自动取消持久化

     b.RDD.unpersist()

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值