一、项目:
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同级别的容错性、吞吐量以及可伸缩性。
MLlib是Spark提供的一个机器学习算法库,其中包含了多种经典、常见的机器学习算法,主要有分类、回归、聚类、协同过滤等。MLlib不仅提供了模型评估、数据导入等额外的功能,还提供了一些更底层的机器学习原语,包括一个通用的梯度下降优化基础算法。所有这些方法都被设计为可以在集群上轻松伸缩的架构。
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是怎么编译的
- 前端编译,指的是.java文件变为.class的过程
- JIT编译,指的是将热点字节码编译为机器码的过程(方法级)
- 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的写数据原理
c.客户端的每个block块分别与NN发送请求,请求可以存储当前块的DN节点
b.NN响应客户端,把数据所有的block块的元数据信息返回
d.这个DN返回给客户端相应的块的真实数据(三个副本只读一份)
e.客户端读取所有block块之后,在本地进行合并,形成完整文件
5。选举机制
只要有节点获得了超过半数的投票,可以直接充当leader角色。
2)如果是leader宕机,从剩余follower中重新选举leader
在spark中,把RDD临时永久地写入到节点的某个位置(磁盘或内存)
spark会自动从HDFS上找数据重新计算到这个位置,自动持久化。