1. 程式人生 > >【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用001-Flink的記憶體管理001

【雲星資料---Apache Flink實戰系列(精品版)】:Apache Flink高階特性與高階應用001-Flink的記憶體管理001

一、基於JVM的大資料生態圈

1.bigdata on jvm

這裡寫圖片描述

1.現在大多數開源大資料處理框架都是基於jvm的,像 Apache Hadoop,Apache Spark,Apache Hbase,
  Apache Kafka,Apache Flink等。
2.JVM上的程式一方面享受著它帶來的好處,也要承受著JVM帶來的弊端。

2.jvm的弊端

這裡寫圖片描述

1.JVM的OOM問題
利用JVM平臺開發的程式都會受到OutOfMemoryError的困擾,特別是大資料領域分散式計算框架,他們需要大量的記憶體,
不得不經常面臨這個頭疼的問題,當JVM中所有物件大小超過分配給JVM的記憶體大小時,就會發生OutOfMemoryError錯誤,
導致JVM崩潰,所有在JVM上工作的程式都將無一倖免的受到影響。

2.
Full GC JVM的GC機制一直都是讓人又愛又恨的東西。一方面,JVM自己管理記憶體,減輕開發者的負擔,提高開發效率,保障記憶體安全。 另一方面,不受開發者控制的GC想一顆定時炸彈一樣,一旦JVM進行大規模的垃圾回收,所有基於jvm的程式都不再工作,這將 極大的影響實時應用的可靠交付。特別是大資料領域,在處理大量資料的時候,不可避免的的建立了大量的臨時物件,一旦物件 使用完畢後,JVM就不定期的進行大規模的垃圾回收工作,這對大資料應用影響很大。 3.Java物件儲存密度低 例一:一個只包含boolean屬性的物件佔用了16個位元組記憶體:物件頭佔了8個,boolean 屬性佔了1個,對齊填充佔了7
個。 而實際上只需要一個bit1/8位元組)就夠了。 例二:“abcd”這樣簡單的字串在UTF-8編碼中需要4個位元組儲存,但Java採用UTF-16編碼儲存字串,需要8個位元組儲存 “abcd”,同時Java物件還物件header等其他額外資訊,一個4位元組字串物件,在Java中需要48位元組的空間來儲存。 對於大部分的大資料應用,記憶體都是稀缺資源,更有效率的記憶體儲存,則意味著CPU資料訪問吞吐量更高,及更少的磁碟落地。

注意:

現在很多大資料處理引擎,開始自動動手管理記憶體。比如 Apache Drill,Apache Ignite,Apache Geode,Apache Spark等。 

相關推薦

資料---Apache Flink實戰系列(精品)Apache Flink高階特性高階應用002-Flink記憶體管理002

二、flink的記憶體管理機制 0.flink的記憶體劃分 1.flink在JVM的heap內有自己的記憶體管理空間。 2.在flink中記憶體被分為三個部分,分別是Unmanaged區域,

資料---Apache Flink實戰系列(精品)Apache Flink高階特性高階應用008-Slot和Parallelism的深入分析003

四、任務槽(task-slot)和槽共享(Slot Sharing) 1.任務槽(Task slot) 1.flink的TM就是執行在不同節點上的JVM程序(process),這個程序會

資料---Apache Flink實戰系列(精品)Apache Flink高階特性高階應用001-Flink記憶體管理001

一、基於JVM的大資料生態圈 1.bigdata on jvm 1.現在大多數開源大資料處理框架都是基於jvm的,像 Apache Hadoop,Apache Spark,Apache Hb

資料---Apache Flink實戰系列(精品)Apache Flink實戰基礎0015--flink分散式部署0010

五、flink-on-yarn實現原理 1.通過配置資訊找到yarn a.Flink-Yarn-Client(FRC)讀取YARN_CONF_DIR,HADOOP_CONF_DIR或HAD

資料---Apache Flink實戰系列(精品)Apache Flink高階特性高階應用006-Slot和Parallelism的深入分析001

一、flink架構 1.flink是一個主從結構的分散式程式,它由client和cluster兩部分組成。 2.cluster由主節點JobManager(JM)和從節點TaskManager組

資料---Apache Flink實戰系列(精品)Apache Flink高階特性高階應用004-Flink的作業排程情況001

一、作業(Job)和排程(Scheduling) 1.排程(Scheduling) 1.Flink叢集一般有一個或多個TaskManager,每個TaskManager有一個或多個slot來

資料---Apache Flink實戰系列(精品)Apache Flink實戰基礎002--flink特性流處理特性介紹

第二部分:flink的特性 一、流處理特性 1.高吞吐,低延時 有圖有真相,有比較有差距。且看下圖: 1.flink的吞吐量大 2.flink的延時低 3.flink的配置少

資料---Apache Flink實戰系列(精品)Apache Flink高階特性高階應用015-Flink中廣播變數和分散式快取001

1.flink中的廣播變數 flink支援將變數廣播到worker上,以供程式運算使用。 執行程式 package code.book.batch.sinksource.scala i

資料---Apache Flink實戰系列(精品)Apache Flink實戰基礎0019--IDEA搭建maven管理的整合開發環境001

一、準備flink的開發環境 1. 建立scala的maven專案 2.輸入專案的基本資訊 3.驗證專案的基本資訊 4.輸入專案名稱 5.生成的目錄結構

資料---Apache Flink實戰系列(精品)Apache Flink實戰基礎004--flink特性類庫和API示例

三、類庫和API 1.流處理程式 flink的 DataStream API在流處理的業務場景下,支援多種資料轉換,支援使用者自定義狀態的操作,支援靈活的視窗操作! 示例程式:

資料---Apache Flink實戰系列(精品)Flink流處理API詳解程式設計實戰002-Flink基於流的wordcount示例002

三、基於socket的wordcount 1.傳送資料 1.傳送資料命令 nc -lk 9999 2.傳送資料內容 good good study day day

資料---Scala實戰系列(精品)Scala入門教程062-Scala實戰原始碼-訪問許可權

package scala.demo18_accessModifier /** * Created by liguohua on 2015/8/2. */ /** * 1.訪問許可權有private和protected兩種 * 1.1.pri

資料---Scala實戰系列(精品)Scala入門教程001-使用Intellij IDEA建立scala工程

1.建立Scala工程 選擇[Create New Porject] 選擇,建立[scala]專案,選擇【next】 輸入專案名稱,選擇【finish】進入下面的視窗。 左側是工程結構,中間是快捷鍵提示! 2.建立

資料---Scala實戰系列(精品)Scala入門教程018-Scala實戰原始碼-Scala內部類

Scala 內部類 package scala_learn.demo02_oop /** * Created by liguohua on 2017/8/1. */ class Outer(

資料---Scala實戰系列(精品)Scala入門教程054-Scala實戰原始碼-Scala implicit 操作05

Scala implicit 操作05 package scala_learn.demo12_Implicit /** * Created by liguohua on 2017/3/1.

資料---Scala實戰系列(精品)Scala入門教程060-Scala實戰原始碼-Scala package 包物件

Scala 包物件 包中類 package scala_learn.demo17_package /** * Created by liguohua on 2017/8/2. */ pack

資料---Scala實戰系列(精品)Scala入門教程052-Scala實戰原始碼-Scala implicit 操作03

Scala implicit 操作03 package scala_learn.demo12_Implicit /** * Created by liguohua on 2017/3/1.

資料---Scala實戰系列(精品)Scala入門教程048-Scala實戰原始碼-Scala Match操作

Scala Match操作 package scala_learn.demo11_Collection /** * Created by liguohua on 2017/7/31. */

資料---Scala實戰系列(精品)Scala入門教程036-Scala實戰原始碼-Scala match語句01

Scala match語句 scala中的match語句用來在一個列表中選擇某一個分支來執行分支的語句塊,類似於其他語言中的swtich..case語句 package scala_learn.

資料---Scala實戰系列(精品)Scala入門教程034-Scala實戰原始碼-Scala apply方法02 初始化物件

Scala 呼叫apply() 初始化物件 package scala_learn.demo08_Apply /** * Created by liguohua on 2017/3/1. *