1. 程式人生 > >大資料技術學習筆記之Hadoop框架基礎1-Hadoop介紹及偽分散式部署

大資料技術學習筆記之Hadoop框架基礎1-Hadoop介紹及偽分散式部署

一、學習建議
    -》學習思想
        -》設計思想:分散式
            -》資料採集
            -》資料儲存
            -》資料計算
            -》資料視覺化
    -》學習階段
        -》瞭解功能簡單使用                            -》java、java變數
        -》安裝部署配置環境                            -》開發
        -》熟練的使用,瞭解基本原理                -》java集合、執行緒、java web
        -》深入瞭解架構、設計思想、效能調優    -》堆、棧、JVM,記憶體優化,架構設計
    -》方法:
        -》掌握hadoop設計思想
        -》安裝部署、簡單使用:大部分框架都是類似
        -》熟練使用:多練習
        -》積累經驗:記錄所有的出錯
        -》多練習、多總結、理解架構
    -》收集報錯
        -》出現問題
            -》分析日誌
                warning:一般錯誤很少
                error:
                    classnotfound
                        -》名稱
                        -》檢查環境變數
            -》百度
            -》溝通解決
        -》更加理解原理和架構
        
        
        
二、大資料
    -》核心:用大資料處理工具對資料進行分析處理,得到價值
    -》特點:
        -》資料量大的
        -》資料量增長快
        -》多樣的
        -》價值密度低的
        -》真實的
    -》hadoop誕生:hadoop1.x
        -》HDFS:hadoop distribute file system ,分散式檔案系統
        -》MapReduce:分散式計算模型
        
        
        
        
三、Hadoop的介紹
    -》hadoop是幹嘛的?
        -》大資料儲存及處理工具
    -》hadoop的元件及其功能?
        -》hadoop1.x
            -》hdfs
            -》MapReduce
        -》hadoop2.x
            -》HDFS:分散式檔案儲存系統
            -》MapReduce v2 : 分散式計算模型
            -》YARN:分散式資源管理系統,負責任務排程和叢集資源管理
                -》計算機資源:CPU、記憶體、磁碟、網路
        -》hadoop3.x
    -》分散式叢集
        -》單機:一臺機器,物理資源有限
        -》分散式:多臺機器,物理資源可以動態擴充套件
    -》hadoop處理資料的過程
        -》將資料存入hdfs
        -》開發MapReduce程式
            -》從hdfs中讀取資料
            -》處理資料
            -》將處理後的結果寫入hdfs
        -》將開發好的程式打包成jar包
        -》將jar包提交給yarn
            -》yarn接收任務執行請求
            -》yarn為該任務分配資源
            -》執行MapReduce程式
                -》input
                -》map task
                -》reduce task
                -》output
                
    -》HDFS:hadoop distribute file system,分散式檔案系統
        -》與傳統檔案系統相比,有什麼特點?
            -》分散式:解決大資料儲存問題
            -》分片機制:將一個檔案按照大小自動拆分成多個檔案
                    預設大小:128M/個  1G=8個block 1000M=8個block
            -》副本機制:對每個塊做備份,預設每個塊有3份
                機器1        block1-1    block2-3
                機器2        block1-2     block2-2
                機器3        block2-1    block1-3
                
                檔案:250M    ->   block1:128M  block2:122M  
        -》如何自動的實現檔案的切分、檔案的合併
            -》NameNode:老大,整個hdfs叢集中的老大,負責管理
                -》負責接收所有使用者的請求
                    -》讀
                    -》寫:負責維護元資料(儲存檔案的資訊:檔案的塊、儲存位置)
                        -》使用者向NameNode傳送寫的請求
                        -》NameNode返回檔案寫入的地址
                        -》使用者將資料提交給DataNode
                        -》DataNode將資料寫入,並且建立副本
                        -》寫入成功後將結果反饋給NameNode
            -》DataNode:小弟,整個hdfs叢集中可以有很多小弟,負責儲存
            
    -》YARN:分散式任務排程和資源管理工具
        -》yarn接收使用者提交的任務請求:jar
            -》ResourceManager:老大,負責管理,接收使用者的請求
                -》負責資源管理和任務排程
            -》NodeManager:小弟,負責計算
        -》執行MapReduce程式
            -》RM接收到使用者的請求
            -》RM會隨機選擇一臺NM作為該任務的分配節點
            -》NM向RM申請資源,RM會分配一定的資源打包給NM
            -》NM會在其他的NM,啟動多個map和reduce task任務
            -》負責的NM會收集執行的結果,彙報給RM
    
    -》MapReduce:分散式計算模型
        -》input:負責資料的輸入,預設是hdfs
        -》map:將一個大的任務分解成多個小的任務交給每臺機器去執行
        -》shuffle:溢寫、分割槽、排序、分組~~~~~~~~~~~~
        -》reduce:將所有map的結果進行合併
        -》output:輸出,預設是hdfs
        
        
四、Hadoop的安裝部署
    -》hadoop版本
        -》Apache:釋出更新都比較快
        -》Cloudera:最穩定,修復了bug、相容性
        -》Hortonworks
        -》mapr
    -》Apache:
        -》hadoop版本:
            -》2.5.x-2.7.x
    -》hadoop模式
        -》本地模式:一般用於測試程式執行
            -》預設讀本地檔案系統
            -》只有task程式執行在jvm中
        -》偽分散式:單節點的分散式,所有的程序都在一臺機器上
            -》老大和小弟都在一臺機器上
        -》完全分散式:工作企業環境
            -》老大一般有一臺
            -》小弟有很多臺
    -》搭建偽分散式環境
        -》Linux環境
            -》網路:固定ip地址、DNS、網路能通外網、本地域名解析(每臺機器的檔案中包含所有機器的地址和主機名)
            -》關閉防火牆和selinux
                service iptables stop
                chkconfig iptables off
                
                vim /etc/selinux/config
                SELINUX=disabled
            -》普通使用者:專門負責管理大資料應用:rdedu
                修改連線為rdedu自動連線
            -》ntp時間同步(完全分散式)
            -》ssh免金鑰登入(完全分散式)
            -》建立大資料相關的資料夾
                sudo mkdir /opt/tools
                sudo mkdir /opt/modules   
                sudo mkdir /opt/datas
                sudo chown -R rdedu:rdedu /opt/datas
                sudo chown -R rdedu:rdedu /opt/modules/
                sudo chown -R rdedu:rdedu /opt/tools/
                
            -》安裝jdk
                -》檢查自帶jdk是否已經解除安裝
                    rpm -qa | grep java
                -》解壓
                    tar -zxvf jdk-8u91-linux-x64.tar.gz -C /opt/modules/
                -》配置環境變數
                    -》全域性環境變數:sudo vim /etc/profile
                        export JAVA_HOME=/opt/modules/jdk1.8.0_91
                        export PATH=$PATH:$JAVA_HOME/bin
                    -》重新載入配置檔案
                        source /etc/profile
                    -》檢測
                        java -version
            -》安裝hadoop
                -》下載解壓:http://archive.apache.org/dist/
                    tar -zxvf /opt/tools/hadoop-2.7.3.tar.gz -C /opt/modules/
                -》目錄結構
                    bin:命令
                     etc/conf/config/:配置檔案
                    lib:依賴jar包
                    data/tmp:臨時資料儲存目錄
                    logs:日誌檔案目錄
                    sbin:啟動指令碼,管理類的命令
                -》修改配置檔案
                    -》修改env檔案:用於配置環境變數
                        hadoop-env.sh    
                        mapred-env.sh
                        yarn-env.sh
                        export JAVA_HOME=/opt/modules/jdk1.8.0_91
                    -》修改xml檔案:
                        core-site.xml              hadoop網路、hdfs入口等配置
                        -》配置hdfs的入口
                        -》配置hadoop的臨時儲存目錄記得修改許可權為rdedu
                            mkdir datas
                            
                            /opt/modules/hadoop-2.7.3/datas
                            
                            <!-- 用於設定hdfs的入口 -->
                            <property>
                                <name>fs.defaultFS</name>
                                <value>hdfs://bigdata-training01.erongda.com:8020</value>
                            </property>
                            
                            <!-- 設定hadoop的臨時儲存目錄-->
                            <property>
                                <name>hadoop.tmp.dir</name>
                                <value>/opt/modules/hadoop-2.7.3/datas</value>
                            </property>
                            
                        
                        
                        
                        hdfs-site.xml              hdfs相關的配置
                            <!--用於設定hdfs的副本數-->
                            <property>
                                <name>dfs.replication</name>
                                <value>1</value>
                            </property>
                            
                        slaves                配置從節點(小弟)
                            nodemanager與DataNode都在同一臺機器
                            
                        
                        mapred-site.xml            MapReduce相關的配置
                        yarn-site.xml            YARN相關配置
                        
                -》格式化檔案系統
                    bin/hdfs namenode -format
                -》啟動hdfs
                    -》啟動老大:NameNode
                        sbin/hadoop-daemon.sh start namenode
                    -》啟動小弟:DataNode
                        sbin/hadoop-daemon.sh start datanode
                -》測試檢視
                    -》檢視網頁埠
                        192.168.134.188:50070
                    -》測試
                        bin/hdfs dfs -mkdir -p /test01
                        bin/hdfs dfs -put /opt/datas/wordcount.txt /test01/
                        bin/hdfs dfs -get /test01/wordcount.txt /home/rdedu/
                        bin/hdfs dfs -cat /test01/wordcount.txt
                        bin/hdfs dfs -ls /
                        bin/hdfs dfs -rm -r /test01
        
            -》配置yarn和mapreduce
                -》配置MapReduce:mapred-site.xml
                    mv mapred-site.xml.template mapred-site.xml
                        <!--指定mapreduce執行在yarn上-->
                        <property>
                            <name>mapreduce.framework.name</name>
                            <value>yarn</value>
                        </property>
                -》配置yarn:yarn-site.xml
                        <!--指定resourcemanager的地址-->
                        <property>
                            <name>yarn.resourcemanager.hostname</name>
                            <value>bigdata-training01.erongda.com</value>
                        </property>
                        <!--MapReduce執行方式,包含shuffle過程-->
                        <property>
                            <name>yarn.nodemanager.aux-services</name>
                            <value>mapreduce_shuffle</value>
                        </property>
                -》啟動yarn
                    -》啟動
                        sbin/yarn-daemon.sh start resourcemanager
                        sbin/yarn-daemon.sh start nodemanager
                -》測試執行
                    -》網頁埠:
                        192.168.134.188:8088
                    -》提交執行MapReduce程式
                        wordcount程式:
                         bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test01/wordcount.txt /wc-out/wc-out1
                    
        -》NameNode原理:管理元資料(記憶體)
            -》第一次使用NameNode之前需要格式化
                -》初始化元資料
                -》初始化資料目錄:hadoop.tmp.dir
            -》啟動時:
                -》將本地元資料檔案fsimage載入到記憶體中
                -》啟動DataNode,DataNode會向NameNode註冊
                -》DataNode註冊成功,向老大彙報自己的block資訊
                -》客戶端對hdfs進行讀寫
                -》secondery NameNode 會根據條件將hdfs的修改日誌edits與fsimage合併,生成新的faimage儲存到本地
                
五、常見的HDFS配置
    -》secondery NameNode
        dfs.namenode.secondary.http-address
    -》資料儲存目錄
        -》元資料目錄
            dfs.namenode.name.dir
        -》資料檔案目錄
            dfs.datanode.data.dir
    -》hdfs地址:fs.defaultFS
    -》副本數:dfs.replication
    -》塊大小:dfs.blocksize
    -》訪問許可權:dfs.permissions.enabled
            <!--用於關閉hdfs的許可權檢查-->
            <property>
                <name>dfs.permissions.enabled</name>
                <value>false</value>
            </property>
            
    -》一旦修改了配置檔案,只有重啟叢集才會生效
        -》core-site
            -》重啟hdfs,yarn
        -》hdfs-site
            -》重啟hdfs
        -》mapred-site/yarn-site
            -》重啟yarn