锦城学院电子信息学院(课程设计报告)课程名称:大数据技术基础设计题目:期末总结报告指导教师:学生姓名:学生学号:电子信息学院制2019年10月目录第1章知识点总结 (1)1.1大数据技术概论 (1)1.2 Hadoop平台的安装与配置 (2)1.3 Hadoop分布式文件系统 (3)1.4 Hadoop分布式计算框架 (5)1.5 Spark概述 (7)第2章实验总结 (8)2.1 Spark实现单词计数 (8)2.2 Spark 计算平均消费水平 (11)2.3 HDFS 命令行操作 (14)2.4 Linux命令行操作 (15)2.5使用HDFS API 编程 (16)第1章知识点总结1.1大数据技术概论1.1.1大数据概念大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化信息资产。
1.1.2 大数据面临的主要障碍(1)存储容量问题(2)读取速率问题1.1.3 大数据与云计算、物联网的关系大数据云计算为大数据提供了技术基础物联网是大数据的重要来源大数据为云计算提供用武之地大数据技术为物联网数据分析提供支撑云计算为物联网提供海量数据存储能力云计算物联网为云计算提供了广阔的应用空间物联网1.1.4 Hadoop的概念(1)Hadoop为我们提供了一个可靠的共享存储和分析系统。
HDFS实现数据的存储,MapReduce实现数据分析和处理。
(2)Hadoop是一个分布式处理的软件框架,主要处理大量数据。
它实现了MapReduce编程模式和框架,能在由大量计算机组成的集群中运行海量数据并进行分布式计算。
1.1.5 Hadoop的生态系统Hadoop由很多子项目组成,其中HDFS和MapReduce是两个最基础,最重要的成员。
1.2 Hadoop平台的安装与配置1.2.1 Hadoop集群的安装创建虚拟机(注意至少创建2台虚拟机)安装Linux安装JDK配置SSH安装和配置Hadoop2.7.11.2.2 测试Hadoop(1)传送Hadoop到各从节点(主节点)$ cd~$ scp -r hadoop-2.7 .2 hadoop@slavel:~/(2)格式化文件系统(主节点)$ hadoop namenode -format(3)启动Hadoop (主节点)$ cd ~/hadoop-2.7.2 /sbin$ ./start-all.sh(4)查看master工作状态(主节点)(5)查看slave工作状态(从节点)(6)启动浏览器,浏览http://master:50070(7)运行测试实例(主节点)$ cd ~/Hadoop-2.7 .2 /share/hadoop/mapreduce$ hadoop jar hadoop-mapreduce-examples-2.7 .2.jar pi 1 0 101.3 Hadoop分布式文件系统1.3.1HDFS概述(1)HDFS是Hadoop Distributed File System的缩写,是Apache Hadoop项目的一个子项目,也是Google的GFS分布式文件系统开源实现。
(2)HDFS支持海量数据的存储,允许将很多计算机组成存储集群,其中的每一台计算机称为一个节点。
通过构建一个能跨越计算机系统的单一的文件命名空间,HDFS实现了大数据文件的分布式存储。
(3)HDFS是一个主从(master/slave)结构模型。
从用户角度来看,它和传统的文件系统一样,可以通过目录路径对文件执行操作一个HDFS集群是由一个NameNode和若千个DataNode组成的。
1.3.2数据块HDFS支持文件的“一次写入多次读写”模型。
默认的数据块大小是128MB。
1.3.3 元数据节点元数据信息采用文件命名空间镜像(namespace image)及编辑日志(edit log)方式进行保存。
1.3.4元数据从类型上讲,元数据有三类重要信息:1、文件和目录自身的属性信息,例如文件名、目录名、父目录信息、文件大小、创建时间、修改时间等。
2、记录文件内容存储相关信息,例如文件分块情况、副本个数、每个副本所在的DataNode信息(映射关系)等3、记录HDFS中所有DataNode的信息,用于DataNode管理。
第三类信息不存储在硬盘上,而是在系统启动时从DataNode收集而成。
1.3.5 HDFS文件的读写HDFS是使用Java语言构建,任何支持Java编程的机器都能运行HDFS。
在设计上,NameNode不会主动发起PRC,而是响应来自客户端或DataNode的PRC 请求。
1.3.6 HDFS Shell操作1.Shell命令介绍HDFS Shell是由一系列类似Linux Shell的操作命令组成。
借助这些命令,用户可以完成HDFS文件的复制、删除和查找等操作,也可以完成HDFS与Linux本地文件系统的交互。
2.文件操作命令1)显示与指定path匹配的目录信息$ hadoop fs -ls/2)在指定的path中新建子目录$ hadoop fs-mkdir/test1 /test2$ hadoop fs -mkdir-p /x/y/x(-p选项表示创建子目录时先检查路径是否存在,若不存在则同时创建相应的各级目录。
)3)创建-一个空文件$ hadoop fs -touchz /test1/abc.txt1.4 Hadoop分布式计算框架1.4.1MapReduce的解决方案基本思想:分而治之第一步:数据预处理第二步:生成初始key-value键值对第三步:映射转换第四步:合并映射结果并排序第五步:归约最终结果1.4.2框架的组成1.4.3 YERN工作流程1.4.4数据的混洗处理MapReduce框架会确保每个reduce的输入都是按key排序的。
系统执行排序的过程(将map输出作为输入传给reduce )称为shuffle ( 即混洗) 。
shuffle的职责就是一把map的输出结果有效地传送到reduce端。
1.4.5作业的调度资源调度器是Hadoop YARN中最核心的组件之一,是ResourceManager中一个插拔式的服务组件,负责整个集群资源( Container )的管理和分配。
YARN采用了动态资源分配机制,当前YARN仅支持内存和CPU两种资源类型的管理和分配。
Hadoop中的调度器包含以下三种:FIFO调度器、Capacity调度器、Fair调度器1.4.6MapReduce示例演示1.5 Spark概述1.5.1 Spark的特点Spark是用Scala语言编写,基于内存的计算框架,支持Scala、Java 和Python 语言,具有简洁、丰富的接口,提供统一的RDD编程模型,是一个整合能力强的框架。
Spark具有以下特点1.速度快2.易用性3.通用性4.跨平台1.5.2 Spark的数据模型(1)RDD的介绍Spark采用统一的抽象数据集RDD来存储正在被处理的大数据,这种建立在统一数据模型之. 上的计算模式,使得它可以以基本一致的方式应对不同的大数据处理场景。
RDD ( 即Resilient Distributed Datasets,弹性分布式数据集),是Spark的核心数据结构,是-一个容错的、并行的数据结构,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。
通过RDD的操作形成整余Spark程序。
(2)RDD的特征1)只读。
有利于恢复出错的RDDc2)容错性。
RDD中有记录之前的依赖关系,依赖关系中记录算子和分区,可以很容易地重新生成。
3)分布性。
可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。
一个RDD可以包含多个分区。
4) RDD还提供了一组丰富的操作来操作这些数据。
诸如map、flatMap、filter 等以支持常见的数据运算。
第2章实验总结2.1 Spark实现单词计数2.1.1任务描述用Spark方法实现单词计数,并对重复单词进行筛选2.1.2任务分析找出包含apple的行;将包含apple的行按照“,”进行分割,得到一个列表集合;将集合中重复的单词去掉;将数据存储到hdfs中的/output目录下2.1.3任务设计1)首先touch一个a.txt文件2)加载文本,产生弹性分布性数据集,用sc.textFile()加载文本文件到内存中。
加载后,RDD就是一个数组就以换行符来分隔。
3)数组空格进行分隔,变成数组。
4)进行<key,value>键值对转换。
5)进行聚合。
6)查看结果。
7)实现单词过滤。
2.1.4功能实现package bb9_6;import java.util.Arrays;import java.util.Iterator;import java.util.List;import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.api.java.JavaSparkContext;import org.apache.spark.api.java.function.FlatMapFunction;import org.apache.spark.api.java.function.Function;import org.apache.spark.api.java.function.VoidFunction;public class zuoye9_6 {public static void main(String[] args) {SparkConf conf = new SparkConf().setAppName("filiter").setMaster("local");JavaSparkContext sc = new JavaSparkContext(conf);List<String> lines = Arrays.asList("apple,banana,lemen,orange,grape","grape,pear,strawberr y,cherry","apple,orange,grape","strawberry,cherry,lemen","orange,grape,pear,apple");List<String> lines1 = Arrays.asList("apple,banana,lemen,orange,grape","apple,orange,grape", "orange,grape,pear,apple");JavaRDD<String> NumberRDD= sc.parallelize(lines);JavaRDD<String> NumberRDD1= sc.parallelize(lines1);JavaRDD<String> NumberRDD2 = sc.parallelize(lines);JavaRDD<String> evenNumberRDD= NumberRDD.filter(new Function<String,Boolean>(){private static final long serialVersionUID =1L;@Overridepublic Boolean call(String arg0) throws Exception {// TODO Auto-generated method stubreturn arg0.contains("apple");}});System.out.println("after");evenNumberRDD.foreach(new VoidFunction<String>(){@Overridepublic void call(String arg0) throws Exception {// TODO Auto-generated method stubSystem.out.println(arg0 +" ");}});JavaRDD<String> evenNumberRDD1= NumberRDD1.flatMap( new FlatMapFunction<String,String>(){private static final long serialVersionUID =1L;@Overridepublic Iterator<String> call(String arg0) throws Exception { // TODO Auto-generated method stubreturn Arrays.asList(arg0.split(",")).iterator();}});evenNumberRDD1.foreach( new VoidFunction<String>(){@Overridepublic void call(String arg0) throws Exception {// TODO Auto-generated method stubSystem.out.print(arg0 +" ");}});JavaRDD<String> NumberRDD3= evenNumberRDD1.distinct();NumberRDD3.foreach( new VoidFunction<String>(){@Overridepublic void call(String arg0) throws Exception {// TODO Auto-generated method stubSystem.out.print(arg0 +" ");}});NumberRDD3.saveAsTextFile("/home/hadoop/test.txt");sc.close();}}2.1.5调试和测试2.2 Spark 计算平均消费水平2.2.1任务描述使用Spark编程实现:统计一座城市(10万或100万人口)中某天的平均消费水平并统计男女人数,以及男性消费额最高和最低的,女性中消费额最高和最低的。