用Sqoop从oracle导出到Hive中的ORC table

本文介绍了如何通过cx_Oracle获取表结构,利用Pandas和Spark JDBC快速创建小规模DataFrame,然后将数据转换为ORC格式并导入Hive内表,省去了手动建表步骤,适用于大规模数据迁移。
摘要由CSDN通过智能技术生成

之前尝试的都是用sqoop导出到hive中的hdfs里,作为外部表。再到hive里建内部表,关联上外部表。

这次尝试直接用sqoop将oracle数据(千万量级)导出到hive中的内部表里。

全程不需要手动建表,方法如下:

1. 利用cx_Oracle程序从oracle里读取表格的前几行数据,读成pandas dataframe。

2. 利用pyspark程序从oracle里用spark.read.jdbc读取原始表,返回值为pyspark dataframe。

3. 利用pyspark的schema和pandas的几行dataframe,组合成一个只有几行的新的pyspark的dataframe,这样做的好处是避免step2中读出来的大表,需要很长时间才能加载进内容中。

4. 将Step3中的小小pyspark dataframe,写入到hive中,指定格式为ORC:

pydf.write.option('orc.compress', 'snappy').mode('overwrite').saveAsTable(tbl_name, format='hive')

5. 到hadoop-master中,编写sqoop脚本抽取数据。从Sqoop 1.4.4开始,Sqoop集成了HCatalog,可以支持导入为ORC格式的表格。但是需要配置HCAT_HOME的环境变量,本人是在容器中操作,所以环境变量为:

export HCAT_HOME=/usr/local/hive/hcatalog

先验证一下sqoop,运行sqoop-version,如果弹出很多报警信息,需要修改/usr/local/sqoop/bin/configure-sqoop,注释掉一些语句,这里请自行网上查询不再细说。

运行成功如图:

运行脚本如下:

每次运行之前先清理一下表。否则会追加。 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值