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

用Sqoop从oracle导出到Hive中的ORC table,第1张

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

之前尝试的都是用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,如果d出很多报警信息,需要修改/usr/local/sqoop/bin/configure-sqoop,注释掉一些语句,这里请自行网上查询不再细说。

运行成功如图:

运行脚本如下:

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

 

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

原文地址:https://www.54852.com/zaji/5669620.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存