⑴ 大數據分析應該掌握哪些基礎知識
java基礎語法
· 分支結構if/switch
· 循環結構for/while/do while
· 方法聲明和調用
· 方法重載
· 數組的使用
· 命令行參數、可變參數
IDEA
· IDEA常用設置、常用快捷鍵
· 自定義模板
· 關聯Tomcat
· Web項目案例實操
面向對象編程
· 封裝、繼承、多態、構造器、包
· 異常處理機制
· 抽象類、介面、內部類
· 常有基礎API、集合List/Set/Map
· 泛型、線程的創建和啟動
· 深入集合源碼分析、常見數據結構解析
· 線程的安全、同步和通信、IO流體系
· 反射、類的載入機制、網路編程
Java8/9/10/11新特性
· Lambda表達式、方法引用
· 構造器引用、StreamAPI
· jShell(JShell)命令
· 介面的私有方法、Optional加強
· 局部變數的類型推斷
· 更簡化的編譯運行程序等
MySQL
· DML語言、DDL語言、DCL語言
· 分組查詢、Join查詢、子查詢、Union查詢、函數
· 流程式控制制語句、事務的特點、事務的隔離級別等
JDBC
· 使用JDBC完成資料庫增刪改查操作
· 批處理的操作
· 資料庫連接池的原理及應用
· 常見資料庫連接池C3P0、DBCP、Druid等
Maven
· Maven環境搭建
· 本地倉庫&中央倉庫
· 創建Web工程
· 自動部署
· 持續繼承
· 持續部署
· VI/VIM編輯器
· 系統管理操作&遠程登錄
· 常用命令
· 軟體包管理&企業真題
Shell編程
· 自定義變數與特殊變數
· 運算符
· 條件判斷
· 流程式控制制
· 系統函數&自定義函數
· 常用工具命令
· 面試真題
Hadoop
· Hadoop生態介紹
· Hadoop運行模式
· 源碼編譯
· HDFS文件系統底層詳解
· DN&NN工作機制
· HDFS的API操作
· MapRece框架原理
· 數據壓縮
· Yarn工作機制
· MapRece案例詳解
· Hadoop參數調優
· HDFS存儲多目錄
· 多磁碟數據均衡
· LZO壓縮
· Hadoop基準測試
Zookeeper
· Zookeeper數據結果
· 內部原理
· 選舉機制
· Stat結構體
· 監聽器
· 分布式安裝部署
· API操作
· 實戰案例
· 面試真題
· 啟動停止腳本
HA+新特性
· HDFS-HA集群配置
Hive
· Hive架構原理
· 安裝部署
· 遠程連接
· 常見命令及基本數據類型
· DML數據操作
· 查詢語句
· Join&排序
· 分桶&函數
· 壓縮&存儲
· 企業級調優
· 實戰案例
· 面試真題
Flume
· Flume架構
· Agent內部原理
· 事務
· 安裝部署
· 實戰案例
· 自定義Source
· 自定義Sink
· Ganglia監控
Kafka
· 消息隊列
· Kafka架構
· 集群部署
· 命令行操作
· 工作流程分析
· 分區分配策略
· 數據寫入流程
· 存儲策略
· 高階API
· 低級API
· 攔截器
· 監控
· 高可靠性存儲
· 數據可靠性和持久性保證
· ISR機制
· Kafka壓測
· 機器數量計算
· 分區數計算
· 啟動停止腳本
DataX
· 安裝
· 原理
· 數據一致性
· 空值處理
· LZO壓縮處理
Scala
· Scala基礎入門
· 函數式編程
· 數據結構
· 面向對象編程
· 模式匹配
· 高階函數
· 特質
· 註解&類型參數
· 隱式轉換
· 高級類型
· 案例實操
Spark Core
· 安裝部署
· RDD概述
· 編程模型
· 持久化&檢查點機制
· DAG
· 運算元詳解
· RDD編程進階
· 累加器&廣播變數
Spark SQL
· SparkSQL
· DataFrame
· DataSet
· 自定義UDF&UDAF函數
Spark Streaming
· SparkStreaming
· 背壓機制原理
· Receiver和Direct模式原理
· Window原理及案例實操
· 7x24 不間斷運行&性能考量
Spark內核&優化
· 內核源碼詳解
· 優化詳解
Hbase
· Hbase原理及架構
· 數據讀寫流程
· API使用
· 與Hive和Sqoop集成
· 企業級調優
Presto
· Presto的安裝部署
· 使用Presto執行數倉項目的即席查詢模塊
Ranger2.0
· 許可權管理工具Ranger的安裝和使用
Azkaban3.0
· 任務調度工具Azkaban3.0的安裝部署
· 使用Azkaban進行項目任務調度,實現電話郵件報警
Kylin3.0
· Kylin的安裝部署
· Kylin核心思想
· 使用Kylin對接數據源構建模型
Atlas2.0
· 元數據管理工具Atlas的安裝部署
Zabbix
· 集群監控工具Zabbix的安裝部署
DolphinScheler
· 任務調度工具DolphinScheler的安裝部署
· 實現數倉項目任務的自動化調度、配置郵件報警
Superset
· 使用SuperSet對數倉項目的計算結果進行可視化展示
Echarts
· 使用Echarts對數倉項目的計算結果進行可視化展示
Redis
· Redis安裝部署
· 五大數據類型
· 總體配置
· 持久化
· 事務
· 發布訂閱
· 主從復制
Canal
· 使用Canal實時監控MySQL數據變化採集至實時項目
Flink
· 運行時架構
· 數據源Source
· Window API
· Water Mark
· 狀態編程
· CEP復雜事件處理
Flink SQL
· Flink SQL和Table API詳細解讀
Flink 內核
· Flink內核源碼講解
· 經典面試題講解
Git&GitHub
· 安裝配置
· 本地庫搭建
· 基本操作
· 工作流
· 集中式
ClickHouse
· ClickHouse的安裝部署
· 讀寫機制
· 數據類型
· 執行引擎
DataV
· 使用DataV對實時項目需求計算結果進行可視化展示
sugar
· 結合Springboot對接網路sugar實現數據可視化大屏展示
Maxwell
· 使用Maxwell實時監控MySQL數據變化採集至實時項目
ElasticSearch
· ElasticSearch索引基本操作、案例實操
Kibana
· 通過Kibana配置可視化分析
Springboot
· 利用Springboot開發可視化介面程序
⑵ flink 1.10 1.12區別
flink 1.10 1.12區別在於Flink 1.12 支持了 Flink SQL Kafka upsert connector 。
因為在 Flink 1.10 中,當前這類任務開發對於用戶來說,還是不夠友好,需要很多代碼,同時也會造成 Flink SQL 冗長。
Flink 1.12 SQL Connector 支持 Kafka Upsert Connector,這也是我們公司內部業務方對實時平台提出的需求。
收益:便利用戶有這種需要從 kafka 取最新記錄操作的實時任務開發,比如這種 binlog -> kafka,然後用戶聚合操作,這種場景還是非常多的,這能提升實時作業開發效率,同時 1.12 做了優化,性能會比單純的 last_value 性能要好。
Flink Yarn 作業 On k8s 的生產級別能力是:
Flink Jar 作業已經全部 K8s 化,Flink SQL 作業由於是推廣初期,還是在 Yarn 上面進行運行,為了將實時計算 Flink 全部K8s化。
所以我們 Flink SQL 作業也需要遷移到 K8s,目前 Flink 1.12 已經滿足生產級別的 Flink k8s 功能,所以 Flink SQL K8s 化,打算直接使用社區的 On k8s 能力。
風險:雖然和社區的人溝通,Flink 1.12 on k8s 沒有什麼問題,但是具體功能還是需要先 POC 驗證一下,同時可能社區 Flink on k8s 的能力。
可能會限制我們這邊一些 k8s 功能使用,比如 hostpath volome 以及 Ingress 的使用,這里可能需要改底層源碼來進行快速支持(社區有相關 JIRA 要做)。
⑶ 大數據分析應該掌握哪些基礎知識呢
前言,學大數據要先換電腦:
保證電腦4核8G內存64位操作系統,盡量有ssd做系統盤,否則卡到你喪失信心。硬碟越大越好。
1,語言要求
java剛入門的時候要求javase。
scala是學習spark要用的基本使用即可。
後期深入要求:
java NIO,netty,多線程,ClassLoader,jvm底層及調優等,rpc。
2,操作系統要求
linux 基本的shell腳本的使用。
crontab的使用,最多。
cpu,內存,網路,磁碟等瓶頸分析及狀態查看的工具。
scp,ssh,hosts的配置使用。
telnet,ping等網路排查命令的使用
3,sql基本使用
sql是基礎,hive,sparksql等都需要用到,況且大部分企業也還是以數據倉庫為中心,少不了sql。
sql統計,排序,join,group等,然後就是sql語句調優,表設計等。
4,大數據基本了解
Zookeeper,hadoop,hbase,hive,sqoop,flume,kafka,spark,storm等這些框架的作用及基本環境的搭建,要熟練,要會運維,瓶頸分析。
5,maprece及相關框架hive,sqoop
深入了解maprece的核心思想。尤其是shuffle,join,文件輸入格式,map數目,rece數目,調優等。
6,hive和hbase等倉庫
hive和hbase基本是大數據倉庫的標配。要回用,懂調優,故障排查。
hbase看浪尖hbase系列文章。hive後期更新。
7,消息隊列的使用
kafka基本概念,使用,瓶頸分析。看浪尖kafka系列文章。
8,實時處理系統
storm和spark Streaming
9,spark core和sparksql
spark用於離線分析的兩個重要功能。
10,最終方向決策
a),運維。(精通整套系統及故障排查,會寫運維腳本啥的。)
b),數據分析。(演算法精通)
c),平台開發。(源碼精通)
自學還是培訓?
無基礎的同學,培訓之前先搞到視頻通學一遍,防止盲目培訓跟不上講師節奏,浪費時間,精力,金錢。
有基礎的盡量搞點視頻學基礎,然後跟群里大牛交流,前提是人家願意,
想辦法跟大牛做朋友才是王道。
⑷ 數據分析需要掌握哪些知識
Java基礎語法
· 分支結構if/switch
· 循環結構for/while/do while
· 方法聲明和調用
· 方法重載
· 數組的使用
· 命令行參數、可變參數
IDEA
· IDEA常用設置、常用快捷鍵
· 自定義模板
· 關聯Tomcat
· Web項目案例實操
面向對象編程
· 封裝、繼承、多態、構造器、包
· 異常處理機制
· 抽象類、介面、內部類
· 常有基礎API、集合List/Set/Map
· 泛型、線程的創建和啟動
· 深入集合源碼分析、常見數據結構解析
· 線程的安全、同步和通信、IO流體系
· 反射、類的載入機制、網路編程
Java8/9/10/11
新特性
· Lambda表達式、方法引用
· 構造器引用、StreamAPI
· jShell(JShell)命令
· 介面的私有方法、Optional加強
· 局部變數的類型推斷
· 更簡化的編譯運行程序等
MySQL
· DML語言、DDL語言、DCL語言
· 分組查詢、Join查詢、子查詢、Union查詢、函數
· 流程式控制制語句、事務的特點、事務的隔離級別等
JDBC
· 使用JDBC完成資料庫增刪改查操作
· 批處理的操作
· 資料庫連接池的原理及應用
· 常見資料庫連接池C3P0、DBCP、Druid等
Maven
· Maven環境搭建
· 本地倉庫&中央倉庫
· 創建Web工程
· 自動部署
· 持續繼承
· 持續部署
Linux
· VI/VIM編輯器
· 系統管理操作&遠程登錄
· 常用命令
· 軟體包管理&企業真題
Shell編程
· 自定義變數與特殊變數
· 運算符
· 條件判斷
· 流程式控制制
· 系統函數&自定義函數
· 常用工具命令
· 面試真題
Hadoop
· Hadoop生態介紹
· Hadoop運行模式
· 源碼編譯
· HDFS文件系統底層詳解
· DN&NN工作機制
· HDFS的API操作
· MapRece框架原理
· 數據壓縮
· Yarn工作機制
· MapRece案例詳解
· Hadoop參數調優
· HDFS存儲多目錄
· 多磁碟數據均衡
· LZO壓縮
· Hadoop基準測試
Zookeeper
· Zookeeper數據結果
· 內部原理
· 選舉機制
· Stat結構體
· 監聽器
· 分布式安裝部署
· API操作
· 實戰案例
· 面試真題
· 啟動停止腳本
HA+新特性
· HDFS-HA集群配置
Hive
· Hive架構原理
· 安裝部署
· 遠程連接
· 常見命令及基本數據類型
· DML數據操作
· 查詢語句
· Join&排序
· 分桶&函數
· 壓縮&存儲
· 企業級調優
· 實戰案例
· 面試真題
Flume
· Flume架構
· Agent內部原理
· 事務
· 安裝部署
· 實戰案例
· 自定義Source
· 自定義Sink
· Ganglia監控
Kafka
· 消息隊列
· Kafka架構
· 集群部署
· 命令行操作
· 工作流程分析
· 分區分配策略
· 數據寫入流程
· 存儲策略
· 高階API
· 低級API
· 攔截器
· 監控
· 高可靠性存儲
· 數據可靠性和持久性保證
· ISR機制
· Kafka壓測
· 機器數量計算
· 分區數計算
· 啟動停止腳本
DataX
· 安裝
· 原理
· 數據一致性
· 空值處理
· LZO壓縮處理
Scala
· Scala基礎入門
· 函數式編程
· 數據結構
· 面向對象編程
· 模式匹配
· 高階函數
· 特質
· 註解&類型參數
· 隱式轉換
· 高級類型
· 案例實操
Spark Core
· 安裝部署
· RDD概述
· 編程模型
· 持久化&檢查點機制
· DAG
· 運算元詳解
· RDD編程進階
· 累加器&廣播變數
Spark SQL
· SparkSQL
· DataFrame
· DataSet
· 自定義UDF&UDAF函數
Spark Streaming
· SparkStreaming
· 背壓機制原理
· Receiver和Direct模式原理
· Window原理及案例實操
· 7x24 不間斷運行&性能考量
Spark內核&優化
· 內核源碼詳解
· 優化詳解
Hbase
· Hbase原理及架構
· 數據讀寫流程
· API使用
· 與Hive和Sqoop集成
· 企業級調優
Presto
· Presto的安裝部署
· 使用Presto執行數倉項目的即席查詢模塊
Ranger2.0
· 許可權管理工具Ranger的安裝和使用
Azkaban3.0
· 任務調度工具Azkaban3.0的安裝部署
· 使用Azkaban進行項目任務調度,實現電話郵件報警
Kylin3.0
· Kylin的安裝部署
· Kylin核心思想
· 使用Kylin對接數據源構建模型
Atlas2.0
· 元數據管理工具Atlas的安裝部署
Zabbix
· 集群監控工具Zabbix的安裝部署
DolphinScheler
· 任務調度工具DolphinScheler的安裝部署
· 實現數倉項目任務的自動化調度、配置郵件報警
Superset
· 使用SuperSet對數倉項目的計算結果進行可視化展示
Echarts
· 使用Echarts對數倉項目的計算結果進行可視化展示
Redis
· Redis安裝部署
· 五大數據類型
· 總體配置
· 持久化
· 事務
· 發布訂閱
· 主從復制
Canal
· 使用Canal實時監控MySQL數據變化採集至實時項目
Flink
· 運行時架構
· 數據源Source
· Window API
· Water Mark
· 狀態編程
· CEP復雜事件處理
Flink SQL
· Flink SQL和Table API詳細解讀
Flink 內核
· Flink內核源碼講解
· 經典面試題講解
Git&GitHub
· 安裝配置
· 本地庫搭建
· 基本操作
· 工作流
· 集中式
ClickHouse
· ClickHouse的安裝部署
· 讀寫機制
· 數據類型
· 執行引擎
DataV
· 使用DataV對實時項目需求計算結果進行可視化展示
sugar
· 結合Springboot對接網路sugar實現數據可視化大屏展示
Maxwell
· 使用Maxwell實時監控MySQL數據變化採集至實時項目
ElasticSearch
· ElasticSearch索引基本操作、案例實操
Kibana
· 通過Kibana配置可視化分析
Springboot
· 利用Springboot開發可視化介面程序
⑸ 如何創建一個大數據平台
所謂的大數據平台不是獨立存在的,比如網路是依賴搜索引擎獲得大數據並開展業務的,阿里是通過電子商務交易獲得大數據並開展業務的,騰訊是通過社交獲得大數據並開始業務的,所以說大數據平台不是獨立存在的,重點是如何搜集和沉澱數據,如何分析數據並挖掘數據的價值。
我可能還不夠資格回答這個問題,沒有經歷過一個公司大數據平台從無到有到復雜的過程。不過說說看法吧,也算是梳理一下想法找找噴。
這是個需求驅動的過程。
曾經聽過spotify的分享,印象很深的是,他們分享說,他們的hadoop集群第一次故障是因為,機器放在靠窗的地方,太陽曬了當機了(笑)。從簡單的沒有機房放在自家窗前的集群到一直到現在復雜的數據平台,這是一個不斷演進的過程。
對小公司來說,大概自己找一兩台機器架個集群算算,也算是大數據平台了。在初創階段,數據量會很小,不需要多大的規模。這時候組件選擇也很隨意,Hadoop一套,任務調度用腳本或者輕量的框架比如luigi之類的,數據分析可能hive還不如導入RMDB快。監控和部署也許都沒時間整理,用腳本或者輕量的監控,大約是沒有ganglia、nagios,puppet什麼的。這個階段也許算是技術積累,用傳統手段還是真大數據平台都是兩可的事情,但是為了今後的擴展性,這時候上Hadoop也許是不錯的選擇。
當進入高速發展期,也許擴容會跟不上計劃,不少公司可能會遷移平台到雲上,比如AWS阿里雲什麼的。小規模高速發展的平台,這種方式應該是經濟實惠的,省了運維和管理的成本,擴容比較省心。要解決的是選擇平台本身提供的服務,計算成本,打通數據出入的通道。整個數據平台本身如果走這條路,可能就已經基本成型了。走這條路的比較有名的應該是netflix。
也有一個階段,你發現雲服務的費用太高,雖然省了你很多事,但是花錢嗖嗖的。幾個老闆一合計,再玩下去下個月工資發布出來了。然後無奈之下公司開始往私有集群遷移。這時候你大概需要一群靠譜的運維,幫你監管機器,之前兩三台機器登錄上去看看狀態換個磁碟什麼的也許就不可能了,你面對的是成百上千台主機,有些關鍵服務必須保證穩定,有些是數據節點,磁碟三天兩頭損耗,網路可能被壓得不堪重負。你需要一個靠譜的人設計網路布局,設計運維規范,架設監控,值班團隊走起7*24小時隨時准備出台。然後上面再有平台組真的大數據平台走起。
然後是選型,如果有技術實力,可以直接用社區的一整套,自己管起來,監控部署什麼的自己走起。這個階段部署監控和用戶管理什麼的都不可能像兩三個節點那樣人肉搞了,配置管理,部署管理都需要專門的平台和組件;定期Review用戶的作業和使用情況,決定是否擴容,清理數據等等。否則等機器和業務進一步增加,團隊可能會死的很慘,疲於奔命,每天事故不斷,進入惡性循環。
當然有金錢實力的大戶可以找Cloudera,Hortonworks,國內可以找華為星環,會省不少事,適合非互聯網土豪。當然互聯網公司也有用這些東西的,比如Ebay。
接下去你可能需要一些重量的組件幫你做一些事情。
比如你的數據接入,之前可能找個定時腳本或者爬log發包找個伺服器接收寫入HDFS,現在可能不行了,這些大概沒有高性能,沒有異常保障,你需要更強壯的解決方案,比如Flume之類的。
你的業務不斷壯大,老闆需要看的報表越來越多,需要訓練的數據也需要清洗,你就需要任務調度,比如oozie或者azkaban之類的,這些系統幫你管理關鍵任務的調度和監控。
數據分析人員的數據大概可能漸漸從RDBMS搬遷到集群了,因為傳統資料庫已經完全hold不住了,但他們不會寫代碼,所以你上馬了Hive。然後很多用戶用了Hive覺得太慢,你就又上馬交互分析系統,比如Presto,Impala或者SparkSQL。
你的數據科學家需要寫ML代碼,他們跟你說你需要Mahout或者Spark MLLib,於是你也部署了這些。
至此可能數據平台已經是工程師的日常工作場所了,大多數業務都會遷移過來。這時候你可能面臨很多不同的問題。
比如各個業務線數據各種數據表多的一塌糊塗,不管是你還是寫數據的人大概都不知道數據從哪兒來,接下去到哪兒去。你就自己搞了一套元數據管理的系統。
你分析性能,發現你們的數據都是上百Column,各種復雜的Query,裸存的Text格式即便壓縮了也還是慢的要死,於是你主推用戶都使用列存,Parquet,ORC之類的。
又或者你發現你們的ETL很長,中間生成好多臨時數據,於是你下狠心把pipeline改寫成Spark了。
再接下來也許你會想到花時間去維護一個門戶,把這些零散的組件都整合到一起,提供統一的用戶體驗,比如一鍵就能把數據從資料庫chua一下拉到HDFS導入Hive,也能一鍵就chua一下再搞回去;點幾下就能設定一個定時任務,每天跑了給老闆自動推送報表;或者點一下就能起一個Storm的topology;或者界面上寫幾個Query就能查詢Hbase的數據。這時候你的數據平台算是成型了。
當然,磕磕碰碰免不了。每天你都有新的問題和挑戰,否則你就要失業了不是?
你發現社區不斷在解決你遇到過的問題,於是你們架構師每天分出很多時間去看社區的進展,有了什麼新工具,有什麼公司發布了什麼項目解決了什麼問題,興許你就能用上。
上了這些亂七八糟的東西,你以為就安生了?Hadoop平台的一個大特點就是坑多。尤其是新做的功能新起的項目。對於平台組的人,老闆如果知道這是天然坑多的平台,那他也許會很高興,因為跟進社區,幫忙修bug,一起互動其實是很提升公司影響力的實情。當然如果老闆不理解,你就自求多福吧,招幾個老司機,出了問題能馬上帶路才是正道。當然團隊的技術積累不能不跟上,因為數據平台還是亂世,三天不跟進你就不知道世界是什麼樣了。任何一個新技術,都是坑啊坑啊修啊修啊才完善的。如果是關鍵業務換技術,那需要小心再小心,技術主管也要有足夠的積累,能夠駕馭,知道收益和風險。
⑹ mflinkstarter已停止運行是什麼意思
mflinkstarter已停止運行,是設置錯誤造成的,解決方法如下:
1、首先在手機里找到並點擊「設置」。
⑺ 哪位好心人能提供個最新flink視頻學習教程,感謝
大數據教程flink從入門到精通
了解Flink,了解集群環境搭建運維,學習Flink中重要概念、原理和API的用法,通過知識點 + 案例教學法幫助小白快速掌握Flink。
課程內容:
1、Flink框架簡介
2、Flink集群搭建運維
3、Flink Dataset開發
4、Flink 廣播變數,分布式緩存,累加器
5、Flink Datastream開發
6、Flink Window操作
7、Flink watermark與側道輸出
8、Flink狀態計算
9、Flink容錯checkpoint與一致性語義
10、Flink進階 非同步IO,背壓,內存管理
11、Flink Table API與SQL
⑻ Apache Flink是什麼
Flink為流處理和批處理應用公用一個通用的引擎。
1、數據量&吞吐量&延遲性
Flink 的流處理引擎只需要很少配置就能實現高吞吐率和低延遲。
2、支持 Event Time 和亂序事件
Flink 支持了流處理和 Event Time 語義的窗口機制。
Event time 使得計算亂序到達的事件或可能延遲到達的事件更加簡單。
3、狀態計算的 exactly-once 語義
流程序可以在計算過程中維護自定義狀態。
Flink 的 checkpointing 機制保證了即時在故障發生下也能保障狀態的 exactly once 語義。
4、高度靈活的流式窗口
Flink 支持在時間窗口,統計窗口,session 窗口,以及數據驅動的窗口
窗口可以通過靈活的觸發條件來定製,以支持復雜的流計算模式。
5、帶反壓的連續流模型
數據流應用執行的是不間斷的(常駐)operators。
Flink streaming 在運行時有著天然的流控:慢的數據 sink 節點會反壓(backpressure)快的數據源(sources)。
6、容錯性
Flink 的容錯機制是基於 Chandy-Lamport distributed snapshots 來實現的。
這種機制是非常輕量級的,允許系統擁有高吞吐率的同時還能提供強一致性的保障。
7、Batch 和 Streaming 一個系統流處理和批處理共用一個引擎
Flink 為流處理和批處理應用公用一個通用的引擎。批處理應用可以以一種特殊的流處理應用高效地運行。
8、內存管理
Flink 在 JVM 中實現了自己的內存管理。
應用可以超出主內存的大小限制,並且承受更少的垃圾收集的開銷。
9、迭代和增量迭代
Flink 具有迭代計算的專門支持(比如在機器學習和圖計算中)。
增量迭代可以利用依賴計算來更快地收斂。
10、程序調優
批處理程序會自動地優化一些場景,比如避免一些昂貴的操作(如 shuffles 和 sorts),還有緩存一些中間數據。
⑼ flink組件擅長什麼
nk擅長處理無界和有界數據集。精確控制時間和狀態使Flink的運行時能夠在無界流上運行任何類型的應用程序。有界流由演算法和數據結構內部處理,這些演算法和數據結構專門針對固定大小的數據集而設計,從而產生出色的性能。
⑽ Apache Flink現在在大數據處理方面能夠和Apache Spark分庭抗禮么
我們是否還需要另外一個新的數據處理引擎?當我第一次聽到flink的時候這是我是非常懷疑的。在大數據領域,現在已經不缺少數據處理框架了,但是沒有一個框架能夠完全滿足不同的處理需求。自從Apache spark出現後,貌似已經成為當今把大部分的問題解決得最好的框架了,所以我對另外一款解決類似問題的框架持有很強烈的懷疑態度。
不過因為好奇,我花費了數個星期在嘗試了解flink。一開始仔細看了flink的幾個例子,感覺和spark非常類似,心理就傾向於認為flink又是一個模仿spark的框架。但是隨著了解的深入,這些API體現了一些flink的新奇的思路,這些思路還是和spark有著比較明顯的區別的。我對這些思路有些著迷了,所以花費了更多的時間在這上面。
flink中的很多思路,例如內存管理,dataset API都已經出現在spark中並且已經證明 這些思路是非常靠譜的。所以,深入了解flink也許可以幫助我們分布式數據處理的未來之路是怎樣的
在後面的文章里,我會把自己作為一個spark開發者對flink的第一感受寫出來。因為我已經在spark上幹了2年多了,但是只在flink上接觸了2到3周,所以必然存在一些bias,所以大家也帶著懷疑和批判的角度來看這篇文章吧。
Apache Flink是什麼
flink是一款新的大數據處理引擎,目標是統一不同來源的數據處理。這個目標看起來和spark和類似。沒錯,flink也在嘗試解決spark在解決的問題。這兩套系統都在嘗試建立一個統一的平台可以運行批量,流式,互動式,圖處理,機器學習等應用。所以,flink和spark的目標差別並不大,他們最主要的區別在於實現的細節。
後面我會重點從不同的角度對比這兩者。
Apache Spark vs Apache Flink
1.抽象 Abstraction
spark中,對於批處理我們有RDD,對於流式,我們有DStream,不過內部實際還是RDD.所以所有的數據表示本質上還是RDD抽象。
後面我會重點從不同的角度對比這兩者。在flink中,對於批處理有DataSet,對於流式我們有DataStreams。看起來和spark類似,他們的不同點在於:
一)DataSet在運行時是表現為運行計劃(runtime plans)的
在spark中,RDD在運行時是表現為java objects的。通過引入Tungsten,這塊有了些許的改變。但是在flink中是被表現為logical plan(邏輯計劃)的,聽起來很熟悉?沒錯,就是類似於spark中的dataframes。所以在flink中你使用的類Dataframe api是被作為第一優先順序來優化的。但是相對來說在spark RDD中就沒有了這塊的優化了。
flink中的Dataset,對標spark中的Dataframe,在運行前會經過優化。
在spark 1.6,dataset API已經被引入spark了,也許最終會取代RDD 抽象。
二)Dataset和DataStream是獨立的API
在spark中,所有不同的API,例如DStream,Dataframe都是基於RDD抽象的。但是在flink中,Dataset和DataStream是同一個公用的引擎之上兩個獨立的抽象。所以你不能把這兩者的行為合並在一起操作,當然,flink社區目前在朝這個方向努力(https://issues.apache.org/jira/browse/FLINK-2320),但是目前還不能輕易斷言最後的結果。
2.內存管理
一直到1.5版本,spark都是試用java的內存管理來做數據緩存,明顯很容易導致OOM或者gc。所以從1.5開始,spark開始轉向精確的控制內存的使用,這就是tungsten項目了
flink從第一天開始就堅持自己控制內存試用。這個也是啟發了spark走這條路的原因之一。flink除了把數據存在自己管理的內存以外,還直接操作二進制數據。在spark中,從1.5開始,所有的dataframe操作都是直接作用在tungsten的二進制數據上。
3.語言實現
spark是用scala來實現的,它提供了Java,Python和R的編程介面。
flink是java實現的,當然同樣提供了Scala API
所以從語言的角度來看,spark要更豐富一些。因為我已經轉移到scala很久了,所以不太清楚這兩者的java api實現情況。
4.API
spark和flink都在模仿scala的collection API.所以從表面看起來,兩者都很類似。下面是分別用RDD和DataSet API實現的word count
// Spark wordcount
object WordCount {
def main(args: Array[String]) {
val env = new SparkContext("local","wordCount")
val data = List("hi","how are you","hi")
val dataSet = env.parallelize(data)
val words = dataSet.flatMap(value => value.split("\\s+"))
val mappedWords = words.map(value => (value,1))
val sum = mappedWords.receByKey(_+_)
println(sum.collect())
}
}
// Flink wordcount
object WordCount {
def main(args: Array[String]) {
val env = ExecutionEnvironment.getExecutionEnvironment
val data = List("hi","how are you","hi")
val dataSet = env.fromCollection(data)
val words = dataSet.flatMap(value => value.split("\\s+"))
val mappedWords = words.map(value => (value,1))
val grouped = mappedWords.groupBy(0)
val sum = grouped.sum(1)
println(sum.collect())
}
}
不知道是偶然還是故意的,API都長得很像,這樣很方便開發者從一個引擎切換到另外一個引擎。我感覺以後這種Collection API會成為寫data pipeline的標配。
Steaming
spark把streaming看成是更快的批處理,而flink把批處理看成streaming的special case。這裡面的思路決定了各自的方向,其中兩者的差異點有如下這些:
實時 vs 近實時的角度
flink提供了基於每個事件的流式處理機制,所以可以被認為是一個真正的流式計算。它非常像storm的model。
而spark,不是基於事件的粒度,而是用小批量來模擬流式,也就是多個事件的集合。所以spark被認為是近實時的處理系統。
Spark streaming 是更快的批處理,而Flink Batch是有限數據的流式計算。
雖然大部分應用對准實時是可以接受的,但是也還是有很多應用需要event level的流式計算。這些應用更願意選擇storm而非spark streaming,現在,flink也許是一個更好的選擇。
流式計算和批處理計算的表示
spark對於批處理和流式計算,都是用的相同的抽象:RDD,這樣很方便這兩種計算合並起來表示。而flink這兩者分為了DataSet和DataStream,相比spark,這個設計算是一個糟糕的設計。
對 windowing 的支持
因為spark的小批量機制,spark對於windowing的支持非常有限。只能基於process time,且只能對batches來做window。
而Flink對window的支持非常到位,且Flink對windowing API的支持是相當給力的,允許基於process time,data time,record 來做windowing。
我不太確定spark是否能引入這些API,不過到目前為止,Flink的windowing支持是要比spark好的。
Steaming這部分flink勝
SQL interface
目前spark-sql是spark裡面最活躍的組件之一,Spark提供了類似Hive的sql和Dataframe這種DSL來查詢結構化數據,API很成熟,在流式計算中使用很廣,預計在流式計算中也會發展得很快。
至於flink,到目前為止,Flink Table API只支持類似DataFrame這種DSL,並且還是處於beta狀態,社區有計劃增加SQL 的interface,但是目前還不確定什麼時候才能在框架中用上。
所以這個部分,spark勝出。
Data source Integration
Spark的數據源 API是整個框架中最好的,支持的數據源包括NoSql db,parquet,ORC等,並且支持一些高級的操作,例如predicate push down
Flink目前還依賴map/rece InputFormat來做數據源聚合。
這一場spark勝
Iterative processing
spark對機器學習的支持較好,因為可以在spark中利用內存cache來加速機器學習演算法。
但是大部分機器學習演算法其實是一個有環的數據流,但是在spark中,實際是用無環圖來表示的,一般的分布式處理引擎都是不鼓勵試用有環圖的。
但是flink這里又有點不一樣,flink支持在runtime中的有環數據流,這樣表示機器學習演算法更有效而且更有效率。
這一點flink勝出。
Stream as platform vs Batch as Platform
Spark誕生在Map/Rece的時代,數據都是以文件的形式保存在磁碟中,這樣非常方便做容錯處理。
Flink把純流式數據計算引入大數據時代,無疑給業界帶來了一股清新的空氣。這個idea非常類似akka-streams這種。
成熟度
目前的確有一部分吃螃蟹的用戶已經在生產環境中使用flink了,不過從我的眼光來看,Flink還在發展中,還需要時間來成熟。
結論
目前Spark相比Flink是一個更為成熟的計算框架,但是Flink的很多思路很不錯,Spark社區也意識到了這一點,並且逐漸在採用Flink中的好的設計思路,所以學習一下Flink能讓你了解一下Streaming這方面的更迷人的思路。