《大数据课程实验案例:网站用户行为分析—-步骤三:Hive、MySQL、HBase数据互导》
开发团队:厦门大学数据库实验室 联系人:林子雨老师 ziyulin@
版权声明:版权归厦门大学数据库实验室所有,请勿用于商业用途;未经授权,其他网站请勿转载
本教程介绍大数据课程实验案例“网站用户行为分析”的第三个步骤,Hive、MySQL、HBase数据互导。在实践本步骤之前,请先完成该实验案例的第一个步骤——,和第二个步骤——。这里假设你已经完成了前面的这两个步骤。
数据仓库Hive概念与基本原理、关系数据库概念与基本原理、SQL语句、列族数据库HBase概念与基本原理
数据仓库Hive的基本操作、关系数据库MySQL的基本操作、Sqoop工具的使用方法、HBase API的Java编程、Eclipse开发工具使用方法
本教程需要安装Hive、MySQL、HBase和Sqoop。在前面的第一个步骤中,我们在安装Hive的时候就已经一起安装了MySQL(因为我们采用MySQL来存储Hive的元数据),所以,现在你只需要再安装HBase和Sqoop。
(1)请参考厦大数据库实验室博客,完成HBase的安装。本教程把HBase安装在了“/usr/local/hbase”目录下,采用伪分布式配置,也就是HBase会使用HDFS来存储数据。
如果你还没有启动Hive,请首先启动Hive。
请登录Linux系统(本教程统一采用hadoop用户名登录系统),然后,打开一个终端(可以按快捷键Ctrl+Alt+T)。
因为需要借助于MySQL保存Hive的元数据,所以,请首先启动MySQL数据库,请在终端中输入下面命令:
由于Hive是基于Hadoop的数据仓库,使用HiveQL语言撰写的查询语句,最终都会被Hive自动解析成MapReduce任务由Hadoop去具体执行,因此,需要启动Hadoop,然后再启动Hive。
请执行下面命令启动Hadoop(如果你已经启动了Hadoop就不用再次启动了):
然后,执行jps命令看一下当前运行的进程:
如果出现下面这些进程,说明Hadoop启动成功了。
下面,继续执行下面命令启动进入Hive:
通过上述过程,我们就完成了MySQL、Hadoop和Hive三者的启动。
启动成功以后,就进入了“hive>”命令提示符状态,可以输入类似SQL语句的HiveQL语句。
然后,在“hive>”命令提示符状态下执行下面命令:
我们可以新建一个终端,执行命令查看一下,确认这个数据文件在HDFS中确实被创建了,请在新建的终端中执行下面命令:
这说明,这个数据文件在HDFS中确实被创建了。注意,这个HDFS中的数据文件,在我们后面的“使用HBase Java API把数据从本地导入到HBase中”操作中会使用到。
请执行下面命令查询上面的插入命令是否成功执行:
前面我们已经启动了Hadoop集群和MySQL服务。这里请确认已经按照前面操作启动成功。
2、将前面生成的临时表数据从Hive导入到 MySQL 中,包含如下四个步骤。
请在Linux系统中新建一个终端,执行下面命令:
为了简化操作,本教程直接使用root用户登录MySQL数据库,但是,在实际应用中,建议在MySQL中再另外创建一个用户。
执行上面命令以后,就进入了“mysql>”命令提示符状态。
注意:请使用下面命令查看数据库的编码:
会显示类似下面的结果:
请确认当前编码为utf8,否则无法导入中文,请参考修改编码。
下面是笔者电脑上修改了编码格式后的结果:
提示:语句中的引号是反引号`,不是单引号’。
创建成功后,输入下面命令退出MySQL:
(4)导入数据(执行时间:20秒左右)
注意,刚才已经退出MySQL,回到了Shell命令提示符状态。下面就可以执行数据导入操作,
会提示你输入MySQL的root用户的密码,本教程中安装的MySQL数据库的root用户的密码是hadoop。
然后执行下面命令查询user_action表中的数据:
会得到类似下面的查询结果:
从Hive导入数据到MySQL中,成功!
之前我们已经启动了Hadoop集群、MySQL服务,这里请确认已经按照前面操作启动成功。这里我们再启动HBase服务。本教程中,HBase的安装目录是“/usr/local/hbase”,而且本教程中,HBase配置为使用HDFS存储数据。
请新建一个终端,执行下面命令:
启动成功后,就进入了“hbase>”命令提示符状态。
上面命令在HBase中创建了一个user_action表,这个表中有一个列族f1(你愿意把列族名称取为其他名称也可以,比如列族名称为userinfo),历史版本保留数量为5。
4、导入数据(执行时间:30秒左右)
下面新建一个终端,执行下面命令导入数据:
注意:IP部分改为本机IP地址或localhost。同时,HBase只支持十六进制存储中文。
执行上面的sqoop import命令以后,会得到类似下面的结果(省略了很多非重要的屏幕信息):
现在,再次切换到HBase Shell运行的那个终端窗口,在“hbase>”命令提示符下,执行下面命令查询刚才导入的数据:
因为有30万条记录,所以,我们用LIMIT只查询前10行的记录,会得到类似下面的结果:
注意,我们用limit10是返回HBase表中的前面10行数据,但是,上面的结果,从“行数”来看,给人一种错误,似乎不是10行,要远远多于10行。这是因为,HBase在显示数据的时候,和关系型数据库MySQL是不同的,每行显示的不是一行记录,而是一个“单元格”(如果无法理解,请参考厦大数据库实验室录制的在线课程视频《》)。
请首先确保启动了Hadoop集群和HBase服务。如果还没有启动,请在Linux系统中打开一个终端。
首先,按照下面命令启动Hadoop:
然后,按照下面命令启动HBase:
实际上,我们也可以编写Java程序,直接从HDFS中读取数据加载到HBase。但是,这里我们展示的是如何用JAVA程序把本地数据导入到HBase中。你只要把程序做简单修改,就可以实现从HDFS中读取数据加载到HBase。
首先,请将之前的user_action数据从HDFS复制到Linux系统的本地文件系统中,命令如下:
我们这里采用Eclipse编写Java程序实现HBase数据导入功能。关于如何使用Eclipse编写Java程序调用HBase API,请参考厦大数据库实验室博客《》。
现在开始执行数据导入操作。
使用Java程序将数据从本地导入HBase中,导入前,请先清空user_action表。
请在之前已经打开的HBase Shell窗口中(也就是在“hbase>”命令提示符下)执行下面操作:
下面就可以运行hadoop jar命令运行程序:
这个命令大概会执行3分钟左右,执行过程中,屏幕上会打印出执行进度,每执行1万条,对打印出一行信息,所以,整个执行过程屏幕上显示如下信息:
下面,再次切换到HBase Shell窗口,执行下面命令查询数据:
就可以得到类似下面的查询结果了:
到这里,第三个步骤的实验内容顺利结束,请继续访问第四个步骤《》