原理与实践全书课件完整版ppt全套教学教程最全电子教案电子讲义(最新).pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《原理与实践全书课件完整版ppt全套教学教程最全电子教案电子讲义(最新).pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 原理 实践 全书 课件 完整版 ppt 全套 教学 教程 电子 教案 讲义 最新
- 资源描述:
-
1、第八章Table API&SQL的介绍和使用第二章大数据必备编程知识l 案例:动物类(Animal)和鱼类(Fish)l 继承关系保证所有动物子类都具有动物类的属性和方法l 子类有自己的属性和方法。l 除了动物,还有很多其他事物也会移动,使用接口(interface)来抽象“移动”。继承l Java的继承:继承类 extends 实现接口 implements继承public class ClassA implements Move Override public void move().实现接口public class Dog extends Animal private String do
2、gData;public Dog(String myName,String myDescription,String myDogData)this.name=myName;this.description=myDescription;this.dogData=myDogData 继承类interfaceclassl 重写:子类和父类都定义同名方法,子类的方法会覆盖父类中已有的方法。l 重载:多个同名方法,这些方法名字相同、参数不同、返回类型不同。重写与重载public class ClassA implements Move Override public void move().Overri
3、de:在子类中重写父类中的同名方法public class Overloading /无参数,返回值为int类型 public int test()System.out.println(test);return 1;/有一个参数 public void test(int a)System.out.println(test +a);/有两个参数和一个返回值 public String test(int a,String s)System.out.println(test +a +s);return a+s;同名方法重载:一个类中多个方法都名为test,但是参数类型和返回值类型不同。l 案例:Ja
4、va中的List和ArrayListl ArrayList是一个泛型类,List是一个泛型接口l ArrayList泛型是一种集合容器,可以向这个集合容器中添加String、Double以及其他各类数据类型。没必要创建StringArrayList、DoubleArrayList等类。泛型ist strList=new ArrayList();List doubleList=new LinkedList();l 类名后面加上 l 类内部的一些属性和方法都可以使用泛型Tl 泛型规范:T 代表一般的任何类。E 代表元素(Element)或异常(Exception)。K 或KEY代表键(Key)。V
5、 代表值(Value),通常与K一起配合使用。Java泛型类public class MyArrayList private int size;T elements;public MyArrayList(int capacity)this.size=capacity;this.elements=(T)new Objectcapacity;public void set(T element,int position)elementsposition=element;Override public String toString()String result=;for(int i=0;i size
6、;i+)result+=elementsi.toString();return result;l 与泛型类类似,使用符号l 可以继承并实现这个接口Java泛型接口public interface List .public List subList(int fromIndex,int toIndex);public class ArrayList implements List .public List subList(int fromIndex,int toIndex)./返回一个List类型值 要实现的子类是泛型的 public class DoubleList implements Lis
7、t .public List subList(int fromIndex,int toIndex)./返回一个List类型值 要实现的子类不是泛型的,而是有确定类型的 l 泛型方法可以存在于泛型类中,也可以存在于普通的类中。l 泛型方法的类型E和泛型类中的类型T可以不一样。泛型方法是泛型类的一个成员,泛型方法既可以继续使用类的类型T,也可以自己定义新的类型E。Java泛型方法public class MyArrayList ./public关键字后的表明该方法是一个泛型方法 /泛型方法中的类型E和泛型类中的类型T可以不一样 public E processElement(E element).
8、return E;l Java泛型信息只存在于代码编译阶段,当程序运行到JVM上时,与泛型相关的信息会被擦除。l 对于绝大多数应用系统开发者来说影响不太大,对于框架开发者来说,必须要注意。类型擦除Class strListClass=new ArrayList().getClass();Class intListClass=new ArrayList().getClass();/输出:class java.util.ArrayListSystem.out.println(strListClass);/输出:class java.util.ArrayListSystem.out.println(
9、intListClass);/输出:trueSystem.out.println(strListClass.equals(intListClass);泛型擦除:无法区别strListClass和intListClass这两个类型 l 适合进行并行计算的一种编程范式l 非函数式编程:创建中间变量,分步执行l 函数式编程:与数学表达式更相似实现单个函数,将零到多个输入转换成零到多个输出。比如,add()将两个输入转化为一个输出。将多个函数连接起来,实现所需业务逻辑。比如,将add()、multiply()连接到一起。函数式编程addResult=x+yresult=addResult*z非函数式编
10、程result=add(x,y).multiply(z)函数式编程l Lambda表达式被一些编程语言用来实现函数式编程。l 一个箭头符号-,两边连接着输入参数和函数体。Lambda表达式(parameters)-body Java的Lambda表达式的语法规则/接收2个int类型参数,返回它们的和(int x,int y)-x+y/接收1个String类型参数,将其输出到控制台,不返回任何值(String s)-System.out.print(s);/参数为圆半径,返回圆面积,返回值为double类型(double r)-double pi=3.1415;return r*r*pi;几个J
11、ava Lambda表达式案例l 输入参数:接收零到多个输入参数程序员可以提供输入类型,也可以不提供类型,让代码根据上下文去推断参数可以放在圆括号()中,多个参数通过英文逗号,隔开l 函数体:可以有一到多行语句函数体有多行内容,必须使用花括号 输出的类型与所需要的类型相匹配Java Lambda表达式l Lambda表达式本质是一种接口,它要实现一个函数式接口(Functional Interface)中的虚方法l 函数式接口是一种接口,并且它只有一个虚方法。l FunctionalInterface 注解函数式接口FunctionalInterfaceinterface AddInterfa
12、ce T add(T a,T b);public static class MyAdd implements AddInterface Override public Double add(Double a,Double b)return a+b;如果没有Lambda表达式(Integer a,Integer b)-a+b;使用Lambda表达式l Java 8之后推出的,专注于对集合(Collection)对象的操作。l 右侧案例:数据先经过stream()方法被转换为一个Stream类型,后经过filter()、map()、collect()等处理逻辑,生成我们所需的输出。各个操作之间使用
13、英文点号.来连接,这种方式被称作链式调用(Method Chaining)。l 链式调用:将多个函数连接起来。l Flink的API是面向数据集或数据流的操作。这些操作分布在大数据集群的多个节点上,并行地分布式执行。Java Stream APIList strings=Arrays.asList(abc,bc,12345,efg,abcd,jkl);List lengths=strings .stream().filter(string-!string.isEmpty().map(s-s.length().collect(Collectors.toList();lengths.forEach
14、(s)-System.out.println(s);第九章Flink的部署和配置部署模式 Standalone集群:集群内只部署Flink Hadoop YARN集群:兼容Hadoop生态,可以部署Hadoop、Hive、Spark、Flink Kubernetes集群:兼容各类容器l 至少一个Master,至少一个Workerl Master:Dispatcher、ResourceManager和JobManagerl Worker:TaskManagerl 安装好Java、配置好SSH免密码访问l 配置Flink主目录的conf/flink-conf.yaml和conf/slaves两个文
15、件l 将Flink主目录部署到每个节点的相同路径,或者部署到所有节点都可访问的共享目录l 启动这个集群:bin/start-cluster.sh Standalone集群一个Standalone集群拓扑样例$./bin/flink run-m 192.168.0.1:8081./examples/batch/WordCount.jar提交作业:使用针对Hadoop的Flink,设置HADOOP_CONF_DIR和YARN_CONF_DIR 等与Hadoop相关的配置启动好YARN集群三种作业提交方式:Per-Job:每次向YARN提交一个作业,YARN为这个作业单独分配资源,基于这些资源启动一
16、个Flink集群,作业运行结束,相应的资源会被释放。Session:在YARN上启动一个长期运行的Flink集群,用户可以向这个集群提交多个作业。Application:在Per-Job模式上做了一些优化。Hadoop YARNl Client将作业提交给YARN的ResourceManagerl YARN为这个作业生成一个Application Master以运行Fink Master,里面运行这运行着JobManager和Flink-YARN ResourceManager l JobManager会根据本次作业所需资源向Flink-YARN ResourceManager申请Slot资源
17、 l Flink-YARN ResourceManager会向YARN申请所需的资源作为TaskManagerl TaskManager将这些Slot注册到Flink-YARN ResourceManagerl JobManager将作业的计算任务部署到各TaskManager上 YARN Per-JobYARN Per-Job模式l 在Client上,使用bin/yarn-session.sh启动一个YARN Session,Flink向YARN ResourceManager申请一个Application Masterl 用户提交一个作业,作业被发送给Dispatcherl Dispatc
18、her会启动针对该作业的JobManagerl JobManager向Flink-YARN ResourceManager上申请所需资源,启动TaskManagerl TaskManager注册l JobManager将计算任务部署到各TaskManager上l 如果用户提交下一个作业,那么Dispatcher启动新的JobManager,新的JobManager负责新作业的资源申请和任务调度。YARN SessionYARN Session模式l Per-Job和Session模式作业提交的过程依赖Client,main()方法在Client上执行,main()方法会将作业的各个依赖下载到本
19、地,生成JobGraph,并将依赖以及JobGraph发送到Flink集群,负载很重。l Application模式允许main()方法在JobManager上执行,这样可以分担Client的压力 YARN Applicationl 两种方式:Kubernetes和Kubernets原生l Kubernetes原生Session模式:使用bin/kubernetes-session.sh启动一个Kubernetes SessionKubernetes相关组件将进行初始化,生成Flink Master(Dispatcher、Flink-Kubernetes ResourceManager)用户提
20、交作业,申请资源,将作业运行到TaskManager上l Kubernetes原生Application模式KubernetesKubernetes原生Session模式l 使用Key-Value来设置参数,很多进程会读取这个文件l 从Flink官网下载的Flink主目录里的flink-conf.yaml有一些默认设置,针对单机环境,在自己环境中使用,需要修改这个文件conf/flink-conf.yaml l 安装Java,设置$JAVA_HOMEl 类加载:将Java的.class文件加载到JVM虚拟机l 一个Flink作业主要加载两种类:Java Classpath:JDK核心类库和Fl
21、ink主目录下lib文件夹中的类用户类(User Code):用户编写的应用作业中的类l 类加载策略:子类优先(Child-first):优先加载用户编写的应用作业中的类,Flink默认使用Child-first父类优先(Parent-first):优先加载Java Classpath中的类Java和类加载l 并行度(parallelism):每个算子都会被切分为parallelism个子任务,分布到多个Slot上。根据计算规模大小,调整并行度。l 如果作业开启了算子链和槽位共享,一个Slot上运行着一个作业所有算子组成的流水线(Pipeline),这个作业需要parallelism个Slot
22、。l 槽位划分:将TaskManager划分成多少个Slot。使用 taskmanager.numberOfTaskSlots 设置默认值为1,Standalone集群官方建议将参数值配置为与CPU核心数相等或成比例 配置taskmanager.numberOfTaskSlots没有绝对的准则:每个TaskManager下有一个Slot,该Slot会独立运行在一个JVM进程中。隔离性好。每个TaskManager下有多个Slot,那么多个Slot同时运行在一个JVM进程中。多个Slot可以共享资源,隔离性差。并行度和槽位划分l 堆区(Heap):JVM虚拟化之后的内存,存储Java对象实例,使
23、用Java垃圾回收(Garbage Collection,GC)机制来清理内存中的不再使用的对象。l 某个时间点,必须进行一次Full GC,Full GC影响Java应用的性能。l 悖论:Heap越大,Full GC时间越长。Heap太小,会出现OutOfMemoryError异常。l 堆外(Off-Heap):直接由操作系统管理的内存,适合读写操作频繁的场景。使用、监控和调试更复杂。Full GC影响性能时,可以考虑Off-Heap。Java内存l JVM进程:Master、TaskManagerl Flink占用的内存(Total Flink Memory):Flink可以使用的内存JV
24、M HeapOff-heap MemoryFlink Managed Memory:TaskManager个别场景使用 Direct Memory:网络通信缓存使用的内存 l JVM相关内存(JVM Specific Memory):Java程序都需要的一块内存区域l Flink将内存管理部分做了封装,用户在绝大多数情况下不用关注数据到底是如何写入内存的Flink内存模型l Master占用内存不大l 最简单的配置方法:设置Total Process Memory(jobmanager.memory.process.size),根据默认分配比例,将内存分配给各个模块。设置Total Flink
25、 Memory(jobmanager.memory.flink.size),如果Master进程需要管理多个作业,需要增大这个配置。Master的内存配置 l TaskManager涉及数据处理,对内存的需求很高l 根据是否为Flink框架所用,分为Flink框架和非Flink框架,框架使用的内存,用户任务无法使用(Framework Heap,Framework Off-heap)用户任务使用的内存(Task Heap、Task Off-heap、Flink Managed Memory和Network)l 根据堆区非堆区,分为Heap和Off-heapTask Heap:用户程序内存Fli
展开阅读全文