赞
踩
之前尝试的都是用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,注释掉一些语句,这里请自行网上查询不再细说。
运行成功如图:
运行脚本如下:
每次运行之前先清理一下表。否则会追加。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。