hadoop初體驗

今日課程內容大綱
    01) hadoop的簡介
    02) hadoop集羣的搭建
        發行版本
        集羣規劃
        hadoop源碼編譯(瞭解)
        hadoop集羣搭建
    03) hadoop集羣啓動與初體驗
    04) MapReduce的歷史記錄
    05) HDFS的垃圾桶機制
01--Apache Hadoop--介紹和發展歷程
    01) hadoop的介紹
        00) hadoop1.x和hadoop2.x的區別:  yarn(資源管理)  解決了單點故障問題   提升資源的利用率
        01) 狹義解釋:特指Apache的一款java語言開發的開源軟件,由一下三部分組成:
            HDFS: 解決海量數據存儲的hadoop分佈式文件系統
            MapReduce: 解決海量數據分佈式計算問題
            YARN: 解決分佈式架構中資源管理和任務調度
        02) 廣義解釋:整個基於hadoop的生態系統,包括大數據處理流程中的各個階段的軟件
            hive hbase zookeeper oozie sqoop flume impala storm spark flink kylin......
    02) hadoop發展歷史
        01) hadoop的創始人doug cutting   lucene(海量數據搜索) -----> nutch (海量數據抓取)-----> 海量數據存儲和海量數據計算問題?
            參考: https://www.linkedin.com/in/cutting
        02) 2003年Google發表第一篇論文: GFS(Google分佈式文件系統) 解決海量數據存儲
        03) 2004年Google發表第二篇論文: Google的MapReduce 解決海量數據計算
        04) 同一時期,doug cutting 基於Google的兩篇論文開發出: HDFS(hadoop的分佈式文件系統)  MapReduce(基於hadoop的分佈式計算平臺),成爲Apache頂級項目
        05) 2006年Google發表第三篇論文: BigTable ,開源界根據論文開發了HBase(基於hadoop平臺的分佈式數據庫)
            參考:資料中Google三篇論文
    03) hadoop的特性
        01) 擴容能力
        02) 成本低
        03) 高效率
        04) 高可靠
02--Apache Hadoop--應用
    01) hadoop精準區分: 作什麼(業務)   怎麼作(技術)
    02) hadoop提供了大數據存儲能力 分佈式計算能力  不和具體的行業掛鉤  有大量數據的行業都在用hadoop
    03) 行業應用:
        廣告系統,基於用戶行爲分析的推薦系統,我的徵信分析,股票量化交易,智慧交通,智慧城市等等應用

03--Apache Hadoop--集羣部署安裝--發行版本介紹
    01) hadoop社區版: Apache官方維護的版本
        01) 優勢: 功能最新 免費
        02) 缺點: 穩定性差 兼容性差
        03) 下載地址:
            官網下載頁面:https://hadoop.apache.org/releases.html
            軟件下載頁面:https://archive.apache.org/dist/hadoop/common/
            hadoop2.6.0軟件下載地址:https://archive.apache.org/dist/hadoop/common/hadoop-2.6.0/
    02) hadoop商業版: 一些商業公司在社區版的基礎上進行商業開發, 保持架構 api 配置文件等不變,僅僅解決bug及軟件兼容性問題
        01) 優勢: 穩定性好 軟件兼容性好
        02) 缺點: 收費 暫時不能使用最新的hadoop版本
        03) 下載地址:http://archive.cloudera.com/cdh5/cdh/5/        搜索引擎搜索: cdh archive
            官網下載頁面:http://archive.cloudera.com/cdh5/cdh/5/    搜索hadoop-2.6.0-cdh5.14.0.tar.gz
    03) hadoop自身版本的發展
        01) 歷經1.x 2.x 3.x
        02) 1.x退出歷史舞臺, 企業主流版本2.5-2.8的版本(穩定性軟件兼容性最好), 3.x使用很少(軟件間的兼容性還未升級完畢)
04--Apache Hadoop--集羣部署安裝--集羣角色介紹&部署模式
    01) 兩個集羣: HDFS集羣和yarn集羣   邏輯上分離,物理上在一塊兒
        01) HDFS集羣(主從架構):
            主角色: NameNode(nn)
            從角色: DataNode(dn)
            主角色的輔助角色(祕書角色): secondaryNameNode(snn)
        02) yarn集羣(主從架構):
            主角色: ResourceManager(rm)
            從角色: NodeManager(nm)
        03) MapReduce是須要開發的程序組件:
            Map組件:
            Reduce組件:
    02) 部署模式:
        01) standalone(單機)模式:
            一臺機器,沒有HDFS, 只能測試MapReduce程序(一個進程),處理本地linux系統的文件
        02) 僞集羣模式:
            一臺機器上模擬一個分佈式環境,具有hadoop的主要功能,用於學習調試
        03) 分佈式集羣模式:
            hadoop集羣的多個進程運行在多臺服務器上,用於生產環境
        04) 高可用(HA high availability)集羣模式:
            主要解決單點故障 保證集羣的高可用,提升可靠性
        咱們今天的部署模式:  分佈式集羣模式
05--Apache Hadoop--集羣部署安裝--服務器環境準備
    01) 準備三臺服務器
        1   vmware虛擬機
        2   靜態ip
        3   主機名稱
        4   ip與主機映射
        5   關閉防火牆: iptables 和 selinux
        6   ssh免密登陸
        7   時間同步
        8   jdk環境 配置JAVA_HOME環境變量
06--Apache Hadoop--集羣部署安裝--瞭解源碼編譯的含義
    01) 爲何要編譯hadoop的源碼?
        01) Hadoop是使用Java語言開發的,可是有一些需求和操做並不適合使用java,因此就引入了本地庫(Native Libraries) 的概念.
            說白了,就是Hadoop的某些功能,必須經過JNT來協調Java類文件和Native代碼生成的庫文件一塊兒才能工做.


        02) linux系統要運行Native 代碼,首先要將Native 編譯成目標CPU 架構的[.so]文件.
            而不一樣的處理器架構,須要編譯出相應平臺的動態庫[.so] 文件,
            才能被正確的執行,因此最好從新編譯一次hadoop源碼,讓[.so]文件與本身處理器相對應.
                注意: windows平臺是動態庫[.dll]文件

        總結: 主要是要從新編譯本地庫(Native Libraries) 代碼(Linux下對應[.so]文件,window下對應[.dlI]文件),也就是編譯生成linux下的[.so] 文件。
        固然若是本身修改了源碼,也須要本身從新編譯
    02) 編譯環境準備
        01) 立刻回來進行
            01) 安裝jdk1.7
            02) 安裝maven
            03) 參考詳細筆記

07--Apache Hadoop--集羣部署安裝--集羣規劃
    01) 集羣規劃: 在咱們準備的三臺服務器上如何搭建hadoop集羣
        原則:
            優先知足軟件須要的硬件資源
            儘可能避免有衝突的軟件不要在一塊兒
            有依賴的軟件儘可能部署在一塊兒

    02) 規劃安排:
        hadoop01: NameNode  DataNode                    | ResourceManager  NodeManager
        hadoop02:           DataNode  SecondaryNameNode | NodeManager
        hadoop03:           DataNode                    | NodeManager

    03) 將來擴展:
        hadoop04: DataNode  NodeManager
        hadoop05: DataNode  NodeManager
        hadoop06: DataNode  NodeManager
        ......
08--Apache Hadoop--集羣部署安裝--安裝包目錄結構
    01) 上傳編譯好的安裝包到/export/software
        rz  hadoop-2.6.0-cdh5.14.0-with-centos6.9.tar.gz
    02) 解壓安裝包到/export/servers
        tar -zxvf hadoop-2.6.0-cdh5.14.0-with-centos6.9.tar.gz -C /export/servers/
    03) hadoop的目錄結構
        bin: Hadoop最基本的管理腳本和使用腳本的目錄,這些腳本是sbin目錄下管理腳本的基礎實現
        etc: hadoop配置文件目錄
        include:對外提供的編程庫頭文件(具體動態庫和靜態庫在lib目錄中)
        lib: 該目錄包含了Hadoop對外提供的編程動態庫和靜態庫,與include目錄中的頭文件結合使用
        libexec: 各個服務對用到的shell配置文件所在的目錄,可用於配置日誌輸出、啓動參數(好比JVM參數)等基本信息。
        sbin: hadoop集羣啓動關閉的腳本(單節點逐個啓動  一鍵啓動)
        share: Hadoop各個模塊編譯後的jar包所在的目錄  官方案例jar包
09--Apache Hadoop--集羣部署安裝--配置文件詳解--上
    01) hadoop-env.sh
        vim /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/hadoop-env.sh
        export JAVA_HOME=/export/servers/jdk1.8.0_144
    02) xml配置文件(hdfs mapreduce yarn  common四個模塊的配置)
        參考配置: http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.14.0/
        01) core-site.xml
            <!-- 指定hadoop所使用的文件系統schema(URI),HDFS的老大(NameNode)的地址 -->
            <property>
                <name>fs.defaultFS</name>
                <value>hdfs://hadoop01:8020</value>
            </property>
            <!-- 指定hadoop運行時產生文件的存儲目錄,默認/tmp/hadoop-${user.name} -->
            <property>
                <name>hadoop.tmp.dir</name>
                <value>/export/data/hadoopdata</value>
            </property>
        02) hdfs-site.xml
            <!-- 指定HDFS副本的數量 -->
            <property>
                <name>dfs.replication</name>
                <value>2</value>
            </property>
            <!-- secondaryNameNode所在的地址-->
            <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>hadoop02:50090</value>
            </property>
        03) mapred-site.xml
            更名:  mv mapred-site.xml.template mapred-site.xml
            vi mapred-site.xml

            <!-- 指定mr運行時框架,這裏指定在yarn上,默認是local -->
            <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
            </property>
        04) yarn-site.xml
            <!-- 指定YARN的老大(ResourceManager)的地址 -->
            <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>hadoop01</value>
            </property>

            <!-- NodeManager上運行的附屬服務。需配置成mapreduce_shuffle,纔可運行MapReduce程序默認值:"" -->
            <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
            </property>

            大量的默認配置: http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.14.0/

10--Apache Hadoop--集羣部署安裝--配置文件詳解--下
    01) slaves文件
        01) 文件做用
            配合一鍵啓動腳本,決定哪些服務器上啓動從角色
            經過dfs.hosts 指定文件中的機器才能加入hadoop集羣中
        02) 配置內容: 一行一個主機名
            vim /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/slaves

            hadoop01
            hadoop02
            hadoop03
    02) 將主節點上的hadoop的安裝包分發到hadoop02 和 hadoop03
        cd  /export/servers/
        scp -r hadoop-2.6.0-cdh5.14.0/ root@hadoop02:/export/servers/
        scp -r hadoop-2.6.0-cdh5.14.0/ root@hadoop03:/export/servers/
    03) 配置hadoop的環境變量:
        vim /etc/profile 添加以下內容:
            export HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
            export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
        將主節點上配好的/etc/profile文件 分發到hadoop02 和 hadoop03 上
            scp /etc/profile root@hadoop02:/etc/profile
            scp /etc/profile root@hadoop03:/etc/profile
        將三臺的環境變量生效:(在三臺上執行以下)
            source /etc/profile
        驗證hadoop環境變量是否生效
            hadoop version
11--Apache Hadoop--集羣部署安裝--namenode format
    01) 爲何須要format?
        01) format主要建立hadoop運行依賴的一些文件和文件夾, 本質就是一些清理和準備工做
        02) 首次啓動集羣前,須要針對hdfs進行format操做
        03) format操做只須要進行一次(若是成功的話)
    02) namenode format操做(在namenode所在的機器上)
        hadoop namenode -format (過期的命令)
        hdfs namenode -format
        成功的標識:
        Storage directory /export/data/hadoopdata/dfs/name has been successfully formatted.
        能夠查看初始化後的文件內容: cd /export/data/hadoopdata/dfs/name/current
    03) 不當心再次執行了format會如何? 怎麼解決?
        會如何: 上一次初始化的集羣會出現主從角色互相不識別的狀況  以前集羣的元數據所有丟失
        如何解決:將3臺服務器上hadoop.tmp.dir指定的目錄所有刪除,從新format一次(至關於一個新的集羣)
12--Apache Hadoop--集羣兩種啓動方式
    01) 單節點逐個啓動:
        01) 在主節點上使用如下命令啓動HDFS NameNode
            hadoop-daemon.sh start namenode
        02) 在每一個從節點上使用如下命令啓動HDFS DataNode
            hadoop-daemon.sh start datanode
        03) 在主節點上使用如下命令啓動YARN ResourceManager
            yarn-daemon.sh  start resourcemanager
        04) 在每一個從節點上使用如下命令啓動YARN nodemanager
            yarn-daemon.sh start nodemanager
        05) 在hadoop02上使用以下命令啓動HDFS secondaryNameNode
            hadoop-daemon.sh start secondarynamenode
        說明: 以上腳本位於$HADOOP_PREFIX/sbin/目錄下.若是想要中止某個節點上某個角色,只須要把命令中的start改成stop便可。
              好處: 能夠精準的控制每臺機器上每一個進程的狀態,便於排查單個服務器的異常問題
    02) 一鍵啓動腳本:
        01) 前提:
            配置好ssh免密登陸
            配置好slaves文件
        02) 啓動hdfs集羣:
            start-dfs.sh   stop-dfs.sh
        03) 啓動yarn集羣:
            stat-yarn.sh   stop-dfs.sh
        04) 一鍵啓動兩個集羣:
            start-all.sh   stop-all.sh

13--Apache Hadoop--集羣初體驗--感覺hadoop
    01) webUI界面
        01) namenode的界面: http://hadoop01:50070
            50070是webUI端口   以前配置的8020是rpc通訊端口
            參考:http://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
        02) resourceManager的界面: http://hadoop01:8088
    02) 初體驗:
        01) hdfs存儲文件體驗:
            顯示幫助: hadoop fs
            建立目錄:hadoop fs -mkdir  /test
            上傳文件:hadoop fs -put 1.txt /test/
            下載文件:hadoop fs -get /test/1.txt ./
            體驗:
                1 hdfs本質就是文件存儲的
                2 結構上也是樹形目錄結構, 從/ 根目錄開始
                3 有文件夾和文件
                4 操做起來比較慢? 爲何慢? 難道是由於分佈式文件存儲的緣由?
        02) yarn體驗,須要結合mr:
            01) 運行wordcount
                1   /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce
                2   hadoop fs -mkdir -p /wordcount/input
                3   vim wc.txt
                4   hadoop fs -put wc.txt /wordcount/input
                5   hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar wordcount /wordcount/input /wordcount/output
                6   hadoop fs -cat /wordcount/output/part-r-00000
            體驗:
                mr程序本質上就是一個jar包(本身寫的程序打成jar包)
                mr第一步先去找rm? 申請運行須要的資源嗎?
                mr程序分紅了兩個階段: map  和 reduce階段
                mr輸出的結果好像有序, 按照字典序進行升序排列(a-z,0-9)
            02) 圓周率計算
                hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar pi 2 4
14--Apache Hadoop--job history服務的開啓
    01) 爲何須要job history服務?
        重啓yarn集羣后,上次運行的mr程序的狀態都丟失了,咱們須要保存以前運行的mr程序信息(日誌形式)
    02) 如何開啓job history服務?
        01) 默認狀況下沒有開啓此功能,須要在mapred-site.xml中配置並手動啓動
        02) 關閉hdfs集羣
            stop-dfs.sh
        03) 修改mapred-site.xml
            cd /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
            vim mapred-site.xml
                <!-- MapReduce JobHistory Server IPC host:port -->
                <property>
                    <name>mapreduce.jobhistory.address</name>
                    <value>hadoop01:10020</value>
                </property>
                <!-- 查看歷史服務器已經運行完的Mapreduce做業記錄的web地址,須要啓動該服務才行 -->
                <property>
                    <name>mapreduce.jobhistory.webapp.address</name>
                    <value>hadoop01:19888</value>
                </property>
        04) 把修改好的配置文件scp給其餘機器
            scp mapred-site.xml  root@hadoop02:/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/mapred-site.xml
            scp mapred-site.xml  root@hadoop03:/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/mapred-site.xml
        05)啓動hdfs集羣:
            start-dfs.sh
        06) 單獨啓動/關閉historyserver服務(只須要在配置的指定機器上啓動便可hadoop01)
            啓動: mr-jobhistory-daemon.sh start historyserver
            關閉: mr-jobhistory-daemon.sh stop  historyserver
        07) 訪問job history服務器
            http://hadoop01:19888

        注意: job history服務須要手動啓動
15--Apache Hadoop--hdfs垃圾桶機制功能
    01) 爲何須要垃圾桶機制?
        誤操做刪除一些重要文件,能夠進行恢復.
    02) 垃圾桶機制的配置
        默認誤操做刪除重要文件,沒法恢復.
        01) vim core-site.xml
            <!-- 刪除文件在回收站的保存時間  -->
            <property>
                <name>fs.trash.interval</name>
                <value>1440</value>
            </property>
        02) 把配置文件scp給其餘機器
            scp core-site.xml  root@hadoop02:/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/core-site.xml
            scp core-site.xml  root@hadoop03:/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/core-site.xml
        03) 重啓hdfs集羣:
            stop-dfs.sh
            start-dfs.sh
    03) 垃圾桶機制驗證
        01) 刪除文件: hadoop fs -rm /test/1.txt
        02) 開啓垃圾桶機制後: 本質是把刪除的文件移動到一個指定的文件夾中(每一個用戶在/user/root/.Trash下都有本身的垃圾目錄)
        03) 如何恢復:
            從新移動回來: hadoop fs -mv /user/root/.Trash/Current/test/1.txt /test/
        04) 何時真正刪除:  垃圾桶機制配置的時間到了(1天=1440分鐘)
        05) 如何跳過垃圾桶直接永久刪除: hadoop fs -rm -skipTrash /test/1.txt

今日課程總結
01) hadoop簡介: 廣義  狹義(hdfs  yarn  mapreduce)

02) hadoop發展歷史   hadoop (業務  技術)  精準廣告營銷推薦    短視頻推薦系統   我的徵信

03) hadoop的發行版:  社區版    商業版

04) hadoop的角色介紹:  nn  dn   snn   rm  nm

05) hadoop集羣安裝:
        01) hadoop的源碼編譯:
        02) hadoop的目錄結構:  bin  sbin  share   etc
        03) hadoop-env.sh  core-site.xml   hdfs-site.xml  mapred-site.xml  yarn-site.xml  slave
        04) 分發安裝包
        05) 格式化  hadoop namenode -format   一次性的
        06) 單獨啓動     一鍵腳本: 
06) hadoop集羣的體驗:
        01) hdfs的體驗: 存儲海量數據的文件系統    管理文件    客戶端(命令行  java  瀏覽器客戶端)
        02) MapReduce的體驗: jar包(mapper  reducer main)   海量數據分佈式並集計算框架   wordcount  pi
07) job history服務的開啓

08) 開啓hadoop集羣的垃圾回收機制

今天常見問題:
    01) datanode不被namenode識別問題
        Namenode在format初始化的時候會造成兩個標識,blockPoolId和clusterId.新的datanode加入時,會獲取這兩個標識做爲本身工做目錄中的標識.
        一旦namenode從新format後,namenode的身份標識已變,而datanode若是依然持有原來的id,就不會被namenode識別.
        解決辦法,刪除datanode節點中的數據後,再次從新格式化namenode.

html

相關文章
相關標籤/搜索