Hadoop 介紹與環境安裝
預備知識
- Linux: 《Linux私房菜》
- Java: 《Java就業教育訓練教程》
- Hadoop: 《Hadoop權威指南》
- 《實戰Hadoop》
- 《Hadoop實戰》
- 《Hadoop MapReduce Cookbook》
- 《Hadoop Real-World Solutions Cookbook》
Hadoop 是什麼
- 面向大資料處理
- 擅長離線資料分析
- 分布式檔案系統+計算架構
- Hadoop不是資料庫, Hbase 才是資料庫
- Hadoop 是一個快速進化的生态系統
知識路線圖
Hadoop
|-- 基礎課程
| |-- Java基礎
| |-- Linux基礎
| |-- 網絡基礎
| |-- 網絡開發
|-- NoSQL
| |-- 資料庫引擎開發
| |-- HBase 架構、管理與應用
| |-- MongoDB 架構、管理與應用
| |-- Neo4J 圖資料庫應用實踐
| |-- Redis 實戰
| |-- Nodejs + MongoDB 快速開發實戰
|-- MapReduce
| |-- Mahout資料挖掘實戰
| |-- Hive資料倉庫實戰
|-- Hadoop 方向
| |-- Hadoop 應用開發實戰
| |-- Mahout 機器學習平台
| |-- Hadoop 源代碼導讀
| |-- Hive 資料倉庫實戰
|-- Storm 實時資料分析平台
|-- Spark 反向
| |-- Spark 大資料平台
| |-- MLLIB 機器學習
|-- 虛拟化方向
| |-- Openstack雲系統
|--高性能計算
| |-- CUDA 從入門到精通
| |-- MPI 并行計算架構
|-- 大資料平台架構
|-- 搜尋引擎架構
|-- 高并發大資料架構
職位
- 運維
- Hadoop 程式員 (M-R, 源代碼)
- 架構師
- 資料倉庫工程師
課程目标
- 部署: Hadoop, Hbase, Hive, Pig, Mahout
- 資料內建: Sqoop, Chukwa, Flume 等工具與資料庫、應用工具內建
- 掌握HDFS原理和基本操作
- 掌握MapReduce 工作原理,使用M-R 算法解決實際場景
- 掌握YARN架構的原理及使用方法,知道怎樣寫YARN應用程式
- 編寫MapReduce 程式, 送出作業并對運作狀況進行監控
- 了解整個Hadoop 生态系統的各個子産品
- 初步閱讀源代碼的能力
典型實驗環境
- 3台virtual box
- 網絡配置為網橋模式
- JDK
- Hadoop: 2.x
Hadoop 架構
Namenode
- HDFS的守護程式
- 纨錄檔案是如何分割成資料塊的,以及這些資料塊被存儲到哪些節點上
- 對記憶體和I/O迚行集中管理
- 是個單點,収生故障将使叢集崩潰
Secondary Namenode
- 監控HDFS狀态的輔助背景程式
- 每個叢集都有一個
- 不NameNode進行通訊,定期儲存HDFS中繼資料快照
- 當NameNode故障可以作為備用NameNode使用
DataNode
- 每台從朋務器都運作一個
- 負責把HDFS資料塊讀寫到本地檔案系統
JobTracker
已棄用?
- 用于處理作業(使用者送出代碼)的背景程式
- 決定有哪些檔案參不處理,然後切割task幵配置設定節點
- 監控task,重吭失敗的task(于不同的節點)
- 每個叢集隻有唯一一個JobTracker, 位于Master節點
TaskTracker
已棄用?
- 位于slave節點上,不datanode結合 (代碼不資料一起的原則)
- 管理各自節點上的task(由 jobtracker配置設定)
- 每個節點隻有一個tasktracker,但一 個tasktracker可以吭劢多個JVM, 用于幵行執行map戒reduce仸務
- 與jobtracker互動
Master/Slave 節點
- Master:Namenode、Secondary Namenode、Jobtracker。浏覽器(用 于觀看 管理界面),其它Hadoop工具
- Slave:Tasktracker、Datanode
- Master丌是唯一的
應用場景與瓶頸
資料量過大時
- 入庫瓶頸
- 查詢瓶頸
- 實時和響應時間要求越來越高
- 模型越來越複雜,計算量指數上升
期待的解決方案
- 完美解決性能瓶頸
- 技能平穩過度,相容SQL
- 平台轉換成本
Hadoop 缺點
- 基于Java
- 難以駕馭
- 資料內建困難
分析手段
- 主流: java程式
- 輕量級腳本: Pig
- SQL過渡: Hive
- NoSQL: HBase
機器選型配置
标準: 普通、廉價、标準、工業化大規模生産
- Hadoop 自持多核CPU
- 16-32G 記憶體
- 大量廉價硬碟
- 網絡非常重要
- 不需要RAID
網絡拓撲結構
- 使用區域網路
- 支援機架感覺
作業系統
- Hadoop 基于Java
- 主流Linux
- JDK
三種運作模式
- 單機模式:安裝簡單,幾乎不用作任何配置,但僅限于調試用途
- 僞分布模式:在單節點上同時啟動namenode、datanode、jobtracker、tasktracker、secondary namenode等5個程序,模拟分布式運作的各個節點
- 完全分布式模式:正常的Hadoop叢集,由多個各司其職的節點構成
完全分布式模式安裝和配置
- 配置hosts檔案
- 建立Hadoop運作賬戶
- 配置ssh免密連入
- 下載下傳Hadoop安裝包
- 配置hadoop-env.sh
- yarn-env.sh
- 配置namenode, 修改site檔案
- 配置slaves檔案
- 向各節點複制hadoop
- 格式化namenode
- 啟動Hadoop
- jps檢驗背景程序是否啟動成功
搭建環境
- ubuntu 16.04 server
- hadoop-2.7.2
- jdk1.8.0_91
建虛拟機
基于 Virtaul Box 和 Ubuntu 16.04 server 建虛拟機 ubuntu00
網絡: 橋接網絡
使用者: ubuntu00
基于ubuntu00 複制得到ubuntu01, ubuntu02
3台虛拟機:
- ubuntu00
- ubuntu01
- ubuntu02
2. 配置hosts檔案
根據各虛拟機配置hosts
3. 配置ssh免密
生成各虛拟機秘鑰對,配置免密連接配接
JDK 安裝
下載下傳
jdk1.8.0_91
解壓至
/usr
Hadoop 安裝
下載下傳
hadoop-2.7.2
解壓至使用者目錄
Hadoop 配置 etc/hadoop/*
etc/hadoop/*
不存在的檔案複制對應的template 檔案
- hadoop-env.sh
- yarn-env.sh
- slaves
- core-site.xml
- hdfs-site.xml
- mapred-site.xml
- yarn-site.xml
hadoop-env.sh
// the java implementtation to use
export JAVA_HOME=/usr/jdk1.
export HADOOP_CLASSPATH=/home/ubuntu00/hadoop-./myclass
yarn-env.sh
// java parameters
export JAVA_HOME=/usr/jdk1.
slaves
ubuntu01
ubuntu02
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://ubuntu00:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/ubuntu00/hadoop-2.7.2/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>ubuntu00:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/ubuntu00/hadoop-2.7.2/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/ubuntu00/hadoop-2.7.2/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>ubuntu00:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>ubuntu00:19888</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce..shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>ubuntu00:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>ubuntu00:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>ubuntu00:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>ubuntu00:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>ubuntu00:8088</value>
</property>
</configuration>
向各節點複制 etc/hadoop/* 配置
啟動叢集及檢驗
master 節點上(ubuntu00)
- 格式化namenode:
bin/hdfs namenode -format
- 啟動Hadoop:
sbin/start-dfs.sh sbin/start-yarn.sh
- 檢驗背景程序:
jps
- mr檢視:
mr-jobhistory-daemon.sh start historyserver
- 檢視DataNode:
hdfs dfsadmin -report
測試MapReduce
單詞數計數
~$ mkdir input
$ cd input
$ echo "hello world" > test1.txt
$ echo "hello hadoop" > test2.txt
$ bin/hadoop fs -mkdir in
hadoop$ bin/hadoop fs -put ~/input in
$ bin/hadoop fs -ls in
hadoop/share/hadoop/mapreduce$ hadoop jar hadoop-mapreduce-examples-.jar wordcount in out
$ hadoop fs -cat out/part-r-
web
- Hadoop節點狀态http://ubuntu00:50070
Hadoop 備受關注的特性與版本演進
- Append: 支援檔案追加功能, 解決Hadoop 不能修改檔案
- RAID: 在保證資料可靠的前提下,通過引入校驗碼減少資料塊數目
- Symlink: 支援HDFS 檔案連結
- Security: Hadoop 安全性
- HDFS Federation 和YARN
Cloudera 釋出版
Cloudera 發行版, 簡稱CDH