2Hadoop管理课案.docx
- 文档编号:24117663
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:22
- 大小:470.18KB
2Hadoop管理课案.docx
《2Hadoop管理课案.docx》由会员分享,可在线阅读,更多相关《2Hadoop管理课案.docx(22页珍藏版)》请在冰豆网上搜索。
2Hadoop管理课案
Hadoop管理
一、实验目的
1、熟悉Hadoop文件结构。
2、了解Hadoop集群运行状态。
3、掌握Hadoop集群管理监控管理工具。
4、掌握Hadoop日常监控维护管理的相关方法。
二、实验原理
Hadoop中的分布式文件系统HDFS由一个管理结点(NameNode)和N个数据结点(DataNode)组成,每个结点均是一台普通的计算机。
在使用上同我们熟悉的单机上的文件系统非常类似,一样可以建目录,创建,复制,删除文件,查看文件内容等。
但其底层实现上是把文件切割成Block,然后这些Block分散地存储于不同的DataNode上,每个Block还可以复制数份存储于不同的DataNode上,达到容错容灾之目的。
NameNode则是整个HDFS的核心,它通过维护一些数据结构,记录了每一个文件被切割成了多少个Block,这些Block可以从哪些DataNode中获得,各个DataNode的状态等重要信息。
MapReduce是Google公司的核心计算模型,它将复杂的运行于大规模集群上的并行计算过程高度的抽象到了两个函数,Map和Reduce,这是一个令人惊讶的简单却又威力巨大的模型。
适合用MapReduce来处理的数据集(或任务)有一个基本要求:
待处理的数据集可以分解成许多小的数据集,而且每一个小数据集都可以完全并行地进行处理。
基于它写出来的程序能够运行在由上千台商用机器组成的大型集群上,并以一种可靠容错的方式并行处理T级别的数据集,实现了Haddoop在集群上的数据和任务的并行计算与处理。
个人认为,从HDFS(分布式文件系统)观点分析,集群中的服务器各尽其责,通力合作,共同提供了整个文件系统的服务。
从职责上集群服务器以各自任务分为namenode、datanode服务器.其中namenode为主控服务器,datanode为数据服务器。
Namenode管理所有的datanode数据存储、备份、组织记录分配逻辑上的处理。
说明白点namenode就是运筹帷幄、负责布局指挥将军,具体的存储、备份是由datanode这样的战士执行完成的。
故此很多资料将HDFS分布式文件系统的组织结构分为master(主人)和slaver(奴隶)的关系。
其实和namenode、datanode划分道理是一样的。
从MapReduce计算模型观点分析,Map/Reduce框架和分布式文件系统是运行在一组相同的节点上的,也就是说计算节点和存储节点在一起。
这种配置允许在那些已经存好数据的节点上高效的调度任务,这样可以使整个集群的网络宽带得到非常高效的利用。
另外,在Hadoop中,用于执行MapReduce任务的机器有两个角色:
JobTracker,TaskTracker。
JobTracker(一个集群中只能有一台)是用于管理和调度工作的,TaskTracker是用于执行工作的。
以上对Hadoop体系框架和相应技术做了相应分析,并从HDFS、MapReduce的角度分析了集群中的角色扮演。
对于管理Hadoop集群,维护集群的高效稳定,这些理论既是我们实验的理论基础,也是实验研究Hadoop深层次系统知识体系结构的意义所在。
三、实验内容
本实验主要是从以下四个部分,进行Hadoop管理实验。
1、HDFS目录结构认知
2、HDFS命令工具管理
3、MapReduces作业管理
4、Hadoop集群的维护
5、Ganglia集群监控工具的安装与使用
四、实验步骤
本实验以unbutu14.04,hadoop2.20集群为前提进行实验。
Hadoop集群ip及角色分配如下
10.31.44.117master(namenode)
10.31.44.200slaver1(datanode)
10.31.44.201slaver2(datanode)
第一部分:
HDFS目录结构
•无论是做为开发者还是管理员了解HDFS目录结构都是很重要的一件事情。
•它们可以帮助我们诊断问题、管理HDFS数据
•Namenode的目录结构:
${dfs.name.dir}/current/VERSION
/edits
/fsimage
Hadoop2.2.0namenode具体文件如图所示:
注:
dfs.name.dir是hdfs-site.xml里配置的目录列表。
•通过设置SencondaryNameNode可以解决editslog变大问题
•SencondaryNamenode的目录结构:
${fs.checkpoint.dir}/current/VERSION
/edits
/fsimage
/VERSION
Hadoop2.2.0datanode具体文件如图所示:
•Datanode的目录结构:
Hadoop2.2.0datanode具体文件如图所示:
对比以上效果图,对HDFS文件介绍如下:
namespaceID是文件系统的唯一标示符。
在文件系统第一次被格式化时便会创建,这个标示符也要求各DataNode节点和NameNode节点保持一致。
cTime属性表记录NameNode创建的时间,对于新格式化的存储空间,虽然这里的cTime的属性为0,但是只要文件系统被更新,就会得到一个新的时间戳。
storageType用于指出此存储目录包含一个NameNode的数据结构,在DataNode中它的属性值为DATA_NODE。
layoutVersion是一个负数,定义了HDFS持久数据结构的版本。
每次HDFS的布局发生改变,该版本号就会递减,在这种情况下,HDFS就需要更新升级,因为如果一个新的NameNode或DataNode还处在旧版本上,那么系统就无法正常运行,各节点的版本号要保持一致。
edits:
编辑日志会在客户端执行写操作时,NameNode会先在编辑日志中写下记录,并在内存中保存一个文件系统元数据,元数据会在编辑日志有所改动后进行更新。
编辑日志会在每次成功操作,成功代码尚未返回给客户端之前进行刷新和同步。
fsimage(文件系统镜像)文件是文件系统元数据的持久性检查点。
一个fsimage文件包含以序列化格式存储的文件系统目录和文件inodes。
每个inodes标示一个文件或目录的元数据信息,以及文件的副本数、修改和访问时间等信息。
SecondaryNameNode下的目录和NameNode是一致的,下面我先介绍下SecondaryNameNode的作用,你自然就了解其目录结构内容的用途了。
SecondaryNameNode的任务就是为原NameNode内存中的文件系统元数据产生检查点。
其实SecondaryNameNode是一个辅助NameNode内存中的文件系统数据产生检查点,他从NameNode中复制fsimage和编辑日志到临时目录并定期合成一个新的fsimage,随后将新的fsimage上传到NameNode,这样,NameNode便可更新fsimage并删除原来的编辑日志。
当然当NameNode发生故障时,可以直接从SecondaryNameNode中恢复,从这方面来说可以将其看成NameNode的备份。
第二部分:
HDFS命令工具管理
•HDFS文件系统检查工具FSCK
•用法:
hdfsfsck[GENERIC_OPTIONS]
•命令选项描述
•-move移动受损文件到/lost+found-delete删除受损文件。
•-openforwrite打印出写打开的文件。
•-files打印出正被检查的文件。
•-blocks打印出块信息报告。
•-locations打印出每个块的位置信息。
•-racks打印出data-node的网络拓扑结构。
•hdfsdfsadmin
命令选项
描述
-report
报告文件系统的基本信息和统计信息。
-refreshNodes
重新读取hosts和exclude文件,更新允许连到Namenode的或那些需要退出或入编的Datanode的集合。
-finalizeUpgrade
终结HDFS的升级操作。
Datanode删除前一个版本的工作目录,之后Namenode也这样做。
这个操作完结整个升级过程。
命令选项
描述
-metasavefilename
保存Namenode的主要数据结构到hadoop.log.dir属性指定的目录下的
对于下面的每一项,
1.Namenode收到的Datanode的心跳信号
2.等待被复制的块
3.正在被复制的块
4.等待被删除的块
-setQuota
为每个目录
目录配额是一个长整型整数,强制限定了目录树下的名字个数。
命令会在这个目录上工作良好,以下情况会报错:
1.N不是一个正整数,或者
2.用户不是管理员,或者
3.这个目录不存在或是文件,或者
4.目录会马上超出新设定的配额。
-upgradeProgressstatus|details|force
请求当前系统的升级状态,状态的细节,或者强制升级操作进行。
-clrQuota
为每一个目录
命令会在这个目录上工作良好,以下情况会报错:
1.这个目录不存在或是文件,或者
2.用户不是管理员。
如果目录原来没有配额不会报错。
其他常用命令
chmod
使用方法:
hadoopfs-chmod[-R]
改变文件的权限。
使用-R将使改变在目录结构下递归进行。
命令的使用者必须是文件的所有者或者超级用户。
chown
使用方法:
hadoopfs-chown[-R][OWNER][:
[GROUP]]URI[URI]
改变文件的拥有者。
使用-R将使改变在目录结构下递归进行。
命令的使用者必须是超级用户。
copyFromLocal
使用方法:
hadoopfs-copyFromLocal
除了限定源路径是一个本地文件外,和put命令相似。
copyToLocal
使用方法:
hadoopfs-copyToLocal[-ignorecrc][-crc]URI
除了限定目标路径是一个本地文件外,和get命令类似。
cp
使用方法:
hadoopfs-cpURI[URI…]
将文件从源路径复制到目标路径。
这个命令允许有多个源路径,此时目标路径必须是一个目录。
示例:
∙hadoopfs-cp/user/hadoop/file1/user/hadoop/file2
∙hadoopfs-cp/user/hadoop/file1/user/hadoop/file2/user/hadoop/dir
get
使用方法:
hadoopfs-get[-ignorecrc][-crc]
复制文件到本地文件系统。
可用-ignorecrc选项复制CRC校验失败的文件。
使用-crc选项复制文件以及CRC信息。
示例:
∙hadoopfs-get/user/hadoop/filelocalfile
∙hadoopfs-gethdfs:
//host:
port/user/hadoop/filelocalfile
ls
使用方法:
hadoopfs-ls
如果是文件,则按照如下格式返回文件信息:
文件名<副本数>文件大小修改日期修改时间权限用户ID组ID
如果是目录,则返回它直接子文件的一个列表,就像在Unix中一样。
目录返回列表的信息如下:
目录名
示例:
hadoopfs-ls/user/hadoop/file1/user/hadoop/file2hdfs:
//host:
port/user/hadoop/dir1/nonexistentfile
ls-R
使用方法:
hadoopfs-ls-R
ls命令的递归版本。
类似于Unix中的ls-R。
mkdir
使用方法:
hadoopfs-mkdir
接受路径指定的uri作为参数,创建这些目录。
其行为类似于Unix的mkdir-p,它会创建路径中的各级父目录。
示例:
∙hadoopfs-mkdir/user/hadoop/dir1/user/hadoop/dir2
∙hadoopfs-mkdirhdfs:
//host1:
port1/user/hadoop/dirhdfs:
//host2:
port2/user/hadoop/dir
mv
使用方法:
hadoopfs-mvURI[URI…]
将文件从源路径移动到目标路径。
这个命令允许有多个源路径,此时目标路径必须是一个目录。
不允许在不同的文件系统间移动文件。
示例:
∙hadoopfs-mv/user/hadoop/file1/user/hadoop/file2
∙hadoopfs-mvhdfs:
//host:
port/file1hdfs:
//host:
port/file2hdfs:
//host:
port/file3hdfs:
//host:
port/dir1
put
使用方法:
hadoopfs-put
从本地文件系统中复制单个或多个源路径到目标文件系统。
也支持从标准输入中读取输入写入目标文件系统。
∙hadoopfs-putlocalfile/user/hadoop/hadoopfile
∙hadoopfs-putlocalfile1localfile2/user/hadoop/hadoopdir
∙hadoopfs-putlocalfilehdfs:
//host:
port/hadoop/hadoopfile
∙hadoopfs-put-hdfs:
//host:
port/hadoop/hadoopfile
从标准输入中读取输入。
rm
使用方法:
hadoopfs-rmURI[URI…]
删除指定的文件。
只删除非空目录和文件。
请参考rmr命令了解递归删除。
示例:
∙hadoopfs-rmhdfs:
//host:
port/file/user/hadoop/emptydir
rmr
使用方法:
hadoopfs-rmrURI[URI…]
delete的递归版本。
示例:
∙hadoopfs-rmr/user/hadoop/dir
∙hadoopfs-rmrhdfs:
//host:
port/user/hadoop/dir
第三部分:
MapReduces作业管理
•查看Job信息
•hadoopjob-list
•杀掉Job
•hadoopjob–kill
•指定路径下查看历史日志汇总
•hadoopjob-historyoutput-dir
•作业的更多细节
•hadoopjob-historyalloutput-dir
•打印map和reduce完成百分比和所有计数器
•hadoopjob–statusjob_id
•杀死任务。
被杀死的任务不会不利于失败尝试。
•hadoopjab-kill-task
•使任务失败。
被失败的任务会对失败尝试不利。
•hadoopjob-fail-task
Hadoopmradmin
命令
说明
-refreshServiceAcl
重新装载ACL认证文件
-refreshQueues
刷新任务队列的信息
-refreshUserToGroupsMappings
刷新用户与用户组对应关系
-refreshSuperUserGroupsConfiguration
刷新用户组的配置
-refreshNodes
刷新JobTracker的主机配置信息
Web端介绍
•WebUI有足够的信息,供我们查看Job运行的信息与历史运行记录.
•URL:
http:
//
8088/
第三部分:
Hadoop集群的维护
安全模式
•安全模式是Namenode的一个状态,这种状态下,此时文件系统中的内容不允许修改也不允许删除,直到安全模式结束。
•安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分块数据。
•NameNode会在启动时自动进入安全模式,当配置的块最小百分比数满足最小的副本数条件时,会自动离开安全模式,安全模式可以手动进入。
•参数dfs.safemode.threshold.pct位于hdfs-site.xml
•模式设置查看命令行:
hadoopdfsadmin-safemodeenter|leave|get|wait
•作为管理人员,掌握NameNode进入和退出安全模式的方法,这些操作有时是必须的,比如在升级完集群后需要确认数据是否仍然可读等。
进入和离开安全模式:
查看namenode处于哪个状态
hadoopdfsadmin–safemodeget
进入安全模式(hadoop启动的时候是在安全模式)
hadoopdfsadmin–safemodeenter
离开安全模式
hadoopdfsadmin-safemodeleave
数据扫描块
•每一个DataNode都会运行一个数据扫描线程
•扫描线程定期的检查所有数据块以确保修复损坏的块
•周期可以设定
•dfs.datanode.scan.period.hourses默认是504小时
•在UI部分可以查看检查的情况
•http:
//[datanodeIP]:
50075/blockScannerReport
•通过指定listblocks参数可以报告最新的状态
•http:
//[datanode]:
50075/blockScannerReport?
Listblocks
数据的备份
HDFS的设计目标之一就是能够可靠地在分布式集群中存储数据。
HDFS允许数据丢失,所以数据的备份就显得格外重要了。
由于Hadoop可存储大规模数据,备份那些数据,备份的哪里就成为一个关键问题,在备份过程中优先备份的是那些不能再生的数据和对商业最关键的数据。
而对于那些可再生的数据或对商业应用不是很大的可以次要考虑备份或者不备份。
需要说明的是不要认为HDFS副本机制可以替代数据的备份,HDFS中的bug,硬件故障,另外加上极端情况下软件bug和人为失误,这些都会导致副本的丢失。
通常Hadoop会设置用户目录的策略,比如,每个用户都有一个空间配额,每天晚上都可进行备份工作。
但是不管设置怎样的策略,都需要通知用户,以免客户反映问题。
在备份方面,Hadoop有一个叫distcp(分布式复制)的有用程序,能从Hadoop的文件系统并行复制大量数据。
distcp一般用于在两个HDFS集群中传输数据。
如果集群在Hadoop的同一版本上运行,就适合使用hdfs方案:
hadoopdistcphdfs:
//namenode1/foohdfs:
//namenode2/bar
这将从第一个集群中复制/foo目录(和它的内容)到第二个集群中的/bar目录下,所以第二个集群会有/bar/foo目录结构。
如果/bar不存在,则新建一个。
我们可以指定多个源路径,并且所有的都会被复制到目标路径。
源路径必须是绝对路径。
默认情况下,distcp会跳过目标路径已经有的文件,但可以通过提供的-overwrite选项进行覆盖。
也可以用-update选项来选择只更新那些修改过的文件。
注意:
使用-overwrite和-update中任意一个(或两个)选项会改变源路径和目标路径的含义。
这可以用一个例子清楚说明。
如果改变先前例子中第一个集群的子树/foo下的一个文件,就能通过运行对第二个集群的改变进行同步:
hadoopdistcp-updatehdfs:
//namenode1/foohdfs:
//namenode2/bar/foo
目标路径需要末尾这个额外的子目录/foo,因为源目录下的内容已被复制到目标目录下。
(如果熟悉rsync,你可以想像-overwrite或-update项对源路径而言,如同添加一个隐含的斜杠。
)
distcp是作为一个MapReduce作业执行的,复制工作由集群中并行运行的map来完成。
这里并没有reducer。
每个文件都由一个单一的map进行复制,并且distcp通过将文件分成大致相等的文件来为每个map数量大致相同的数据。
map的数量是这样确定的。
通过让每一个map复制数量合理的数据以最小化任务建立所涉及的开销,是一个很好的想法,所以每个map的副本至少为256MB。
(除非输入的总大小较少,否则一个map就足以操控全局。
)例如,1GB的文件会被分成4个map任务。
如果数据很大,为限制带宽和集群的使用而限制映射的数量就变得很有必要。
map默认的最大数量是每个集群节点(tasktracker)有20个。
例如,复制1000GB的文件到一个100个节点的集群,会分配2000个map(每个节点20个map),所以平均每个会复制512MB。
通过对distcp指定-m参数,会减少映射的分配数量。
例如,-m1000会分配1000个map,平均每个复制1GB。
如果想在两个运行着不同版本HDFS的集群上利用distcp,使用hdfs协议是会失败的,因为RPC系统是不兼容的。
想要弥补这种情况,可以使用基于HTTP的HFTP文件系统从源中进行读取。
这个作业必须运行在目标集群上,使得HDFSRPC版本是兼容的。
使用HFTP重复前面的例子:
hadoopdistcphftp:
//namenode1:
50070/foohdfs:
//namenode2/bar
注意,需要在URI源中指定名称节点的Web端口。
这是由dfs.http.address的属性决定的,默认值为50070。
保持HDFS集群的平衡
向HDFS复制数据或者进行备份时,考虑集群的平衡相当重要。
文件块在集群中均匀地分布时,HDFS能达到最佳工作状态,否则一个不平衡的集群会影响系统资源的充分利用,所以我们要避免这种情况。
以1000GB数据为例子,通过指定-m选项为1,即由一个单一的map执行复制工作,它的意思是,不考虑速度变慢和未充分利用集群资源,每个块的第一个副本会存储在运行map的节点上(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hadoop 管理