方法:
成都創新互聯-專業網站定制、快速模板網站建設、高性價比三沙網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式三沙網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋三沙地區。費用合理售后完善,10年實體公司更值得信賴。
1:Redhat系統或者Fedora或者CentOs的Linux發行版,那么在Linux終端輸入命令回車:
su - root
這樣就可以切換到root權限了
2:Ubuntu系統,在Linux終端輸入命令回車:
sudo su - root
然后這樣也可以切換到root權限了.
Java是一門編程語言,實現同一個需求有上百種編程語言可以完成,Java之于大數據,就是一種工具罷了。
大數據就是一個行業,實現同一個需求同樣有多種工具可以選擇,狹義一點以技術的角度講,各類框架有Hadoop,spark,storm,flink等,就這類技術生態圈來講,還有各種中間件如flume,kafka,sqoop等等 ,這些框架以及工具大多數是用Java編寫而成,但提供諸如Java,scala,Python,R等各種語言API供編程。
所以,大數據的實習需要用到Java,但是Java并不是大數據。
1. 大數據組件使用Java開發,不用自己管理垃圾回收
目前有很多大數據開源項目都是使用Java來開發,比如Hadoop、Hive、Flink、HBase等等,使用Java開發有一個好處就是不用自己去管理程序對象的內存釋放,極大的提升項目的快速開發性。
在C++語言中,每當你創建了一個對象指針,你都需要在項目結束或者程序退出的時候,自己去一個一個的釋放你創建的指針,稍微有點不注意,可能就會造成泄漏。對于成千上萬行代碼,有時候程序員因為粗心,很容易就會忘記釋放指針,結果就會導致內存泄漏。
而在Java中,由于Java虛擬機自動幫助我們去釋放無用(對象引用不可達)的對象,內部也會根據堆內進行分代垃圾回收,同時有多種垃圾回收器可供選擇,這極大的幫助了程序員更好的開發項目。所以很多大數據組件選擇Java進行開發。
2. 目前使用Java開發的人數非常多,便于大數據項目推廣
大數據開源項目使用Java開發的另外一個原因,就是目前在全球使用Java語言的人數最多,Java編程語言流行度非常高。在推廣大數據開源項目時,可以更好地讓其他同學了解。下面是2019年9月TIOBE編程語言排行榜:
Java以16.661%排在第一,C語言緊隨其后。比例越高,代表編程語言在程序員中越流行,從而代表語言的使用人數也越多。
程序員在學習大數據組件時,肯定要對組件進行深入研究。研究的過程中,肯定少不了看項目的源代碼。如果大數據組件選擇一門非常冷門的編程語言來進行開發,估計很多程序員在看到源碼時,就不想研究這門大數據組件了。選擇Java語言開發,讓更多的程序員不會因為語言的不熟悉性, 而放棄對這么大數據組件的研究。
簡單的說Java語言是做大數據研發的工具之一,不少早期做大數據平臺開發的程序員都是做Java開發出身,而且Hadoop平臺本身就是采用Java語言開發的,所以很多做大數據開發的程序員第一個排序實驗都是使用Java語言開發的。所以,Java是早期做大數據開發的基礎之一。
大數據確切的說,它并不能算一門具體的技術,而是一種概念,一種大的技術范疇。大數據主要是用來處理,分析,存儲海量數據,對這些大量的數據進行加工處理等操作。大數據領域里面涉及到Hadoop,hive,flink,hbase,java等各種具體的技術,看清楚,在這里Java也可以為大數據的實現提供服務哦。所以可以說,Java可以幫助我們實現大數據的開發,Java就像是一個“建筑工人",它可以把各種數據原料整合在一起,構建出大數據這么一個環境。
通常情況下,我們說的大數據,是指基于Hadoop的大數據生態,在這個生態中,有很多很多的產品,每個產品負責解決大數據整體方案中的一個問題,如Hadoop自身包含MapReduce,Yarn,HDFS等,MapReduce 負責批處理計算,HDFS負責的分布式存儲,YARN負責資源管理,其他如HBASE負責數據存儲,等等。這些大數據生態中的不同產品,大部分都是由Java開發的,所以說它們與Java密不可分。
由于軟件自身由Java開發,因此基本這些大數據產品做開發,Java語言就是首選,因為這些產品基本都提供Java語言的編程接口API。
還有一些產品,雖然不是用Java語言開發,但是使用了基于JVM的語言,如Spark是由Scala語言開發的,而Scala是基于JVM的,這就意味著可以進行Scala與Java的混合開發,同樣離不開Java。
大數據框架的編寫支持很多開發語言,但是Java在大數據開發方面有很大的優勢,目前流行的大數據Hadoop框架,很多部分都是用開源的Java語言編寫,因此Java在大數據方面有很大優勢。在大數據的中,也許別的你可能不在意,但是Hadoop想必你是注意到了的吧,大數據中不得不學的重要內容。
本文主要整理自阿里巴巴計算平臺事業部資深技術專家莫問在云棲大會的演講。
合抱之木,生于毫末
隨著人工智能時代的降臨,數據量的爆發,在典型的大數據的業務場景下數據業務最通用的做法是:選用批處理的技術處理全量數據,采用流式計算處理實時增量數據。在絕大多數的業務場景之下,用戶的業務邏輯在批處理和流處理之中往往是相同的。但是,用戶用于批處理和流處理的兩套計算引擎是不同的。
因此,用戶通常需要寫兩套代碼。毫無疑問,這帶來了一些額外的負擔和成本。阿里巴巴的商品數據處理就經常需要面對增量和全量兩套不同的業務流程問題,所以阿里就在想,我們能不能有一套統一的大數據引擎技術,用戶只需要根據自己的業務邏輯開發一套代碼。這樣在各種不同的場景下,不管是全量數據還是增量數據,亦或者實時處理,一套方案即可全部支持, 這就是阿里選擇Flink的背景和初衷 。
目前開源大數據計算引擎有很多選擇,流計算如Storm,Samza,Flink,Kafka Stream等,批處理如Spark,Hive,Pig,Flink等。而同時支持流處理和批處理的計算引擎,只有兩種選擇:一個是Apache Spark,一個是Apache Flink。
從技術,生態等各方面的綜合考慮。首先,Spark的技術理念是基于批來模擬流的計算。而Flink則完全相反,它采用的是基于流計算來模擬批計算。
從技術發展方向看,用批來模擬流有一定的技術局限性,并且這個局限性可能很難突破。而Flink基于流來模擬批,在技術上有更好的擴展性。從長遠來看,阿里決定用Flink做一個統一的、通用的大數據引擎作為未來的選型。
Flink是一個低延遲、高吞吐、統一的大數據計算引擎。在阿里巴巴的生產環境中,Flink的計算平臺可以實現毫秒級的延遲情況下,每秒鐘處理上億次的消息或者事件。同時Flink提供了一個Exactly-once的一致性語義。保證了數據的正確性。這樣就使得Flink大數據引擎可以提供金融級的數據處理能力。
Flink在阿里的現狀
基于Apache Flink在阿里巴巴搭建的平臺于2016年正式上線,并從阿里巴巴的搜索和推薦這兩大場景開始實現。目前阿里巴巴所有的業務,包括阿里巴巴所有子公司都采用了基于Flink搭建的實時計算平臺。同時Flink計算平臺運行在開源的Hadoop集群之上。采用Hadoop的YARN做為資源管理調度,以 HDFS作為數據存儲。因此,Flink可以和開源大數據軟件Hadoop無縫對接。
目前,這套基于Flink搭建的實時計算平臺不僅服務于阿里巴巴集團內部,而且通過阿里云的云產品API向整個開發者生態提供基于Flink的云產品支持。
Flink在阿里巴巴的大規模應用,表現如何?
規模: 一個系統是否成熟,規模是重要指標,Flink最初上線阿里巴巴只有數百臺服務器,目前規模已達上萬臺,此等規模在全球范圍內也是屈指可數;
狀態數據: 基于Flink,內部積累起來的狀態數據已經是PB級別規模;
Events: 如今每天在Flink的計算平臺上,處理的數據已經超過萬億條;
PS: 在峰值期間可以承擔每秒超過4.72億次的訪問,最典型的應用場景是阿里巴巴雙11大屏;
Flink的發展之路
接下來從開源技術的角度,來談一談Apache Flink是如何誕生的,它是如何成長的?以及在成長的這個關鍵的時間點阿里是如何進入的?并對它做出了那些貢獻和支持?
Flink誕生于歐洲的一個大數據研究項目StratoSphere。該項目是柏林工業大學的一個研究性項目。早期,Flink是做Batch計算的,但是在2014年,StratoSphere里面的核心成員孵化出Flink,同年將Flink捐贈Apache,并在后來成為Apache的頂級大數據項目,同時Flink計算的主流方向被定位為Streaming,即用流式計算來做所有大數據的計算,這就是Flink技術誕生的背景。
2014年Flink作為主攻流計算的大數據引擎開始在開源大數據行業內嶄露頭角。區別于Storm,Spark Streaming以及其他流式計算引擎的是:它不僅是一個高吞吐、低延遲的計算引擎,同時還提供很多高級的功能。比如它提供了有狀態的計算,支持狀態管理,支持強一致性的數據語義以及支持Event Time,WaterMark對消息亂序的處理。
Flink核心概念以及基本理念
Flink最區別于其他流計算引擎的,其實就是狀態管理。
什么是狀態?例如開發一套流計算的系統或者任務做數據處理,可能經常要對數據進行統計,如Sum,Count,Min,Max,這些值是需要存儲的。因為要不斷更新,這些值或者變量就可以理解為一種狀態。如果數據源是在讀取Kafka,RocketMQ,可能要記錄讀取到什么位置,并記錄Offset,這些Offset變量都是要計算的狀態。
Flink提供了內置的狀態管理,可以把這些狀態存儲在Flink內部,而不需要把它存儲在外部系統。這樣做的好處是第一降低了計算引擎對外部系統的依賴以及部署,使運維更加簡單;第二,對性能帶來了極大的提升:如果通過外部去訪問,如Redis,HBase它一定是通過網絡及RPC。如果通過Flink內部去訪問,它只通過自身的進程去訪問這些變量。同時Flink會定期將這些狀態做Checkpoint持久化,把Checkpoint存儲到一個分布式的持久化系統中,比如HDFS。這樣的話,當Flink的任務出現任何故障時,它都會從最近的一次Checkpoint將整個流的狀態進行恢復,然后繼續運行它的流處理。對用戶沒有任何數據上的影響。
Flink是如何做到在Checkpoint恢復過程中沒有任何數據的丟失和數據的冗余?來保證精準計算的?
這其中原因是Flink利用了一套非常經典的Chandy-Lamport算法,它的核心思想是把這個流計算看成一個流式的拓撲,定期從這個拓撲的頭部Source點開始插入特殊的Barries,從上游開始不斷的向下游廣播這個Barries。每一個節點收到所有的Barries,會將State做一次Snapshot,當每個節點都做完Snapshot之后,整個拓撲就算完整的做完了一次Checkpoint。接下來不管出現任何故障,都會從最近的Checkpoint進行恢復。
Flink利用這套經典的算法,保證了強一致性的語義。這也是Flink與其他無狀態流計算引擎的核心區別。
下面介紹Flink是如何解決亂序問題的。比如星球大戰的播放順序,如果按照上映的時間觀看,可能會發現故事在跳躍。
在流計算中,與這個例子是非常類似的。所有消息到來的時間,和它真正發生在源頭,在線系統Log當中的時間是不一致的。在流處理當中,希望是按消息真正發生在源頭的順序進行處理,不希望是真正到達程序里的時間來處理。Flink提供了Event Time和WaterMark的一些先進技術來解決亂序的問題。使得用戶可以有序的處理這個消息。這是Flink一個很重要的特點。
接下來要介紹的是Flink啟動時的核心理念和核心概念,這是Flink發展的第一個階段;第二個階段時間是2015年和2017年,這個階段也是Flink發展以及阿里巴巴介入的時間。故事源于2015年年中,我們在搜索事業部的一次調研。當時阿里有自己的批處理技術和流計算技術,有自研的,也有開源的。但是,為了思考下一代大數據引擎的方向以及未來趨勢,我們做了很多新技術的調研。
結合大量調研結果,我們最后得出的結論是:解決通用大數據計算需求,批流融合的計算引擎,才是大數據技術的發展方向,并且最終我們選擇了Flink。
但2015年的Flink還不夠成熟,不管是規模還是穩定性尚未經歷實踐。最后我們決定在阿里內部建立一個Flink分支,對Flink做大量的修改和完善,讓其適應阿里巴巴這種超大規模的業務場景。在這個過程當中,我們團隊不僅對Flink在性能和穩定性上做出了很多改進和優化,同時在核心架構和功能上也進行了大量創新和改進,并將其貢獻給社區,例如:Flink新的分布式架構,增量Checkpoint機制,基于Credit-based的網絡流控機制和Streaming SQL等。
阿里巴巴對Flink社區的貢獻
我們舉兩個設計案例,第一個是阿里巴巴重構了Flink的分布式架構,將Flink的Job調度和資源管理做了一個清晰的分層和解耦。這樣做的首要好處是Flink可以原生的跑在各種不同的開源資源管理器上。經過這套分布式架構的改進,Flink可以原生地跑在Hadoop Yarn和Kubernetes這兩個最常見的資源管理系統之上。同時將Flink的任務調度從集中式調度改為了分布式調度,這樣Flink就可以支持更大規模的集群,以及得到更好的資源隔離。
另一個是實現了增量的Checkpoint機制,因為Flink提供了有狀態的計算和定期的Checkpoint機制,如果內部的數據越來越多,不停地做Checkpoint,Checkpoint會越來越大,最后可能導致做不出來。提供了增量的Checkpoint后,Flink會自動地發現哪些數據是增量變化,哪些數據是被修改了。同時只將這些修改的數據進行持久化。這樣Checkpoint不會隨著時間的運行而越來越難做,整個系統的性能會非常地平穩,這也是我們貢獻給社區的一個很重大的特性。
經過2015年到2017年對Flink Streaming的能力完善,Flink社區也逐漸成熟起來。Flink也成為在Streaming領域最主流的計算引擎。因為Flink最早期想做一個流批統一的大數據引擎,2018年已經啟動這項工作,為了實現這個目標,阿里巴巴提出了新的統一API架構,統一SQL解決方案,同時流計算的各種功能得到完善后,我們認為批計算也需要各種各樣的完善。無論在任務調度層,還是在數據Shuffle層,在容錯性,易用性上,都需要完善很多工作。
篇幅原因,下面主要和大家分享兩點:
● 統一 API Stack
● 統一 SQL方案
先來看下目前Flink API Stack的一個現狀,調研過Flink或者使用過Flink的開發者應該知道。Flink有2套基礎的API,一套是DataStream,一套是DataSet。DataStream API是針對流式處理的用戶提供,DataSet API是針對批處理用戶提供,但是這兩套API的執行路徑是完全不一樣的,甚至需要生成不同的Task去執行。所以這跟得到統一的API是有沖突的,而且這個也是不完善的,不是最終的解法。在Runtime之上首先是要有一個批流統一融合的基礎API層,我們希望可以統一API層。
因此,我們在新架構中將采用一個DAG(有限無環圖)API,作為一個批流統一的API層。對于這個有限無環圖,批計算和流計算不需要涇渭分明的表達出來。只需要讓開發者在不同的節點,不同的邊上定義不同的屬性,來規劃數據是流屬性還是批屬性。整個拓撲是可以融合批流統一的語義表達,整個計算無需區分是流計算還是批計算,只需要表達自己的需求。有了這套API后,Flink的API Stack將得到統一。
除了統一的基礎API層和統一的API Stack外,同樣在上層統一SQL的解決方案。流和批的SQL,可以認為流計算有數據源,批計算也有數據源,我們可以將這兩種源都模擬成數據表。可以認為流數據的數據源是一張不斷更新的數據表,對于批處理的數據源可以認為是一張相對靜止的表,沒有更新的數據表。整個數據處理可以當做SQL的一個Query,最終產生的結果也可以模擬成一個結果表。
對于流計算而言,它的結果表是一張不斷更新的結果表。對于批處理而言,它的結果表是相當于一次更新完成的結果表。從整個SOL語義上表達,流和批是可以統一的。此外,不管是流式SQL,還是批處理SQL,都可以用同一個Query來表達復用。這樣以來流批都可以用同一個Query優化或者解析。甚至很多流和批的算子都是可以復用的。
Flink的未來方向
首先,阿里巴巴還是要立足于Flink的本質,去做一個全能的統一大數據計算引擎。將它在生態和場景上進行落地。目前Flink已經是一個主流的流計算引擎,很多互聯網公司已經達成了共識:Flink是大數據的未來,是最好的流計算引擎。下一步很重要的工作是讓Flink在批計算上有所突破。在更多的場景下落地,成為一種主流的批計算引擎。然后進一步在流和批之間進行無縫的切換,流和批的界限越來越模糊。用Flink,在一個計算中,既可以有流計算,又可以有批計算。
第二個方向就是Flink的生態上有更多語言的支持,不僅僅是Java,Scala語言,甚至是機器學習下用的Python,Go語言。未來我們希望能用更多豐富的語言來開發Flink計算的任務,來描述計算邏輯,并和更多的生態進行對接。
最后不得不說AI,因為現在很多大數據計算的需求和數據量都是在支持很火爆的AI場景,所以在Flink流批生態完善的基礎上,將繼續往上走,完善上層Flink的Machine Learning算法庫,同時Flink往上層也會向成熟的機器學習,深度學習去集成。比如可以做Tensorflow On Flink, 讓大數據的ETL數據處理和機器學習的Feature計算和特征計算,訓練的計算等進行集成,讓開發者能夠同時享受到多種生態給大家帶來的好處。
互聯網行業有很多技術方向可以選擇,在從事互聯網行業之前,首先你需要明白自己的技術興趣和自身情況,選擇一個適合自己的技術方向后,然后再去深入的學習你選擇的技術方向的相關技術。每一個互聯網技術方向都包含了很多底層技術。下面我主要來說說大數據、后端開發、機器學習算法主要有哪些技術學習:
大數據相關技術
大數據所涉及到相關技術主要是和數據相關,在數據量非常大的情況下,怎么存儲這些數據,怎么通過分布式計算減低計算的時間,以及如何實施地對這些數據計算從而產出實時指標。
大數據存儲方面的技術,你可以學習HadoopHDFS分布式文件系統,如何將非常大的數據文件,分布式的存儲在不同的機器上面,同時如何滿足CAP理論中的AP。在NoSQL數據庫中,你可以學習HBase列式數據庫、圖數據庫(Neo4j、JanusGraph)、mongodb等。
離線方面的技術,你可以學習HadoopMapReduce計算框架、Hive、Spark計算框架。如果你對數據倉庫感興趣,你還可以去了解數倉相關的建模知識、如何結合業務去構建模型等等。
實時計算方向的技術,你可以去學習Storm、SparkStreaming、Flink計算框架。實時計算的ExactlyOnce或者AtLeastOnce的語義含義,如何實現狀態的計算和存儲等等。
每一個大數據方向,都有很多技術可以學習,你不僅要學會這些技術的使用,還要學會它們底層原理的實現,以后你在大數據技術架構方面,可以更加的得得心應手。
后臺開發相關技術
后臺開發技術,更多的是在后臺處理前端的請求邏輯,前端可以將相關請求參數通過HTTP連接傳入到后端,后端接收到請求參數,進行業務邏輯處理,然后存儲到數據庫等等。
后臺開發技術,所涉及到的技術很多,在語言方面,你可以去學習Java語言、C++語言、Go語言,去學習這些語言的底層原理和使用語法。
在數據庫存儲方面,你可以去學習Mysql、Redis等數據庫的使用和原理。在服務接口開發方面,你可以去學習Dubbo服務框架。
在后端開發服務層方面,你可以去學習Sping、SpringBoot、Mybatis、微服務等等。后端開發涉及到的技術真的是太多,任何一門技術,都需要你用心學很久才能真正掌握。
機器學習算法相關技術
機器學習算法方面,你可以學習機器學習基礎的相關算法,比如線性回歸、K-means、SVM、決策樹、PCA等相關算法,這些算法怎么實現的,使用到的場景有哪些。無監督算法、半監督算法、有監督算法之間的區別,為什么要這么劃分。
當你對機器學習一些比較基礎的算法的都掌握時,下一步你可以去了解一些更深奧的算法,人工神經網絡、卷積神經網絡,深度學習算法、實時推薦算法、特征工程等等。你學習這些算法技術的目的不僅僅是學習,你可以思考通過這些算法能夠為公司解決哪方面的問題,能給公司帶來哪些收益等。
機器學習算法方面,你可以偏向研究學習,那你的目的更多的是發表相關論文,提升自己在全球學者的影響力以及為工業實踐化作鋪墊。你也可以偏向機器學習算法應用方面,怎么通過機器學習算法,解決公司面臨的問題,從而更好地為公司帶來經濟收益。機器學習的技術,你一生都學不完。
總結
互聯網有很多技術方向,而每一個技術方向都有很多技術需要學習。你在進入互聯網行業之前,必須要選擇一個自己想從事的方向。技術的學習不在于多,而在于深,當你對很多技術底層的原理都有很深入的了解時,你會發現,其實大部分技術底層原理,都有很多相似的地方。這樣你再去擴展自己的技術廣度,會更加容易。
分享文章:flinkgo語言,flink基本概念
轉載來于:http://vcdvsql.cn/article40/hsheho.html
成都網站建設公司_創新互聯,為您提供全網營銷推廣、微信小程序、云服務器、營銷型網站建設、小程序開發、響應式網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯