1. 程式人生 > >大資料技術學習筆記之Hadoop框架基礎2-MapReduce程式設計及執行流程

大資料技術學習筆記之Hadoop框架基礎2-MapReduce程式設計及執行流程

一、回顧
    -》hadoop的功能?
        -》海量資料儲存和海量計算問題
        -》分散式檔案儲存框架hdfs和分散式計算模型框架MapReduce
    -》hadoop的四大元件?
        -》common:用於支援其他模組的元件
        -》hdfs:分散式檔案系統
        -》MapReduce:分散式計算模型
        -》YARN:分散式任務排程和資源管理框架
    -》hdfs的架構?
        -》分散式並行架構
        -》主從架構
            -》NameNode:主節點,負責管理、管理元資料(記憶體)、管理從節點
            -》DataNode:從節點,負責資料的讀寫
        -》如何通過客戶端去實現資料讀寫
            
    -》hdfs的常用命令
        -》讀:bin/hdfs dfs -cat
        -》上傳:bin/hdfs dfs -put linux_path hdfs_path
        -》下載:bin/hdfs dfs -get hdfs_path linux_path
        -》刪除:bin/hdfs dfs -rm -r
    -》hadoop安裝Linux環境配置
        -》ip、dns、閘道器
        -》本地網路對映:使用主機名訪問機器
            192.168.111.111 zhuyun.com
            unknown host :不能識別的主機名
        -》關閉防火牆、selinux
        -》ntp時間同步:將整個叢集所有的機器時間統一(分散式)
        -》ssh免金鑰登入(分散式)
        -》解除安裝openjdk,安裝oracle jdk
            -》解壓
            -》配置環境變數
                export JAVA_HOME=                    有一些程式會從環境變數中直接讀Javahome
                export PATH=$PATH:$JAVA_HOME/bin
                可以在命令列的任何 一個地址執行java的命令
    -》hadoop的安裝配置
        -》下載解壓
        -》修改配置
            -》hadoop-env.sh/mapred-env.sh/yarn-evn.sh    :配置hadoop的環境變數
                JAVA_HOME
            -》core-site.xml :    hadoop的全域性配置
                -》配置hdfs的入口
                    fs.defaultFS            hdfs://hostname:8020
                -》hadoop的臨時目錄
                    hadoo.tmp.dir            $HADOOP_HOME/datas
            -》hdfs-site.xml:配置hdfs
                -》副本數:dfs.replication            1
                -》關閉hdfs訪問許可權:    dfs.permission.enabled    false
            -》mapred-site.xml:配置MapReduce
                -》mapreduce的執行框架
                    mapre.framework
            -》yarn-site.xml:配置yarn
                -》配置resourcemanager的地址
                    yarn.resourcemanager.hostname
                -》指定MapReduce的 執行為是shuffle
            -》slaves
                -》所有從節點的地址
    -》mapreduce程式執行方式
        -》bin/yarn jar jar_path main_class input_path output_path
        
        
        
一、hadoop的啟動與常用配置
    -》hadoop如何啟動
        -》第一種方式:單個程序啟動
            -》啟動hdfs與yarn
                -》sbin/hadoop-daemon.sh start namenode
                -》sbin/hadoop-daemon.sh startdatanode
                -》sbin/yarn-daemon.sh start resourcemanager
                -》sbin/yarn-daemon.sh start nodemanager
            -》檢視程序:
                jps
                日誌檔案:hadoop-rdedu-datanode-bigdata-training01.erongda.com.log
                
                程序分類-使用者名稱-程序名稱-主機名.log
                
                tail -100f logfile
        -》第二種:分別啟動hdfs與yarn程序(需要配置ssh免金鑰協議)
            start-dfs.sh            stop-dfs.sh
                -》NameNode
                -》DataNode
                -》secondery NameNode
            start-yarn.sh            stop-yarn.sh
                -》resourcemanager
                -》nodemanager
        -》第三種:一次性啟動hdfs與yarn(需要配置ssh免金鑰協議)
            start-all.sh            stop-all.sh
                
    -》SSH免金鑰協議
        A要登入B
        -》生成A的金鑰:公鑰和私鑰
            ssh-keygen -t rsa
        -》A將自己的公鑰傳送給B
            ssh-copy-id B_HOSTNAME
        -》B儲存A的公鑰
        
    -》安全模式:
    Safe mode is ON. The reported blocks 5 has reached the threshold 0.9990 of total blocks 5. The number of live datanodes 1 has reached the minimum number 0. In safe mode extension. Safe mode will be turned off automatically in 12 seconds.

18 files and directories, 5 blocks = 23 total filesystem object(s).

Heap Memory used 31.68 MB of 47.61 MB Heap Memory. Max Heap Memory is 966.69 MB.

Non Heap Memory used 37.95 MB of 39 MB Commited Non Heap Memory. Max Non Heap Memory is -1 B.

    -》NN啟動,載入本地元資料檔案到記憶體中,等待從節點進行彙報
    -》DN啟動,向NN進行註冊,等待30秒,NN開始進行資料塊校驗
    -》如果資料塊差比<99.9%,進入安全模式
    -》安全模式HDFS會修復丟失的資料塊,不允許進行讀寫
    -》手動管理安全模式
        bin/hdfs dfsadmin -safemode [enter|leave|get|wait]
                
        
    -》配置歷史伺服器:用於檢視執行過的任務
        -》修改配置檔案:mapred-site
                <!--配置jobhistory服務-->
                <property>
                    <name>mapreduce.jobhistory.address</name>
                    <value>bigdata-training01.erongda.com:10020</value>
                </property>
                <property>
                    <name>mapreduce.jobhistory.webapp.address</name>
                    <value>bigdata-training01.erongda.com:19888</value>
                </property>
        -》重啟
        -》啟動服務
            sbin/mr-jobhistory-daemon.sh start historyserver
            
        -》預設情況:hadoop由8088跳轉19888時,預設使用resourcemanager的hostname和19888
            -》解決方案:
                windows中新增本地對映
                C:\Windows\System32\drivers\etc\hosts
                192.168.134.188    bigdata-training01.erongda.com
            
    -》配置日誌聚合:將所有程式的日誌儲存到hdfs上
        -》修改配置檔案yarn-site
            <!--配置日誌聚合-->
            <property>
                <name>yarn.log-aggregation-enable</name>
                <value>true</value>
            </property>
            <property>
                <name>yarn.log-aggregation.retain-seconds</name>
                <value>604800</value>
            </property>
            <property>
                <name>yarn.log-aggregation.retain-check-interval-seconds</name>
                <value>60480</value>
            </property>
        -》重啟
        -》測試
            bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test01/wordcount.txt /wc-out/wc-out4
            
    -》本地庫:
        WARN,表示當前本地庫與當前系統不匹配
        -》自己編譯hadoop
            
            
            
二、mapreduce開發環境的搭建
    -》Linux
        -》jdk
        -》maven
            -》解壓
                tar -zxvf apache-maven-3.3.9-bin.tar.gz -C /opt/modules/
            -》配置環境變數
            -》修改Maven的映象源
            -》拷貝一份到使用者家目錄的.m2目錄下
        -》eclipse
            -》解壓
                tar -zxvf eclipse-jee-neon-3-linux-gtk-x86_64.tar.gz -C /opt/modules/
            -》啟動./eclipse
            -》修改快捷鍵
                content assit  :原來是Ctrl+space,修改為alt+/
                word complication : 原來是alt + / ,任意修改為其他的

    -》本地
        -》JDK
        -》eclipse
        -》Maven
    -》開發
        -》編寫hdfs的api
            -》建立Maven工程
            -》引入maven依賴
            -》引入配置檔案
                core-site.xml
                hdfs-site.xml
                log4j
        -》wordcount程式
            bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /input_path /output_path
            
            -》需求:
                hadoop hive hbase
                spark hadoop hadoop
                結果:
                hadoop  3
                hbase   1
                hive    1
                spark   1    
            -》MapReduce程式執行過程
                MapReduce中所有的資料都以keyvalue的格式進行傳遞
            
                -》input:預設從hdfs上讀檔案
                    -》預設將檔案變成key value的格式
                        key:行的偏移量
                        value:這一行的內容
                    -》一行會變成一個keyvalue
                -》map:負責將input階段傳遞過來的資料進行分片處理
                    一個檔案500MB =>  4block
            預設一個塊(DataNode) = 一個分片 = 一個 map task(nodemanager)
                    -》一個map task處理多條keyvalue資料
                    —》map task中包含map方法,一條keyvalue就要呼叫一次map方法
                -》shuffle:將擁有相同key的value合併到一起
                    <key1,value1>
                    <key1,value2>
                    ……
                    <key1,{value1,value2}>
                -》reduce:每個key中的value集合進行處理
                    
                -》output:預設寫入hdfs,也是keyvalue的格式
            
            -》wordcount程式解析
                hadoop hive hbase
                spark hadoop hadoop
                
                -》input
                    <18,hadoop hive hbase>
                    <36,spark hadoop hadoop>
                -》map
                    輸入:
                    map:對value 進行處理,對每行進行分割
                        key : 每個單詞
                        value:1
                    輸出:
                        key value
                        
                -》shuffle:分割槽,排序,分組
                    hadoop 1
                    hive 1
                    hbase 1
                    spark 1
                    hadoop 1
                    hadoop 1
    
                -》reduce:啟動reduce task對資料處理reduce
                    輸入:
                        hadoop   {1,1,1}
                        hbase     {1}
                        hive     {1}
                        spark    {1}
                    reduce:將value集合中求和
                    輸出:
                -》output
                hadoop  3
                hbase   1
                hive    1
                spark   1