基于mapreduce的销售大数据处理系统_第1页
基于mapreduce的销售大数据处理系统_第2页
基于mapreduce的销售大数据处理系统_第3页
基于mapreduce的销售大数据处理系统_第4页
基于mapreduce的销售大数据处理系统_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于MapReduce的销售大数据处理系统摘要随着近些年来互联网的快速发展,大中小销售企业积累了大量的销售信息,企业有必要对这些信息加以利用,以便对未来的的营销进行预测。然而,目前的数据库无法对如此大量的数据进行有效的利用。针对这种大数据环境中数据处理的窘境,本文为某零售企业构建了一个基于Hadoop平台的分布式销售大数据处理系统,利用平台的MapReduce框架初步实现了统计和排序等基本功能。关键词 大数据 Hadoop MapReduce 统计Sales Big Data processing System Based on MapReduceAbstractWith the rapid development of the Internet in recent years, sales of medium and small enterprises have accumulated a lot of sales information, companies need to take advantage of this information, in order to predict the future of marketing. However, the current database of such large amounts of data can not be effectively utilized. This dilemma for big data environments of data processing, retail enterprises to build up a big sales hadoop distributed data processing system based on the platform, the initial realization of statistics and sorting and other basic functions.Key WordBigdata Hadoop MapReduce Statistics目录第一章引言11.1研究论文的背景与意义11.2本文课题研究的内容与目标1第二章开发环境及相关技术的介绍22.1 Hadoop简介22.2 hadoop生态系统22.2.1 MapRedcue32.2.2 MapReduce工作的机制与计算模型32.2.3 MapReduce执行流程42.3 Web前端框架(SSM)42.4 Hadoop在互联网中的应用5第三章需求分析63.1 对功能的规定63.2用例描述73.3运行环境规定9第四章系统的设计104.1 Hadoop架构设计104.1.1 hadoop环境搭建104.2 数据处理功能的设计134.2.1数据来源选择134.2.2数据准备144.2.3 数据处理154.3 数据字典的设计184.3.1权限数据库字典设计184.3.2报表数据字典设计194.4 Web端设计204.5 实体关系模型21第五章系统的实现235.1 销售数据模拟235.2 MapReduce实现245.2.1编写Map类245.2.2 编写Reduce类255.2.3 Main主函数265.3 销售数据上传设计275.4 基于Echar的报表实现28第六章系统测试316.1数据上传316.1.1程序上传316.1.2销售数据上传326.2Hadoop运行336.3销售数据报表346.4 测试结论36结论37致谢语38参考文献39基于MapReduce的销售大数据处理系统第一章 引言1.1研究论文的背景与意义我们生活在数据的时代,我们的大多行为都被数据所记录着。在互联网体系中,像腾讯,百度,阿里记录着我们行为的大部分数据。这些数据记录着我们的爱好,行为和习惯。相信我们都看过一个电影叫天下无贼里面有一句经典的话:“21世纪最贵的是什么?人才!”但是,按现在这个发展趋势,我觉得还有一个选项那就是大数据。如今,大数据已经成为了互联网上最热的话题。中国的互联网有百度和腾讯,国外的IBM,微软都在深度研究大数据,开始全力的挖掘大数据。针对增量中相当大数量的非结构化的数据,计算挖掘出高效的有利益的市场数据,并且在这些数据中受益【1】。为了应对当下发展的变革,企业也应该不单单保留在传统的营销方式。1.2本文课题研究的内容与目标MapReduce是一种比较好的的编程模型用于支持高效快速地分布式计算框架。它写出来的程序能在上千个简易的集群机上进行运行工作。Hadoop本来就是一个开源的,适合进行分布式应用的研究和开发。本设计拟通过Hadoop平台的MapReduce运算,模拟实现某大企业销售大数据的排序、统计等实时查询工作。通过Web界面实现数据输入和结果输出。增强了可操作性。通过Hadoop提供的框架,设计一个具备分布式应用特点的系统,通过MapReduce的计算框架设计出来实现销售大数据的处理的应用。提供用户简单易用的Web界面。第二章 开发环境及相关技术的介绍2.1 Hadoop简介Hadoop是一个分布式的计算平台, hadoop通过完善的备份机制和容错机制保证数据的可靠性,所以HDFS具有高容错,高可靠性以及非常高的可扩展性的特性,使用者不必担心数据的急剧扩张和存储空间不足的问题【4】。需要把工作流划分到大量的机器上去,如果组件之间共享数据,那么模型无法扩展到大规模集群上去了。Mapreduce依据高容错的特点,充分利用资源,把任务分配到大量的机器上去共同分担任务,我们不需要关系具体的底层实现。我们理解见得的他的过程就可以,将我们需要处理的问题转化为“映射-规约”的处理方式。2.2 hadoop生态系统Hadoop是由多框架的集合组合起来的,核心的框架有Mapreduce和hadoop分布式文件系统(HDFS)。如图所示2-1:图2-1 Hadoop核心框架集合2.2.1 MapRedcueMapReduce框架比较适合处理数据量比较大的数据。MapReduce主要是由:Map 和Reduce。当我们向MapReduce框架提交一个已编写好的程序时,这个计算框架会把我们提交的作业任务拆分成很多小的map子任务来完成。框架会把这总的任务切割成一个个的小任务。对这些数据进行key-value的处理。会生成一些中间文件。这些中间文件存放在内存当中,接着reduce会把这些中间文件具有相同的key的累加起来。如图2-2所示: 图2-2 Mapreduce中shuffle和sort全过程2.2.2 MapReduce工作的机制与计算模型MapReduce比较适合处理数据量非常大的数据,完全不是我们所理解的数据量【7】。在实战中使用起来灵活,可靠性非常的好,容错率高。MapReduce能很好地处理高并发的任务。主要是对分配任务的执行。 JobTracker对应着在在Namenode节点上的负责管理控制的。MapReduce在执行之前首先创建一个job任务。Job任务主要由map和reduce组成【8】。在Map函数的阶段,程序的入口接收来自相同数据类型的数据,通过一些处理方式转化为输入值为键值对的相对于格式。通过这些中间数据,程序会根据具有相同的key的集合汇聚在一起,把数据向总汇聚形如的集合。然后reduce的对应输入的接口就是map的输出接口。Reduce其实起到的就是一个累加的作用吧。这就是reduce的作用。Reduce处理后的值也对应的是键值对的值。2.2.3 MapReduce执行流程MapReduce程序的运行过程我们可以大致分为七个步骤:代码书写,作业配置,程序打包,作业提交,map的分配的子任务的执行,map之后中间结果的处理。Reduce任务分配合执行,作业完成【9】。作业提交阶段:MapReduce把所处理的任务提交给系统的管理者,系统就自动装载执行,我们只能监控着任务的执行情况,或者强制停止任务的执行进度。所以我们在提交任务的时候要仔细检查下任务的配置参数是否正确,为了避免无效的,错误的任务执行。必须慎重执行任务的开始操作。2.3 Web前端框架(SSM)SSM框架是目前是一个比较好用的,简单的,理解起来快速地一个框架, Spring的两个基本的特点就是IOC和AOP。IOC的主要特点就是依赖注入。AOP就是面向切面的编程。SpringMVC:springMVC它分离了各个层级之前的耦合,在model层,控制层,模型层,业务逻辑层之间的进行了分离。这种分离能更好的对每个层级之间进行定制设计。Mybatis: Mybatis是java持久层的一个框架,原本我们需要写原生的JDBC代码,现在我们使用mybatis这个框架,只需要xml里面进行配置和类与数据库之间一一对应的映射就可以完成对数据库的操作。2.4 Hadoop在互联网中的应用我们如今的生长环境就是一个大数据的年代,我们的每一个行为都被记录着,除非我们的行动都与网络隔绝,不然都会被记录着。数据量的大,不仅仅是我们原本意识上的几G以及几百G的概念了。想必我们都听过“啤酒与尿布的故事”,在故事中主要讲述的是沃尔玛超市的研究发现原本两个根本不相干的“啤酒”与“尿布”常常被放在同一个购物篮里面,在研究发现,在美国大多数的家庭里面,妈妈一般都在家里带小孩,而父亲就负责的是对孩子的生活用品购买。往往是发生在年轻一代的父亲身上。在给孩子买尿不湿的时候都会常常带一罐啤酒。沃尔玛的销售人员发现这个规律之后,在尿不湿的旁边放着啤酒的柜台。这也就告诉我们,我们数据的研究意义就是在小批量我们根本找不到规律的两个事物面前,在大数据量面前发掘其潜在价值,下面我们就来谈谈几个国内对hadoop研究的公司。百度已经成为中国搜索引擎的巨头,每时每刻不在记录着用户的搜索关键词,用户兴趣爱好等等这些数据。对于百度这些一个作为搜索引擎作为主要支撑的公司来说,对海量数据的处理是比较繁琐的。不仅需要在线下对用户的数据进行分析,实时把统计的数据反馈到平台上。这讲究的数据统计的实时性。对服务器日志的统计与分析还有对日志进行存储【10】。l 商业分析,用户的行为记录以及商业领域的价值统计与分析。l 数据反馈的及时性,及时统计广告的点击率与浏览量。淘宝,也是国内最早就行大数据挖掘的公司,我们在购物的时候是不是有种疑问,就是我们在购物的时候,浏览一些商品之后我们就会在商品的下面能看到系统推荐了一些与自己喜欢的一些商品。其实这就是系统通过分析我们的行为习惯于爱好,推荐了我们所喜欢的东西。第三章 需求分析3.1 对功能的规定该系统的web界面有三种角色的权限:管理员,普通用户,数据处理者。不同的角色所对应的菜单操作是不同的。管理员操作:(1)管理人员信息:新增角色,修改用户的权限,修改用户基本的信息。(2)登录。(3)个人信息管理:对个人的信息就行管理。(4)查看报表。普通人员操作:(1)登录 (2)查看报表(3)个人信息管理数据处理人员操作:(1)个人信息管理 (2)登录 (3)查看销售数据 (4)查看报表(5)上传MapReduce(6)上传销售数据 (7)后台运行MapReduce需求分析用例图如图3-1所示:图3-1 需求分析用例图3.2用例描述l 用例:用户注册销售大数据处理平台账号主参与者:用户环境目标:通过销售大数据登录平台首页注册用户账号前提条件:网络正常连接;填写格式按提示规范输入场景:1. 用户根据URL链接访问到销售数据处理平台首页。2. 系统显示登录界面和注册按钮。3. 用户点击注册按钮,进入注册界面4. 按要求正确填写相应信息。 5. 注册成功,自动跳转回登录界面异常:1. 输入为空,提示注册失败2.返回用户登录界面,不进行注册3. 服务器未开启,无法响应请求l 用例:用户登录销售大数据处理平台主参与者:用户环境目标:通过销售大数据登录平台首页登录用户账号前提条件:网络正常连接,首页显示正常 场景:1. 用户根据URL链接访问到销售数据处理平台首页。2. 系统显示登录界面和注册按钮。3用户根据自己的登录账户和密码登录点击登录按钮。4. 用户点击确定按钮,进入首页界面。异常:1. 输入为空,提示登录失败2. 用户登录密码无效,不未进行注册3. 服务器未开启,无法响应请求l 用例:用户销售数据上传主参与者:用户环境目标:销售数据上传前提条件:网络正常连接,正常登录,权限为数据库处理人员场景:1. 用户根据URL链接访问到销售数据处理平台首页。2. 用户登录成功。3 点击左侧我的账号下拉菜单,点击销售数据管理。4 在弹出框内点击浏览本地文件,选择需要上传的数据。5 点击上传按钮,数据上传成功。异常:1. 上传数据太大。2. 上传数据不符合要求。3. 网络连接异常,无法连接HDFS。l 用例:用户查看销售报表主参与者:用户环境目标:查看销售报表前提条件:网络正常连接,正常登录场景:1. 用户根据URL链接访问到销售数据处理平台首页。2. 用户登录成功。3 点击左侧我的账号下拉菜单,点击报表。4 在下拉列表选择员工销售数据报表,点击【获取条形图】按钮。5 显示条形图报表。异常: 1 网络连接异常。 2 数据未处理,数据库对应表为空。3.3运行环境规定后台环境:三台Linux6.3服务器,都安装hadoop2.6.2版本的运行环境,安装JDK1.8 Master:30 Slaver1: 33 Slaver2: 34数据库:MySql 5.1应用程序服务器:Tomcat 7.0连接工具:xshell,xftp第四章 系统的设计4.1 Hadoop架构设计整个系统分为两部分组成,一部分是安装好hadoop-2.6.2的Linux分布式集群,其中包含了三台linux服务器,一台master,两台slaver。主要是对处理的数据进行分布式的存储以及对MapReduce程序的分布式计算提供环境。图 4-1 Hadoop架构设计4.1.1 hadoop环境搭建一 环境说明1.集群我设计的为三个节点:一个Master,两个Slaver(以下都叫做为,namenode,datanode1,datanode2)。节点之间的信息列表如下:机器名称IPNamenode30Datanode133Datanode2342.配置host文件,在linux主机的”/etc/hosts”在这个目录我们可以配置本地的host信息了,这有便于我们在查看服务器信息的时候忘记了ip带来的烦恼,这样配置完成之后我们就可以在每台加点上可以通过“ping namenode”来互相ping通了。配置结构为:Namenode:30Datanode1:33Datanode2:343所需要软件1)JDK软件:版本我们上传文件到linux服务器需要一个工具交xftp,这个工具方便与本地windows与远程linux服务器进行文件传输,加快了开发效率。我们首先用root身份登录Master主机。在usr下创建“/java”文件夹,用来存放所需的java文件。在对jdk进行安装的时候我们必须获得其执行权限,linux不同于windows安装那样简单。我们直接进入“/usr/java”输入如下的命令: Chmod +x jdk-6u31-linux-i586.bin当敲完这些命令之后我们按下“enter”建就可以看到文件夹下出现很多java文件,说明我们安装成功,接下来我们就是配置java的环境变量,hadoop也是一门java语言,运行环境也是java所以说配置jdk也是理所当然。编辑“etc/profile”的文件夹内容里面我们添加java的配置。和windows的配置类似,也是在“java_home”,”classpath”,以及“path的内容”。2)Hadoop软件:版本 在配置完免密码登录之后我们需要对hadoop的配置文件hadoop-env.sh,等进行配置。下面我们主要简介其配置以及作用。A:配置hadoop-env.sh这个配置文件hadoop老版本的在安装hadoop路径下的/conf下,在安装的hadoop-2.6.2的版本里在hadoop的安装路径下的“etc/hadoop”路径下。另外的其他三个配置文件也在这个目录下可以找到。 图 4-2 Java版本B:配置core-site.xml对hadoop的核心配置文件core-site.xml这里需要注意的是配置HDFS的端口号和HDFS的存储地址等。hdfs:/namenode:9000/这里是我们web短访问hdfs的端口号注意:我们必须配置hadoop.tmp.dir这个文件参数,假如我们不配置的话,每次我们关闭之后,系统就会自动的把他默认的/tmp/hadoo-hadoop此路径下的文件都删除掉。我们每次运行的时候都必须format才可以。不然的话就会报错。C:配置hdfs-site.xml文件在上文中我们提到,我们的slaver为两台,在hdfs中其默认slaver为三台,所以我们必须更改其值,不然就会报错:dfs.replication2在配置其值的时候我们是否还需要配置具体的datanode和namenode的存储路径在哪?接下来我们就是配置存储路径:.dirfile:/home/hadoop-2.6.0/dfs/name(namenode在服务器上存储的路径)dfs.datanode.data.dirfile:/home/hadoop-2.6.0/dfs/data(datanode在服务器上存储的路径)Hadoop提供的一些功能可以在web端进行查看hdfs的存储情况的配置:node.secondary.http-addressnamenode:50090 D:对mapred-site.xml进行配置:(主要用来查看MapReduce的处理情况)mapred.job.trackernamenode:9001 自此,所有的配置文件我们都配置得差不多了,同理我们在其他两台的节点上也需要进行如下的安装和配置。在我们第一次启动的时候必须对namenode进行格式化操作,然后启动。验证是否安装成功,如图4-3所示:图 4-3 查看启动状态4.2 数据处理功能的设计4.2.1数据来源选择本设计的数据来源主要是通过java线程模拟的销售数据,主要的字段包括:订单编号商品编号商品名称销售人员买家信息销售单价销售数量销售总价销售区域订单时间数据的定义:对于不同的数据来源系统抽取的数据格式可能不太同一,本设计采用的是同一的数据存储格式,每一条数据存储一行,每一个字段之间用table键分割开来,这样爱数据处理的时候比较容易截取。比如有的日期时间为“YYYY-MM-DD HH-mm-ss”有的数据存储时间为“YYYY/MM/DD HH/mm/ss”所以在数据处理的时候必须对处理的数据进行统一清洗,符合数据标准。4.2.2数据准备先将带处理的数据文件存放在HDFS分布式文件系统当中,他们都是存储在统一目录下面,本设计主要的是2012年,2013年,2014年,2015年的销售数据。所以得数据都是存放在”/user/input”这个路径下面。数据文件中的每一个字段意义都与销售数据中的关系一一对应的,原始数据库中,我们使用“/table”的分隔符作为不同字段之间的分割关系。数据的分割关系如图4-4所示: 图4-4 HDFS销售原始数据的维度关系 每条销售的数据大致的可以分为:销售订单号,销售商品编号,销售商品名称,销售人员信息,买家信息,销售单价,销售数量,销售总价,销售区域,销售时间等这些维度。不同的维度详细信息可以根据以下来区分:(1) 年,月,日信息规定为时间维度。(2) 省份归集为地域维度。(3) 商品编号,商品名称归为商品维度。(4) 销售人员归为销售人员维度。(5) 销售客户信息归为客户维度。(6) 单价,数量,总价归集为价格维度。通过图5-1 HDFS销售原始数据的分析,我们可以根据不同的维度,利用MapRedue框架来对这些维度来进行设计分析。例如在统计销量的时候候,每一条数据就是一个商品的销售记录,我们可以根据商品维度来统计所以数据中不同商品的销售数量,总价等关系。我们还可以通过客户维度来统计不同客户之间购买商品的数量,也可以通过区域维度来统计不同区域之间销售的数据时多少。4.2.3 数据处理1)Map函数阶段 HDFS的大规模数据都是存储在分布在各个不同的datanode节点上的,MapReduce可以MapReduce框架可以根据不同的节点创建Map函数,Map可以将这些被HDFS分割成块的数据。每一条数据对于着一行,每一行就是map输入数据的键值。通常来说,我们规定为key是默认为行号的,而value就是对应的一整条数据的集合。Key行号默认的是递增关系。Map函数用来对每条数据进行处理分析,提取我们上面提到的分维度的关键字段对原有的键值对进行将维度的处理。首先我们对某一个关键字段进行提取,通常我们是通过分割的方式,或者采取java中的split()函数来提取关注字段,组合成一个新的维度关系,在原有的基础上创建一个新的的集合。新的newkey就是我们降维度之后的信息,newvalue就是我们降维度之后的数值。显然只是这样远远不能完成我们的目的,在进行map函数之后,还要进行的是分组和shuffle的过程,只是这一过程被框架所自动帮你完成了,我们只需要做的就是降维度的任务。但是我们也不得不去理解其中的分组原理。以图5-1中的数据为例,我们可以根据区域维度来统计每一个省份对商品的购买数量或者购买金额。购买数量首先提取出区域维度,然后每一条数据对于着一个销售数量和金额赋值给区域维度。过程如图4-5所示:图4-5 Map过程2) Reduce函数阶段在经历了Map阶段的降维度之后我们reduce阶段就是把降维度的数据统计出来。这就是reduce阶段主要做的任务工作。reduce函数所接受的传入数值的全部是map函数所传出的值,而且所对应的数值类型也一样。Reduce函数根据不同的key值对value值进行累加运算。然后把地阿尔加的运算结果作为key这个维度的value值。Key值保持不变。以上图的4.2所示的数据为例我们对把每个省份的值作为key,然后根据其每一条销售数据进行叠加计算,然后作为key,也就是省份维度的value值进行输出结果,如图4-6所示:图 4-6 Reduce阶段处理顺序的核心流程图如图4-7:图4-7 数据处理流程4.3 数据字典的设计4.3.1权限数据库字典设计名称 代码 数据类型 长度 主键 外键 角色IDRole_idint 10 TRUEFALSE 菜单名称Menu_idInt10FALSE FALSE 表4.1 权限表(td_private)名称 代码 数据类型 长度 主键 外键 逻辑IDidint 10TRUE FALSE 菜单名称Menu_namevarchar(50) 50FALSE FALSE 菜单URLMenu_actionvarchar(200) 200FALSE FALSE 菜单顺序Menu_orderint10FALSE FALSE 父菜单idParent_idint10FALSE FALSE 表4.2 菜单表(Td_menu)名称 代码 数据类型 长度 主键 外键 逻辑IDidint 10 TRUE FALSE 用户idUser_Idvarchar(500)500FALSE FALSE用户名称User_namevarchar(500)500FALSE FALSE角色IDrole_idint10FALSETRUE用户密码Passwordint10FALSETRUE用户出生日期BirthdayTime20FALSEFALSE手机号Phoneint11FALSEFALSE 表4.3 用户基本信息表(Td_login_user)4.3.2报表数据字典设计名称 代码 数据类型 长度 主键 外键 IDidint 10TRUEFALSE 区域维度T_prinvinceVarchar50FALSE FALSE 总销售额T_moneyInt10FALSE FALSE 表4.4 区域维度表名称 代码 数据类型 长度 主键 外键 IDidint 10TRUEFALSE 客户维度Tb_nameVarchar50FALSE FALSE 总销售额Tb_moneyInt10FALSE FALSE 表4.5 客户维度表名称 代码 数据类型 长度 主键 外键 IDidint 10 TRUEFALSE 商品维度Tb_proVarchar50FALSE FALSE 总销售额Tb_moneyInt10FALSE FALSE 表4.6 商品维度表名称 代码 数据类型 长度 主键 外键 IDidint 10TRUEFALSE 客户维度Tb_nameVarchar50FALSE FALSE 总销售数量Tb_numInt10FALSE FALSE 表4.7 客户数量维度表名称 代码 数据类型 长度 主键 外键 IDidint 10 TRUEFALSE 时间维度Tb_monthVarchar50FALSE FALSE 总销售额T_moneyInt10FALSE FALSE 表4.8 时间维度表4.4 Web端设计Web采用的MVC分层的思想,如图4-8所示。MVC的思想主要有:M(Model),V(View),C(Controller)4。Model层主要是mysql数据库与mybatis通过javaBean在数据库的映射表上一一对于建立表的联系。通过javaBean的操作对数据库的操作。相关的映射关系在4-8图的Dao层的包里。Controller层主要是用的是springMVC框架来对数据层与视图层的控制,接收页面上的数据提交以及跳转控制。主要是通过action来实现的,主要是在4-1图的controller层里,springMVC是通过注解的方式来接收页面传过来的请求(“conreoller注解”)。View层主要是对页面的展示,本设计主要是对报表展示以及个人信息的展示。前端是使用的jsp技术,框架利用的是jquery-easyui框架,因为这个框架对数据的处理比较方便。如图4-8 图4-8 web分层设计4.5 实体关系模型4-9 实体关系模型Login_user和private之间通过role_id来连接,一个用户有许多个菜单,不同的用户拥有不同的权限,例如role_id为“1”时候为管理员。管理员权限为增添人和查看报表菜单权限,role_id为“2”的时候为数据处理人员,权限为数据的处理以及报表查看,另外一种用户就是普通用户,只能查看报表。一个Login_user对应多个Menu,一个Menu可能为多个Login_user,一个Menu只对应了一个维度表。第五章 系统的实现5.1 销售数据模拟 本设计通过线程的方式模拟销售大数据的生成,主要是通过实现Runnable接口来模拟,用文本的格式打印出字段信息:public class WriteWord implements Runnableprivate static Long orderNum=(long)1400000;/改这里public static void main(String args) WriteWord ww = new WriteWord();Thread tt = new Thread(ww);tt.start();FileWriter fw = null;OutputStreamWriter dos = null;try/fw = new FileWriter(d:order.txt);dos = new OutputStreamWriter(new FileOutputStream(e:SalesData2015order.txt,true);PrintWriter pw = new PrintWriter(dos);for(Long i = (long)0;i100000;i+)int count=1400000;/改这里count+;pw.print(orderNum+);pw.write(t);/打印订单号int productNum =(int)(Math.random()*20);pw.print(productNum);/商品编号pw.write(t);./*主要是对随机获取到的数字顺序组合成名字和公司信息打印出来5.2 MapReduce实现导入hadoop的jar文件,在进行mapredcuce编写的时候必须引入hadoop相关的jar包,在hadoop的官网有相关jar的下载,最好少最新版本以下的。在新建的普通java项目中添加hadoop相关的jar包,这是作为编写mapreduce前期准备。5.2.1编写Map类此类主要是对读取过来的数据进行截取分割为key-value的值,首先我们需要继承Mapper类,重写map方法,Object与Text分别代表了文件读入的key与文本信息。Context代表map输出的key-value值。代码如下:public class CountMyMapper extends Mapper Overrideprotected void map(Object key, Text value, Context context)throws IOException, InterruptedException String str = value.toString();String strArry = str.split(t);String prinvince = strArry8.substring(0,2);String money = strArry7;double money1 =Double.parseDouble(money);DoubleWritable lw = new DoubleWritable();Text text = new Text();lw.set(money1);text.set(prinvince);context.write(text, lw);5.2.2 编写Reduce类reduce类主要是对map传过来的数据进行叠加计算输出,首先我们也需要基础Reducer这个类,然后重写reduce这个方法。Reduce方法内的参数分别代表输入的文本,迭代器,输出的key-value值:public class CountMyReduce extends ReducerOverrideprotected void reduce(Text text, Iterable value,Context context)throws IOException, InterruptedException DoubleWritable lw = new DoubleWritable();double sum = 0l;for(DoubleWritable val:value)sum+=val.get();lw.set(sum);context.write(new TblsWritable(text.toString(), lw.toString(), null);5.2.3 Main主函数此函数主要是mapreduce程序的入口函数,包含了配置文件的获取,mysql配置的获取等等。这里的数据库写入和普通的java程序一样,也需要获取jdbc驱动,然后找到数据库的ip以及端口号等等这些信息。public class CountMyMain public static void main(String args) throws IOException, ClassNotFoundException, InterruptedException Configuration conf = new Configuration();DBConfiguration.configureDB(conf, com.mysql.jdbc.Driver,jdbc:mysql:/57126:12696/manager?useUnicode=true&characterEncoding=UTF-8,root,beary1989322);conf.set(mapred.job.tracker,namenode:9001);Job job = new Job(conf,Count prinvince);job.setJarByClass(CountMain.class);job.setMapperClass(CountMapper.class);job.setReducerClass(CountReduce.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(DoubleWritable.class);job.setOutputKeyClass(TblsWritable.class);job.setOutputValueClass(TblsWritable.class);job.setInputFormatClass(TextInputFormat.class);FileInputFormat.addInputPath(job, new Path(/user/input);DBOutputFormat.setOutput(job, count_money_by_prinvince, t_prinvince,t_money);System.exit(job.waitForCompletion(true)?0:1);*此方法主要是MapReduce处理程序的入口函数,我们相对的的map和reduce都是需要在这里声明加载进去,这样才会被目标程序锁识别。*/5.3 销售数据上传设计 此功能点主要是针对销售数据上传而设计的,主要是java对hadoop的API扩展。主要的代码如下:/*上传文件到hdfs*/public String uploadUserIcon(RequestParam(value = file, required = false) MultipartFile file, HttpServletRequest request) if(file!=null)Stringfilepath= hdfs:/30:9000/user/input/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论