今天终于开始上手导入数据到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线程分工的,不是整理它强转的时候就会报错的。

  

// :: ERROR security.UserGroupInformation: PriviledgedActionException as:root cause:java.io.IOException: com.microsoft.sqlserver.jdbc.SQLServerException: 操作数数据类型 uniqueidentifier 对于 min 运算符无效。
// :: 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:)
    at org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:)
    at org.apache.hadoop.mapred.JobClient.writeSplits(JobClient.java:)
    at org.apache.hadoop.mapred.JobClient.access$(JobClient.java:)
    at org.apache.hadoop.mapred.JobClient$.run(JobClient.java:)
    at org.apache.hadoop.mapred.JobClient$.run(JobClient.java:)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:)
    at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:)
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:)
    at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:)
    at org.apache.sqoop.mapreduce.ImportJobBase.doSubmitJob(ImportJobBase.java:)
    at org.apache.sqoop.mapreduce.ImportJobBase.runJob(ImportJobBase.java:

    (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  -- 

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

  

// :: INFO mapreduce.ImportJobBase: Retrieved  records.
// :: INFO util.AppendUtils: Appending to directory sams
// :: INFO util.AppendUtils: Using found partition
// :: INFO tool.ImportTool: Incremental import complete! To run another incremental import of all data following this import, supply the following arguments:
// :: INFO tool.ImportTool:  --incremental append
// :: INFO tool.ImportTool:   --check-column WorkNo
// :: INFO tool.ImportTool:   --

  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

  

sqoop 从sqlserver2008 导入数据到hadoop的更多相关文章

  1. 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟

    使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 Sqoop 大数据 Hive HBase ETL 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 ...

  2. 使用sqoop从mysql导入数据到hive

      目录 前言 一.使用的导入命令 二.遇到的问题及解决 1. 用文本字段进行分区的问题 2. Hadoop历史服务器Hadoop JobHistory没开启的问题 3. 连接元数据存储数据库报错 4 ...

  3. 教程 | 使用Sqoop从MySQL导入数据到Hive和HBase

    基础环境 sqoop:sqoop-1.4.5+cdh5.3.6+78, hive:hive-0.13.1+cdh5.3.6+397, hbase:hbase-0.98.6+cdh5.3.6+115 S ...

  4. sqoop从hive导入数据到mysql时出现主键冲突

    今天在将一个hive数仓表导出到mysql数据库时出现进度条一直维持在95%一段时间后提示失败的情况,搞了好久才解决.使用的环境是HUE中的Oozie的workflow任何调用sqoop命令,该死的o ...

  5. sqoop导入数据

    来源https://www.cnblogs.com/qingyunzong/p/8807252.html 一.概述 sqoop 是 apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据 ...

  6. sqoop1.4.7 导入数据到hive2.3.4 jackson版本问题

    今天用sqoop往hive导入数据的时候,执行报错,错误信息为: java.lang.NoSuchMethodError:com.fasterxml.jackson.databind.ObjectMa ...

  7. 使用Sqoop,最终导入到hive中的数据和原数据库中数据不一致解决办法

            Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL , ...

  8. Sqoop安装配置及数据导入导出

    前置条件 已经成功安装配置Hadoop和Mysql数据库服务器,如果将数据导入或从Hbase导出,还应该已经成功安装配置Hbase. 下载sqoop和Mysql的JDBC驱动 sqoop-1.2.0- ...

  9. sqoop导入数据到hive---2

    1.hive-table 从mysql导入数据到hive表中,可以使用--hive-table来指定hive的表名,不指定hive表名,则hive表名与mysql表名保持一致. sqoop impor ...

随机推荐

  1. Android之四大组件、六大布局、五大存储 总结

    Android之四大组件.六大布局.五大存储 一.四大组件:Android四大组件分别为activity.service.content provider.broadcast receiver.   ...

  2. js刷新小知识点

    data.code == '200' ? window.location.reload() : alert('拷贝失败,请重试') #如果状态码是200就刷新页面,如果不是就提示拷贝失败,请重试 页面 ...

  3. Linq to sql 消除列重复 去重复

    按user分组,取每组的第一个: var o = from r in xe.Descendants("customer")                    group r b ...

  4. [转载]Cortana 设计指导方针

    来源:@微软中国MSDN,源地址:http://weibo.com/p/1001603898586285925224 使用语音命令,延伸 Cortana 与您的应用程序所提供的功能.启动应用程序,启动 ...

  5. nginx 配置http重定向到https

    在80端口的那个server下,添加如下: server_name www.youwebsite.com youwebsite.com; rewrite ^(.*)$ https://$host$1 ...

  6. ZOJ Problem Set - 1004-Anagrams by Stack

     唉!先直接上源码吧!什么时候有时间的再来加说明. #include<iostream> #include<vector> #include<stack> #i ...

  7. 在/etc/my.cnf未配置 [clIent] 导到mysql找不到socket

    [root@DB mysql-5.6.16]# ./bin/mysql ERROR 2002 (HY000): Can't connect to local MySQL server through ...

  8. .NET MVC+ EF+LINQ 多表联查VIEW显示列表

    1.VIEW 页面显示代码 <link href="~/Content/bootstrap.css" rel="stylesheet" /> < ...

  9. STL之string类详解

    通过在网站上的资料搜集,得到了很多关于string类用法的文档,通过对这些资料的整理和加入一些自己的代码,就得出了一份比较完整的关于string类函数有哪些和怎样用的文档了!下面先罗列出string类 ...

  10. javascript基础拾遗(一)

    1.判断变量类型 var num = '123'; if(typeof num == 'number'){ alert('this is a number'); } else{ throw 'this ...