大数据案例
联系信息/contact us
地址:南京市建邺区奥体大街68号国际研发总部园4B12层
电话:4000250655
传真:
邮箱:
《大数据课程实验案例:网站用户行为分析—-步骤一:本地数据集上传到数据仓库Hive》
开发团队:厦门大学数据库实验室 联系人:林子雨老师br>
版权声明:版权归厦门大学数据库实验室所有,请勿用于商业用途;未经授权,其他网站请勿转载
Linux系统基本命令、Hadoop项目结构、分布式文件系统HDFS概念及其基本原理、数据仓库概念及其基本原理、数据仓库Hive概念及其基本原理
Hadoop的安装与基本操作、HDFS的基本操作、Linux的安装与基本操作、数据仓库Hive的安装与基本操作、基本的数据预处理方法
本实验全部在Linux系统下开展,因此,必须要安装好Linux系统。关于需要什么样的电脑硬件配置,以及如何安装Linux系统,请参考厦大数据库实验室在线教程《Linux系统安装》。
本案例采用的数据集为user.zip,包含了一个大规模数据集raw_user.csv(包含2000万条记录),和一个小数据集small_user.csv(只包含30万条记录)。小数据集small_user.csv是从大规模数据集raw_user.csv中抽取的一小部分数据。之所以抽取出一少部分记录单独构成一个小数据集,是因为,在第一遍跑通整个实验流程时,会遇到各种错误,各种问题,先用小数据集测试,可以大量节约程序运行时间。等到第一次完整实验流程都顺利跑通以后,就可以最后用大规模数据集进行最后的测试。
下面,请登录Linux系统(本教程统一采用hadoop用户登录),并在Linux系统中打开浏览器(一般都是火狐Firefox浏览器),然后,在Linux系统的浏览器中打开本网页,点击这里下载user.zip数据集。如果在下载的时候,你没有修改文件保存路径,火狐浏览器会默认把文件保存在你的当前用户的下载目录下,因为本教程是采用hadoop用户名登录了Linux系统,所以,下载后的文件会被浏览器默认保存到/home/hadoop/下载/这目录下面。
现在,请在Linux系统中打开一个终端(可以使用快捷键Ctrl+Alt+T),执行下面命令:
通过上面命令,就进入到了user.zip文件所在的目录,并且可以看到有个user.zip文件。注意,如果你把user.zip下载到了其他目录,这里请进入到你自己的存放user.zip的目录。
下面需要把user.zip进行解压缩,我们需要首先建立一个用于运行本案例的目录bigdatacase,请执行以下命令:
user_id(用户id) item_id(商品id) behaviour_type(包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4) user_geohash(用户地理位置哈希值,有些记录中没有这个字段值,所以后面我们会用脚本做数据预处理时把这个字段全部删除) item_category(商品分类) time(该记录产生时间)
raw_user和small_user中的第一行都是字段名称,我们在文件中的数据导入到数据仓库Hive中时,不需要第一行字段名称,因此,这里在做数据预处理时,删除第一行
接下来的操作中,我们都是用small_user.csv这个小数据集进行操作,这样可以节省时间。等所有流程都跑通以后,你就可以使用大数据集raw_user.csv去测试一遍了。
下面对数据集进行一些预处理,包括为每行记录增加一个id字段(让记录具有唯一性)、增加一个省份字段(用来后续进行可视化分析),并且丢弃user_geohash字段(后面分析不需要这个字段)。
下面我们要建一个脚本文件pre_deal.sh,请把这个脚本文件放在dataset目录下,和数据集small_user.csv放在同一个目录下:
上面使用vim编辑器新建了一个pre_deal.sh脚本文件,请在这个脚本文件中加入下面代码:
使用awk可以逐行读取输入文件,并对逐行进行相应操作。其中,-F参数用于指出每行记录的不同字段之间用什么字符进行分割,这里是用逗号进行分割。处理逻辑代码需要用两个英文单引号引起来。 $infile是输入文件的名称,我们这里会输入raw_user.csv,$outfile表示处理结束后输出的文件名称,我们后面会使用user_table.txt作为输出文件名称。
在上面的pre_deal.sh代码的处理逻辑部分,srand()用于生成随机数的种子,id是我们为数据集新增的一个字段,它是一个自增类型,每条记录增加1,这样可以保证每条记录具有唯一性。我们会为数据集新增一个省份字段,用来进行后面的数据可视化分析,为了给每条记录增加一个省份字段的值,这里,我们首先用Province[]数组用来保存全国各个省份信息,然后,在遍历数据集raw_user.csv的时候,每当遍历到其中一条记录,使用value=int(rand()*34)语句随机生成一个0-33的整数,作为Province省份值,然后从Province[]数组当中获取省份名称,增加到该条记录中。
substr($6,1,10)这个语句是为了截取时间字段time的年月日,方便后续存储为date格式。awk每次遍历到一条记录时,每条记录包含了6个字段,其中,第6个字段是时间字段,substr($6,1,10)语句就表示获取第6个字段的值,截取前10个字符,第6个字段是类似2014-12-08 18这样的字符串(也就是表示2014年12月8日18时),substr($6,1,10)截取后,就丢弃了小时,只保留了年月日。
下面就可以执行pre_deal.sh脚本文件,来对small_user.csv进行数据预处理,命令如下:
可以使用head命令查看生成的user_table.txt,不要直接打开,文件过大,会出错,下面查看前10行数据:
下面要把user_table.txt中的数据最终导入到数据仓库Hive中。为了完成这个操作,我们会首先把user_table.txt上传到分布式文件系统HDFS中,然后,在Hive中创建一个外部表,完成数据的导入。
HDFS是Hadoop的核心组件,因此,需要使用HDFS,必须安装Hadoop。关于如何安装Hadoop,请参考厦大数据库实验室博客《Hadoop安装教程:单机/伪分布式配置》。这里假设你已经安装了Hadoop,本教程使用的是Hadoop2.7.1版本,安装目录是“/usr/local/hadoop”。
下面,请登录Linux系统,打开一个终端,执行下面命令启动Hadoop:
首先,请执行下面命令,在HDFS的根目录下面创建一个新的目录bigdatacase,并在这个目录下创建一个子目录dataset,如下:
下面可以查看一下HDFS中的user_table.txt的前10条记录,命令如下:
关于什么是数据仓库Hive?Hive的运行基本原理是什么?如何开展Hive简单编程实践?这些问题可以参考厦大数据库实验室制作的在线课程(含视频、讲义PPT和电子书)《基于Hadoop的数据仓库Hive》。
本案例教程需要安装数据仓库Hive,请参考厦大数据库实验室博客《Hive安装指南》来完成Hive的安装。这里假设你已经完成了Hive的安装,并且使用MySQL数据库保存Hive的元数据。本教程安装的是Hive2.1.0版本,安装目录是“/usr/local/hive”。
下面,请在Linux系统中,再新建一个终端(可以在刚才已经建好的终端界面的左上角,点击“终端”菜单,在弹出的子菜单中选择“新建终端”)。因为需要借助于MySQL保存Hive的元数据,所以,请首先启动MySQL数据库:
由于Hive是基于Hadoop的数据仓库,使用HiveQL语言撰写的查询语句,最终都会被Hive自动解析成MapReduce任务由Hadoop去具体执行,因此,需要启动Hadoop,然后再启动Hive。由于前面我们已经启动了Hadoop,所以,这里不需要再次启动Hadoop。下面,在这个新的终端中执行下面命令进入Hive:
启动成功以后,就进入了“hive>
”命令提示符状态,可以输入类似SQL语句的HiveQL语句。
关于数据仓库Hive的内部表和外部表的区别,请访问网络文章《Hive内部表与外部表的区别》。本教程采用外部表方式。
上面已经成功把HDFS中的“/bigdatacase/dataset”目录下的数据加载到了数据仓库Hive中,我们现在可以使用下面命令查询一下:
步骤一的实验顺利结束。可以继续访问下一个步骤:《大数据课程实验案例:网站用户行为分析—-步骤二:Hive数据分析》