天天看點

Hadoop 介紹與環境安裝Hadoop 介紹與環境安裝

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叢集,由多個各司其職的節點構成

完全分布式模式安裝和配置

  1. 配置hosts檔案
  2. 建立Hadoop運作賬戶
  3. 配置ssh免密連入
  4. 下載下傳Hadoop安裝包
  5. 配置hadoop-env.sh
  6. yarn-env.sh
  7. 配置namenode, 修改site檔案
  8. 配置slaves檔案
  9. 向各節點複制hadoop
  10. 格式化namenode
  11. 啟動Hadoop
  12. 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/*

不存在的檔案複制對應的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