sqoop 导入数据到hive 为什么生成本地元数据库

sqoop 导入数据到hive 为什么生成本地元数据库,第1张

导入数据

设置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的驱动放到Sqoop的lib文件夹下。

导入数据

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

DBNAME:数据库

USERNAME:用户名

PASSWORD:密码

TABLENAME:表名

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

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

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

一个很奇怪的错误

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

1、Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

2、所以sqoop可以支持大多数的传统关系型数据库。如:Mysql、Oracle、Postgres等。

Sqoop是一款用于把关系型数据库中的数据导入到hdfs中或者hive中的工具,当然也支持把数据从hdfs或者hive导入到关系型数据库中。

Sqoop也是基于Mapreduce来做的数据导入。

关于sqoop的原理

sqoop的原理比较简单,就是根据用户指定的sql或者字段参数,从数据库中读取数据导入到hive或者hdfs中。也支持基于数据库导出工具导出,不过受限于数据库的版本。

在导出的过程中,sqoop会自动切分mapreduce任务。比如某个字段的主键是从1到1000,那么当设置num-mappers为2时,第一个mr任务会读取1-500的数据,第二个mr任务会读取500-1000的数据。如果是字符串还有其他的划分方法.

关于架构

sqoop目前有两个大版本,第一个版本比较简单,只能使用命令行

第二个版本引入了sqoop server,统一处理连接等信息,并提供多种连接方式,还引入了权限控制,另外规范了连接的各项配置。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9750531.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存