一.Hadoop 2.x概述
1.hadoop的來源
Hadoop的産生主要來源于Google的三篇論文,如下:
GFS ——-> HDFS
MapReduce ————>MapReduce
BigTable ———–>Hbase
2.hadoop是什麼
簡言之,Hadoop是大規模資料處理,主要是存儲、計算、資源排程等功能。http://hadoop.apache.org
3.Hadoop的組成
Common:為其他Hadoop子產品提供服務
HDFS:分布式檔案系統,用于存儲海量資料,主要特點是分布式(多主機存儲)、安全性(副本資料,一般是3個副本),資料以block形式存儲,資料塊大小預設是128M
MapReduce:一個分布式的離線計算架構,對海量資料進行處理,主要思想是分而治之,将大資料集拆分成小的資料集,然後對每個資料集進行邏輯業務處理(map),合并統計資料結果(reduce)
Yarn:一個分布式資源管理和任務排程架構,例如管理整個叢集資源(cpu數,記憶體)、配置設定排程叢集的資源
4.HDFS系統架構圖
hdfs是以主-從節點運作。
namenode:主節點,存放中繼資料資訊,比如檔案名、檔案的目錄結構、檔案屬性、每個檔案塊清單以及塊所在的datanode等。**注意:**namenode的中繼資料一部分存放在記憶體中,一部分在磁盤上(例如:fsimage(鏡像檔案)和edits(編輯日志))
datanode:從節點,存放的是資料塊以及資料塊的校驗和
Secondary NameNode: 用來監控HDFS狀态的輔助背景程式,每隔一段時間擷取HDFS中繼資料的快照
5.Yarn架構圖
ResourceManager:處理用戶端請求;啟動/監控ApplicationMaster;監控NodeManager;資源配置設定與排程
ApplicationMaster:資料切分;為應用程式申請資源,并配置設定給内部任務;任務監控與容錯
NodeManager:單個節點上的資源管理;處理來自ResourceManager的指令;處理來自ApplicationMaster的指令
Container:對任務運作環境的抽象,封裝了CPU、記憶體等多元資源以及環境變量、啟動指令等任務運作相關的資訊
6.離線計算架構MapReduce
1)将計算過程分為兩個階段,map階段和reduce階段
map:并行處理輸入資料(分)
reduce:對map結果進行合并(合)
2)shuffle連接配接map和reduce階段
map task将資料寫到本地磁盤
reduce task從每個task上讀取一份資料
3)僅适合離線批處理
具有很好的容錯性和擴充性
适合簡單的批處理任務
4)缺點明顯
啟動開銷大、過多使用磁盤導緻效率較低
7.MapReduce on Yarn
1)client送出application給RM
2)RM為application找到一個NM,在其container中啟動APP master
3)App master向RM注冊
4)App master向RM申請application所需資源
5)App master通知NM啟動container,将相應資源放入container中
6)NM啟動Map或者Reduce任務
7)NM像APP master反應map或者reduce任務的狀态或者進度
8)App master告知RM任務完成了,可以銷毀了
二.Hadoop 2.x生态系統
Sqoop:關系型的資料庫把資料存儲到HDFS上。
Flume:日志檔案的收集
MapReduce不是那麼好寫,門檻比較高,又有了Hive
Oozie:任務的管理與排程
Clodera Manager:整個叢集資源的管理界面
Zookeeper:協作架構
Hue:web架構
三.Hadoop的環境配置
1.環境準備
1)删除系統預設的Java版本(需要切換到root)
$>rpm -qa|grep java //檢視 open jdk
$>rpm -e --nodeps 檔案名 //強制解除安裝
2)解壓Java包
$>tar -zvf jdk-u67-linux-x64.tar.gz -C /soft
3)建立符号連結
$>ln -s java jdk1._67
4)配置Java環境變量(/etc/profile)
......
export JAVA_HOME=/soft/java
export PATH=$PATH:$JAVA_HOME/bin
5)使配置檔案生效
$>source /etc/profile
6)驗證Java環境是否配置成功
$>java -version
2.環境搭建
1)本地模式
1.解壓Hadoop包
$>tar -zvf hadoop-.tar.gz -C /soft
2)配置etc/hadoop/hadoop-env.sh(配置Java環境,已防萬一)
3)測試運作
$ mkdir input
$ cp etc/hadoop/*.xml input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-..jar grep input output 'dfs[a-z.]+'
$ cat output/*
2)僞分布式
1.配置etc/hadoop/core-site.xml
<configuration>
#配置hdfs檔案系統
<property>
<name>fs.defaultFS</name>
<value>hdfs://s201:8020</value>
</property>
#配置Hadoop的臨時目錄
<property>
<name>hadoop.tmp.dir</name>
<value>/soft/hadoop/tmp</value>
</property>
</configuration>
2.配置etc/hadoop/hdfs-site.xml
#配置儲存檔案副本數
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
3.格式化檔案系統
$ bin/hdfs namenode -format
4.啟動NameNode和DataNode
$ sbin/hadoop-daemon.sh start namenode //單獨啟動namenode
$ sbin/hadoop-daemons.sh start datanode //單獨啟動datanode
$ sbin/start-dfs.sh //同時啟動namenode和datanode
5.以下可參考官方文檔了
http://hadoop.apache.org/docs/r2.7.4/hadoop-project-dist/hadoop-common/SingleCluster.html#Installing_Software
6.配置etc/hadoop/yarn-site.xml
<configuration>
#配置mapreduce程式
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
#配置resourcemanager所在節點
<property>
<name>yarn.resourcemanager.hostname</name>
<value>s201</value>
</property>
</configuration>
7.配置etc/hadoop/mapred-site.xml
#配置計算架構為yarn,預設是本地
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
注意:監控界面:HDFS端口是主機名+50070,resourcemanager的端口是主機名+8088
四.初識MapReduce應用
1.曆史伺服器
啟動:
$>sbin/mr-jobhistory-daemon.sh start historyserver
停止:
$>sbin/mr-jobhistory-daemon.sh stop historyserver
2.日志聚集
應用運作完成以後,将日志資訊上傳到HDFS系統上
需要配置yarn-site.xml
<configuration>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>360</value>
</property>
</configuration>
3.垃圾回收間隔
配置core-site.xml
<configuration>
<property>
<name>fs.trash.interval</name>
<value>600</value>
</property>
</configuration>
4.啟動方式
1)各個服務元件逐一啟動
* hdfs
hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
* yarn
yarn-daemon.sh start|stop resourcemanager|nodemanager
* mapreduce
mr-historyserver-daemon.sh start|stop historyserver
2)各個子產品分開啟動
* hdfs
start-dfs.sh
stop-dfs.sh
* yarn
start-yarn.sh
stop-yarn.sh
3)全部啟動(不推薦)
start-all.sh
stop-all.sh
5.ssh免密登入
1)生成密鑰對
$>ssh-keygen -t rsa
2)拷貝檔案到需要登入的機器上
$>ssh-copy-id s202
6.各個服務元件運作在那個配置中
NameNode
core-site.xml
fs.defaultFS
hdfs://s201:8020
DataNodes
slaves
s202
s203
s204
SecondaryNameNode
hdfs-site.xml
dfs.namenode.secondary.http-address
s204:50090
YARN
ResourceManager
yarn-site.xml
yarn.resourcemanager.hostname
s201
NodeManagers
slaves
s202
s203
s204
MapReduce HistoryServer
mapred-site.xml
mapreduce.jobhistory.address
s201:10020
mapreduce.jobhistory.webapp.address
s201:19888