1. 程式人生 > >大資料學習階段及內容簡單介紹(一)

大資料學習階段及內容簡單介紹(一)

大資料學習階段(一)

Java SE

為什麼要選擇java
 零基礎剛接觸大資料的學員都知道,學習大資料課程之前,都需要先熟悉掌握一種計算機程式語言。要知道大資料開發需要程式語言作為基礎,因為大資料的開發基於一些常用的高階語言。大資料中的很多框架都是建立在Java語言的基礎上的,可以說Java是大資料的核心基礎,Java語言作為面向物件,操作簡單。不論是hadoop還是資料探勘,都需要有高階程式語言的基礎。因此,如果想學習大資料開發,還是需要至少精通一門高階語言。
 Java可以編寫桌面應用程式,Java能夠更加容易上手,Java作為最早的程式語言仍然擁有極高的跨平臺能力。異常處理是Java中使得程式更穩健的另一個特徵。程式設計師可以找到出錯的處理程式碼,這就簡化了出錯處理和恢復的任務。最重要的是,Hadoop以及其他大資料處理技術很多都是用Java,因此學習Hadoop的一個首要條件,就是掌握Java語言程式設計。
 
為什麼只學JavaSE


 大資料只需要學習Java的標準版JavaSE就可以了,像Servlet、JSP、Tomcat、Struct、Spring、Hibernate,Mybaits都是JavaEE方向的技術在大資料技術裡用到的並不多,只需要瞭解就可以了,當然Java怎麼連線資料庫還是要知道的,像JDBC一定要掌握一下,有同學說Hibernate或Mybaits也能連線資料庫啊,為什麼不學習一下,我這裡不是說學這些不好,而是說學這些可能會用你很多時間,到最後工作中也不常用,我還沒看到誰做大資料處理用到這兩個東西的,當然你的精力很充足的話,可以學學Hibernate或Mybaits的原理,不要只學API,這樣可以增加你對Java操作資料庫的理解,因為這兩個技術的核心就是Java的反射加上JDBC的各種使用。

需要掌握什麼知識點
 java基礎語法、java面向物件(類、物件、封裝、繼承、多型、抽象類、介面、常見類、內部類、常見修飾符等)、異常、集合、檔案、IO、MYSQL(基本SQL語句操作、多表查詢、子查詢、儲存過程、事務、分散式事務)、JDBC、執行緒、反射、Socket程式設計、列舉、泛型、設計模式

Linux

為什麼要學習Linux
 Hadoop通常都是搭建在Linux作業系統之上,故在搭建Hadoop實驗環境之前,首先需要建立Linux系統環境。由於我們只是搭建Hadoop實驗環境,而不是生產環境,因此,為簡單起見,就採用虛擬機器VMware+Linux作業系統。因為大資料相關軟體都是在Linux上執行的,所以Linux要學習的紮實一些,學好Linux對你快速掌握大資料相關技術會有很大的幫助,能讓你更好的理解hadoop、hive、hbase、spark等大資料軟體的執行環境和網路環境配置,能少踩很多坑,學會shell就能看懂指令碼這樣能更容易理解和配置大資料叢集。還能讓你對以後新出的大資料技術學習起來更快。

需要掌握什麼知識點
 由於Linux與windows都是os(作業系統),所以要掌握怎麼在Linux系統上操作,就像你平時在windows上進行操作一樣,當然Linux也有介面模式,在這裡就不多講了。

X-shell
 其實X-shell的安裝的相關介紹也可併入上一小節,在網頁連結的視訊中也有相應的安裝及網路連線的介紹。特此獨立列出是為了強調其優勢,在平時或者實際工作中我們往往需要遠端連線伺服器進行操作,此時就需要一種遠端操作工具,X-shell無疑是很方便的。除此還可以選擇Putty這種工具。

Hadoop

Hadoop是什麼
在這裡插入圖片描述
 Hadoop是一個對海量資料進行處理的分散式系統架構,可以理解為Hadoop就是一個對大量的資料進行分析的工具,和其他元件搭配使用,來完成對大量資料的收集、儲存和計算。Hadoop框架最核心的設計就是:HDFS 和 MapReduce。HDFS為海量的資料提供了儲存;MapReduce為海量的資料提供了計算。
 Hadoop,Spark和Storm是目前最重要的三大分散式計算系統,Hadoop常用於離線的複雜的大資料處理,Spark常用於離線的快速的大資料處理,而Storm常用於線上的實時的大資料處理。

Haoop四大模組

  • MapReduce是一種並行程式設計模型,用於編寫普通硬體的設計,谷歌對大量資料的高效處理(多TB資料集)的分散式應用在大型叢集(數千個節點)以及可靠的容錯方式。MapReduce程式可在Apache的開源框架Hadoop上執行。
  • Hadoop分散式檔案系統(HDFS)是基於谷歌檔案系統(GFS),並提供了一個設計在普通硬體上執行的分散式檔案系統。它與現有的分散式檔案系統有許多相似之處。來自其他分散式檔案系統的差別是顯著。它高度容錯並設計成部署在低成本的硬體。提供了高吞吐量的應用資料訪問,並且適用於具有大資料集的應用程式。
  • Hadoop通用:這是Java庫和其他Hadoop元件所需的實用工具。
  • Hadoop YARN :這是作業排程和叢集資源管理的框架。

一套完整的Hadoop大資料生態系統
在這裡插入圖片描述

  • HDFS:Hadoop分散式檔案系統,專門儲存超大資料檔案,為整個Hadoop生態圈提供了基礎的儲存服務。
  • MapReduce:分散式離線計算框架,用來處理大量的已經儲存在本地的離線資料。
  • Storm:分散式實時計算,主要特點是實時性,用來處理實時產生的資料。
  • ZooKeeper:用於Hadoop的分散式協調服務。Hadoop的許多元件依賴於Zookeeper,它執行在計算機叢集上面,用於管理Hadoop操作。
  • HBase:是一個建立在HDFS之上,面向列的NoSQL資料庫,用於快速讀/寫大量資料。
  • Hive:基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表。
  • Sqoop:是一個連線工具,用於在關係資料庫、資料倉庫和Hadoop之間轉移資料。
  • Pig:它是MapReduce程式設計的複雜性的抽象。Pig平臺包括執行環境和用於分析Hadoop資料集的指令碼語言(Pig Latin)。

Zookeeper

什麼是Zookeeper
在這裡插入圖片描述
 在Zookeeper的官網上有這麼一句話:ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.
 這大概描述了Zookeeper主要可以幹哪些事情:配置管理,名字服務,提供分散式同步以及叢集管理。那這些服務又到底是什麼呢?我們為什麼需要這樣的服務?我們又為什麼要使用Zookeeper來實現呢,使用Zookeeper有什麼優勢?接下來我會挨個介紹這些到底是什麼,以及有哪些開源系統中使用了。
 簡單來說,zk個萬金油,安裝Hadoop的HA的時候就會用到它,以後的Hbase也會用到它。它一般用來存放一些相互協作的資訊,這些資訊比較小一般不會超過1M,都是使用它的軟體對它有依賴,對於我們個人來講只需要把它安裝正確,讓它正常的run起來就可以了。
想了解更多zookeeper內容,可以看連線https://www.cnblogs.com/jing99/p/6100188.html

Avro

首先來說說什麼是序列化和反序列化

  • 序列化也叫序列化:就是把存在於記憶體的物件資料轉化成可以儲存成硬碟檔案形式去儲存。
  • 反序列化也叫反序列化:就是把序列化後硬碟檔案載入到記憶體,重新變成物件資料,他們都是以位元組流的方式在網路上傳輸的。

個人來說,學習大資料目前接觸到四種序列化機制

  1. java序列化(ObjectOutputStream/ObjectInputStream)
  2. hadoop序列化
    實現hadoop序列化需要實現Writable介面並且實現介面的兩個方法read和write
  3. hadoop之父(Doug Cutting)寫的avro序列化
  4. 還有一種特別好用的序列化技術就是來自google的protobuf(下文有介紹)

為什麼選擇Avro
在這裡插入圖片描述
Avro是一個獨立於程式語言的資料序列化系統,他是hadoop之父(Doug Cutting)編寫,主要是解決Writable型別的不足:缺乏語言的可移植性。擁有一個可被多種語言(C,C++,C#,Java,PHO,Python和Ruby)處理的資料。Avro同時也更具有生命力,該語言將使得資料具有更長的生命週期,即使原先用於讀/寫該資料的語言已經不再使用。

想了解更多Avro內容,可以檢視連線https://blog.csdn.net/weixin_41122339/article/details/82468116

ProtoBuf

Protocol Buffers 是一種輕便高效的結構化資料儲存格式,可以用於結構化資料序列化,或者說序列化。它很適合做資料儲存或 RPC 資料交換格式。可用於通訊協議、資料儲存等領域的語言無關、平臺無關、可擴充套件的序列化結構資料格式。目前提供了 C++、Java、Python 三種語言的 API。

想了解更多ProtoBuf內容,可以檢視連線
https://www.ibm.com/developerworks/cn/linux/l-cn-gpb/index.html

Hive(資料倉庫)

為什麼要學習Hive
 這個東西對於會SQL語法的來說就是神器,它能讓你處理大資料變的很簡單,不會再費勁的編寫MapReduce程式。有的人說Pig那?它和Pig差不多掌握一個就可以了。
什麼是Hive
 1.hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表,並提供完整的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行。其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合資料倉庫的統計分析。
  2.Hive是建立在 Hadoop 上的資料倉庫基礎構架。它提供了一系列的工具,可以用來進行資料提取轉化載入(ETL),這是一種可以儲存、查詢和分析儲存在 Hadoop 中的大規模資料的機制。Hive 定義了簡單的類 SQL 查詢語言,稱為 HQL,它允許熟悉 SQL 的使用者查詢資料。同時,這個語言也允許熟悉 MapReduce 開發者的開發自定義的 mapper 和 reducer 來處理內建的 mapper 和 reducer 無法完成的複雜的分析工作。

Hive架構在這裡插入圖片描述

Hive與資料庫異同
  由於Hive採用了SQL的查詢語言HQL,因此很容易將Hive理解為資料庫。其實從結構上來看,Hive和資料庫除了擁有類似的查詢語言,再無類似之處。本文將從多個方面來闡述Hive和資料庫的差異。資料庫可以用在Online的應用中,但是Hive是為資料倉庫而設計的,清楚這一點,有助於從應用角度理解Hive的特性。(引用一個圖片) 在這裡插入圖片描述

Hbase

Hbase簡單介紹
HBase是一個分散式的、面向列的開源資料庫,該技術來源於 Fay Chang 所撰寫的Google論文“Bigtable:一個結構化資料的分散式儲存系統”。就像Bigtable利用了Google檔案系統(File System)所提供的分散式資料儲存一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。HBase是Apache的Hadoop專案的子專案。HBase不同於一般的關係資料庫,它是一個適合於非結構化資料儲存的資料庫(NoSql)。另一個不同的是HBase基於列的而不是基於行的模式。

Hbase原理
HBase利用Hadoop HDFS作為其檔案儲存系統,利用MapReduce來處理HBase中的海量資料,利用Zookeeper作為對應協調服務元件;HBase位於結構化儲存層,Hadoop HDFS為HBase提供了高可靠性的底層儲存支援,Hadoop MapReduce為HBase提供了高效能的計算能力,Zookeeper為HBase提供了穩定服務和failover(故障切換)機制。此外,Pig和Hive還為HBase提供了高層語言支援,使得在HBase上進行資料統計處理變的非常簡單。 Sqoop則為HBase提供了方便的RDBMS資料匯入功能,使得傳統資料庫資料向HBase中遷移變的非常方便。

Hbase與傳統資料庫區別
https://blog.csdn.net/hellozhxy/article/details/80464973

Flume

簡單瞭解Flume

  • Flume是一個分散式、可靠、和高可用的海量日誌聚合的系統,支援在系統中定製各類資料傳送方,用於收集資料;同時,Flume提供對資料進行簡單處理,並寫到各種資料接受方(可定製)的能力。
  • 一個獨立的Flume程序稱之為Agent,包含元件Source、Channel、Sink Source
  • Flume基礎架構:Flume 可以單節點和多節點採集資料。
    在這裡插入圖片描述
    更多Flume內容大家可以參考
    https://www.cnblogs.com/tychyg/p/4950814.html

Kafka

什麼是kafka
它是一個分散式的訊息佇列,訊息佇列:生產者、消費者的功能。它提供了類似於JMS 的特性,但是在設計實現上完全不同,此外它並不是JMS規範的實現。
在這裡插入圖片描述

更多Kafka介紹可以檢視
https://www.cnblogs.com/tychyg/p/4950846.html

Sqoop

探討Sqoop及原理
在這裡插入圖片描述
  sqoop是用於把Mysql裡的資料匯入到Hadoop裡的。當然你也可以不用這個,直接把Mysql資料表匯出成檔案再放到HDFS上也是一樣的,當然生產環境中使用要注意Mysql的壓力。
  將匯入或匯出命令翻譯成 MapReduce 程式來實現 在翻譯出的 MapReduce 中主要是對 InputFormat 和 OutputFormat 進行定製。