hadoop2.20+hive+sqoop+mysql数据处理案例

一、业务说明

使用Hadoop2及其他开源框架,对本地的日志文件进行处理,将处理后需要的数据(PV、UV...)重新导入到关系型数据库(Mysql)中,使用Java程序对结果数据进行处理,组织成报表的形式在数据后台进行展示。

二、为什么使用Hadoop(开发动机)

现有的日志处理方式,是采用纯的java程序来计算的,对于大数据的日志文件来说,这种方案在处理速度、IO占用、数据备份及资源利用率方面都有一定的缺陷;

相比之下使用Hadoop完成数据存储和计算有以下的好处:

(1)高可靠性:Hadoop支持对数据的多副本备份;

(2)高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计    的节点中。

(3)高效性:通过分发数据,hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快   速。

(4)高容错性:Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

(5)高资源利用率:管理员可以根据当前服务器的配置,来设置不同的资源调度方案(yarn),做到资源利用最大化。

三、数据处理流程图

四、类目贡献率案例流程

一、案例业务目标:

统计2014年12月16日 全天,用户点击数top20的商品类别条目

二、开发步骤

(1)将2014年12月16日的日志(约16G)上传到HDFS文件系统的 /input/log_2014-12-16目录下

(2)、编写MapReduce程序清洗数据

程序逻辑分析:

筛选出日志字段中url包含?id=...的行,该url表示的含义为用户点击了某个商品类目为id的条目,程序的目标是只筛选出含有此url的行数据,对于不包含的行将舍弃。 清洗后的数据存放在HDFS的   /output/cleanItem_2014_12_16目录下(清洗后的数据约为140MB)

(3)、将清洗后的数据映射到Hive表中

进入hive的client端,建立一个外部分区表mmb_ordercontribute,这个表的字段与日志的字段一一对应,但会多一个data的分区字段,这相当于Mysql中的索引,当按照日期查询时,效率会高,以下是在hive中,mmb_ordercontribute的建表语句:

如图所示,表的映射路径location指向了清洗后的数据目录

(4)操作hive表数据

数据经过映射后,就可以像mysql等数据库一样通过sql语句的形式来处理表数据了,比如:

统计当天所有用户访问条目的总次数:

统计的结果为:904423

虽然是一个类似mysql的查询语句,但是处理的流程和mysql是天差地别的,hive会将这条语句解析成一个MapReduce程序进行统计,如图所示,hive处理完这个查询cup使用的总时间为6分钟左右,而分配到逻辑cpu上,实际使用的时间为28.5秒,如果去除mapreduce的解析和准备工作,mapreduce的执行时间是非常少的。

但hive并不是所有的sql语句都被映射成mapreduce程序,唯一的例外(不配置的话)就是:SELECT * FROM  table_name LIMIT;因为这只是在截取表的前几条数据而已;

(5)使用Hive处理清洗数据并导出到临时表

真正需要的数据将在此步得出,即:统计出top20的用户点击类目,将统计出的数据作为hive的一张临时表:

item_20141216表存储,备后用:

sql语句:

CREATE TABLE

item_20141216

AS SELECT

itemId,COUNT(1) as nums

FROM

mmb_ordercontribute

GROUP BY

itemId

ORDER BY

nums DESC;

导出后的表item_20141216 存放在hive的默认数据仓库下:

注:每行数据其实由两部分组成,行号和数量,看着像一个数字是因为hive表字段的分隔符不是空格或者tab键,而是 \001

(6)使用sqoop将临时表数据导出到mysql对应的表中

在mysql中创建与item_20141216对应的表

CREATE TABLE `item_contribute` (

`itemId` varchar(11) default NULL COMMENT ‘条目id‘,

`nums` int(11) default NULL COMMENT ‘出现的次数‘

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

进入sqoop客户端执行一下命令输入连接信息:

sqoop export --connect jdbc:mysql://master:3306/test --username hive --password 123456 --table  item_contribute --fields-terminated-by ‘\001‘ --export-dir ‘/user/hive/warehouse/db1.db/item_20141216‘;

将会看到mysql表中的数据被填充:

(7)接下来就可以利用java程序将数据组织成报表进行展示了!

时间: 2024-10-06 21:22:48

hadoop2.20+hive+sqoop+mysql数据处理案例的相关文章

HDFS、Hive、MySQL、Sqoop之间的数据导入导出(强烈建议去看)

Hive总结(七)Hive四种数据导入方式 (强烈建议去看) Hive几种数据导出方式 https://www.iteblog.com/archives/955 (强烈建议去看) 把MySQL里的数据导入到HDFS 1.使用MySQL工具手工导入 把MySQL的导出数据导入到HDFS的最简单方法就是,使用命令行工具和MySQL语句. 为了导出整个数据表或整个数据库的内容,MySQL提供了mysqldump工具. 比如 SELECT  col1,col2 FORM TABLE INTO OUTFI

Sqoop MySQL 导入到HDFS

从MySQL数据库phx中读取tree表到HDFS 执行命令: sqoop import --connect jdbc:mysql://node1:3306/phx \--username root --table tree --m 1 命令行输出: Warning: /csh/link/sqoop/../hcatalog does not exist! HCatalog jobs will fail. Please set $HCAT_HOME to the root of your HCat

MYSQL Study案例之--RedHat EL55源码安装Mysql-5.6

MYSQL  Study案例之--RedHat EL55源码安装Mysql-5.6 系统环境: 操作系统:RedHat EL55 DB Soft:  Mysql 5.6.4-m7 1.系统环境 [[email protected] Packages]# uname -a Linux rh6 2.6.18-194.el5.xen #1 SMP Tue Jan 29 11:47:41 EST 2013 i386 i686 GNU/Linux [[email protected] Packages]#

MYSQL Study案例之--通过源码安装Mysql-5.6

MYSQL  Study案例之--通过源码安装Mysql-5.6 系统环境: 操作系统:RedHat EL6 DB Soft:  Mysql 5.6.4-m7 1.系统环境 [[email protected] Packages]# uname -a Linux rh6 2.6.32-358.el6.x86_64 #1 SMP Tue Jan 29 11:47:41 EST 2013 x86_64 x86_64 x86_64 GNU/Linux [[email protected] Packag

mysql优化案例

MySQL优化案例 Mysql5.1大表分区效率测试 Mysql5.1大表分区效率测试MySQL | add at 2009-03-27 12:29:31 by PConline | view:60, comment:0 mysql5.1开始支持数据表分区了,原来的分表可以不用了,分表的不足在于多表查询不方便.呵呵,下面来简单测试下表分区的查询效率. 1.用来测试的数据为discuz论坛的数据库,表为cdb_posts表,数据量为1500多万条mysql> select count(*) fro

MySQL故障案例

第1章 MySQL故障案例: 1.1 背景说明: mysql的架构中没有主从复制的体系,也没有按时进行备份 数据库中有两个库conf库和jira库,仅有一份备份的数据,还是一年前的备份 1.2 故障场景: 意外宕机,导致磁盘物理损坏,也就是说mysql软件程序中data数据目录中的jira文件都没有了 数据库无法启动,经过检查,conf库数据文件都还在,也就是ibd和frm文件都存在 领导要求,conf还是好的,能不能临时先把数据库跑起来,然后想办法修复jira库 1.3 故障环境模拟: 1.3

HIVE配置mysql metastore

HIVE配置mysql metastore    hive中除了保存真正的数据以外还要额外保存用来描述库.表.数据的数据,称为hive的元数据.这些元数据又存放在何处呢?    如果不修改配置hive默认使用内置的derby数据库存储元数据.    derby是apache开发的基于java的文件型数据库.    可以检查之前执行命令的目录,会发现其中产生了一个metastore.db的文件,这就是derby产生的用来保存元数据的数据库文件. derby数据库仅仅用来进行测试,真正使用时会有很多

20多条MySQL 性能优化经验分享

当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了. 这里最主要

MySQL数据处理函数

数据处理函数 有时从数据库表中获取到的数据需要进行一些处理.如将小写字母替换为相应的大写字母.这个处理过程可以在客户机上进行,也可以在数据库上进行.数据库上进行会更高效.数据库中有相应的数据处理函数来处理这些数据,但是在SQL中使用特殊的数据处理函数会降低其可移植性.不同的DBMS系统,其数据处理函数不同. 大多数的SQL支持以下类型的函数 用于处理文本串的函数,如删除.填充值.转换大小写: 用于在数值数据上进行算术操作的函数: 用于处理日期和时间值并从这些值中提取特殊成分,如两个日期只差的函数