[TOC]
# 什么是hadoop
1. HADOOP是apache旗下的一套開源軟件平臺
2. HADOOP提供的功能:利用服務器集群,根據用戶的自定義業務邏輯,對海量數據進行分布式處理
3. HADOOP的核心組件有
A. HDFS(分布式文件系統)
B. YARN(運算資源調度系統)
C. MAPREDUCE(分布式運算編程框架)
4. 廣義上來說,HADOOP通常是指一個更廣泛的概念——HADOOP生態圈
# HADOOP產生背景
1. HADOOP最早起源于Nutch。Nutch的設計目標是構建一個大型的全網搜索引擎,包括網頁抓取、索引、查詢等功能,但隨著抓取網頁數量的增加,遇到了嚴重的可擴展性問題——如何解決數十億網頁的存儲和索引問題。
2. 2003年、2004年谷歌發表的兩篇論文為該問題提供了可行的解決方案。
分布式文件系統(GFS),可用于處理海量網頁的存儲
分布式計算框架MAPREDUCE,可用于處理海量網頁的索引計算問題。
3. Nutch的開發人員完成了相應的開源實現HDFS和MAPREDUCE,并從Nutch中剝離成為獨立項目HADOOP,到2008年1月,HADOOP成為Apache頂級項目,迎來了它的快速發展期。
# HADOOP在大數據,云計算中的位置和關系
1. 云計算是分布式計算、并行計算、網格計算、多核計算、網絡存儲、虛擬化、負載均衡等傳統計算機技術和互聯網技術融合發展的產物。借助IaaS(基礎設施即服務)、PaaS(平臺即服務)、SaaS(軟件即服務)等業務模式,把強大的計算能力提供給終端用戶。
2. 現階段,云計算的兩大底層支撐技術為“虛擬化”和“大數據技術”
3. 而HADOOP則是云計算的PaaS層的解決方案之一,并不等同于PaaS,更不等同于云計算本身。
# 國內外HADOOP應用案例介紹
1. HADOOP應用于數據服務基礎平臺建設

2. HADOOP用于用戶畫像

3. HADOOP用于網站點擊流日志數據挖掘
金融行業: 個人征信分析
證券行業: 投資模型分析
交通行業: 車輛、路況監控分析
電信行業:用戶上網行為分析
......
總之:hadoop并不會跟某種具體的行業或者某個具體的業務掛鉤,它只是一種用來做海量數據分析處理的工具

# HDFS模擬實現

# yarn模擬實現思路

# 三大組件
## 解決海量數據的存儲問題
分布式文件系統(HDFS)
1. 具有分布式的集群結構 我們把這樣實際存儲數據的節點叫做 datanode
2. 具有一個統一對外提供查詢 存儲 搜索 機器節點
對外跟客戶端統一打交道
對內跟實際存儲數據的節點打交道
3. 具有備份的機制 解決了機器掛掉時候數據丟失的問題
4. 具有統一的API 對客戶端來說不用操心你集群內部的事情 只要我調用你的API,
我就可以進行文件的讀取 存儲 甚至是搜索
甚至我們希望可以提供一個分布式文件系統的引用 fs= new FileSystem()
fs.add .copy .rm
## 解決分布式數據計算(處理)問題
分布式的編程模型 (MapReduce)
思想 分而治之:先局部 再總體
map(映射) reduce(聚合)
整天上作為一個編程模型:需要給用戶提供一個友好 便捷的使用規范
比如:你要繼承什么東西 配置什么 怎么去調用 怎么去執行
1. 繼承我們的一個mapper 實現自己的業務邏輯
2. 繼承我們的一個reduce 實現自己的業務邏輯
3. 最好可以提供可供用戶進行相關配置的類 或者配置文件
作為一個分布式計算框架 最好我們還提供一個程序的總管(MrAppmater) 用來管理這種分布式計算框架的內部問題:啟動 銜接 等等
## 解決了分布式系統的資源管理問題
分布式資源管理(yarn)
為了更好的管理我們集群的資源 最好設計成分布式的架構
1. 需要一個統一對外提供服務的節點(某一機器 或者機器上的一個進程 一個服務)
叫做資源管理者 ResourceManager
2. 需要在集群中的每臺機器上有一個角色 用來進行每臺機器資源的管理 匯報
叫做節點管理者 nodemanager
# HADOOP生態圈以及各組成部分的簡介

**各組件簡介**
重點組件:
* HDFS:分布式文件系統
* MAPREDUCE:分布式運算程序開發框架
* HIVE:基于大數據技術(文件系統+運算框架)的SQL數據倉庫工具
* HBASE:基于HADOOP的分布式海量數據庫
* ZOOKEEPER:分布式協調服務基礎組件
* Mahout:基于mapreduce/spark/flink等分布式運算框架的機器學習算法庫
* Oozie:工作流調度框架
* Sqoop:數據導入導出工具
* Flume:日志數據采集框架
# 項目架構

- linux
- 常用命令
- 高級文本命令
- 面試題
- redis
- String
- list
- hash
- set
- sortedSet
- 案例-推薦
- java高級特性
- 多線程
- 實現線程的三種方式
- 同步關鍵詞
- 讀寫鎖
- 鎖的相關概念
- 多線程的join
- 有三個線程T1 T2 T3,保證順序執行
- java五種線程池
- 守護線程與普通線程
- ThreadLocal
- BlockingQueue消息隊列
- JMS
- 反射
- volatile
- jvm
- IO
- nio
- netty
- netty簡介
- 案例一發送字符串
- 案例二發送對象
- 輕量級RPC開發
- 簡介
- spring(IOC/AOP)
- spring初始化順序
- 通過ApplicationContextAware加載Spring上下文
- InitializingBean的作用
- 結論
- 自定義注解
- zk在框架中的應用
- hadoop
- 簡介
- hadoop集群搭建
- hadoop單機安裝
- HDFS簡介
- hdfs基本操作
- hdfs環境搭建
- 常見問題匯總
- hdfs客戶端操作
- mapreduce工作機制
- 案列-單詞統計
- 局部聚合Combiner
- 案列-流量統計(分區,排序,比較)
- 案列-倒排索引
- 案例-共同好友
- 案列-join算法實現
- 案例-求topN(分組)
- 自定義inputFormat
- 自定義outputFormat
- 框架運算全流程
- mapreduce的優化方案
- HA機制
- Hive
- 安裝
- DDL操作
- 創建表
- 修改表
- DML操作
- Load
- insert
- select
- join操作
- 嚴格模式
- 數據類型
- shell參數
- 函數
- 內置運算符
- 內置函數
- 自定義函數
- Transform實現
- 特殊分割符處理
- 案例
- 級聯求和accumulate
- flume
- 簡介
- 安裝
- 常用的組件
- 攔截器
- 案例
- 采集目錄到HDFS
- 采集文件到HDFS
- 多個agent串聯
- 日志采集和匯總
- 自定義攔截器
- 高可用配置
- 使用注意
- sqoop
- 安裝
- 數據導入
- 導入數據到HDFS
- 導入關系表到HIVE
- 導入表數據子集
- 增量導入
- 數據導出
- 作業
- 原理
- azkaban
- 簡介
- 安裝
- 案例
- 簡介
- command類型單一job
- command類型多job工作流flow
- HDFS操作任務
- mapreduce任務
- hive腳本任務
- hbase
- 簡介
- 安裝
- 命令行
- 基本CURD
- 過濾器查詢
- 系統架構
- 物理存儲
- 尋址機制
- 讀寫過程
- Region管理
- master工作機制
- 建表高級屬性
- 與mapreduce結合
- 協處理器
- 點擊流平臺開發
- 簡介
- storm
- 簡介
- 安裝
- 集群啟動及任務過程分析
- 單詞統計
- 并行度
- ACK容錯機制
- ACK簡介