溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

大數(shù)據(jù)分布式計(jì)算--hadoop

發(fā)布時(shí)間:2020-06-22 09:36:11 來源:網(wǎng)絡(luò) 閱讀:748 作者:yi003958 欄目:大數(shù)據(jù)

 

Hadoop是一個(gè)由Apache基金會(huì)所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序。充分利用集群的威力進(jìn)行高速運(yùn)算和存儲(chǔ)。

Hadoop 核心項(xiàng)目提供了在低端硬件上構(gòu)建云計(jì)算環(huán)境的基礎(chǔ)服務(wù),它也提供了運(yùn)行在這個(gè)云中的軟件所必須的 API 接口。  

Hadoop 內(nèi)核的兩個(gè)基本部分是 MapReduce 框架,也就是云計(jì)算環(huán)境,和 HDFS分布式文件系統(tǒng) 。在 Hadoop 核心框架中,MapReduce 常被稱為 mapred,HDFS 經(jīng)常被稱為 dfs。。HDFS為海量的數(shù)據(jù)提供了存儲(chǔ),MapReduce為海量的數(shù)據(jù)提供了計(jì)算。

MapReduce 的核心概念是把輸入的數(shù)據(jù)分成不同的邏輯塊, Map 任務(wù)首先并行的對(duì)每一塊進(jìn)行單獨(dú)的處理。這些邏輯塊的處理結(jié)果會(huì)被重新組合成不同的排序的集合,這些集合最后由 Reduce 任務(wù)進(jìn)行處理。

HDFS分布式文件系統(tǒng)有高容錯(cuò)性的特點(diǎn),并且設(shè)計(jì)用來部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來訪問應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集(large data set)的應(yīng)用程序。HDFS放(relaxPOSIX的要求,可以以流的形式訪問(streaming access)文件系統(tǒng)中的數(shù)據(jù)。

                                                                                                                    參考:hadoop.appache.org

 

實(shí)驗(yàn)環(huán)境rhel6.5

主機(jī)server7,從機(jī)server8.server9  注:各機(jī)都必須域名相互解析。

 

安裝及基本配置

各機(jī)創(chuàng)建uid900 hadoop用戶,密碼為redhat

Server7,hadoop用戶在/home/下。

#tar zxf hadoop-1.2.1.tar.gz -C hadoop

#cd hadoop

#ln -s hadoop-1.2.1/ hadoop

#sh jdk-6u32-linux-x64.bin    //安裝java

#ln -s jdk-1.6.32 java

#vim .bash_profile    //配置path 

export JAVA_HOME=/home/hadoop/java

export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin

 

#source .bash_profile

#echo $JAVA_HOME

顯示/home/hadoop/java

#cd hadoop/conf

#vim hadoop-env.sh 

修改exprot JAVA_HOME=/home/hadoop/java

#mkdir ../input   

#cp *.xml ../input     //創(chuàng)建分布式文件系統(tǒng)

#cd ..

#bin/hadoop jar hadoop-examples-1.2.1.jar 

 大數(shù)據(jù)分布式計(jì)算--hadoop

 

   列出了hadoop-example-1.2.1jar對(duì)input操作的相關(guān)參數(shù),如grep查找,sort排序,wordcount計(jì)數(shù)等。

#bin/hadoop jar hadoop-examples-1.2.1.jar grep input output 'dfs[a-z.]+'   //查找inout中文件名開頭為dfs后面為小寫英文的文件,將結(jié)果存入自動(dòng)生成的output文件夾中

#cd output/

#ls

#cat *

大數(shù)據(jù)分布式計(jì)算--hadoop

 

再介紹下hadoop的三種工作模式

單機(jī)模式(standalone

         單機(jī)模式是Hadoop的默認(rèn)模式,當(dāng)首次解壓Hadoop的源碼包時(shí),Hadoop無法了解硬件安裝環(huán)境,便保守地選擇了最小配置。在這種默認(rèn)模式下所有3個(gè)XML文件均為空。當(dāng)配置文件為空時(shí),Hadoop會(huì)完全運(yùn)行在本地。因?yàn)椴恍枰c其他節(jié)點(diǎn)交互,單機(jī)模式就不使用HDFS,也不加載任何Hadoop的守護(hù)進(jìn)程。該模式主要用于開發(fā)調(diào)試MapReduce程序的應(yīng)用邏輯。

偽分布模式(Pseudo-Distributed Mode

        偽分布模式在“單節(jié)點(diǎn)集群”上運(yùn)行Hadoop,其中所有的守護(hù)進(jìn)程都運(yùn)行在同一臺(tái)機(jī)器上。該模式在單機(jī)模式之上增加了代碼調(diào)試功能,允許你檢查內(nèi)存使用情況,HDFS輸入輸出,以及其他的守護(hù)進(jìn)程交互。

完全分布式模式

        Hadoop守護(hù)進(jìn)程運(yùn)行在一個(gè)集群上。


上面的操作為單機(jī)模式。


Hadoop分布式部署

結(jié)構(gòu):

    主節(jié)點(diǎn)包括名稱節(jié)點(diǎn)(namenode)、從屬名稱節(jié)點(diǎn)(secondarynamenode)和 jobtracker 守護(hù)進(jìn)程(即所謂的主守護(hù)進(jìn)程)以及管理集群所用的實(shí)用程序和瀏覽器。

   從節(jié)點(diǎn)包括 tasktracker 和數(shù)據(jù)節(jié)點(diǎn)(從屬守護(hù)進(jìn)程)。兩種設(shè)置的不同之處在于,主節(jié)點(diǎn)包括提供 Hadoop 集群管理和協(xié)調(diào)的守護(hù)進(jìn)程,而從節(jié)點(diǎn)包括實(shí)現(xiàn)Hadoop 文件系統(tǒng)(HDFS )存儲(chǔ)功能和 MapReduce 功能(數(shù)據(jù)處理功能)的守護(hù)進(jìn)程。

 

每個(gè)守護(hù)進(jìn)程在 Hadoop 框架中的作用:

namenode 是 Hadoop 中的主服務(wù)器,它管理文件系統(tǒng)名稱空間和對(duì)集群中存儲(chǔ)的文件的訪問。

secondary namenode ,它不是namenode 的冗余守護(hù)進(jìn)程,而是提供周期檢查點(diǎn)和清理任務(wù)。

在每個(gè) Hadoop 集群中可以找到一個(gè) namenode 和一個(gè) secondary namenode。

datanode 管理連接到節(jié)點(diǎn)的存儲(chǔ)(一個(gè)集群中可以有多個(gè)節(jié)點(diǎn))。每個(gè)存儲(chǔ)數(shù)據(jù)的節(jié)點(diǎn)運(yùn)行一個(gè) datanode 守護(hù)進(jìn)程。

每個(gè)集群有一個(gè) jobtracker ,它負(fù)責(zé)調(diào)度 datanode 上的工作。

每個(gè) datanode 有一個(gè)tasktracker,它們執(zhí)行實(shí)際工作。

jobtracker 和 tasktracker 采用主-從形式,jobtracker 調(diào)度datanode 分發(fā)工作,而 tasktracker 執(zhí)行任務(wù)。jobtracker 還檢查請(qǐng)求的工作,如果一個(gè)datanode 由于某種原因失敗,jobtracker 會(huì)重新調(diào)度以前的任務(wù)。

 

下面實(shí)現(xiàn)偽分布式

 

為了方便,進(jìn)行ssh免密碼設(shè)置。

Server7hadoop用戶。

#ssh-keygen

#ssh-copy-id localhost

#ssh localhost     //免密碼登陸本機(jī)

修改配置文件:

#cd hadoop/conf

#vim core-site.xml 

<configuration>下面添加

   <property>

            <name>fs.default.name</name>

                <value>hdfs://172.25.0.7:9000</value>

            </property>                //指定namenode

 

#vim mapred-site.xml 

<configuration>下面添加

    <property>

            <name>mapred.job.tracker</name>

                <value>172.25.0.7:9001</value>

                    </property>            //指定 jobtracker

 

#vim hdfs-site.xml 

 在<configuration>下面添加

       <property>

            <name>dfs.replication</name>

                <value>1</value>

                        </property>    //指定文件保存的副本數(shù),由于是偽分布式所以副本就是本機(jī)1個(gè)。

 

#cd ..

#bin/hadoop namenode -format      //格式化namenode

#bin/start-dfs.sh             //啟動(dòng)hdfs

#jps    //查看進(jìn)程

 大數(shù)據(jù)分布式計(jì)算--hadoop

 

可看到secondarynamenode,namenode,datanode都以啟動(dòng)。Namenodedatanode在同一臺(tái)機(jī)器上,所以是偽分布式。

#bin/start-mapred.sh.sh        //啟動(dòng)mapreduce 

#bin/hadoop fs -put input test     //上傳inputhdfs并在hdfs中更名為test


瀏覽 NameNode 和 JobTracker 的網(wǎng)絡(luò)接口,它們的地址默認(rèn)為:

NameNode – http://172.25.0.7:50070/

JobTracker – http://172.25.0.7:50030/

查看namenode

 大數(shù)據(jù)分布式計(jì)算--hadoop

 

#bin/hadoop fs -ls test          //列出hdfstest目錄下的文件

大數(shù)據(jù)分布式計(jì)算--hadoop  

 

Web上查看test下的文件

大數(shù)據(jù)分布式計(jì)算--hadoop

  

 

下面實(shí)現(xiàn)完全分布式模式

 

主從機(jī)上都安裝nfs-utils并啟動(dòng)rpcbind服務(wù)(主要是在nfs共享時(shí)候負(fù)責(zé)通知客戶端,服務(wù)器的nfs端口號(hào)的。簡(jiǎn)單理解rpc就是一個(gè)中介服務(wù)),從機(jī)通過nfs直接使用hadoop免去安裝配置。

 

server7上,啟動(dòng)nfs服務(wù)

#vim /etc/exports

/home/hadoop  *(rw,all_squash,anonuid=900,anongid=900

                 //共享hadoop,對(duì)登陸用戶指定id,用戶以uid900的用戶登陸

 

server89

#mount 172.25.0.7:/home/hadoop /hooem/hadoop/      //掛載共享目錄

server7上,hadoop用戶,更改hadoop/conf下的hdfs-site,將副本數(shù)由1改為2

#cd  hadoop/conf

#vim slave  添加從機(jī)

  172.25.0.8

  172.25.0.9

 

#vim master  設(shè)置主機(jī)

  172.25.0.7

 

啟動(dòng)完全分布式模式前要格式化偽分布式文件系統(tǒng)

#cd ..

#bin/stop-all.sh     //停止jobtracker,namenode,secondarynamenode

#bin/hadoop-daemon.sh stop tasktracker

#bin/hadoop-daemon.sh stop datanode     //停止tasktracker,datanode

#bin/hadoop namenode -format

#bin/start-dfs.sh    顯示server8,server9連接。

 大數(shù)據(jù)分布式計(jì)算--hadoop

 

#bin/start-mapred.sh

新增了jobtracker進(jìn)程

大數(shù)據(jù)分布式計(jì)算--hadoop


server8上,jps可看到三個(gè)進(jìn)程jpsdatanode,tasktracker

大數(shù)據(jù)分布式計(jì)算--hadoop

  

從機(jī)可以上傳,查詢等

#bin/hadoop fs -put input test

#bin/hadoop jar hadoop-example-1.2.1.jar grep test out dfs[a-z]+

 

server7上,

#bin/hadoop dfsadmin -report   //顯示hdfs信息

 大數(shù)據(jù)分布式計(jì)算--hadoop

由于hadoop下未增加文件,所以dfs used%均為0%

#dd if=/dev/zero of=bigfile bs=1M count=200

#bin/hadoop fs -put bigfile test

 

web上看到dfs used403.33MB(兩從機(jī),每個(gè)為200MB

大數(shù)據(jù)分布式計(jì)算--hadoop

  

注:有時(shí)候操作錯(cuò)誤導(dǎo)致hadoop進(jìn)入安全模式,無法進(jìn)行上傳等操作

大數(shù)據(jù)分布式計(jì)算--hadoop

 

只需運(yùn)行下行指令即可

#bin/hadoop dfsadmin -safemode leave

大數(shù)據(jù)分布式計(jì)算--hadoop  

 


hadoop支持實(shí)時(shí)擴(kuò)展,可在線添加從機(jī)。

 


新增從機(jī)server10。安裝nfs-utils,啟動(dòng)rpcbind服務(wù)。添加uid900hadoop用戶,掛載server7hadoop并在hadoop/conf下的slaves添加172.25.0.10。

       注:必須在添加server10之前在主從機(jī)上添加server10hostname解析。


server10上,hadoop用戶

#bin/hadoop-daemon.sh start datanode

#bin/hadoop-daemon.sh start tasktracker

 

server7上,

#bin/hadoop dfsadmin -report 

可看到server10的信息

大數(shù)據(jù)分布式計(jì)算--hadoop

 

 

可看到server10 dfs used0,可以將server9的數(shù)據(jù)移到server10中。

數(shù)據(jù)遷移:

數(shù)據(jù)遷移是將很少使用或不用的文件移到輔助存儲(chǔ)系統(tǒng)的過程。

 

hadoop 在線刪除 server9 datanode 節(jié)點(diǎn)可實(shí)現(xiàn)數(shù)據(jù)遷移:

#bin/hadoop-daemon.sh stop tasktracker  //在做數(shù)據(jù)遷移時(shí),此節(jié)點(diǎn)不要參與 tasktracker,否則會(huì)出現(xiàn)異常

  在 master 上修改 conf/mapred-site.xml

  在</property>下面添加

    <property>

          <name>dfs.hosts.exclude</name>

          <value>/home/hadoop/hadoop-1.0.4/conf/datanode-excludes</value>

               </property>

conf下創(chuàng)建datanode-excludes,添加需要?jiǎng)h除的主機(jī),一行一個(gè)

#vim datanode-excludes  

172.25.0.9   //刪除節(jié)點(diǎn)server9

#cd ..

#bin/hadoop dfsadmin -refreshNodes    //在線刷新節(jié)點(diǎn)

#bin/hadoop dfsadmin -report 

可看到server9 狀態(tài):Decommission in progress

大數(shù)據(jù)分布式計(jì)算--hadoop

 

若要在線刪除tasktracker節(jié)點(diǎn)

server7上修改 conf/mapred-site.xml

<property>

        <name>mapred.hosts.exclude</name>

        <value>/home/hadoop/hadoop-1.0.4/conf/tasktracker-excludes</value></property>

創(chuàng)建 tasktracker-excludes 文件,并添加需要?jiǎng)h除的主機(jī)名,一行一個(gè)

server9.example.com

#bin/hadoop mradmin -refreshNodes

 


等此節(jié)點(diǎn)的狀態(tài)顯示為 Decommissioned,數(shù)據(jù)遷移完成,可以安全關(guān)閉了。

 

hadoop1.2.1版本過低,jobtracker的調(diào)度能力不強(qiáng),當(dāng)slvers過多時(shí)容易成為瓶頸。使用新版本2.6.4是個(gè)不錯(cuò)的選擇。

停掉進(jìn)程,刪除文件:

server7

#bin/stop-all.sh

#cd /home/hadoop

#rm -fr hadoop java hadoop-1.2.1 java1.6.32

#rm -fr /tmp/*

從機(jī)上

#bin/hadoop-daemon.sh stop datanode

#bin/hadoop-daemon.sh stop tasktracker

#rm -fr /tmp/*

 

下面操作與上面基本相同

server7上,/home/hadoop/hadoop用戶

#tar zxf jdk-7u79-linux-x64.tar.gz -C /home/hadoop/

#ln -s jdk1.7.0.79 java

#tar zxf hadoop-2.6.4.tar.gz

#ln -s hadoop-2.6.4 hadoop

#cd hadoop/etc/hadoop

#vim hadoop-env.sh

 export JAVA_HOME=/home/hadoop/java

 export HADOOP_PREFIX=/home/hadoop/hadoop

#cd /home/hadoop/hadoop

#mkdir input

#cp etc/hadoop/*.xml input

#bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar grep input output dfs[a-z.]+

#cat output/*

 大數(shù)據(jù)分布式計(jì)算--hadoop

 

grep編譯時(shí)會(huì)有warning,當(dāng)集群大時(shí)可能會(huì)出現(xiàn)問題。需要添加hadoop-native。

#tar -xf hadoop-native-64.2.6.0.tar -C hadoop/lib/native/

#bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar grep input output dfs[a-z.]+

再編譯沒有warning 


#cd etc/hadoop

#vim slaves    

 172.25.0.8

 172.25.0.9

#vim etc/hadoop/core-site.xml

  <property>

     <name>fs.defaultFS</name>

         <value>hdfs://172.25.0.7:9000</value>

           </property>

 

#vim hdfs-site.xml

<property>

        <name>dfs.replication</name>

                <value>2</value>

        </property>

#bin/hdfs namenode -format

#sbin/start-dfs.sh

#jps

 大數(shù)據(jù)分布式計(jì)算--hadoop

 

#ps -ax 可看到namenodesecondarynamenode進(jìn)程

大數(shù)據(jù)分布式計(jì)算--hadoop

 

#bin/hdfs dfs -mkdir /user/hadoop

#bin/hdfs dfs -put input/ test

web上可看到input以上傳。

大數(shù)據(jù)分布式計(jì)算--hadoop

 

MapReduce 的 JobTracker/TaskTracker 機(jī)制需要大規(guī)模的調(diào)整來修復(fù)它在可擴(kuò)展性,內(nèi)存消耗,線程模型,可靠性和性能上的缺陷

為從根本上解決舊 MapReduce 框架的性能瓶頸,促進(jìn) Hadoop 框架的更長(zhǎng)遠(yuǎn)發(fā)展,從 0.23.0 版本開始,Hadoop 的 MapReduce 框架完全重構(gòu),發(fā)生了根本的變化。新的 Hadoop MapReduce 框架命名為 MapReduceV2 或者叫 Yarn

#vim etc/hadoop/yarn-site.xml

   < property>

       <name>yarn.resourcemanager.hostname</name>

           <value>server7.example.com</value>

           </property>

#sbin/start-yarn.sh

#jps

 大數(shù)據(jù)分布式計(jì)算--hadoop

 

server8可看到進(jìn)程已啟動(dòng)

 大數(shù)據(jù)分布式計(jì)算--hadoop

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI