使用 Sqoop 将视图(数据库表重)从 Oracle 迁移到 Hive

Posted

技术标签:

【中文标题】使用 Sqoop 将视图(数据库表重)从 Oracle 迁移到 Hive【英文标题】:Using Sqoop to migrate views (database tables heavy) from Oracle to Hive 【发布时间】:2017-05-24 10:42:29 【问题描述】:

我是大数据的初学者,我们正在使用 sqoop 和 Cloudera 管理将视图从 Oracle 迁移到 Hive,我们正在使用的命令示例:

sqoop import -D mapred.child.java.opts="\-Djava.security.egd=file:/my_url" \ 
  -D mapreduce.map.memory.mb=9192 -D mapreduce.map.java.opts=-Xmx4096m \
  --connect jdbc:oracle:thin:@//my_url --username "my_user" \
  --password "my_password" --table my_view_name --compress \
  --compression-codec=snappy --as-parquetfile \
  --create-hive-table --hive-database my_db_name \
  --hive-table our_table_anme --hive-import \
  -m 8 --hive-overwrite \
  --map-column-java column_name=String,column_name=String,column_name=String,column_name=Float --split-by cloumn_name

到目前为止进展顺利,有些大板有点慢。

问题:我们必须迁移更大表的视图,这会导致问题,我们认为 hive 无法承受负载。

对加载此信息有何建议?

注意:我们想到了只复制表然后尝试构建视图的选项,但是视图对表属性进行了复杂的修改和繁重的计算,在我们的例子中,在 impala 中创建这个非常复杂。

【问题讨论】:

HDFS 上创建视图是一种开销。我们还将整个视图作为表导入 Hive。可用于提高性能的优化技术很少。 【参考方案1】:

加载非常大的表的模板:使用查询而不是带有where子句加载分区的表 +使用拆分列(尝试找到一些整数均匀分布的列)。并行或顺序运行 sqoop 以加载不同的分区。理想情况下,如果谓词下推将根据您的 where 子句在 Oracle 中工作。如果不是,并且 Oracle 方面是一个瓶颈,那么使用相同的技术分别加载表:where + split,然后使用额外的 Hive 进程实现您的视图。

【讨论】:

谢谢,事实上我们已经在使用--split-by,我很抱歉我在我给出的例子中错误地省略了它。 是的,我明白了。没有拆分列和 -​​m 应该是例外

以上是关于使用 Sqoop 将视图(数据库表重)从 Oracle 迁移到 Hive的主要内容,如果未能解决你的问题,请参考以下文章

我用sqoop从oracle导入数据到hdfs时,总是报 表或视图不存在错误,求解答...

使用 sqoop 将数据从 oracle 导入到 hdfs

使用 sqoop 将数据从 CSV 导入 Avro 表的命令

如何使用 Sqoop 从 RDBMS 将数据导入本地文件系统,而不是 HDFS?

使用 SQOOP 和 FLUME 将数据从 RDBMS 移动到 Hadoop

无法使用 Sqoop 将数据从 Vertica 导入 Cassandra