今天终于开始上手导入数据到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. Echarts 如何与 百度地图结合?

    官方demo:http://echarts.baidu.com/examples/editor.html?c=map-polygon 需要按顺序加载以下几个资源,然后就可以在echarts配置中使用 ...

  2. zookeeper 的监控指标

    一 应用场景描述 在目前公司的业务中,没有太多使用ZooKeeper作为协同服务的场景.但是我们将使用Codis作为Redis的集群部署方案,Codis依赖ZooKeeper来存储配置信息.所以做好Z ...

  3. MySql(十五):MySql架构设计——可扩展性设计之 Cache 与 Search 的利用

    前言 前面章节部分所分析的可扩展架构方案,基本上都是围绕在数据库自身来进行的,这样是否会使我们在寻求扩展性之路的思维受到“禁锢”,无法更为宽广的发散开来.这一章,我们就将跳出完全依靠数据库自身来改善扩 ...

  4. LVS:三种负载均衡方式比较+另三种负载均衡方式

    转:http://blog.csdn.net/u013256816/article/details/50705578 什么是LVS?   首先简单介绍一下LVS (Linux Virtual Serv ...

  5. Android开发之API应用指南

    原文:http://android.eoe.cn/topic/android_sdk 编辑流程 这里主要是和Android技术相关的开发指南,很多都是来源于官方的API Guides( http:// ...

  6. Python | 一行命令生成动态二维码

    当我看到别人的二维码都做的这么炫酷的时候,我心动了! 我也想要一个能够吸引眼球的二维码,今天就带大家一起用 Python 来做一个炫酷的二维码! 首先要安装工具 myqr: pip install m ...

  7. jqgrid传入的json数据,赋值了但是没有在表格上显示

    1.  datatype: "local",属性加入这个 2. dataValue就是json对象 for (var i = 0; i <= dataValue.length ...

  8. python(50):python 向上取整 ceil 向下取整 floor 四舍五入 round

    取整:ceil 向下取整:floor 四舍五入:round 使用如下:

  9. Android使用binder访问service的方式(一)

    binder机制是贯穿整个android系统的进程间访问机制,经常被用来访问service,我们结合代码看一下binder在访问service的情形下是怎么具体使用的. service 你可以理解成没 ...

  10. WebService 获取当前URL

    private string pageRoot = string.Empty; public virtual string PortalRoot { get { if (pageRoot == nul ...