1)hadoop 生態系統
hdfs:(Hadoop Distributed File System 分布式文件系統)
a) block: hdfs將一個大文件切割成多個小文件,在2.0版本中每個小文件的大小為128MB,這些小文件被稱作為塊(block)
b) namenode:namenode 是 HDFS 集群主節點,負責維護整個 hdfs 文件系統的目錄樹,以及每一個路徑(文 件)所對應的 block 塊信息(block 的 id,及所在的 datanode 服務器)
NameNode 對數據的管理采用了兩種存儲形式:內存和磁盤
首先是內存中存儲了一份完整的元數據,包括目錄樹結構,以及文件和 數據塊與副本存儲地 的映射關系;
1) 內存元數據 metadata : metadata (全部存在內存中)
2) 磁盤元數據鏡像文件 fsimage:fsimage_0000000000000000555
3) 數據歷史操作日志文件 edits:edits_0000000000000000001-0000000000000000018 (可通過日志運算出元數據,全部存在磁盤中)
4) 數據預寫操作日志文件 (正在編輯的日志文件)edits_inprogress_0000000000000000556
5) 集群的版本信息: VERSION 存放 hdfs 集群的版本信息
c) datanode:datanode 是 HDFS 集群從節點,每一個 block 都可以在多個 datanode 上存儲多個副本(副本 數量也可以通過參數設置 dfs.replication,默認是 3)
yarn:(Yet Another Resources Negotiator 運算資源調度系統)
mapReduce:(Map 和 Reduce 分布式運算編程框架)
mapTask:一個split(切片)對應一個mapTask,默認大小為128M,和一個block(塊)大小一致,所以一般是一個文件一個mapTask
reduceTask:有多少個reduce分區個數就有多少個reduceTask,就會生成多少個結果文件 通過setNumReduceTasks()來設置分區個數
默認一個分區
common:(基礎功能組件)(工具包,RPC 框架)JNDI 和 RPC
2)hbase:非關系型數據庫
3)hive:Hive 依賴於 HDFS 存儲數據,Hive 將 HQL 轉換成 MapReduce 執行 所以說 Hive 是基於 Hadoop 的一個數據倉庫工具,
實質就是一款基於 HDFS 的 MapReduce 計算框架,對存儲在 HDFS 中的數據進行分析和管理
4)Zookeeper:ZooKeeper 是一個分布式的,開放源碼的分布式應用程序協調服務,是 Google 的 Chubby 一個開源的實現。
它提供了簡單原始的功能,分布式應用可以基於它實現更高級的服務,比 如分布式同步,配置管理,集群管理,命名管理,隊列管理。
它被設計為易於編程,使用文 件系統目錄樹作為數據模型。服務端跑在 java 上,提供 java 和 C 的客戶端 API
5)Flume: Flume 是一個分布式、可靠、高可用的海量日志聚合系統,支持在系統中定制各類數據發送方,
用於收集數據,同時,Flume 提供對數據的簡單處理,並寫到各種數據接收方的能力。
6)kafka:Kafka 是一個分布式消息隊列,在流式計算中,Kafka 一般用來緩存數據(類似大壩,蓄水),Storm 通過消費 Kafka 的數據進行計算。
經典架構:Flume + Kafka + Storm + Redis
Kafka 是一個分布式消息隊列:具有生產者、消費者的功能。它提供了類似於 JMS 的特性,
但是在設計實現上完全不同,此外它並不是 JMS 規范的實現。
Kafka 對消息保存時根據 Topic 進行歸類,發送消息者稱為 Producer,消息接受者稱為 Consumer,
此外 Kafka 集群有多個 Kafka 實例組成,每個實例(server)成為 broker。
7)redis:Redis以內存作為數據存儲介質,所以讀寫數據的效率極高,遠遠超過數據庫
REmote DIctionary Server(Redis)是一個由 Salvatore Sanfilippo 寫的開源的、高性能的、使用
ANSI C 語言編寫、遵守 BSD 協議、支持網絡、可基於內存亦可持久化的日志型、key-value
存儲系統,並提供多種語言的 API。和 memcached 類似,Redis 常被稱作是一款 key-value 內
存存儲系統或者內存數據庫,同時由於它支持豐富的數據結構,又被稱為一種數據結構服務
器(Data Structure Server)。因為值(value)可以是字符串(String),哈希(Map),列表(list),
集合(sets)和有序集合(sorted sets)等類型。
8)sqoop:數據遷移工具
Sqoop 是 Apache 旗下一款“Hadoop 和關系數據庫服務器之間傳送數據”的工具。
導入數據:MySQL,Oracle 導入數據到 Hadoop 的 HDFS、HIVE、HBASE 等數據存儲系統
導出數據:從 Hadoop 的文件系統中導出數據到關系數據庫 MySQL 等
Sqoop 的本質還是一個命令行工具,和 HDFS,Hive 相比,並沒有什么高深的理論。
9)azkaban:工作流調度器
對市面上最流行的兩種調度器,給出以下詳細對比,以供技術選型參考。總體來說,ooize
相比 azkaban 是一個重量級的任務調度系統,功能全面,但配置使用也更復雜。如果可以不
在意某些功能的缺失,輕量級調度器 azkaban 是很不錯的候選對象。