体验SQL Server 2012的Hadoop连接器
前面提到,Hadoop是一个Apache基金会支持的开源分布式大数据处理框架,能并行处理不同节点的大数据。而作为Hadoop的文件系统,HDFS为用户应用提供了文件级存储支持。
SQL Server支持的Hadoop连接器的基础是Sqoop连接器,主要目标是提供SQL Server与Hadoop之间的数据转换,即结构化数据与非结构化数据之间的双向数据迁移。
下面,结合SQL Server 2012与Hadoop的双向数据转换,我们简单演示以下SQL Server Hadoop连接器的功能。
1. 将SQL Server 2012数据导入到Hadoop
Hadoop存储数据的介质包括文件系统HDFS与数据库Hive两部分。因此,SQL Server 2012导入到Hadoop也分为两部分。
清单1演示的是将SQL Server 2012中名叫testdb的数据库中的testtable表导入到Hadoop的文件系统HDFS中。
清单1
前面提到,SQL Server Hadoop连接器基于Sqoop,因此,这里的命令为sqoop,对应的导入参数为import –connect。作为源数据库,jdbc:sqlserver 的URL指定了SQL Server 2012对应的主机名192.168.0.1,数据库用户名dbuser与密码dbpasswd。与此同时,还指定了数据库名称testdb以及对应的数据表testtable。而作为目标Hadoop,这里指定了HDFS的目录——/data/testData。
为了加速导入,我们可以采用并行的方式,如清单2所示:
清单2
清单2是在清单1的基础上,选择-m选项来启动4个进程,同时进行数据的导入操作。--split选项则指定基于数据表中的哪一列进行拆分。我们简单解释下其中的并行工作原理。
a)首先,SQL Server连接器会执行一个查询
通过查询,获取到需要拆分字段(id)的最大值和最小值,假设分别是1和1000。
b) 然后,Sqoop会根据需要并行导入的数量,进行拆分查询,并行导入将拆分为如下4条SQL同时执行:
select * from test where 250 <= id < 500;
select * from test where 500 <= id < 750;
select * from test where 750 <= id < 1000;
这样,就达到了并行导入的目的。
除了默认的文本文件,HDFS还支持二进制文件,也称为序列化文件sequencefile。清单3是在清单1的基础上,使用--as-sequencefile选项,指定导出文件格式为二进制文件,而非清单1所示的文本文件。
清单3
以上3个例子都是描述SQL Server 数据库与HDFS文件的转换。清单4则是描述SQL Server数据库与Hive数据库的转换,即结构化数据库向非结构化数据库的数据导入。
清单4
注意,在执行该命令之前,请确保环境变量HIVE_HOME(即Hive的安装目录)被正确设置。
图2显示的是将SQL Server数据库GameWeibo的数据表blacklist导入到Hadoop当中,后台启动MapReduce作业执行导入操作。
可以通过Hadoop提供的Web视图,查看MapReduce导入作业的ID、名称、作业状态等信息,如图3所示。
现在,可以查看Hadoop的HDFS文件中的数据,如图4所示。