实验 目的 要求 | 目的:
(上传WordCount的jar执行程序;使用WordCount进行MapReduce计算) 要求:
| ||||||||||||||||||
实 验 环 境
实 验 环 境
|
集群规划: * Hadoop的高可用完全分布模式中有HDFS的主节点和数据节点、MapReduce的主节点和任务节点、数据同步通信节点、主节点切换控制节点总共6类服务节点,其中HDFS的主节点、MapReduce的主节点、主节点切换控制节点共用相同主机Cluster-01和Cluster-02,HDFS的数据节点、MapReduce的任务节点共用相同主机Cluster-03、Cluster-04,Cluster-05,数据同步通信节点可以使用集群中的任意主机,但因为其存放的是元数据备份,所以一般不与主节点使用相同主机。 *高可用完全分布模式中需要满足主节点有备用的基本要求, 所以需要两台或以上的主机作为主节点,而完全分布模式中需要满足数据有备份和数据处理能够分布并行的基本要求,所以需要两台或以上的主机作为HDFS的数据节点和MapReduce的任务节点,同时数据同步通信节点工作原理同Zookeeper类似,需要三台或以上的奇数台主机,具体规划如下:
|
练习内容
练习一:熟悉常用的HDFS操作;
1、向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由于用户指定是追加到原有文件末尾还是覆盖原有的文件;(追加文件内容以编程方式进行)
2、从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;
3、将HDFS中指定文件的内容输出到终端中;
4、显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息;
5、给定HDFS中某一个目录,输出改目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息;
6、提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录;
7、提供一个HDFS的目录的路径,对该目录进行创建和删除操作,创建目录时,如果目录文件所在目录不存在则自动创建相应的目录;删除目录时,由用户指定当该目录不为空时是否还删除该目录;
8、向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头或者结尾;
练习二:MapReduce-WordCount程序练习;
1、上传jar包;
1.1、现在以“admin”普通用户登录“Master。Hadoop”服务器。即在主节点操作;
a)创建本地示例文件;
首先在“/home/admin”目录下创建文件夹“file”.
命令:
$mkdir ~/file
接着创建两个文本文件file1.txt和file2.txt。
使fiel1.txt内容为“Hello World”,而file2.txt的内容为“Hello Hadoop”。
命令:
$cd file
$echo “Hello World”>file1.txt
$echo “Hello Hadoop”>file2.txt
b)在HDFS上创建输入文件夹;
命令:
$hadoop fs -mkdir input
c)上传本地file中文件到集群的input目录下;
命令:
$hadoop fs -put ~/file/file*.txt input
$hadoop fs -ls input
1.2、上传jar包
先使用Xftp工具把WordCount的jar执行程序包,上传到“~/hadoop/hadoop-2.7.3/share/Hadoop/mapreduce”目录下;
命令:
$ls
2、示例运行;
2.1、在集群上运行WordCount程序;
注:以input作为输入目录,output目录作为输出目录。
命令:
$hadoop jar ~/ hadoop/hadoop-2.7.3/share/Hadoop/mapreduce/Hadoop-0.20.2-examples.jar wordcount input output
Hadoop命令会启动一个JVM来运行达个MapReduce程序,并自动获得Hadoop的配置,同时把类的路径(及其依赖关系)加入到Hadoop的库中。
以上就是Hadoop Job的运行记录,从达里可以看到,达个Job被赋予了一个ID号:job_1533748123309_0002,而且得知输入文件有两个(Totalinput paths to process:2),同时还可以了解map的输入输出记录(record数及字节数),以及reduce输入输出记录。比如说,在本例中,map的task数量是2个,reduce的task数量是一个。map的输入record数是2个,输出record数是4个等信息。
2.2、查看结果;
a)查看HDFS上output目录内容;
命令:
$hadoop fs -ls output
从上图中知道生成了两个文件,我们的结果在“part-r-00000”中。
b)查看结果输出文件内容;
命令:
$hadoop fs -cat output/part-r-00000
3、Hadoop的Web验证练习;
3.1、使用浏览器访问192.168.10.111:8088,ResourceManager状态查看;
3.2、使用浏览器访问192.168.10.111:50070,查看HDFS情况;
3.3、使用浏览器访问192.168.10.112:50070,在从节点上查看NodeManager信息:
出现的问题与解决方案
问题:
1、Namenode没有启动;
2、在使用 -rmr 递归删除命令时报错;
3、追加到文件的开头(-copyFromLocal)
a)如图,向HDSFS中的file2.txt中导file2.txt的类容,提示文件已经存在,直接写一个不存在的文件file3.txt,发现导入成功,再次向file3.txt导入类容,又提示文件已经存在
b).hadoop fs -copyFromLocal -f产看文件file2.txt中的类容
向文件fil2.txt 导入类容,然后产看,发现文件中之前的类容被覆盖了
解决方案:
- 格式化namenode,命令“hdfs namenode -format”;
- -rmr命令不适配CentOS7环境,应改为“-rm -R”;
- a)此方法只适用于把一个文件中的类容导入到一个不存在的文件中;
b) 此方法导入到文件开头时会覆盖源文件类容;
知识拓展
1、Hadoop是一种分布式系统的基础构架。
核心是HDFS和MapReduce,hadoop2.0还包括YARN
2、HDFS:Hadoop Distributed FileSystem 分布式文件系统。
//很多时候的数据量超过了单台机器允许存储的范围……故而需要分布式
前身是GFS,谷歌开源的分布式存储系统。
是一个高容错(允许错误发生)的系统,能检测应对硬件故障。
适用于低成本的通用硬件(比如树莓派么)
通过流式数据访问,提供高吞吐量应用程序的访问功能。
3、异常处理:
因为数量多,所以出故障是常态。
【可靠性】存在故障的时候也能较为有效地存储数据。(名字节点故障,数据节点故障,网络断开)
【重新复制】定时会发送“心跳包”检测节点是否健康,失去联系标记为死亡状态,需要重新复制到其他节点。
【数据正确性】校验数据是否有坏块(类似于葡萄的校验?,验证的校验码存储在HDFS命名空间的隐藏文件中)
【元数据失效】FsImage和Editlog是HDFS的核心数据结构。(损坏就崩盘了)名字节点(NameNode)如果崩了就需要人工的干预了。//第二名字节点不支持直接恢复
4、目标
- 数据访问:适合批量处理而非交互式,重点是数据吞吐量而非反应时间
- 大数据:支持大文件,单个文件GB-TB级别
- 简单一致模式:一次写入,多次读,一般写入之后就不再修改了
- 主从结构:一个名字节点和很多数据节点,通常一台机器一个数据节点。
- 硬件故障处理:是设计的核心目标之一