前言:
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
export HADOOP_PREFIX=/bdapps/hadoop export PATH=$PATH:${HADOOP_PREFIX}/bin:${HADOOP_PREFIX}/sbin export HADOOP_YARN_HOME=${HADOOP_PREFIX} export HADOOP_MAPPERD_HOME=${HADOOP_PREFIX} export HADOOP_COMMON_HOME=${HADOOP_PREFIX} export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
. /etc/profile.d/hadoop.sh
2.创建运行Hadoop进程的用户和相关目录
[root@node2 hadoop]# groupadd hadoop [root@node2 hadoop]# useradd -g hadoop yarn [root@node2 hadoop]# useradd -g hadoop hdfs [root@node2 hadoop]# useradd -g hadoop mapred 创建数据和日志目录 [root@node2 hadoop]# mkdir -pv /data/hadoop/hdfs/{nn,snn,dn} [root@node2 hadoop]# chown -R hdfs:hadoop /data/hadoop/hdfs/ [root@node2 hadoop]# cd /bdapps/hadoop [root@node2 hadoop]# mkdir logs [root@node2 hadoop]# chmod g+w logs [root@node2 hadoop]# chown -R yarn:hadoop ./*
3.配置hadoop
core-site.xml包含了NameNode主机地址以及监听RPC端口信息,对于伪分布式模型的安装来说,其主机地址为localhost,NameNode默认使用的RPC端口为8020
vim etc/hadoop/core-site.xml
fs.defaultFS hdfs://localhost:8020 true
配置hdfs的相关属性:例如复制因子(数据块的副本)、NN和DN用于存储数据的目录等。数据块的副本对于伪分布式的Hadoop应该为1,
而NN和DN用于存储的数据的目录为前面的步骤中专门为其创建的路径。
[root@node2 hadoop]# vim etc/hadoop/hdfs-site.xml
dfs.replication //dfs的副本数量1 dfs.namenode.name.dir file:///data/hadoop/hdfs/nn dfs.datanode.data.dir file:///data/hadoop/hdfs/dn fs.checkpoint.dir file:///data/hadoop/hdfs/snn fs.checkpoint.edits.dir file:///data/hadoop/hdfs/snn
配置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
mapreduce.framework.name yarn
配置YARN进程及YARN相关属性,首先执行ResourceManager守护进程的主机和监听的端口。
对于伪分布式模型来讲,其主机为localhost,默认的端口为8032;其次指定ResourceManager使用的scheduler,以及NodeManager的辅助任务。
[root@node2 hadoop]# vim etc/hadoop/yarn-site.xml
yarn.resourcemanager.address localhost:8032 yarn.resourcemanager.scheduler.address localhost:8030 yarn.resourcemanager.resource-tracker.address localhost:8031 yarn.resourcemanager.admin.address localhost:8033 yarn.resourcemanager.webapp.address localhost:8088 yarn.nodemanager.aux-services mapreduce_shuffle yarn.nodemanager.auxservices.mapreduce_shuffle.class org.apache.hadoop.mapred.ShuffleHandler yarn.resourcemanager.scheduler.class org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
配置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
Found 1 items
-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添加一项属性定义。
dfs.permissions false
[root@node2 test]# su - yarn [yarn@localhost ~]$ yarn-daemon.sh start resourcemanager starting resourcemanager, logging to /bdapps/hadoop/logs/yarn-yarn-resourcemanager-localhost.out [yarn@localhost ~]$ yarn-daemon.sh start nodemanager starting nodemanager, logging to /bdapps/hadoop/logs/yarn-yarn-nodemanager-localhost.out [yarn@localhost ~]$ jps 5191 Jps 5068 NodeManager 4829 ResourceManager
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-p_w_picpath
|________> 合并为新的fs-p_w_picpath
EditLog滚动一次 ------>取出 |
|
覆盖原有的fs-p_w_picpath__________________|
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.创建用户和相关目录
3.配置hadoop
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
4.格式化HDFS
[hdfs@localhost ~]$ hdfs namenode -format
/data/hadoop/hdfs/nn has been successfully formatted.
5.启动hadoop
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
6.Web UI概览
HDFS和YARN ResourceManager各自提供了Web接口。
HDFS-NameNode:http://NameNodeHost:50070/
YARN-ResourceManager http://ResourceManagerHost:8088
帮助文档:http://hadoop.apache.org/docs/r2.6.5/