您好,登錄后才能下訂單哦!
Hadoop是一個由Apache基金會所開發的分布式系統基礎架構。用戶可以在不了解分布式底層細節的情況下,開發分布式程序。充分利用集群的威力進行高速運算和存儲。
Hadoop 核心項目提供了在低端硬件上構建云計算環境的基礎服務,它也提供了運行在這個云中的軟件所必須的 API 接口。
Hadoop 內核的兩個基本部分是 MapReduce 框架,也就是云計算環境,和 HDFS分布式文件系統 。在 Hadoop 核心框架中,MapReduce 常被稱為 mapred,HDFS 經常被稱為 dfs。。HDFS為海量的數據提供了存儲,MapReduce為海量的數據提供了計算。
MapReduce 的核心概念是把輸入的數據分成不同的邏輯塊, Map 任務首先并行的對每一塊進行單獨的處理。這些邏輯塊的處理結果會被重新組合成不同的排序的集合,這些集合最后由 Reduce 任務進行處理。
HDFS分布式文件系統有高容錯性的特點,并且設計用來部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有著超大數據集(large data set)的應用程序。HDFS放(relax)POSIX的要求,可以以流的形式訪問(streaming access)文件系統中的數據。
參考:hadoop.appache.org
實驗環境rhel6.5
主機server7,從機server8.server9 注:各機都必須域名相互解析。
安裝及基本配置
各機創建uid為900 的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 //創建分布式文件系統
#cd ..
#bin/hadoop jar hadoop-examples-1.2.1.jar
列出了hadoop-example-1.2.1jar對input操作的相關參數,如grep查找,sort排序,wordcount計數等。
#bin/hadoop jar hadoop-examples-1.2.1.jar grep input output 'dfs[a-z.]+' //查找inout中文件名開頭為dfs后面為小寫英文的文件,將結果存入自動生成的output文件夾中
#cd output/
#ls
#cat *
再介紹下hadoop的三種工作模式
單機模式(standalone)
單機模式是Hadoop的默認模式,當首次解壓Hadoop的源碼包時,Hadoop無法了解硬件安裝環境,便保守地選擇了最小配置。在這種默認模式下所有3個XML文件均為空。當配置文件為空時,Hadoop會完全運行在本地。因為不需要與其他節點交互,單機模式就不使用HDFS,也不加載任何Hadoop的守護進程。該模式主要用于開發調試MapReduce程序的應用邏輯。
偽分布模式(Pseudo-Distributed Mode)
偽分布模式在“單節點集群”上運行Hadoop,其中所有的守護進程都運行在同一臺機器上。該模式在單機模式之上增加了代碼調試功能,允許你檢查內存使用情況,HDFS輸入輸出,以及其他的守護進程交互。
完全分布式模式
Hadoop守護進程運行在一個集群上。
上面的操作為單機模式。
Hadoop分布式部署
結構:
主節點包括名稱節點(namenode)、從屬名稱節點(secondarynamenode)和 jobtracker 守護進程(即所謂的主守護進程)以及管理集群所用的實用程序和瀏覽器。
從節點包括 tasktracker 和數據節點(從屬守護進程)。兩種設置的不同之處在于,主節點包括提供 Hadoop 集群管理和協調的守護進程,而從節點包括實現Hadoop 文件系統(HDFS )存儲功能和 MapReduce 功能(數據處理功能)的守護進程。
每個守護進程在 Hadoop 框架中的作用:
namenode 是 Hadoop 中的主服務器,它管理文件系統名稱空間和對集群中存儲的文件的訪問。
secondary namenode ,它不是namenode 的冗余守護進程,而是提供周期檢查點和清理任務。
在每個 Hadoop 集群中可以找到一個 namenode 和一個 secondary namenode。
datanode 管理連接到節點的存儲(一個集群中可以有多個節點)。每個存儲數據的節點運行一個 datanode 守護進程。
每個集群有一個 jobtracker ,它負責調度 datanode 上的工作。
每個 datanode 有一個tasktracker,它們執行實際工作。
jobtracker 和 tasktracker 采用主-從形式,jobtracker 調度datanode 分發工作,而 tasktracker 執行任務。jobtracker 還檢查請求的工作,如果一個datanode 由于某種原因失敗,jobtracker 會重新調度以前的任務。
下面實現偽分布式
為了方便,進行ssh免密碼設置。
Server7上hadoop用戶。
#ssh-keygen
#ssh-copy-id localhost
#ssh localhost //免密碼登陸本機
修改配置文件:
#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> //指定文件保存的副本數,由于是偽分布式所以副本就是本機1個。
#cd ..
#bin/hadoop namenode -format //格式化namenode
#bin/start-dfs.sh //啟動hdfs
#jps //查看進程
可看到secondarynamenode,namenode,datanode都以啟動。Namenode與datanode在同一臺機器上,所以是偽分布式。
#bin/start-mapred.sh.sh //啟動mapreduce
#bin/hadoop fs -put input test //上傳input到hdfs并在hdfs中更名為test
瀏覽 NameNode 和 JobTracker 的網絡接口,它們的地址默認為:
NameNode – http://172.25.0.7:50070/
JobTracker – http://172.25.0.7:50030/
查看namenode
#bin/hadoop fs -ls test //列出hdfs中test目錄下的文件
Web上查看test下的文件
下面實現完全分布式模式
主從機上都安裝nfs-utils并啟動rpcbind服務(主要是在nfs共享時候負責通知客戶端,服務器的nfs端口號的。簡單理解rpc就是一個中介服務),從機通過nfs直接使用hadoop免去安裝配置。
在server7上,啟動nfs服務
#vim /etc/exports
/home/hadoop *(rw,all_squash,anonuid=900,anongid=900
//共享hadoop,對登陸用戶指定id,用戶以uid為900的用戶登陸
server8,9上
#mount 172.25.0.7:/home/hadoop /hooem/hadoop/ //掛載共享目錄
server7上,hadoop用戶,更改hadoop/conf下的hdfs-site,將副本數由1改為2。
#cd hadoop/conf
#vim slave 添加從機
172.25.0.8
172.25.0.9
#vim master 設置主機
172.25.0.7
啟動完全分布式模式前要格式化偽分布式文件系統
#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連接。
#bin/start-mapred.sh
新增了jobtracker進程
server8上,jps可看到三個進程jps,datanode,tasktracker
從機可以上傳,查詢等
#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信息
由于hadoop下未增加文件,所以dfs used%均為0%
#dd if=/dev/zero of=bigfile bs=1M count=200
#bin/hadoop fs -put bigfile test
在web上看到dfs used為403.33MB(兩從機,每個為200MB)
注:有時候操作錯誤導致hadoop進入安全模式,無法進行上傳等操作
只需運行下行指令即可
#bin/hadoop dfsadmin -safemode leave
hadoop支持實時擴展,可在線添加從機。
新增從機server10。安裝nfs-utils,啟動rpcbind服務。添加uid900的hadoop用戶,掛載server7的hadoop并在hadoop/conf下的slaves添加172.25.0.10。
注:必須在添加server10之前在主從機上添加server10的hostname解析。
server10上,hadoop用戶
#bin/hadoop-daemon.sh start datanode
#bin/hadoop-daemon.sh start tasktracker
server7上,
#bin/hadoop dfsadmin -report
可看到server10的信息
可看到server10 dfs used為0,可以將server9的數據移到server10中。
數據遷移:
數據遷移是將很少使用或不用的文件移到輔助存儲系統的過程。
hadoop 在線刪除 server9 datanode 節點可實現數據遷移:
#bin/hadoop-daemon.sh stop tasktracker //在做數據遷移時,此節點不要參與 tasktracker,否則會出現異常
在 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下創建datanode-excludes,添加需要刪除的主機,一行一個
#vim datanode-excludes
172.25.0.9 //刪除節點server9
#cd ..
#bin/hadoop dfsadmin -refreshNodes //在線刷新節點
#bin/hadoop dfsadmin -report
可看到server9 狀態:Decommission in progress,
若要在線刪除tasktracker節點
在server7上修改 conf/mapred-site.xml
<property>
<name>mapred.hosts.exclude</name>
<value>/home/hadoop/hadoop-1.0.4/conf/tasktracker-excludes</value></property>
創建 tasktracker-excludes 文件,并添加需要刪除的主機名,一行一個
server9.example.com
#bin/hadoop mradmin -refreshNodes
等此節點的狀態顯示為 Decommissioned,數據遷移完成,可以安全關閉了。
hadoop1.2.1版本過低,jobtracker的調度能力不強,當slvers過多時容易成為瓶頸。使用新版本2.6.4是個不錯的選擇。
停掉進程,刪除文件:
server7上
#bin/stop-all.sh
#cd /home/hadoop
#rm -fr hadoop java hadoop-1.2.1 java1.6.32
#rm -fr /tmp/*
從機上
#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/*
grep編譯時會有warning,當集群大時可能會出現問題。需要添加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
#ps -ax 可看到namenode與secondarynamenode進程
#bin/hdfs dfs -mkdir /user/hadoop
#bin/hdfs dfs -put input/ test
web上可看到input以上傳。
MapReduce 的 JobTracker/TaskTracker 機制需要大規模的調整來修復它在可擴展性,內存消耗,線程模型,可靠性和性能上的缺陷
為從根本上解決舊 MapReduce 框架的性能瓶頸,促進 Hadoop 框架的更長遠發展,從 0.23.0 版本開始,Hadoop 的 MapReduce 框架完全重構,發生了根本的變化。新的 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
server8可看到進程已啟動
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。