【雲星資料---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 個。
而實際上只需要一個bit(1/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. *