首页
登录 | 注册

sqoop导oracle数据到hive中并动态分区

静态分区:

在hive中创建表可以使用hql脚本:

test.hql

USE TEST;
CREATE TABLE page_view(viewTime INT, userid BIGINT,
     page_url STRING, referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User')
 COMMENT 'This is the page view table'
 PARTITIONED BY(dt STRING)
 STORED AS SEQUENCEFILE;

注意,分区字段不能与表中的字段重复,不然会执行出错

执行hql脚本:

$ hive -f test.hql

手动添加分区:

hive> ALTER TABLE page_view add PARTITION (dt=2018)

创建好分区后,hive会在HDFS存储中创建相应的路径:

$ hadoop fs -ls /user/hive/warehouse/page_view
drwxr-xr-x - admin supergroup 0 2011-07-29 09:53 /user/hive/warehouse/page_view/dt=2018

或者使用

hive> dfs -ls /user/hive/warehouse/page_view

使用sqoop脚本导入数据:

sqoop_test.sh

#!/bin/sh

sqoop import                                            \
--connect jdbc:oracle:thin:@127.0.0.1:1521:orcl         \
--username test                                         \
--password 123456                                       \
--columns "viewTime,userid,page_url,referrer_url,ip"    \
--hive-partition-key "dt"                               \
--hive-partition-value "2018"                           \
--query "SELECT viewTime,userid,page_url,referrer_url,ip from page_view  WHERE 1=1 and \$CONDITIONS" \
--hive-table test.page_view                             \
--hive-drop-import-delims                               \ 
--target-dir "/data/test/page_view"                     \
--hive-overwrite                                        \
--null-string '\\N'                                     \
--null-non-string '\\N'                                 \
--hive-import;

在使用sqoop导入数据的时候可以指定分区,但是--hive-partition-key--hive-partition-value选项只能指定一个参数,可以使用--hcatalog-partition-keys--hcatalog-partition-values选项指定多个分区字段,用逗号分隔。

动态分区:

​ 手动分区灵活性太低,当分区数较多的时候一个个分区单独去加载数据的话工作量太大,这时候可以考虑动态分区。动态分区是基于hive中的源数据表将数据插入到分区表中,在数据插入的时候会根据分区字段自动将数据归类存入对应的分区路径,而不需要手动指定分区路径。要使用动态分区必须要先开启动态分区:

hive> SET hive.exec.dynamic.partition=true;  
hive> SET hive.exec.dynamic.partition.mode=nonstrict; 
hive> SET hive.exec.max.dynamic.partitions.pernode=1000;

然后创建一张没有分区字段的源数据表(与分区字段对应的字段放后面,与分区表的保持一致):

USE TEST;
CREATE TABLE original_page_view(viewTime INT, userid BIGINT,
     page_url STRING, referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User',
     dt STRING COMMENT 'view date')
 COMMENT 'This is the page view table'
 STORED AS SEQUENCEFILE;

并使用sqoop脚本从oracle导入数据到表original_page_view

original_sqoop_test.sh

#!/bin/sh

sqoop import                                            \
--connect jdbc:oracle:thin:@127.0.0.1:1521:orcl         \
--username test                                         \
--password 123456                                       \
--columns "viewTime,userid,page_url,referrer_url,ip,dt"    \
--query "SELECT viewTime,userid,page_url,referrer_url,ip,dt from page_view  WHERE 1=1 and \$CONDITIONS" \
--hive-table test.original_page_view                             \
--hive-drop-import-delims                               \ 
--target-dir "/data/test/page_view"                     \
--hive-overwrite                                        \
--null-string '\\N'                                     \
--null-non-string '\\N'                                 \
--hive-import;

数据导入完毕后,执行如下语句即可将original_page_view中的数据导入到page_view并自动分区:

hive> insert overwrite table page_view partition(dt) select * from original_page_view;

查看分区情况:

hive> dfs -ls /user/hive/warehouse/page_view

相关参数说明:

名称 默认值 描述
hive.exec.dynamic.partition false 是否开启动态分区功能,默认false关闭,使用动态分区时候,该参数必须设置成true
hive.exec.dynamic.partition.mode strict 动态分区的模式,默认strict,表示必须指定至少一个分区为静态分区,nonstrict模式表示允许所有的分区字段都可以使用动态分区, 一般需要设置为nonstrict
hive.exec.max.dynamic.partitions.pernode 100 在每个执行MR的节点上,最大可以创建多少个动态分区。该参数需要根据实际的数据来设定。
hive.exec.max.dynamic.partitions 1000 在所有执行MR的节点上,最大一共可以创建多少个动态分区。
hive.exec.max.created.files 10w 整个MR Job中,最大可以创建多少个HDFS文件
hive.error.on.empty.partition false 当有空分区生成时,是否抛出异常

参考链接:

https://community.hortonworks.com/questions/43982/sqoop-insert-into-partitioned-table.html

https://blog.csdn.net/jiedushi/article/details/7356015

https://www.cnblogs.com/charlist/p/7122113.html

http://www.cnblogs.com/cssdongl/p/6831884.html


相关文章

  • 机器学习web服务化实战:一次吐血的服务化之路
    背景 在公司内部,我负责帮助研究院的小伙伴搭建机器学习web服务,研究院的小伙伴提供一个机器学习本地接口,我负责提供一个对外服务的HTTP接口. 说起人工智能和机器学习,python是最擅长的,其以开发速度快,第三方库多而广受欢迎,以至于现 ...
  • [翻译 EF Core in Action 2.1] 设置一个图书销售网站的场景
    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Core 书籍.原版地址. 是除了官方文档外另 ...
  • TensorFlow之DNN(三):神经网络的正则化方法(Dropout、L2正则化、早停和数据增强)
    这一篇博客整理用TensorFlow实现神经网络正则化的内容. 深层神经网络往往具有数十万乃至数百万的参数,可以进行非常复杂的特征变换,具有强大的学习能力,因此容易在训练集上过拟合.缓解神经网络的过拟合问题,一般有两种思路,一种是用正则化方 ...
  • 已经更新100+篇~ 关注公众号,BAT大神带你飞~ 听说你还在写Java,看Spring,看Dubbo,今天SpringCloud, 明天Dubbo3.X新版本... 10个开发9个半在写Java后台?框架层出不穷,天天学新东西怕被甩淘汰 ...
  • java中常见的集合类大部分是非线程安全的,在多线程情况下会报并发修改异常(ConcurrentModificationException) 并发下的ArrayList类: 1 //集合类不安全的例子 2 public class Coll ...
  • 浅谈unity中gamma空间和线性空间
    转载请标明出处:http://www.cnblogs.com/zblade/ 一.概述    很久没有写文章了,今天写一篇对gamma空间和线性空间的个人理解总结,在查阅和学习了各个资料后,算是一个个人笔记吧.   二.Gamma颜色空间和 ...

2019 cecdns.com webmaster#cecdns.com
12 q. 0.047 s.
京ICP备10005923号