前言:
hadoop:存儲和處理平台
hdfs:叢集,NN,SNN,DN //SNN:将HDFS的日志和映像進行合并操作
mapreduce: 叢集,有中心node,jobTracker/Task tracker,
jT:叢集資源管理
TT:任務,map,reduce
hadoop 2.0
YARN:叢集資源管理,分割
MapReduce:資料處理
RN,NM,AM //RN:資源節點,NM:節點管理,AM:資源代理
container:mr任務
Tez:execution engine
MR:batch
能夠對NN節點做HA,YARN也可以高可用了
一、2.0工作模型
==================================================
A 【NM/Container A /APP M(B)】
\ /
【RM】 -- 【NM/Container B /APP M(A)】
/ \
B 【NM/Container A&A /】
client-->RM--->node1/node2/node n...
Resouce Manager: RM是獨立的
node上運作的有[node manager+App Master+ Container] //NM+AM
Node manager:NM,運作在各node上,周期向RM報告node資訊
clinet請求作業:node上的Application master決定要啟動幾個mapper 幾個 reducer
mapper和reducer 稱為 Container //作業都在容器内運作。
Application master隻有一個,且同一個任務的APP M隻在一個節點上,但是Container會分别運作在多個節點上,并周期向APP M報告其處理狀态
APP M向RM報告任務運作狀況,在任務執行完畢後,RM會把APP M關閉
某一個任務故障後,由App M進行管理,而不是RM管理
RM是全局的,NM在每一個節點上是唯一的,一個程式的AM隻有一個,但是contianer需要在多個node上
Hadoop 1.0 和 2.0
1.0 2.0
================ =================
/MR/Pig/Hive|
pig/Hive/Others [Tez ]RT/Service(HBase)
[MapReduce ] [YARN ]
[HDFS ] [HDFS2 ]
在Hadoop v1的時候:
Mapreduce是:
1.開發API
2.運作架構
3.運作環境
二、Hadoop的安裝
1.單機模型:測試使用
2.僞分布式模型:運作于單機
3.分布式模型:叢集模型
Hadoop:基于java語言,需要依賴于jvm
hadoop-2.6.2:jdk 1.6+
hadoop-2.7 jdk 1.7+
1.環境
vim /etc/profile.d/java.sh
JAVA_HOME=/usr
yum install java-1.8.0-openjdk-devel.x86_64
每一個java程式在運作的時候,都會啟動一個jvm,需要配置其堆記憶體。
新生代,老年代,持久代 //垃圾收集器
slaves:
一個DN;data node,對于yarn來說是node manager
tar xvf hadoop-2.6.2.tar.gz -C /bdapps/
cd /bdapps/
ln -sv hadoop-2.6.2/ hadoop
cd hadoop
vim /etc/profile.d/hadoop.sh
<code>export HADOOP_PREFIX=/bdapps/hadoop</code>
<code>export PATH=$PATH:${HADOOP_PREFIX}/bin:${HADOOP_PREFIX}/sbin</code>
<code>export HADOOP_YARN_HOME=${HADOOP_PREFIX}</code>
<code>export HADOOP_MAPPERD_HOME=${HADOOP_PREFIX}</code>
<code>export HADOOP_COMMON_HOME=${HADOOP_PREFIX}</code>
<code>export HADOOP_HDFS_HOME=${HADOOP_PREFIX}</code>
. /etc/profile.d/hadoop.sh
2.建立運作Hadoop程序的使用者和相關目錄
<code>[root@node2 hadoop]# groupadd hadoop</code>
<code>[root@node2 hadoop]# useradd -g hadoop yarn</code>
<code>[root@node2 hadoop]# useradd -g hadoop hdfs</code>
<code>[root@node2 hadoop]# useradd -g hadoop mapred</code>
<code>建立資料和日志目錄</code>
<code>[root@node2 hadoop]# mkdir -pv /data/hadoop/hdfs/{nn,snn,dn}</code>
<code>[root@node2 hadoop]# chown -R hdfs:hadoop /data/hadoop/hdfs/</code>
<code>[root@node2 hadoop]# cd /bdapps/hadoop</code>
<code>[root@node2 hadoop]# mkdir logs</code>
<code>[root@node2 hadoop]# chmod g+w logs</code>
<code>[root@node2 hadoop]# chown -R yarn:hadoop ./*</code>
3.配置hadoop
core-site.xml包含了NameNode主機位址以及監聽RPC端口資訊,對于僞分布式模型的安裝來說,其主機位址為localhost,NameNode預設使用的RPC端口為8020
vim etc/hadoop/core-site.xml
<code><configuration></code>
<code> </code><code><property></code>
<code> </code><code><name>fs.defaultFS</name></code>
<code> </code><code><value>hdfs:</code><code>//localhost:8020</value></code>
<code> </code><code><final></code><code>true</code><code></final></code>
<code> </code><code></property></code>
<code></configuration></code>
配置hdfs的相關屬性:例如複制因子(資料塊的副本)、NN和DN用于存儲資料的目錄等。資料塊的副本對于僞分布式的Hadoop應該為1,
而NN和DN用于存儲的資料的目錄為前面的步驟中專門為其建立的路徑。
[root@node2 hadoop]# vim etc/hadoop/hdfs-site.xml
<code> </code><code><property> </code>
<code> </code><code><name>dfs.replication</name> </code><code>//dfs的副本數量</code>
<code> </code><code><value>1</value></code>
<code><proporty></code>
<code> </code><code><name>dfs.namenode.name.dir</name></code>
<code> </code><code><value>file:</code><code>///data/hadoop/hdfs/nn</value></code>
<code></property></code>
<code> </code><code><proporty></code>
<code> </code><code><name>dfs.datanode.data.dir</name></code>
<code> </code><code><value>file:</code><code>///data/hadoop/hdfs/dn</value></code>
<code> </code><code><name>fs.checkpoint.dir</name></code>
<code> </code><code><value>file:</code><code>///data/hadoop/hdfs/snn</value></code>
<code> </code><code><name>fs.checkpoint.edits.dir</name></code>
配置MapReduce framework,此應該指定使用yarn,另外的可用值還有local和classic
[root@node2 hadoop]# cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
[root@node2 hadoop]# vim etc/hadoop/mapred-site.xml
<code> </code><code><name>mapreduce.framework.name</name></code>
<code> </code><code><value>yarn</value></code>
配置YARN程序及YARN相關屬性,首先執行ResourceManager守護程序的主機和監聽的端口。
對于僞分布式模型來講,其主機為localhost,預設的端口為8032;其次指定ResourceManager使用的scheduler,以及NodeManager的輔助任務。
[root@node2 hadoop]# vim etc/hadoop/yarn-site.xml
<code><!-- Site specific YARN configuration properties --></code>
<code> </code><code><name>yarn.resourcemanager.address</name></code>
<code> </code><code><value>localhost:8032</value></code>
<code> </code><code><name>yarn.resourcemanager.scheduler.address</name></code>
<code> </code><code><value>localhost:8030</value></code>
<code> </code><code><name>yarn.resourcemanager.resource-tracker.address</name></code>
<code> </code><code><value>localhost:8031</value></code>
<code> </code><code><name>yarn.resourcemanager.admin.address</name></code>
<code> </code><code><value>localhost:8033</value></code>
<code> </code><code><name>yarn.resourcemanager.webapp.address</name></code>
<code> </code><code><value>localhost:8088</value></code>
<code> </code><code><name>yarn.nodemanager.aux-services</name></code>
<code> </code><code><value>mapreduce_shuffle</value></code>
<code> </code><code><name>yarn.nodemanager.auxservices.mapreduce_shuffle.</code><code>class</code><code></name></code>
<code> </code><code><value>org.apache.hadoop.mapred.ShuffleHandler</value></code>
<code> </code><code><name>yarn.resourcemanager.scheduler.</code><code>class</code><code></name></code>
<code> </code><code><value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value></code>
配置hadoop-devn.sh和yarn-env.sh--預設即可
Hadoop的各守護程序依賴于JAVA_HOME, Hadoop大多數守護程序的堆記憶體大小為1G
可根據需求調整。
slaves:定義hdfs的從節點清單--預設為本機
4.格式化HDFS
假如hdfs-site.xml 中的dfs.namenode.name.dir目錄不存在,格式化會建立之
如果實作存在:需要確定其權限設定正确,格式化會清除其内部資料并重建立立檔案系統
切換hdfs使用者的身份執行
[root@node2 hadoop]# su - hdfs
hdfs指令分類:
User Commands
dfs:檔案系統指令,,rm,cat,put,get,rmr,ls,cp,du,...
hdfs dfs -put localfile /user/hadoop/hadoopfile
fetchdt
fsck
version
Administration Commands
balancer
datanode
dfsadmin
mover
namenode
secondarynamenode
簡單配置拍錯:不能在/data目錄下生成檔案
解決步驟:
1.diff 指令,把配置檔案頭部的空白全部删除
vim
::%s/^[[:space:]]\+//
[hdfs@localhost ~]$ hdfs namenode -format
/data/hadoop/hdfs/nn has been successfully formatted.
5.啟動hadoop //NN,DN,SNN,RM,NM
NameNode: hadoop-daemon.sh start/stop namenode
DataNode: hadoop-daemon.sh start/stop datanode
Secondary NameNode: hadoop-daemon.sh start/stop secondarynamenode
ResourceManager: yarn-daemon.sh start/stop resourcemanager
NodeManager: yarn-daemon.sh start/stop nodemanager
啟動HDFS服務
HDFS有三個守護程序:
namenode、datanode、secondarynamenode都可以通過hadoop daemon.sh
YARN有兩個守護程序:
resourcemanager和nodemanager,都可以通過yarn-daemon.sh 腳本啟動
[hdfs@localhost ~]$ hadoop-daemon.sh start namenode
starting namenode, logging to /bdapps/hadoop/logs/hadoop-hdfs-namenode-localhost.o
[hdfs@localhost ~]$ jps //java的ps指令
4215 NameNode
4255 Jps
[hdfs@localhost ~]$ hadoop-daemon.sh start secondarynamenode
starting secondarynamenode, logging to /bdapps/hadoop/logs/hadoop-hdfs-secondarynamenode-localhost.out
[hdfs@localhost ~]$ hadoop-daemon.sh start datanode
starting datanode, logging to /bdapps/hadoop/logs/hadoop-hdfs-datanode-localhost.ou
//此時就可以上傳檔案了
[hdfs@localhost ~]$ hdfs dfs -mkdir /test //建立組
[hdfs@localhost ~]$ hdfs dfs -ls /
Found 1 items
drwxr-xr-x - hdfs supergroup 0 2017-05-13 22:18 /te
[hdfs@localhost ~]$ hdfs dfs -put /etc/fstab /test/
[hdfs@localhost ~]$ hdfs dfs -ls /test
-rw-r--r-- 1 hdfs supergroup 537 2017-05-13 22:21 /test/fstab
cat /data/hadoop/hdfs/dn/current/BP-1163334701-127.0.0.1-1494676927122/current/finalized/subdir0/subdir0/blk_1073741825
//可以進行檢視
hdfs dfs -cat /test/fstab //也可以檢視内容一樣
//檔案過大的話,會被切割成n塊。
注意:如果要其他使用者對hdfs有寫入權限,需要在hdfs-site.xml添加一項屬性定義。
<code><property></code>
<code> </code><code><value>dfs.permissions</name></code>
<code> </code><code><value></code><code>false</code><code></value></code>
<code>[root@node2 test]# su - yarn</code>
<code>[yarn@localhost ~]$ yarn-daemon.sh start resourcemanager</code>
<code>starting resourcemanager, logging to /bdapps/hadoop/logs/yarn-yarn-resourcemanager-localhost.</code><code>out</code>
<code>[yarn@localhost ~]$ yarn-daemon.sh start nodemanager</code>
<code>starting nodemanager, logging to /bdapps/hadoop/logs/yarn-yarn-nodemanager-localhost.</code><code>out</code>
<code>[yarn@localhost ~]$ jps</code>
<code>5191 Jps</code>
<code>5068 NodeManager</code>
<code>4829 ResourceManager</code>
6.Web UI概覽
HDFS和YARN ResourceManager各自提供了Web接口。
HDFS-NameNode:http://NameNodeHost:50070/
YARN-ResourceManager http://ResourceManagerHost:8088
http://192.168.4.105:50070/dfshealth.html#tab-overview
YARN-ResourceManager:隻監聽在127.0.0.1,
EditLog的内容:
NameNode SecondaryNameNode
fs-image
|________> 合并為新的fs-image
EditLog滾動一次 ------>取出 |
|
覆寫原有的fs-image__________________|
secondaryNameNode:合并NameNode上的Editlog合并到fs-imange上,以保證持久影響檔案上,盡可能多的保持多的資訊
真正的使用中繼資料在NameNode的記憶體中,假如資料發生修改,會追加到editlog中
firefox localhost:8088 &
Applications
SUBMITED:已經送出的作業
ACCEPTED:接受的作業
RUNNING
FINISHED
FAILED:失敗的
KILLED:
//SecnondaryNameNode從NameNode中取得
7.運作測試程式
[root@localhost mapreduce]# su - hdfs
[hdfs@localhost ~]$ cd /bdapps/hadoop/share/hadoop/mapreduce/
yarn jar hadoop-mapreduce-examples-2.6.2.jar //有很多測試程式
hdfs dfs -ls /test/fstab.out //檢視
hdfs dfs -cat /test/fstab.out/paprt-r-00000 //檢視
//統計每個單詞的出現次數
小結
1.配置環境
java.sh hadoop.sh
2.建立使用者和相關目錄
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
5.啟動hadoop
幫助文檔:http://hadoop.apache.org/docs/r2.6.5/
本文轉自MT_IT51CTO部落格,原文連結:http://blog.51cto.com/hmtk520/1944015,如需轉載請自行聯系原作者