UCBerkeley AMPlab所開源的類HadoopMapReduce的通用的并行計算架構
dfsSpark基于mapreduce算法實作的分布式計算,擁有HadoopMapReduce所具有的優點;但不同于MapReduce的是Job中間輸出和結果可以儲存在記憶體中,進而不再需要讀寫HDFS,是以Spark能更好地适用于資料挖掘與機器學習等需要疊代的map reduce的算法。
1、Spark的中間資料放到記憶體中,對于疊代運算效率更高
2、Spark比Hadoop更通用
3、Spark提供了統一的程式設計接口
4、容錯性– 在分布式資料集計算時通過checkpoint來實作容錯
5、可用性– Spark通過提供豐富的Scala, Java,Python API及互動式Shell來提高可用性
1、Spark Streaming:支援高吞吐量、支援容錯的實時流資料處理
2、Spark SQL, Data frames: 結構化資料查詢
3、MLLib:Spark 生态系統裡用來解決大資料機器學習問題的子產品
4、GraphX是建構于Spark上的圖計算模型
5、SparkR是一個R語言包,它提供了輕量級的方式使得可以在R語言中使用 Spark
DataFrame是一種以RDD為基礎的分布式資料集,類似于傳統資料庫中的二維表格。
DataFrame帶有schema元資訊,即DataFrame所表示的二維表資料集的每一列都帶有名稱和類型。這使得SparkSQL得以洞察更多的結構資訊,進而對藏于DataFrame背後的資料源以及作用于DataFrame之上的變換進行了針對性的優化,最終達到大幅提升運作時效率的目标。反觀RDD,由于無從得知所存資料元素的具體内部結構,Spark Core隻能在stage層面進行簡單、通用的流水線優化。
1、支援從KB到PB級的資料量
2、支援多種資料格式和多種存儲系統
3、通過Catalyst優化器進行先進的優化生成代碼
4、通過Spark無縫內建主流大資料工具與基礎設施
5、API支援Python、Java、Scala和R語言
Resilient Distributed Datasets,意為容錯的、并行的資料結構,可以讓使用者顯式地将資料存儲到磁盤和記憶體中,并能控制資料的分區。同時,RDD還提供了一組豐富的操作來操作這些資料。
它是在叢集節點上的不可變的、已分區的集合對象。
通過并行轉換的方式來建立如(map, filter, join, etc)。
失敗自動重建。
可以控制存儲級别(記憶體、磁盤等)來進行重用。
必須是可序列化的。
是靜态類型的。
Client:用戶端程序,負責送出作業到Master。
Master:Standalone模式中主要節點,負責接收Client送出的作業,管理Worker,并指令Worker啟動配置設定Driver的資源和啟動Executor的資源。
Worker:Standalone模式中slave節點上的守護程序,負責管理本節點的資源,定期向Master彙報心跳,接收Master的指令,啟動Driver和Executor。
Driver: 一個Spark作業運作時包括一個Driver程序,也是作業的主程序,負責作業的解析、生成Stage并排程Task到Executor上。包括DAGScheduler,TaskScheduler。
Executor:即真正執行作業的地方,一個叢集一般包含多個Executor,每個Executor接收Driver的指令Launch Task,一個Executor可以執行一到多個Task。
DAGScheduler: 實作将Spark作業分解成一到多個Stage,每個Stage根據RDD的Partition個數決定Task的個數,然後生成相應的Task set放到TaskScheduler中。
TaskScheduler:實作Task配置設定到Executor上執行。
Task:運作在Executor上的工作單元
Job:SparkContext送出的具體Action操作,常和Action對應
Stage:每個Job會被拆分很多組任務(task),每組任務被稱為Stage,也稱TaskSet
RDD:Resilient Distributed Datasets的簡稱,彈性分布式資料集,是Spark最核心的子產品和類
Transformation/Action:SparkAPI的兩種類型;Transformation傳回值還是一個RDD,Action傳回值不少一個RDD,而是一個Scala的集合;所有的Transformation都是采用的懶政策,如果隻是将Transformation送出是不會執行計算的,計算隻有在Action被送出時才會被觸發。
DataFrame: 帶有Schema資訊的RDD,主要是對結構化資料的高度抽象。
DataSet:結合了DataFrame和RDD兩者的優勢,既允許使用者很友善的操作領域對象,又具有SQL執行引擎的高效表現。
transformation和action
1,transformation是得到一個新的RDD,方式很多,比如從資料源生成一個新的RDD,從RDD生成一個新的RDD
2,action是得到一個值,或者一個結果(直接将RDD cache到記憶體中)
3,所有的transformation都是采用的懶政策,就是如果隻是将transformation送出是不會執行計算的,計算隻有在action被送出的時候才被觸發
transformation會生成新的RDD,而後者隻是将RDD上某項操作的結果傳回給程式,而不會生成新的RDD;無論執行了多少次transformation操作,RDD都不會真正執行運算(記錄lineage),隻有當action操作被執行時,運算才會觸發。
DSM(distributed shared memory)
RDD隻能通過粗粒度轉換來建立,而DSM則允許對每個記憶體位置上資料的讀和寫。在這種定義下,DSM不僅包括了傳統的共享記憶體系統,也包括了像提供了共享 DHT(distributed hash table) 的 Piccolo 以及分布式資料庫等。
1、高效的容錯機制
2、結點落後問題的緩和 (mitigate straggler) :
3、批量操作:
4、優雅降級 (degrade gracefully)
1、從共享的檔案系統擷取,(如:HDFS)
2、通過已存在的RDD轉換
3、将已存在scala集合(隻要是Seq對象)并行化 ,通過調用SparkContext的parallelize方法實作
4、改變現有RDD的之久性;RDD是懶散,短暫的。
a.源資料分割後的資料塊,源代碼中的splits變量
b.關于“血統”的資訊,源碼中的dependencies變量
c.一個計算函數(該RDD如何通過父RDD計算得到),源碼中的iterator(split)和compute函數
d.一些關于如何分塊和資料存放位置的元資訊,如源碼中的partitioner和preferredLocations0
窄依賴(narrowdependencies)和寬依賴(widedependencies)。
窄依賴是指父RDD的每個分區都隻被子RDD的一個分區所使用。相應的,那麼寬依賴就是指父RDD的分區被多個子RDD的分區所依賴。例如,map就是一種窄依賴,而join則會導緻寬依賴
依賴關系分類的特性:
第一,窄依賴可以在某個計算節點上直接通過計算父RDD的某塊資料計算得到子RDD對應的某塊資料;
第二,資料丢失時,對于窄依賴隻需要重新計算丢失的那一塊資料來恢複;
Spark Streaming相關知識點
1.Spark Streaming的基本原理
Spark Streaming的基本原理是将輸入資料流以時間片(秒級)為機關進行拆分,然後以類似批處理的方式處理每個時間片資料
優勢:
1、統一的開發接口
2、吞吐和容錯
3、多種開發範式混用,Streaming + SQL, Streaming +MLlib
4、利用Spark記憶體pipeline計算
劣勢:
微批處理模式,準實時

Storm結構:
DStream
1.将流式計算分解成一系列确定并且較小的批處理作業
2.将失敗或者執行較慢的任務在其它節點上并行執行
執行的最小單元為RDD的partition
3.較強的容錯能力
Flume是一個分布式的日志收集系統
,具有高可靠、高可用、事務管理、失敗重新開機等功能。資料處理速度快,完全可以用于生産環境。
Flume的核心是agent。
Agent是一個java程序,運作在日志收集端,通過agent接收日志,然後暫存起來,再發送到目的地。
Agent裡面包含3個核心元件:source、channel、sink。
Source元件是專用于收集日志的,可以處理各種類型各種格式的日志資料,包括avro、thrift、exec、jms、spoolingdirectory、netcat、sequencegenerator、syslog、http、legacy、自定義。source元件把資料收集來以後,臨時存放在channel中。
Channel元件是在agent中專用于臨時存儲資料的,可以存放在memory、jdbc、file、自定義。channel中的資料隻有在sink發送成功之後才會被删除。
Sink元件是用于把資料發送到目的地的元件,目的地包括hdfs、logger、avro、thrift、ipc、file、null、hbase、solr、自定義。
Apache Kafka是分布式釋出-訂閱消息系統。
它最初由LinkedIn公司開發,之後成為Apache項目的一部分。Kafka是一種快速、可擴充的、設計内在就是分布式的,分區的和可複制的送出日志服務。
Apache Kafka與傳統消息系統相比,有以下不同:
1、它被設計為一個分布式系統,易于向外擴充;
2、它同時為釋出和訂閱提供高吞吐量;
3、它支援多訂閱者,當失敗時能自動平衡消費者;
4、它将消息持久化到磁盤,是以可用于批量消費
搜尋引擎是指根據一定的政策、運用特定的計算機程式從網際網路上搜集資訊,在對資訊進行組織和處理後,為使用者提供檢索服務,将使用者檢索相關的資訊展示給使用者的系統。搜尋引擎包括全文索引、目錄索引、元搜尋引擎、垂直搜尋引擎、集合式搜尋引擎、門戶搜尋引擎與免費連結清單等。
Lucene一個高性能、可伸縮的資訊搜尋庫,即它不是一個完整的全文檢索引擎,而是一個全檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。
Elasticsearch一個高可擴充的開源的全文本搜尋和分析工具。
它允許你以近實時的方式快速存儲、搜尋、分析大容量的資料。Elasticsearch是一個基于ApacheLucene(TM)的開源搜尋引擎。無論在開源還是專有領域,Lucene可以被認為是迄今為止最先進、性能最好的、功能最全的搜尋引擎庫。
ElasticSearch 有4中方式來建構資料庫
最簡單的方法是使用indexAPI,将一個Document發送到特定的index,一般通過curltools實作。
第二第三種方法是通過bulkAPI和UDPbulkAPI。兩者的差別僅在于連接配接方式。
第四種方式是通過一個插件-river。river運作在ElasticSearch上,并且可以從外部資料庫導入資料到ES中。需要注意的是,資料建構僅在分片上進行,而不能在副本上進行。
ELK是一套常用的開源日志監控和分析系統
包括一個分布式索引與搜尋服務Elasticsearch,一個管理日志和事件的工具logstash,和一個資料可視化服務Kibana
logstash 負責日志的收集,處理和儲存
elasticsearch 負責日志檢索和分析
Kibana 負責日志的可視化
Hive是基于Hadoop的一個資料倉庫工具,可以将結構化的資料檔案映射為一張資料庫表,并提供類SQL查詢功能。本質是将HQL轉換為MapReduce程式
1、Hive的設計目标是使Hadoop上的資料操作與傳統SQL相結合,讓熟悉SQL程式設計開發人員能夠輕松向Hadoop平台遷移
2、Hive提供類似SQL的查詢語言HQL,HQL在底層被轉換為相應的MapReduce操作
3、Hive在HDFS上建構資料倉庫來存儲結構化的資料,這些資料一般來源與HDFS上的原始資料,使用Hive可以對這些資料執行查詢、分析等操作。
1、Hive資料庫2、内部表3、外部表4、分區5、桶6、Hive的視圖
Hive在建立内部表時,會将資料移動到資料倉庫指向的路徑,若建立外部表,僅記錄資料所在的路徑,不對資料位置做任何改變,在删除表的時候,内部表的中繼資料和資料會被一起删除,外部表隻會删除中繼資料,不删除資料。這樣來說,外部表要比内部表安全,資料組織液更加靈活,友善共享源資料。
1、Hive Shell
2、Thrift
3、JDBC
4、ODBC
1、将sql轉換成抽象文法樹
2、将抽象文法樹轉化成查詢塊
3、将查詢塊轉換成邏輯查詢計劃(操作符樹)
4、将邏輯計劃轉換成實體計劃(M\Rjobs)
1、并行計算
2、充分利用叢集的CPU計算資源、存儲資源
3、處理大規模資料集
4、使用SQL,學習成本低
1、海量資料處理
2、資料挖掘
3、資料分析
4、SQL是商務智能工具的通用語言,Hive有條件和這些BI産品進行內建
1、複雜的科學計算
2、不能做到互動式的實時查詢
1、資料存儲位置。Hive是建立在Hadoop之上的,所有的Hive的資料都是存儲在HDFS中的。而資料庫則可以将資料儲存在塊裝置或本地檔案系統中。
2、資料格式。Hive中沒有定義專門的資料格式,由使用者指定,需要指定三個屬性:列分隔符,行分隔符,以及讀取檔案資料的方法。資料庫中,存儲引擎定義了自己的資料格式。所有資料都會按照一定的組織存儲。
3、資料更新。Hive的内容是讀多寫少的,是以,不支援對資料的改寫和删除,資料都在加載的時候中确定好的。資料庫中的資料通常是需要經常進行修改。
4、執行延遲。Hive在查詢資料的時候,需要掃描整個表(或分區),是以延遲較高,隻有在處理大資料是才有優勢。資料庫在處理小資料是執行延遲較低。
5、索引。Hive沒有,資料庫有
6、執行。Hive是MapReduce,資料庫是Executor
7、可擴充性。Hive高,資料庫低
8、資料規模。Hive大,資料庫小
**原子性(是指不會被線程排程機制打斷的操作,這種操作一旦開始,就一直運作到結束,中間不會有任何contextswitch(切換到領一個線程)),一緻性,隔離性,持久性
Region- Region用于存放表中的行資料
Region Server
Master
Zookeeper
HDFS
API
Parquet 是面向分析型業務的列式存儲格式,由 Twitter 和 Cloudera 合
作開發, 2015 年 5 月從 Apache 的孵化器裡畢業成為 Apache 頂級項
目,最新的版本是 1.8.0 。
列式存儲和行式存儲相比的優勢 :
可以跳過不符合條件的資料,隻讀取需要的資料,降低 IO 資料量。
壓縮編碼可以降低磁盤存儲空間。由于同一列的資料類型是一樣
的,可以使用更高效的壓縮編碼(例如 Run Length Encoding 和 Delta
Encoding )進一步節約存儲空間。
隻讀取需要的列,支援向量運算,能夠擷取更好的掃描性能。
适用場景:
在網際網路大資料應用場景下,大部分情況下,資料量很大且資料字段
數目很多,但每次查詢資料隻針對其中的少數幾行,這時候列式存儲
Hive
Hive查詢語言-Hql
-建立資料庫
hive> CREATE DATABASE IF NOT EXISTS financials;
hive> SHOW DATABASES;
hive> DROP DATABASE IF EXISTS financials;
-檢視表
hive>show tables;
建立表
MLlib是
spark的可以擴充的機器學習庫,由以下部分組成:通用的學習算法和工具類,包括分類,回歸,聚類,協同過濾,降維
資料分析常見模式:
1、Iterative Algorithms,
2、Relational Queries,
3、MapReduce,
4、Stream Processing
Scala的好處:
1、面向對象和函數式程式設計理念加入到靜态類型語言中的混合體
2、Scala的相容性—-能夠與Java庫無縫的互動
3、Scala的簡潔性—-高效,更不容易犯錯
4、Scala的進階抽象
5、Scala是靜态類型—-類型推斷
6、Scala是可擴充的語言
1、Data Ingestion (資料攝取)
2、Data Discovery(資料發現)
3、Data analytics(資料分析)
4、Data Visualization & Collaboration(資料可視化和協同開發)
SPSS統計分析在大資料的應用測試題—答案
1. 大資料分析與挖掘方法論被稱為CRISP-DM方法是以資料為中心疊代循環進行的六步活動,它們分别是:商業了解、資料了解、資料準備、建立模型_、模型評估、結果部署_。
資料分析挖掘方法大緻包含 ( _A B C D E F ):
A. 分類 Classification
B. 估計Estimation
C. 預測Prediction
D. 關聯規則Association Rules
E. 聚類Cluster
F. 描述與可視化Description and Visualization
在資料分析與挖掘中對資料的通路性要求包括:互動性通路、批處理通路_、疊代計算、資料查詢,HADOOP僅僅支援了其中批處理通路,而Spark則支援所有4種方式。