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线程分工的,不是整理它强转的时候就会报错的。
// :: 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的更多相关文章
- 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟
使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 Sqoop 大数据 Hive HBase ETL 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 ...
- 使用sqoop从mysql导入数据到hive
目录 前言 一.使用的导入命令 二.遇到的问题及解决 1. 用文本字段进行分区的问题 2. Hadoop历史服务器Hadoop JobHistory没开启的问题 3. 连接元数据存储数据库报错 4 ...
- 教程 | 使用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 ...
- sqoop从hive导入数据到mysql时出现主键冲突
今天在将一个hive数仓表导出到mysql数据库时出现进度条一直维持在95%一段时间后提示失败的情况,搞了好久才解决.使用的环境是HUE中的Oozie的workflow任何调用sqoop命令,该死的o ...
- sqoop导入数据
来源https://www.cnblogs.com/qingyunzong/p/8807252.html 一.概述 sqoop 是 apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据 ...
- sqoop1.4.7 导入数据到hive2.3.4 jackson版本问题
今天用sqoop往hive导入数据的时候,执行报错,错误信息为: java.lang.NoSuchMethodError:com.fasterxml.jackson.databind.ObjectMa ...
- 使用Sqoop,最终导入到hive中的数据和原数据库中数据不一致解决办法
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL , ...
- Sqoop安装配置及数据导入导出
前置条件 已经成功安装配置Hadoop和Mysql数据库服务器,如果将数据导入或从Hbase导出,还应该已经成功安装配置Hbase. 下载sqoop和Mysql的JDBC驱动 sqoop-1.2.0- ...
- sqoop导入数据到hive---2
1.hive-table 从mysql导入数据到hive表中,可以使用--hive-table来指定hive的表名,不指定hive表名,则hive表名与mysql表名保持一致. sqoop impor ...
随机推荐
- MySQL的启动与停止
如果MySQL数据库是自己安装的,可以用如下方法分别启动和停止MySQL. 1. MySQL服务器的启动 $mysql_dir/bin/mysqld_safe & (其中&am ...
- 要想有什么样的成就就要有什么样的眼光-SNF快速开发平台
1.普通人的圈子,谈论的是闲事,赚的是 工资,想的是明天. 2.生意人的圈子,谈论的是项目,赚的是 利润,想的是下一年. 3.事业人的圈子,谈论的是机会,赚的是 财富,想到的是未来和保障. 4.智慧人 ...
- scrapy定时执行抓取任务
在ubuntu环境下,使用scrapy定时执行抓取任务,由于scrapy本身没有提供定时执行的功能,所以采用了crontab的方式进行定时执行: 首先编写要执行的命令脚本cron.sh #! /bin ...
- spring+mybatis的插件【shardbatis2.0】+mysql+java自定义注解实现分表
一.业务场景分析 只有大表才需要分表,而且这个大表还会有经常需要读的需要,即使经过sql服务器优化和sql调优,查询也会非常慢.例如共享汽车的定位数据表等. 二.实现步骤 1.准备pom依赖 < ...
- React Native在开发过程中遇到的一些问题(俗称:坑)
4900 服务器地址错误 运行时产生以下错误:Could not connect to development server. 1.URL地址设置 问题: Could not connect to d ...
- hdoj 1874 畅通project续【SPFA】
畅通project续 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Su ...
- CentOS 7 安装java
我喜欢在centos中安装openjdk版本的java,无他,方便.虽然有一些不同之处,但不影响使用. 1.查询: yum search openjdk ,结果如下: java-1.6.0-openj ...
- iOS-登录认证/json解析
用户输入用户名和密码,点击登录...我们把用户名和密码(用post方式或者get方式,get方式多用于测试看你需要)传给服务器,服务器进行判断,然后返回一个接口给我们(这里服务器返回的json接口,正 ...
- vue-cli 工程中引入jquery
在vue-cli 生成的工程中引入了jquery,记录一下.(模板用的webpack) 首先在package.json里的dependencies加入"jquery" : &quo ...
- eclipse再见,android studio 新手新手教程(一)基本设置
写在前面: 作为一个刚半仅仅脚踏入android开发的新手,在使用eclipse开发了两个自我感觉不甚成熟的商城类app之后.遇到了一些问题,总结为例如以下: 1,代码复用性. findviewByI ...