大數據簡介

FusionInsight大數據開發

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

技能需求python

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

大數據應用開發流程web

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

應用開發關鍵點算法

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

應用開發指南--調試shell

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

總結:數據庫

  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. 實時監控與管理集羣的工做流,快速定位問題
相關文章
相關標籤/搜索