0.前沿
PS:大數據的相關技術
框架:hadoop、spark
集群管理:Mapreduce、yarn、mesos
開發語言:java、Python、scala、pig、hive、spark SQL
數據庫:NoSQL、HBase、Cassandra、impala
搜索系統:Elastic Search
采集系統:flume、sqoop、kafka
流式處理:spark Streaming、storm
發行版:horton works、cloudera、MapR
管理系統:Ambari、大數據管理平台
機器學習:Spark MLlib 、Mahout
1.大數據時代
PS:大數據最后也是為人服務的,根據數據預測分析未來
PS:雲計算為計算資源的底層,支撐着上層的大數據處理
PS:大數據分析=數據+算法
2.大數據軟件架構
HDFS
PS:Hadoop框架是java編寫,核心是hdfs與MapReduce
PS:Secondary NameNode的作用
https://blog.csdn.net/remote_roamer/article/details/50675059
MapReduce
PS:看看MapReduce的處理示例
首先是切割數據,對指定數據進行鍵值對的操作,按照鍵值排序,reduce按所有的值統計

MapReduce進程示例
PS:jobTracker:是主節點,只有一個,管理所有的作業。老板
tasktracker:負責maptask、reducetask、shuffle等操作。 包工頭、包身工
sort會對鍵值進行排序,shuffle會把鍵值相同元素發給同一個reduce函數
PS:現在已經用MapReduce寫並行程序了,通常都是用spark等工具來寫
Yarn(另一種資源協調者)
PS:在早期,MapReduce是上圖的那種情況,用着還不錯。但是hadoop 2出來后,情況就改變了,傳統的架構模式無法勝任,就出現了yarn。最初是為了修復MapReduce的不足。 他把老的jobtracker核心任務分為 resource manager(全局資源管理)和app Master
PS:resource manager就是一個調度器
node manager是沒太機器的代理,執行應用程序的容器
app master是一個框架庫,從上面兩者協同運行與監控任務
cantainer是yarn為了資源隔離提出的一個框架
總之,yarn可以說是一個雲操作系統,她負責集群的資源管理。 Spark也是支持yarn 的
Zookeeper統一分布式系統的狀態
PS:Zookeeper是一個集中式的服務,主要負責分布式任務調度,它用來完成 配置管理,名字服務,分布式鎖以及集群管理等工作。
Ambari
PS:他是一種基於web的hadoop管理工具
Spark(內存計算框架) 實時
PS:Spark是類似於Hadoop的Mapreduce。不同在於1.輸出結果保存在內存中,(mapreduce->HDFS);2.速度快;3.spark對內存要求非常高,
一個節點通常要24g
PS:Hadoop使用數據復制來實現容錯性;Spark使用RDD(resilient distributed datasets,彈性分布式數據集)數據模型來實現數據的容錯性。
PS:特別支持scala編寫程序,特別適合機器學習。 下圖是spark的組件

PS:spark很牛逼。但是批處理能力還是不如MapReduce;
spark sql和hive sql還是有差距;
spark的統計功能和r語言沒有可比性
Scala
PS:Spark是用scala開發的。scala把源文件編譯成class文件,運行在jvm上,並且
兼容現有的java程序,可以調用java中的類庫。
PS:回頭可以看看《Scala編程思想》
Spark SQL
PS:考慮到大家還是習慣用sql訪問數據,設計人員給予HDFS現有的RDD執行SQL查詢;他的發展是基於hive和shark
Spark Streaming
PS:是基於Spark引擎對數據流進行不斷的處理。
PS:下圖為spark Streaming的案例。
flume采集日志數據,然后kafka集群(以高可靠性收集與緩沖數據),然后再從kafka集群中不斷的拉數據,最后解析日志。

3.安裝與配置大數據軟件
PS:Hadoop有很多的發行版,主要有三個。Apache、cloudera、還有hortonworks(我們用的就是這個cenos6.5)
PS:在給服務器安裝配置hadoop的時候,還要保持主機時間的同步,就需要NTP
4.大數據存儲:文件系統
HDFS文件格式
1.SequenceFile
PS:他是一種二進制文件,以key,value形式序列化到文件中。
2.TextFile(文本格式)
PS:文本文件、xml、json都是文本格式,速度沒有二進制的快
3.RCFile
PS:列存儲,hive就是這樣做的
4.Avro
PS:是一種支持數據密集型的二進制文件
5.大數據存儲:數據庫
NoSql
PS:not only SQL,泛指 非關系數據庫;Nosql之一的HBase比較在大數據領域比較常用。
HBase是非常好的實時查詢框架
PS:HBase使用key-value存儲,HDFS作為存儲支持,使用MapReduce提供計算能力。
PS:HBase與RDBMS的區別
https://www.cnblogs.com/wishyouhappy/p/3715566.html
PS:HBase架構
1.client、HMaster、HRegionServer通過內部的RPC通信協議進行通信。
2.HMaster主要負責Table和Region的管理工作,可以有多個
3.HRegionServer主要負責相應用戶io請求,向HDFS讀寫數據,是HBase中的核心模塊。HReginServer又是由多個Hregion對象組成
4.HRegion每個HRegion對應着Table中的一個Region。每個Hregion由多個HStore組成。
5.HStore:每個HStore對應着Table里的Column Family。他是存儲的核心,由兩部分組成,一個是MemStore,另一個是StoreFiles.
當有數據寫入的時候,會先到MemStore,當MemStore滿了以后會flush成一個StoreFiles(MemStore就是一個臨時存放點);當StoreFiles
達到一定的個數的時候會合並成一個。
6.Hlog是在數據在寫入MemStore的時候,同時也會在Hlog 中放置一份。當出現宕機的是時候,會從Hlog中取數據,保證數據不被丟失
PS:HBase編程
整個數據模型Schema->Table->Column Family->Column->RowKey-》TimeStamp->Value

6.大數據訪問:SQL引擎層
Phoenix
PS:因為HBase訪問比較麻煩,還是列式,有專用的訪問方法。那么Phoenix就出現了,他是一個中間層。專門用來JDBC API來創建查詢表,比較方便。
他會把JDBC API轉化成 HBase的scan和服務端的過濾器,執行后生成標准的JDBC結果返回。
就是讓開發任用SQL和JDBC訪問Hbase。
Hive 非實時、面向批處理
PS:因為Mapreduce寫起來比較麻煩,所以使用Hive運行類似SQL的語言來執行MapReduce程序。
PS:hive查詢有一定的延時性,通常用來靜態(離線)的數據分析和挖掘。
Hive架構圖 ;
1.JDBC是編程接口
2.驅動器對輸入進行編譯、優化和執行
3.MetaStore(元數據存儲)是一個獨立的RDBMS,默認是Derby。對於生產系統推薦使用mysql

PS:如果需要實時查詢可以將HBase和Hive結合在一起使用Tez
PS:Hive只用查詢、分析和聚集數據(無增刪改)
PS:通過hive可以將hdfs上的數據映射到數據庫中
Hive的數據類型
https://blog.csdn.net/xiaoqi0531/article/details/54667393
PS:支持高度定置化,滿足各種需求,不用借助外部方式就能夠完成自己工作。
Pig
PS:和Hive提供功能類似,簡單的對比
https://blog.csdn.net/dashujuedu/article/details/53538609
ElasticSearch(全文搜索引擎)
PS:是基於Lucene的實時的分布式搜索分析引擎
7.大數據采集和導入
任何完整的大數據平台,都是以下過程:
數據采集、數據存儲、數據管理、數據處理、數據展現
PS:通常都是采集網站中的日志,采集的工具使用Flume和kafka
Flume
PS:她將數據從產生、傳輸、處理並最終寫入目標路徑的過程抽象為數據流。
PS:事件是flume傳遞的一個數據單元

kafka(分布式消息隊列)
PS:用在不同系統之間傳遞數據
PS:Kafka架構---依賴於zookeeper
Broker:Kafka集群包含一個或者多個服務器,該服務器被稱為broker
Producer:在消息保存的時候,會對topic進行分類,發送消息的叫做producer,接受者叫consumer
Topic:集群中的消息都有一個類別,叫做topic;一個topic的消息保存在一個或者多個broker上面;消息是按照topic組織的,每個topic又分為多個partition(為了負載均衡)
Sqoop(SQL to Hadoop)
PS:他是數據庫導入導出工具,HDFS<->關系型數據庫;使用MapReduce實現的;通常用在linux環境中。
Storm實時計算
http://www.cnblogs.com/bee-home/p/8591302.html
splunk
PS:使用splunk可以搜集、索引和分析所用應用程序所生成的實時數據。
8.大數據管理平台
PS:
9.Spark技術
PS:Spark主要是替換Mapreduce計算模型而已; Spark應用程序,他建立在同一抽象的RDD之上
PS:主程序(叫做Driver)中的sparkcontext對象協調spark應用程序。sparkcontext對象首先連接到多種集群管 理器(如:yarn),
然后在集群點上獲得Executor。sparkcontext把 應用代碼發給executor,exe cutor負責應用程序的計算和數據存儲。
每個應用程序都有自己Executor.Executor為應用程序提供一個隔離的運行環境,以task 的形式執行任務。

PS:文本在被讀入的過程中,會被RDD分區,然后分發到集群中並行化操作。 RDD支持兩種類型的操作。
**action: 在數據集上運行計算后返回結果值
**transformations:轉換。從現有的RDD創建一個新的RDD
PS:RDD(彈性分布式數據集)
分區(partiion):一個RDD由多個分區partition組成
算子(compute):用於說明在RDD上執行何種計算,可以理解為函數。;算子是RDD中定義的函數,Spark在運行過程中通過算子對RDD進行創建、轉換和行動。
依賴(dependency):計算每個RDD對父RDD的依賴列表
PS:下面按照數據處理步驟描述各個算子
1.輸入:在spark程序運行中,數據從hdfs或parallelize方法輸入scala集合或者數據到spark創建RDD,數據進入spark空間。
2.運行:在spark輸入數據形成RDD后便可以通過變換算子,對數據進行操作並將RDD轉化為新的RDD,通過Action算子,觸發spark提交作業。如果數據需要復用,可以通過cache算子,
將數據緩存到內存。
3.輸出:程序運行結束后,數據會存儲到分布式存儲中(如saveASTextFile輸出到HDFS),或scala數據或集合中(collect輸出到scala集合,count返回scala int型數據)
PS:Spark SQL
PS:Spark Streaming
PS:GraphX圖計算模型
10.大數據分析
主要包含
1.數據挖掘算法 2.大數據預測性分析 3.可視化分析
PS: