加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

使用Sqoop从Oracle导入数据到Hive的方法

(2012-11-03 15:56:35)
标签:

sqoop

oracle

hive

导入

错误

it

分类: 分布式系统

导入数据

设置HADOOP_HOME

HADOOP_HOME=/path/to/some/hadoop sqoop import --arguments...

下载合适的Sqoop并解压到硬盘,所谓合适即Sqoop的版本应该和Hadoop的版本相匹配。笔者的Hadoop版本是1.03,下载的Sqoop是版本1.4.2

tar zvxf sqoop-1.4.2.bin__hadoop-1.0.0.tar.gz

 

下载合适的JDBC驱动,将下载的JDBC的驱动放到Sqooplib文件夹下。

导入数据

sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.56.111:1521:DBNAME --username USERNAME --password PASSWORD --verbose -m --table TABLENAME

DBNAME:数据库名

USERNAME:用户名

PASSWORD:密码

TABLENAME:表名

-m:导入数据的进程的并发数,默认是4。如果导入的数据不大的话,不妨设置成1,这样导入更快。一般来说Sqoop会使用主键来平均地分割数据。并发导入的时候可以设置相关的分割列等等,具体的做法参考官方的文档。

如果Oracle是安装在远程的电脑上,要确保Sqoop可以pingOracle所在的电脑。例如如果Oracle安装在Win7上面,可能需要关闭Win7的防火墙。另外,需要将Oracle配置成可以远程访问的。

 

注意,用户名和表名应该要是大写的,除非它们在创建的时候是名字是放在引号中的大小写混合的形式。

一个很奇怪的错误

笔者在导入数据的过程中,发现一个问题,就是导入时没有提示任何错误,在HDFS中也看到生成了相关的文件,但是在Hive中使用命令show TABLES时却没有看到新导入的表格。此时有两种解决方案。一种是在Hive中手动地使用CREAT命令创建出表格,然后再SELECT一个,会发现表里有数据了。因此笔者猜测(只是猜测)可能是因为导入之后表格的元数据没有写入到Hive中。笔者查找了相关的资料,发现Hive默认是将元数据存储在derby中,所以笔者考虑将derby换成MySQL

方法:http://blog.sina.com.cn/s/blog_3fe961ae0101925l.html 

将元数据存储在MySQL后,再导入就发现没有问题了。

 

增量导入

另外一个问题,如果我们要导入某个表中的新加入的部分,可以使用--check-column--incremental--last-value三个参数,--check-column指定要检查的列,--incremental指定某种增加的模式,只有两个合法的值,append lastmodified。如果--incrementalappend,则Sqoop会导入--check-column指定的列的值大于--last-value所指定的值的记录。如果--incrementallastmodified,则Sqoop会导入--check-column指定的列的值(这是一个时间戳)近于--last-value所指定的时间戳的记录。例如下面的命令可以导入列ID的值大于4的所有记录。

sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.56.111:1521:DBNAME --username USERNAME --password PASSWORD --verbose -m --table TABLENAME --check-column ID --incremental append --last-value 4

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有