利用Sqoop把SqlServer数据库中的表导入导出到HDFS
[font=微软雅黑, Tahoma]为了能够和HDFS之外的数据存储库进行交互,MapReduce程序需要使用外部API来访问数据。Sqoop是一个开源的工具,它允许用户将数据从关系型数据库抽取到Hadoop中,用于进一步的处理。抽取出来的数据可以被Mapreduce程序使用。也可以被其他类似于Hive的工具使用。一旦形成分析结果,Sqoop便可以将这些结果导回数据库,以供其他客户端使用。[font=微软雅黑, Tahoma]Sqoop的安装[font=微软雅黑, Tahoma]从[color=#198ed8 !important]http://archive.cloudera.com/cdh/3/上下载安装包。然后解压。在安装Sqoop之前,需要在机器上安装java和Hadoop,并且需要在系统环境变量中设置HADOOP_HOME变量:[font=微软雅黑, Tahoma]sudo gedit /etc/environment[font=微软雅黑, Tahoma]然后在文件中添加HADOOP_HOME变量,并使其指向系统中Hadoop的根目录。Sqoop安装包中并不包含jdbc的SqlServer驱动,所以想在HDFS和SqlServer数据库之间导入导出数据,则需要先下载jdbc的SqlServer驱动。到[color=#198ed8 !important]http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=21599 上下载jdbc驱动1033\sqljdbc_3.0.1301.101_enu.tar.gz,解压,把sqljdbc4.jar包拷贝到Sqoop安装目录下的lib目录下,但是这个只是jdbc中SqlServer的驱动,它并不支持HDFS与SqlServer数据库之间数据的传输,还需要下载SQL Server-Hadoop Connector。下载地址为[color=#198ed8 !important]http://www.microsoft.com/download/en/details.aspx?id=27584 ,解压得到sqoop-sqlserver-1.0目录,并在系统中添加环境变量MSSQL_CONNECTOR_HOME,让它指向sqoop-sqlserver-1.0目录。然后执行sqoop-sqlserver-1.0目录下的install.sh。这个命令会将连接的jar文件和配置文件拷贝的Sqoop目录中。至此就可以用Sqoop连接SqlServer和HDFS了。[font=微软雅黑, Tahoma]在使用Sqoop之前要把Hadoop的进程打开。然后切换到Sqoop目录下,就可以执行数据的导入和导出了。[font=微软雅黑, Tahoma]例如导入:[font=微软雅黑, Tahoma]$bin/sqoop import --connect 'jdbc:sqlserver://192.168.1.123;username=test;password=123;database=test' --table=test --target-dir /user/cloudcomputing/output -m 3[font=微软雅黑, Tahoma]便可以把IP地址为192.168.1.123机器上的test数据库中的test表导入到HDFS上的/user/cloudcomputing/output目录下。[font=微软雅黑, Tahoma]导出:[font=微软雅黑, Tahoma]$bin/sqoop export --connect 'jdbc:sqlserver://192.168.1.123;username=test;password=123;database=test' --table test --export-dir /user/cloudcomputing/output[font=微软雅黑, Tahoma]便可以把/user/cloudcomputing/output目录下的数据导入到192.168.1.123机器上的test数据库中的test数据表中。