大數據簡介


FusionInsight大數據開發

FusionInsight HD是一個大數據全棧商用平台,支持各種通用大數據應用場景。

技能需求

  • 扎實的編程基礎
  • Java/Scala/python/SQL/shell常見命令
  • 掌握FusionInsight
  • 熟悉業務開發

大數據應用開發流程

  • 業務分析和方案設計
  • 應用開發
  • 應用調試
  • 應用部署

應用開發關鍵點

  • 賬號
  • 安全認證
  • 場景約束

應用開發指南--調試

  • 常規手段
  • 協助資料
  • 保障團隊

總結:

  1. 認證是應用開發的關鍵點,要根據業務需求,申請合適賬號,完成安全認證。
  2. 華為FusionInsight易集成開發,提供了包括應用開發指南,樣例代碼和支持團隊等各類協助。

更新中......

HDFS應用開發

HDFS(Dadoop Distributed File System)

HDFS概述

  • 高容錯性
  • 高吞吐量
  • 大文件存儲

HDFS架構包含三部分

  1. Name Node
  2. DataNode
  3. Client

HDFS數據寫入流程

HDFS應用開發方式

  • HDFS Client

Java/shell/Web UI

  • Kerbors控制

HDFSJava應用開發

下載客戶端/獲取樣例工程/生產樣例工程/導入eclipse/編碼

Java開發流程

  • 初始化
  • 目錄操作
  • 文件讀取
  • 文件寫入/追加(
  1. 初始化FSDataOutputstream對象
  2. 使用FSDataOutputStream對象初始化BufferedOutputStream.
  3. 使用BufferedOutputStream.write寫入HDFS數據。
  4. 使用BufferedOutputStream.flush和FSDataOutputstream.hflush()將數據刷新到HDFS。
  5. 關閉數據流。)

應用開發規范

規范1:Java開發時,申請資源需要及時釋放。
規范2:HDFS不適用於存儲大量小文件。
規范3:HDFS中數據備份3份即可。
規范4:如果有多線程進行login的操作,當第一次登陸成功后,所有線程再次登陸時應該使用relogin的方式。

更新中......

HBase應用開發

HBase的定義

HBase是一個高可靠、高性能、面向列、可伸縮的分布式存儲系統。

  • 適合於存儲大表數據,可以達到實時級別。
  • 利用Hadoop HDFS 作為其文件存儲系統,提供實時的讀寫的數據庫系統。
  • 利用ZooKeeper作為協同服務。

HBase架構

HBase的適用場景

  • 海量數據
  • 高吞吐量
  • 需要在海量數據中實現高效的隨機讀取
  • 需要很好的性能伸縮能力
  • 能夠同時處理結構化和非結構化的數據
  • 不需要完全擁有傳統關系型數據庫所具備的ACID特性

HBase應用開發流程

  • 制定業務目標
  • 准備開發環境
  • 下載並導入樣例工程
  • 設計HBase表

設計原則:

查詢數據唯一

數據均勻分布

查詢性能優化

其他因素(region的提前划分,冷熱Family的使用)

  • 根據場景開發工程
  • 編譯並運行程序
  • 查看結果與調試程序

HBase表設計-總體原則

設計目標:提高吞吐量
設計原則:預分region,是region分布均勻,提高並發
實現方法:Rowkey范圍和分布已知,建議預分region

設計目標:提高寫入性能
設計原則:避免過多的熱點region
設計方法:根據應用場景,可以考慮將時間因素引入Rowkey

設計目標:提高查詢性能
設計原則:數據連續存儲,頻繁訪問的數據存儲一個地方,數據連續存儲,離散度,信息冗余。
實現方法:同時讀取的數據存放在同一行、cell,使用二級索引

HBase表設計-設計內容

設計內容通過不同維度,可分為:
Table設計(表粒度的設計)

  • 建表方法
  • 預分region
  • Family屬性
  • 系統並發能力、數據清洗能力

RowKey設計

  • 原則:需要同時訪問的數據,RowKey盡量連續
  • 訪問效率:分散寫,連續讀
  • 屬性內容:常用的查詢場景屬性
  • 屬性值順序:枚舉,訪問權重
  • 時間屬性:循環Key+TTL,周期建表
  • 二級索引
  • 折中法
  • 冗余法

Family設計

可枚舉數量少擴展性弱的屬性作為Family

Qualifier設計

 不可枚舉、數量多且擴展性強的屬性作為Qualifier

原則:同時訪問的數據存放到同一個Cell,列名盡量簡短

HBase常用接口

create()

put()

get()

getScanner(Scan scan)

、、、

創建Configuration實例以及Kerberos安全認證

HBaseConfiguration方法

創建表

create Table方法

寫入數據

put方法

讀取一行數據

get方法

讀取多行數據

scan方法

 更新中......

MapReduce  應用開發

要求:

  1.  MapReduce的基本定義及過程
  2. 搭建開發環境
  3. 代碼實例及運行程序
  4. MapReduce開發接口介紹

1. MapReduce的基本定義及過程
MapReduce是面向大數據並行處理的計算模型、框架和平台,其資源調度由Yarn完成,任務資源隱含了以下三層含義:

  • 1)MapReduce是 一個基於集群的高性能並行計算平台(cluster Infrastructure)。
  • 2)MapReduce是 一個並行計算與運行軟件框架(SoftWare Framework)
  • 3)MapReduce是 一個並行程序設計模型與方法(Programming Model & Methodology)

MapReduce特點:

  • 易於編程
  • 良好的擴展性
  • 高容錯性

MapReduce的過程:

  1. 把輸入的數據(Input) 拆分為多個鍵值對(key-value對)
  2. 每一個鍵值對分別調用Map進行並行處理
  3. 每一個Map會產生多個新的鍵值對
  4. 對Map階段產生的數據進行排序、組合
  5. 以鍵值對的形式輸出最終結果

2. 搭建開發環境

  1. 確認Yarn組件和MapReduce組件已經安裝。
  2. 客戶端安裝Eclipse和JDK程序。
  3. 客戶端機器的時間與FusInsight集群時間要保持一致,時間差要小於5分鍾。
  4. 在Yarn服務頁面下載MapReduce客戶端程序到客戶端機器中。
  • 1.下載客戶端
  • 2.獲取樣例工程
  • 3.生成樣例工程
  • 4.導入eclipse
  • 5.編碼

開發相關類的總結
1) InputFormat類

  • 將輸入的數據分割成split,並將split拆分為<key,value>作為map的輸入。

2) Mapper類

  • 實現map函數,根據輸入的<key,value>對產生中間結果。

3)Combiner類

  • 實現combiner函數,合並中間結果中具有相同key值的鍵值對。

4) Partitioner類
實現getPartitioner函數,在Shuffle過程按照key值將中間數據分成R份,每一份由一個Reduce負責

5) Reduce類

  • 實現reduce函數,將中間結果合並,得到最終的結果。

6)OutputFormat類

  • 該類負責輸出最終的結果,MapReduce使用OutputFormat類將數據輸出存入到文件中,每個Reduce將它的輸出直接寫到自己的文件中。


調式代碼

  • MapReduce開發調式采用的原理是Java的遠程調式機制

Hive應用開發

  1. 了解Hive的基本架構原理
  2.  掌握JDBC客戶端開發流程
  3. 了解ODBC客戶端的開發流程
  4. 了解python客戶端的開發流程
  5. 了解Hcatalog/webHcat開發接口
  6.  掌握Hive開發規則

1. 了解Hive的基本架構原理
守護進程:

  1. HiveServer(Thrift/Compiler)
  2. webHcat
  3. MetaStore

Hive的應用場景

  1. 數據挖掘
  2. 非實時分析
  3. 數據匯總
  4. 作為數據倉庫

2. 掌握JDBC客戶端開發流程
JDBC開發-參數初始化

  1. 設置ZooKeeper地址
  2. krb5文件路徑
  3. 設置JAAS配置
  4. 配置ZooKeeper Principal
  5. 執行登陸

JDBC開發-拼接URL

  1. JDBC前綴設置
  2. 服務發現模式
  3. 安全配置:qop.auth.principal
  4. 非安全配置

JDBC開發-執行SQL

  1. 加載驅動類
  2. 建立連接
  3. 執行SQL
  4. 關閉連接

JDBC開發-SQL實現

  1. 創建preparedStatement
  2. 執行statement
  3. 關閉statement

規則建議:
開發調式:在開發程序時,可通過使用Hive的客戶端Beeline先進行調試,檢驗語句與結果正確性,再部署基於JDBC等的應用程序。
獲取數據庫連接:Hive的數據庫URL再拼接時已經經過安全認證,所以Hive數據庫的用戶名和密碼為null或空 。


JDBC超時限制:Hive提供的JDBC實現的超時限制,默認是5分鍾。

執行HQL:再JAVA JDBC應用開發中,拼裝HQL語句,注意HQL語句不能以“;“結尾。

HQL語法規則之判空:判斷字段為空使用:”is null“,判斷不為空,即有值,使用:"is not null"

UDF的管理:建議由管理員創建永久UDF,避免每次使用時都去add jar,和重新定義UDF。

UDF的注解:Hive的UDF會有一些默認屬性。@UDFType(deterministic = false)

使用分區表:當數據量較大時,且經常需要按天統計時,建議使用分區表,按天存放數據。

動態分區表:為了避免插入動態分區數據過程中,產生過多的小文件,在執行插入時,在分區字段上加distribut by。

文件格式選擇:Hive支持多種存儲格式,比如TextFile,RCFile,ORC,Sequence,Parquet.

sorl應用開發

要求:

  1. 了解Solr應用開發適用場景
  2. 熟悉Solr應用開發流程
  3. 熟悉並使用Solr常用API
  4. 理解Collection設計基本原則
  5. 應用開發實踐

Solr簡介

  1. Solr是一個高性能,基於Lucene的全文檢索服務,也可以作為NoSQL數據庫使用。
  2. Solr對Lucene進行了擴展,提供了比Lucene更為豐富的查詢語句,同時實現了可配置、可擴展,並對查詢性能進行了優化,還提供了一個完善的功能管理界面。
  3. SolrCloud是從Solr 4.0 版本開始發出的具有開創意義的分布式索引和索引方案,基於Sorl和Zookeeper進行開發的。

Solr概念體系-總述
常見術語:

  • Config Set:Solr Core提供一組配置文件 ,
  • Core:即Solr Core ,
  • Shard:Collection的邏輯分片
  • Replice:Shard下的實際存儲索引的一個副本,與Core對應
  • Leader:贏得選舉的Shard Peplicas
  • Zookeeper:它在Solr Core是必須的,提供分布式鎖、處理Leader選舉、管理配置等功能

Solr的常用應用場景

  1. 待檢索數據類型復雜
  2. 檢索條件多樣化(如涉及字段太多),常規查詢無法滿足
  3. 讀取遠多於寫入數據

Solr應用開發流程-制定業務目標
業務數據規模及數據模型

  • 涉及Collection的Shard划分及Schema的定義

實時索引、查詢性能要求

  • 涉及Collection的Shard划分、索引存儲位置

查詢場景

  • 涉及Collection的Schema定義

Solr應用開發流程-初始化及安全認證

  1. 初始化並獲取配置
  2. 安全認證
  3. 獲取CloudSolrClient
  4. 調用Solr APL

Solr應用開發流程-設計Collection

  1. 根據業務數據的關系設計schema.xml
  2. 根據寫入和查詢場景設計uniqueKey字段
  3. 根據寫入和查詢性能要求設計solrconfig.xml
  4. 根據業務數據規模和Solr集群規模確定Shard數目
  5. 根據可靠性能要求設定Shard副本數

Collection設計-索引存儲位置
索引存儲在HDFS

缺點:

  1. 與存儲在本地磁盤相比,性能下降30%-50%
  2. 實時單節點寫入速度<=2MB/s
  3. 數據膨脹略高於存儲在本地

優點:

  1. Sorl設置Replica即可,利用HDFS副本機制保障數據可靠性
  2. 數據管理由HDFS完成,包括各節點數據balance、方便遷移

配置集Schema設計-Field
dynamicField

  • 動態的字段設置,用於后期自定義字段,”*“號通配符。

copyField

  • 將多個字段集中到一個字段

Kafka應用開發

  1. 了解Kafka應用開發適用場景
  2. 熟悉Kafka應用開發流程
  3. 熟悉並使用Kafka常用API
  4. 進行Kafka應用開發

Kafka的定義
Kafka是一個高吞吐、分布式、基於發布訂閱的消息系統
Kafka有如下幾個特點:

  1. 高吞吐量
  2. 消息持久化到磁盤
  3. 分布式系統易擴展
  4. 容錯性好

Kafka的適用場景

  1. 適用於離線和在線的消息消費
  2. 已對接組件
  3. Streaming、Spark、Flume

使用Kafka的好處

  • 解耦--使得消息生產、消費系統能夠獨立變更
  • 可靠--有效解決單點故障引發系統不可用問題
  • 易擴展--生產、消費系統擴展簡單
  • 可恢復--消息緩存下來,支持故障從故障點讀取
  • 異步通信--生產系統無需關心消費系統的消費時間

配置及開發准備--配置keytab文件到樣例工程

  1. 配置Keytab到工程
  2. 安全認證
  3. Topic訂閱
  4. 消費獲取
  5. 消費處理

Kafka常用接口

  • Kafka集群安全訪問端口默認為21007,非安全訪問端口默認為21005

Kafka Producer接口

  1.  向管理員申請目標Topic的生產者權限
  2.  根據業務需求,配置發送相關配置參數
  3.  調用新Producer API接口發送數據

Kafka Consumer接口

  1. 向管理員申請目標Topic的消費者權限
  2. 根據業務需求,配置消費者相關配置參數
  3. 調用新Consumer API接口進行消息消費

Spark應用開發

要求:

  1. 了解Spark基本原理
  2. 搭建Spark開發環境
  3. 開發Spark應用程序
  4. 調試運行Spark應用程序

YARN資源調度,可以和Hadoop集群無縫對接

Spark適用場景
大多數現有集群計算框架如MapReduce等基於從穩定存儲(文件系統)到穩定存儲的非循環數據流,數據重用都是基於磁盤的,執行效率比較低。
與傳統的MapReduce任務頻繁讀寫磁盤數據相比,基於內存計算的Spark則更適合應用在迭代計算,交互式分析等場景。

Spark應用運行流程--關鍵角色

  • Client:需求提出方,負責提交需求(應用)。
  • Driver:負責應用的業務邏輯和運行規划(DAG)。
  • ApplicationMaster:負責應用的資源管理,根據應用的需求,向資源管理部門(ResourceManager)申請資源。
  • ResourceManager:資源管理部門,負責整個集群的資源統一調度和分配
  • Executor:負責實際計算工作,一個應用會分拆給多個Executor來進行計算。

Spark核心概念--RDD
RDD(Resilient Distributed Datasets)即彈性分布式數據集,指的是一個只讀的,可分區的分布式數據集。這個數據集的全部或部分可以緩存在內存中,在多次計算間重用。
RDD的生成

  1. 從Hadoop文件系統(或與Hadoop兼容的其它存儲系統)輸入創建(如HDFS)
  2. 從集群創建(如sc.Parallelize)。
  3. 從夫RDD轉換得到新的RDD。

RDD的存儲和分區

  1. 用戶可以選擇不同的存儲級別存儲RDD以便重用(11種)
  2. 當前RDD默認存儲於內存,但當內存不足時,RDD會溢出到磁盤中。
  3. RDD在需要進行分區時會根據每條記錄Key進行分區,以此保證兩個數據集能高效進行Join操作。

RDD的優點

  1. RDD是只讀的,可提供更高的容錯能力
  2. RDD的不可變性,可以實現Hadoop MapReduce的推測式執行
  3. RDD的數據分區特性可以通過數據的本地性來提高性能。
  4. RDD都是可序列化的,在內存不足時可自動降級為磁盤存儲。

RDD的特點

  1. 在集群節點上時不可變的,是已分區的集合對象。
  2. 失敗后自動重連
  3. 可以控制存儲級別(內存、磁盤等)來進行重用。
  4. 必須是可序列化的
  5. 是靜態類型。

RDD的創建
Spark所有操作都圍繞彈性分布式數據集(RDD)進行,這是一個有容錯機制並可以被並行操作的元素集合,具有只讀,分區,容錯,高效,無需物化,可以緩存,RDD依賴等特征。
目前有兩種類型的基礎RDD:

  1. 並行集合:接受一個已經存在的Scala集合,然后進行並行計算
  2. Hadoop數據集:在一個文件的每條記錄上運行函數。

RDD的創建--並行集合
並行集合是通過調用SparkContext的parallelize方法,在一個已經存在的Scala集合(一個Seq對象)上創建的。
集合的對象將會被拷貝,創建出一個可以被並行操作的分布式數據集。

RDD依賴:寬依賴和窄依賴
RDD父子依賴關系

  • 窄依賴:(Narrow)指父RDD的每一個分區最多被一個子RDD的分區所用。
  • 寬依賴:(Wide)指子RDD的分區依賴於父RDD的所有分區,是Stage划分的依據。
  • RDD常用Transformation算子
  • RDD常用Action算子

Spark任務參數配置

  • Spark優先級是:配置文件<動態參數<代碼配置

相同的數據,只創建一個RDD

算法調優--RDD緩存

  • Spark可以使用persist和cache方法將任意RDD緩存到內存、磁盤文件系統中。

算法調優--避免使用Shuffle

  • Shuffle過程會有整個RDD數據的寫和讀的操作,成本非常高。

算法調優--使用廣播變量
外部變量:

  • 每個task都有一個變量副本。

廣播變量:

  • 每個Executor保留一份。

編寫代碼

  1. 登陸
  2. 創建連接
  3. 執行SQL
  4. 獲取結果

DataFrame介紹
DataFrame:已RDD為基礎,帶有Schema信息,類似傳統數據庫的二維表。


編寫代碼

  1. 登陸
  2. 注冊Table
  3. 執行SQL
  4. 過濾

SparkStreaming概述

SparkStreaming是Spark核心API的一個擴展,它對實時流式數據的處理具有可擴展性、高吞吐量、可容錯性等特點。

SparkStreaming原理

  1. SparkStreaming接收實時的輸入數據流,然后將這些數據切分為批數據供Spark引擎處理,Spark引擎將數據生成最終的結果數據。
  2. 使用DStream從Kafka和HDFS等源獲取連接的數據流。DStream是一系列連續的RDD組成。

SparkStreaming數據源

  1. 基本源:HDFS等文件系統、Socket連接等
  2. 高級源:Kafka等
  3. 自定義源: 需要實現用戶自定義receiver

可靠性(二次開發)

  1. Reliable Receiver
  2. 設置CheckPoint
  3. 確保Driver可以自動啟動
  4. 使用Write Ahead Log 功能

SparkStreaming代碼流程
常見業務代碼邏輯

  1. 創建StreamingContext
  2. 定義輸入源
  3. 准備應用計算邏輯
  4. 使用streamingContext.start()方法接受和處理數據。
  5. 使用streamingContext.stop()方法停止流計算。

窗口操作
SparkStreaming支持窗口計算,允許用戶在一個滑動窗口數據上應用transformation算子。
窗口在源DStream上滑動,合並和操作落入窗口RDDs,產生窗口化的DStream的RDDs。

Checkpoint
SparkStreaming可以checkpoint足夠的信息到容錯存儲系統中,以使系統崩潰后從故障中恢復。

  1. Metadata checkpoint:保存流計算的定義信息到HDFS中
  2. Data checkpoint:保存生成的RDD到HDFS中。

SparkStreaming性能調優

  • 設置合理的批處理時間(batch Duration)
  • 設置合理數據接收並行度
  1. 設置多個Receiver接受數據
  2. 設置合理的Receiver阻塞時間
  • 設置合理數據處理並行度
  • 使用Kryo系列化
  • 內存調優
  1. 設置持久化級別減少GC開銷
  2. 使用並發的標記-清理GC算法減少GC暫停時間

Redis應用開發

要求:

  1. 了解Redis應用場景
  2. 掌握Redis二次開發環境搭建
  3. 掌握Redis業務開發

Redis簡介

  • Redis是一個基於網絡的,高性能key-value內存數據庫
  • Redis根memcached類似,不過數據可持久化,而且支持的數據類型很豐富。支持在服務端計算集合的並、交和補集等,還支持多種排序功能。

Redis使用場景有如下幾個特點:

  1. 高性能
  2. 低延遲
  3. 豐富數據結構存取
  4. 支持持久化

Redis應用場景介紹
Redis提供了靈活多變的數據結構和數據操作,主要應用於如下場景:

  1. 取最新N個數據的操作,比如典型的取某網站的最新文章。
  2. 排行榜應用,取TOP N操作。
  3. 需要精准設定過期時間的應用。
  4. 計數器應用,比如記錄用戶訪問網站的次數。
  5. 構建隊列系統
  6. 緩存,如緩存關系數據庫中的頻繁訪問的表數據。

架構回顧

  1. 無中心自組織的結構,節點之間使用Gossip協議來交換節點狀態信息。
  2. 個節點維護Key->Server的映射關系。
  3. Client可以向任意節點發起請求,節點不會轉發請求,只是重定向Client
  4. 如果在Client第一次請求之間,Cluster拓撲發生改變,則第二次重定向請求將被再次重定向,直到找到正確的Server為止。

Redis應用開發
設計Redis數據結構

  1. 取最新N個數據的操作:list
  2. 排行榜應用,取TOP N操作。以某個條件為權重,比如按頂的次數排行:sorted set。
  3. 利INCR,DECR命令來構建計數器系統。、
  4. Uniq操作,獲取某段時間所有數據排重值:set。
  5. 使用list可以構建隊列系統

Redis應用開發
根據場景開發工程

  1. 梳理業務場景流
  2. 設計各模塊接口
  3. 如果使用的是安全集群,需要進行安全認證
  4. 熟悉Redis提供的相應API
  5. 調用業務需要的API實現各功能

數據結構設計

  • 計算過程中使用的用戶信息使用hash結構存取,KEY設計為userinfo-<user id>,
  • field為用戶的屬性。

數據讀寫原則

  • MR任務每天定時將用戶信息從后端存儲源(HBase)批量導入Redis中。
  • 業務系統獲取數據時,先從Redis中獲取,獲取不到再取后端HBase獲取即實時計算,並同步寫入到Redis。

樣例說明-String類型操作

  1. set:將字符串值value關聯到key
  2. get:返回key所關聯的字符串值,
  3. setex:將字符串值value關聯到key,並設置key的生存時間
  4. append:將value追加到key原值的末尾,類似Java String類型的“+”操作。

樣例說明-List類型操作

  1. Ipush/rpush:往列表頭/尾添加一個元素。
  2. Irange:返回列表中start至end之間的元素
  3. llen:返回列表的長度
  4. lpop/rpop:從列表頭/尾獲取一個元素,並將其中列表中刪除。

樣例說明-Hash類型操作

  • hset
  • hget
  • hgettall
  • hmset
  • hincrby
  • hkeys
  • hvals
  • hmget
  • hexists
  • hdel

Streaming應用開發

  1. 掌握Streaming基本業務開發流
  2. 熟悉Streaming常用API接口使用
  3. 掌握Streaming業務設計基本原則
  4. 了解Streaming應用開發環境
  5. 了解CQL開發流及使用

Streaming的定義

Streaming基於開源Storm,是一個分布式、實時計算框架。Streaming在開源Storm的基礎上增加了持續查詢語言CQL、增強了安全性和可靠性。

  • 事件驅動
  • 連續查詢
  • 數據不存儲、先計算
  • 實時響應,低延遲

CQL(Continuous Query Language),持續查詢語言,是一種用於實時數據流上的查詢語言。
它是一種SQL-like的語言,目前主要適配Storm。
相對於SQL,CQL中增加了(時序)窗口的概念,將待處理的數據保存在內存中,進行快速的內存計算,CQL的輸出結果為數據流在某一時刻的計算結果。

Streaming的適用場景
Streaming主要應用於以下幾種對響應時延有嚴重要求的場景:

  1. 實時分析:如實時日志處理,交通流分析等
  2. 實時統計:如網站的實時訪問統計、排序等
  3. 實時推薦:如實時廣告定位、事件營銷等

提交拓撲
當前Streaming支持三種方式提交拓撲

  1. Linux命令行提交-CMD模式
  2. Eclipse遠程提交-Remote模式
  3. 本地模式提交-Local模式

Spout設計

  1. 數據接受
  2. 數據反序列化
  3. 數據拆分
  4. 數據篩選
  5. 數據緩存
  6. 數據發送

counting Bolt設計
功能:

  1. 窗口定義
  2. 刷新窗口
  3. 發送數據

Storm提供接口
1 REST接口

  • REST(Representational State Tansfer)表述性狀態轉移接口。

2 Thrift接口

  • 由Numbus提供。Thrift是一個基於靜態代碼生成的跨語言的RPC協議棧實現。

Spout接口

  1. Spout的Ack開關

Bolt接口

  1. Bolt的Ack開關
  • 創建輸入流
  • Join
  • 窗口
  • Split

Flume應用開發

要求:

  1. 了解Flume應用開發適用場景
  2. 掌握Flume應用開發

Flume應用場景
Flume的核心是把數據從數據源收集過來,在送到目的地。為了保證輸送一定成功,發送到目的地之前,會先緩存數據,待數據真正的到達目的地后,刪除自己緩存的數據。
Flume采用流式方法采集和傳輸數據,程序配置好后,不需要外部條件觸發下,一直監控數據源,源源不斷地采集、傳送數據到目的地。

主要應用於一下幾種場景:

  1. 將分布式節點上大量數據實時采集、匯總和轉移
  2. 將集群內、外地本地文件、實時數據流采集到FusionInsight集群內的HDFS、HBase,Kafka,Solr中。
  3. 將Avro、System,http,Thrift,JMS、Log4j協議發送過來地數據采集到FusionInsight集群內

Flume基本概念

  1. Source:數據源,即是產生日志信息地源頭,Flume會將原始數據建模抽象成自己處理地數據對象:event
  2. Channel:通道,主要作用是臨時緩存Source發過來地數據
  3. Sink:主要是從channel中取出數據並將數據放到不同地目的地
  4. event:一個數據單元,帶有一個可選地消息頭,Flume傳輸地數據地基本單位是event,如果是文本文件,通常是一行記錄。event從Source,流向Channel,再到Sink,Sink將數據寫入目的地

方案設計:
1)首先確定數據源:集群外
2)數據最終流向:KafKa(集群內)

Oozie應用開發

要求:

  1. 了解Oozie應用開發適用場景
  2. 掌握Oozie應用開發
  3. 熟悉並使用Oozie常用API

Oozie簡介

  1. Oozie是一個Hadoop作業的工作流調度管理系統
  2. Oozie工作流(workflow)是放置在控制依賴DAG(有向無環圖)中的一組動作(Action)集合,控制依賴可確保后續操作在見面的操作已經成功完成后才會啟動。
  3. Oozie的協調作業(Coordinator)是通過時間(頻率)和有效數據來觸發當前的Oozie工作流。
  4. Oozie支持多種Hadoop作業(包括:HDFS,Map Reduce、Hive、Streaming MP、Loader、Spark、Distcp)以及系統類作業(Java和shell)

Oozie應用場景
Oozie是一個工作流調度引擎,對各種類型的Hadoop作業進行編排與調度。

  1. 編排與管理邏輯復雜的多種類型的Hadoop
  2. 基於時間(頻率)觸發工作流
  3. 基於數據有效性觸發工作流
  4. 實時監控與管理集群的工作流,快速定位問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM