1. 大數據專業都需要學習哪些軟體啊
一、Phoenix
簡介:這是一個java中間層,可以讓開發者在Apache HBase上執行SQL查詢。Phoenix完全使用Java編寫,代碼位於GitHub上,並且提供了一個客戶端可嵌入的JDBC驅動。
Phoenix查詢引擎會將SQL查詢轉換為一個或多個HBase scan,並編排執行以生成標準的JDBC結果集。直接使用HBase API、協同處理器與自定義過濾器,對於簡單查詢來說,其性能量級是毫秒,對於百萬級別的行數來說,其性能量級是秒。
Phoenix最值得關注的一些特性有:
❶嵌入式的JDBC驅動,實現了大部分的java.sql介面,包括元數據API❷可以通過多部行鍵或是鍵/值單元對列進行建模❸完善的查詢支持,可以使用多個謂詞以及優化的掃描鍵❹DDL支持:通過CREATE TABLE、DROP TABLE及ALTER TABLE來添加/刪除列❺版本化的模式倉庫:當寫入數據時,快照查詢會使用恰當的模式❻DML支持:用於逐行插入的UPSERT VALUES、用於相同或不同表之間大量數據傳輸的UPSERT ❼SELECT、用於刪除行的DELETE❽通過客戶端的批處理實現的有限的事務支持❾單表——還沒有連接,同時二級索引也在開發當中➓緊跟ANSI SQL標准
二、Stinger
簡介:原叫Tez,下一代Hive,Hortonworks主導開發,運行在YARN上的DAG計算框架。
某些測試下,Stinger能提升10倍左右的性能,同時會讓Hive支持更多的SQL,其主要優點包括:
❶讓用戶在Hadoop獲得更多的查詢匹配。其中包括類似OVER的字句分析功能,支持WHERE查詢,讓Hive的樣式系統更符合SQL模型。
❷優化了Hive請求執行計劃,優化後請求時間減少90%。改動了Hive執行引擎,增加單Hive任務的被秒處理記錄數。
❸在Hive社區中引入了新的列式文件格式(如ORC文件),提供一種更現代、高效和高性能的方式來儲存Hive數據。
❹引入了新的運行時框架——Tez,旨在消除Hive的延時和吞吐量限制。Tez通過消除不必要的task、障礙同步和對HDFS的讀寫作業來優化Hive job。這將優化Hadoop內部的執行鏈,徹底加速Hive負載處理。
三、Presto
簡介:Facebook開源的數據查詢引擎Presto ,可對250PB以上的數據進行快速地互動式分析。該項目始於 2012 年秋季開始開發,目前該項目已經在超過 1000 名 Facebook 雇員中使用,運行超過 30000 個查詢,每日數據在 1PB 級別。Facebook 稱 Presto 的性能比諸如 Hive 和 Map*Rece 要好上 10 倍有多。
Presto 當前支持 ANSI SQL 的大多數特效,包括聯合查詢、左右聯接、子查詢以及一些聚合和計算函數;支持近似截然不同的計數(DISTINCT COUNT)等。
2. 如何自學數據分析
第一方面是數學基礎,第二方面是統計學基礎,第三方面是計算機基礎。要想在數據分析的道路上走得更遠,一定要注重數學和統計學的學習。數據分析說到底就是尋找數據背後的規律,而尋找規律就需要具備演算法的設計能力,所以數學和統計學對於數據分析是非常重要的。
而想要快速成為數據分析師,則可以從計算機知識開始學起,具體點就是從數據分析工具開始學起,然後在學習工具使用過程中,輔助演算法以及行業致死的學習。學習數據分析工具往往從Excel工具開始學起,Excel是目前職場人比較常用的數據分析工具,通常在面對10萬條以內的結構化數據時,Excel還是能夠勝任的。對於大部分職場人來說,掌握Excel的數據分析功能能夠應付大部分常見的數據分析場景。
在掌握Excel之後,接下來就應該進一步學習資料庫的相關知識了,可以從關系型資料庫開始學起,重點在於Sql語言。掌握資料庫之後,數據分析能力會有一個較大幅度的提升,能夠分析的數據量也會有明顯的提升。如果採用資料庫和BI工具進行結合,那麼數據分析的結果會更加豐富,同時也會有一個比較直觀的呈現界面。
數據分析的最後一步就需要學習編程語言了,目前學習Python語言是個不錯的選擇,Python語言在大數據分析領域有比較廣泛的使用,而且Python語言自身比較簡單易學,即使沒有編程基礎的人也能夠學得會。通過Python來採用機器學習的方式實現數據分析是當前比較流行的數據分析方式。
3. 零基礎可以培訓大數據分析師嗎會不會很難
零基礎是可以培訓大數據分析師的,不過要學習相應的知識才可以。
數據分析師屬於互聯網行業,所以先要學習一些相關的代碼。想做數據分析師,代碼只是第一步,只有熟練掌握代碼,才能在工作中更加高效,為日後的發展空間提供一份保障。推薦學習掌握的代碼有SQL、MySQL資料庫、Python基礎和Python數據分析,這些都是數據分析師所需要的必備技能。
對於零基礎的人來說,看書和做筆記可以對數據分析方面的內容了解的更加透徹明白。推薦學習數據分析所需要的書籍有:Python核心編程,掌握編程最基本的技能;MySQL必知必會,學會SQL語句;利用Python進行數據分析,掌握使用Python來做數據分析;通過Python數據分析與挖掘實戰,可以學習如何將商業問題轉化為數學問題。
最後要學習和掌握的就是Excel的基本操作,包括增刪改排篩、各類常用函數的使用、各類基礎圖表的製作以及數據透視表等,因為做數據分析師需要經常和數據打交道,需要將數據做成更直觀更易觀察表達的圖表,因此,Excel的基本操作必不可少。
想要了解更多關於大數據分析師的問題可以咨詢一下CDA認證機構,CDA是大數據和人工智慧時代面向國際范圍全行業的數據分析專業人才職業簡稱。全球CDA持證者秉承著先進商業數據分析的新理念,遵循著《CDA職業道德和行為准則》新規范,發揮著自身數據專業能力,推動科技創新進步,助力經濟持續發展。
4. 軟體工程入門學些什麼
軟體工程基礎_軟體工程的基本概念-結構化分析方法.flv免費下載
鏈接:https://pan..com/s/1_Yx3QuHG9QGjW7skrl8opA
《軟體工程基礎》是2006年由中國電力出版社出版的圖書,作者是(意)蓋伊曼德若利。本書通過嚴格的形式化方法和非形式化方法闡述了軟體工程原則和方法的重要性,有選擇地介紹了軟體工程基礎;強調並確定了適用於整個軟體生命期的基本原則,全面而深入地介紹了這些基本原則在軟體設計、規范、驗證、軟體生產過程和管理活動中的運用。
5. 大數據時代 無處不在的演算法應用
大數據時代 無處不在的演算法應用
能不能講講演算法在工作中的運用?你個人學習演算法的過程是怎樣的?我對演算法還是有點怕。除此之外,你認為大學是應該多花時間學應用技術還是理論知識呢?
今天就來聊聊我自己學習演算法的過程,以及演算法在實際工作中的應用。
以前,我們認為大數據總是優於好演算法。也就是說,只要數據量足夠大,即使演算法沒有那麼好,也會產生好的結果。
前一陣子「極客時間」 App 發布了一條極客新聞:「演算法比數據更重要,AlphaGo Zero 完勝舊版。」新聞的內容是谷歌人工智慧團隊 DeepMind 發布了新版的 AlphaGo 計算機程序,名為 AlphaGo Zero。這款軟體能夠從空白狀態開始,不需要人類輸入任何命令,便可以迅速自學圍棋,並以 100 比 0 的戰績擊敗了上一代 AlphaGo。
AlphaGo Zero 最大的突破在於實現了「白板理論」。白板理論認為:嬰兒是一塊白板,可以通過後天學習和訓練來提高智力。AI 的先驅圖靈認為,只要能用機器製造一個類似於小孩的 AI,然後加以訓練,就能得到一個近似成人智力,甚至超越人類智力的 AI。
自學成才的 AlphaGo Zero 正是實現了這一理論。AlphaGo 的首席研究員大衛·席爾瓦(David Silver)認為,從 AlphaGo Zero 中可以發現,演算法比所謂的計算或數據量更為重要。事實上,AlphaGo Zero 使用的計算要比過去的版本少一個數量級,但是因為使用了更多原理和演算法,它的性能反而更加強大。
由此可見,在大數據時代,演算法的重要性日漸明晰。一個合格的程序員,必須掌握演算法。
我不知道大家是怎樣一步步開始精通演算法和數據結構的。大二時,我第一次接觸到了《數據結構》,因為從來沒有過這方面的思維訓練,當時的我學習這門課比較費力。那時候接觸到的編程比較少,所以並沒有很多實際經驗讓我欣賞和體味:一個好的數據結構和演算法設計到底 「美」 在哪裡。
開始學習的時候,我甚至有點死記硬背的感覺,我並不知道 「如果不這樣設計」,實際上會出現哪些問題。各種時間和空間復雜度對我而言,也僅僅是一些不能融入到實際問題的數學游戲。至於「每種最壞情況、平均情況的時間空間復雜度與各種排序」,這些內容為什麼那麼重要,當時我想,可能因為考試會考吧。
沒想到後來的時日,我又與演算法重新結緣。可能是因為萊斯大學給的獎學金太高了,所以每個研究生需要無償當五個學期的助教 。好巧不巧,我又被演算法老師兩次挑中當助教。所以,在命運強制下,一本《演算法導論》就這樣被我前前後後仔細學習了不下四遍。這樣的結果是,我基本做過整本書的習題,有些還不止做了一遍。我學習演算法的過程,就是反復閱讀《演算法導論》的過程。
那麼,學習演算法到底有什麼用處呢?
首先,演算法是面試的敲門磚國內的情況我不太清楚,但就矽谷的 IT 公司而言,不但電話面試偏演算法,現場面試至少有兩輪都是考演算法和編程的。
大一些老一些的公司,像谷歌、Facebook、領英、Dropbox 等,都是直接在白板上寫程序。小一些新一些的公司,如 Square、Airbnb 等,都是需要現場上機寫出可運行的程序。Twitter、Uber 等公司則是白板上機兼備,視情況而定。
雖說還有其它考系統設計等部分,但如果演算法沒有打好基礎,第一關就很難過,而且演算法要熟悉到能夠現場短時間內寫出正解,所以很多人准備面試前都需要刷題。
有一次我當面試官,電話面試另外一個人,當時是用 Codepad 共享的方式,讓對方寫一個可運行的正則表達式解析器。45 分鍾過去了,對方並沒有寫出來。我就例行公事地問:「你還有什麼問題想問或者想了解么?」 對方估計因為寫不出程序很有挫敗感,就反問:「你們平時工作難道就是天天寫正則表達式的解析器么?」
一瞬間,我竟無言以對。想了想,我回復說:「不用天天寫。那我再給你 15 分鍾,你證明給我看你還會什麼,或者有什麼理由讓我給你進一步面試的機會?」 對方想了一會,默默掛掉了電話。
老實說,我對目前面試中偏重演算法的程度是持保留意見的。演算法題答得好,並不能說明你有多牛。牛人也有因為不願刷題而馬失前蹄的時候。但是除了演算法測試,顯然也沒有更好的方法佐證候選人的實力;然而怎樣才能最優化面試流程,這也是個討論起來沒完的話題,並且每次討論必定無果而終。
其次,編程時用到的更多是演算法思想,而不是寫具體的演算法說到實際工作中真正需要使用演算法的機會,讓我想一想 —— 這個范圍應該在 10% 的附近遊走。
有些朋友在工作中遇到演算法場景多些,有的少些。更多的時候,是對業務邏輯的理解,對程序語言各種特性的熟練使用,對代碼風格和模式的把握,各種同步非同步的處理,包括代碼測試、系統部署是否正規化等等。需要設計甚至實現一個演算法的機會確實很少,即使用到,現學可能都來得及。
但是熟悉基本演算法的好處在於:如果工作需要讀的一段代碼中包含一些基本演算法思想,你會比不懂演算法的人理解代碼含義更快。讀到一段爛代碼,你知道為什麼爛,爛在哪,怎麼去優化。
當真的需要在程序中設計演算法的時候,熟悉演算法的你會給出一個更為完備的方案,對程序中出現的演算法或比較復雜的時間復雜度問題你會更有敏感性。熟悉演算法你還可以成為一個更優秀的面試官,可以和別的工程師聊天時候不被鄙視。
最後,不精通演算法的工程師永遠不是好工程師當然,除了演算法導論中那些已成為經典的基本演算法以及演算法思想(Divide-and-conquer,Dynamic programming)等,其實我們每天接觸到的各種技術中,演算法無處不在。
就拿人人都會接觸的存儲為例吧,各種不同的資料庫或者鍵值存儲的實現,就會涉及各種分片(Sharding)演算法、緩存失敗(Cache Invalidation)演算法、 鎖定(Locking)演算法,包括各種容錯演算法(多復制的同步演算法)。 雖然說平時不太會去寫這些演算法 —— 除非你恰恰是做資料庫實現的 —— 但是真正做到了解這項技術的演算法細節和實現細節,無論對於技術選型還是對自己程序的整體性能評估都是至關重要的。
舉個例子,當你在系統里需要一個鍵值存儲方案的時候,面對可供選擇的各種備選方案,到底應該選擇哪一種呢?
永遠沒有一種方案在所有方面都是最佳的。就拿 Facebook 開源的 RocksDB 來說吧。了解它歷史的人都知道,RocksDB 是構建在 LevelDB 之上的,可以在多 CPU 伺服器上高效運行的一種鍵值存儲。而 LevelDB 又是基於谷歌的 BigTable 資料庫系統概念設計的。
早在 2004 年,谷歌開始開發 BigTable,其代碼大量的依賴谷歌內部的代碼庫,雖然 BigTable 很牛,卻因此無法開源。2011 年,谷歌的傑夫·迪恩和桑傑·格瑪沃爾特開始基於 BigTable 的思想,重新開發一個開源的類似系統,並保證做到不用任何谷歌的代碼庫,於是就有了 LevelDB。這樣一個鍵值存儲的實現也用在了谷歌瀏覽器的 IndexedDB 中,對於谷歌瀏覽器的開源也提供了一定的支持。
我曾經在文章中提到過 CockroachDB,其實又可以看作是基於 RocksDB 之上的一個分布式實現。從另一個層面上講,CockroachDB 又可以說是 Spanner 的一個開源實現。知道這些,就知道這些資料庫或鍵值存儲其實都同出一系。再來看看 LevelDB 底層的 SSTable 演算法,就知道他們都是針對高吞吐量(high throughput),順序讀 / 寫工作負載(sequential read/write workloads)有效的存儲系統。
當然,一個系統里除了最基本的演算法,很多的實現細節和系統架構都會對性能及應用有很大的影響。然而,對演算法本身的理解和把握,永遠是深入了解系統不可或缺的一環。
類似的例子還有很多,比如日誌分析、打車軟體的調度演算法。
拿我比較熟悉的支付領域來說吧,比如信用卡 BIN 參數的壓縮,從服務端到移動 App 的數據傳輸,為了讓傳輸數據足夠小,需要對數據進行壓縮編碼。
每個國家,比如中國、韓國、墨西哥信用卡前綴格式都不一樣,如何盡量壓縮同時又不會太復雜,以至於影響移動 App 端的代碼復雜度,甚至形成 Bug 等,也需要對各種相關演算法有詳盡地了解,才有可能做出最優的方案。
關於演算法我們來總結一下:
在大數據時代,數據和演算法都同等重要,甚至演算法比計算能力或數據量更為重要。
如何學習演算法呢?讀經典著作、做題,然後在實踐中閱讀和使用演算法。
演算法是面試的敲門磚,可以幫助你得到一份自己喜歡的工作。
寫程序中用到的更多是演算法思想,不是寫具體的演算法。
不精通演算法的工程師永遠不會是一個優秀的工程師,只有對各種相關演算法有詳盡理解,才有可能做出最優的方案。