sqoop 从sqlserver2008 导入数据到hadoop

  今天终于开始上手导入数据到hadoop了,哈哈,过程蛮崎岖的,和官方文档的还不太一样。

  OK,let's go!试验对象是我第一个名为ST_Statistics的一张表,我要把我表里的数据导入到hdfs、hive以及hbase当中,然后试验才算完成。

  1.导入数据到hdfs

  sqoop import  --connect 'jdbc:sqlserver://192.168.1.105:1433;username=sa;password=cenyuhai;database=SAMS' \
          --query "SELECT * FROM ST_Statistics WHERE BigReason='OfficeSoftwareFault' AND \$CONDITIONS " \
              --split-by ResponseTime --target-dir /user/cenyuhai/sams  

  这里面有几个需要注意的点:

  (1)--connect 后面的字符带上了'',为毛?其实我也不知道,官方文档上可不是这么说的,加上才可以跑。

  (2)--split-by 后面跟的字段必须是整形的,因为sqoop是靠这个字段是给map线程分工的,不是整理它强转的时候就会报错的。

13/09/06 06:50:31 ERROR security.UserGroupInformation: PriviledgedActionException as:root cause:java.io.IOException: com.microsoft.sqlserver.jdbc.SQLServerException: 操作数数据类型 uniqueidentifier 对于 min 运算符无效。
13/09/06 06:50:31 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: com.microsoft.sqlserver.jdbc.SQLServerException: 操作数数据类型 uniqueidentifier 对于 min 运算符无效。
    at org.apache.sqoop.mapreduce.db.DataDrivenDBInputFormat.getSplits(DataDrivenDBInputFormat.java:167)
    at org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:1054)
    at org.apache.hadoop.mapred.JobClient.writeSplits(JobClient.java:1071)
    at org.apache.hadoop.mapred.JobClient.access$700(JobClient.java:179)
    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:983)
    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:936)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:396)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1232)
    at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:936)
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:550)
    at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:580)
    at org.apache.sqoop.mapreduce.ImportJobBase.doSubmitJob(ImportJobBase.java:187)
    at org.apache.sqoop.mapreduce.ImportJobBase.runJob(ImportJobBase.java:16

    (3)只要是语法不对的,它都会报下面这个错,希望大家注意!

At minimum, you must specify --connect and --table
Arguments to mysqldump and other subprograms may be supplied
after a '--' on the command line.

  2.增量导入

  sqoop支持两种增量导入到hive的模式, 一种是 append,即通过指定一个递增的列,比如:      --incremental append  --check-column id --last-value 0      另种是可以根据时间戳,比如:   --incremental lastmodified --check-column time --last-value '2013-01-01 11:0:00'   就是只导入time比'2013-01-01 11:0:00'更大的数据。

  好,我试验的是第一种,我在插入了前面插入了差距的基础上,再插入WorkNo是201309071后面的数据(我新加的)

sqoop import  --connect 'jdbc:sqlserver://192.168.1.105:1433;username=sa;password=cenyuhai;database=SAMS'  --table ST_Statistics \
  --where "BigReason='OfficeSoftwareFault'"   --split-by ResponseTime --target-dir /user/cenyuhai/sams \
  --incremental append  --check-column WorkNo  --last-value 201309071 

  执行成功,命令的提示当中会出现以下的提示,最后的值已经到201308081了。

13/09/06 22:26:15 INFO mapreduce.ImportJobBase: Retrieved 5 records.
13/09/06 22:26:15 INFO util.AppendUtils: Appending to directory sams
13/09/06 22:26:15 INFO util.AppendUtils: Using found partition 8
13/09/06 22:26:15 INFO tool.ImportTool: Incremental import complete! To run another incremental import of all data following this import, supply the following arguments:
13/09/06 22:26:15 INFO tool.ImportTool:  --incremental append
13/09/06 22:26:15 INFO tool.ImportTool:   --check-column WorkNo
13/09/06 22:26:15 INFO tool.ImportTool:   --last-value 201309081

  3.导入到hive

  sqoop import  --connect 'jdbc:sqlserver://192.168.1.105:1433;username=sa;password=cenyuhai;database=SAMS' \
             --table ST_Statistics --where "BigReason='OfficeSoftwareFault'" --split-by ResponseTime --hive-import  --create-hive-table 

  不知道为什么,执行hive的导入语句时,就不能用--query了,老报上面的那个提到的那个错误,可能是RP不好,就只能改成这种表加上过滤条件的方式了。

  然后用上面对hdfs的增量插入的方式对hive来操作也不成功,老是报前面提到的那个语法错误,真是让人无语了,报错都报得如此含蓄!

  4.导入到hbase

sqoop import  --connect 'jdbc:sqlserver://192.168.1.105:1433;username=sa;password=cenyuhai;database=SAMS' --table ST_Statistics --where "BigReason='OfficeSoftwareFault'" --split-by ResponseTime  --hbase-table ST_Statistics --hbase-create-table   --hbase-row-key WorkNo  --column-family cf 

  这条语句非常长,为毛?我也不知道,这种写法我试了很多次了,用\来分行的写了很多次,一次都没成功,最后误打误撞,弄成一行它就成功运行了!

  5.把数据从hdfs导回到sqlserver,从hive导出也和这个一样,因为都是文本文件,hbase的话,也是不支持直接的,需要通过和hive结合,才能导出。  

sqoop export  --connect 'jdbc:sqlserver://192.168.1.105:1433;username=sa;password=cenyuhai;database=SAMS' \
              --table ST_Statistics2 --export-dir /user/cenyuhai/sams

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android中高级开发

Android开发之漫漫长途 XI——从I到X的小结

该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索...

1202
来自专栏aCloudDeveloper

python网络编程初级

网络编程的专利权应该属于Unix,各个平台(如windows、Linux等)、各门语言(C、C++、Python、Java等)所实现的符合自身特性的语法都大同小...

2475
来自专栏小筱月

SSM 使用 mybatis 分页插件 pagehepler 实现分页

前几天在这里分享了手写 sql 分页查询实现分页,现在来看看使用 mybatis 分页插件 pagehepler 来实现分页

3531
来自专栏Golang语言社区

Go 单元测试与接口

Good code and unit testing come hand in hand, and sometimes the bridge between t...

2893
来自专栏何俊林

结合Android源码分析总结单例模式的几种实现方式

本文为付祥投稿,主要是结合Android源码分析总结单例模式的几种实现方式。 谈起设计模式估计大家都不会陌生,一个项目中至少会用到其中的一种模式,今天要说的主角...

4768
来自专栏码匠的流水账

聊聊eureka的delta配置

eureka-client-1.8.8-sources.jar!/com/netflix/discovery/DiscoveryClient.java

961
来自专栏GIS讲堂

Arcgis4js实现链家找房的效果

买房的各位亲们不知是否留意过链家的"地图找房",这样的功能对于使用者来说,是非常方便的,大家可通过连接(https://bj.lianjia.com/ditu/...

1182
来自专栏程序员互动联盟

android apk 防反编译技术第一篇-加壳技术

做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习。现在...

5758
来自专栏JackieZheng

学习SpringMVC——你们要的REST风格的CRUD来了

  来来来,让一下,客官,您要的REST清蒸CRUD来了,火候刚刚好,不油不腻,请慢用~~~   如果说前面是准备调料,洗菜,切菜,摆盘,那么今天就来完整的上道...

34410
来自专栏Hongten

Cannot create PoolableConnectionFactory (Communications link failure)--Connection refused: connect

 我知道是连接数据库的时候出现了错误,我检查了我的tomcat的配置文件context.xml文件

3721

扫码关注云+社区

领取腾讯云代金券