前两天工作需求,要通过给的几个Oracle的视图把数据入到hive库中,很遗憾,使用的华为云平台的集区环境中并没有sqoop1,当然也并没有sqoop2,所以,想到的解决方案是使用spark读取Oracle在写入到hive表中;

1、首先,沟通了一个星期的数据库接口,是的,就是一个星期;拿到的结果为 10.111.50.7:1521/DB2,当然,数据库ip和服务名是我乱写的一个,格式是这样的;

  还附带了一条查询语句:select * from jzwh.ALARMS 就完了,这就完了?事实上并不是,在生产环境中但凡提到有ip,端口,就要考虑有没有防火墙的问题,我们这里是有的。。

  一般都会有的,当然这不属于开发的任务,需要相关同事提交申请,不累述了;

2、拿到接口之后代码如下:注:我使用的版本为spark 2.1.0,scala 2.11.8;spark2.0之前没有sparksession,2.0之前的版本的同学还请自行使用hiveContext

object dy_alarm_oracle2hive {val spark = SparkSession.builder().appName("view2hive").enableHiveSupport().getOrCreate()import spark.sqldef main(args: Array[String]): Unit = {OracleDateTypeInit.oracleInit()val orclUrl = "jdbc:oracle:thin:@//10.111.11.1:1521/DYDB2";//用ip不用加@val orclProperties = new Properties()orclProperties.setProperty("user", "user")orclProperties.setProperty("password", "password")orclProperties.setProperty("driver", "oracle.jdbc.driver.OracleDriver")val predicates_day_hour = mk_predicates_day_hour()//表名可以使用子查询的方式val table_name = s"(select * from jzwh.ALARM union all select * from jzwh.ALARM_history) a"spark.read.jdbc(orclUrl,table_name,predicates_day_hour,orclProperties).createOrReplaceTempView("ALARMS")insertTable("bx_alarm")}def insertTable(table_name:String): Unit ={val day = TimeTools.getTimeByNowDay(-1)sql(s"""
         |insert overwrite table ${table_name} partition(p_day=${day})|select *| from ALARMS""".stripMargin)
  }def mk_predicates_day_hour():scala.Array[scala.Predef.String] = {val day_1 = TimeTools.getTimeByNowDay_(-1)val day = TimeTools.getTimeByNowDay_(0)/*返回值例子:*EVENTTIME >= to_date('2018-08-07 00','YYYY-MM-dd HH24') and EVENTTIME < to_date('2018-08-07 01','yyyy-MM-dd HH24')* 注意判断23点到第二天的00点特殊情况* */val predicates_day_hour = (0 to 23).map {i => {if(i < 23){(if (i < 10) s"${day_1} 0${i}" else s"${day_1} ${i}") -> (if ((i + 1) < 10) s"${day_1} 0${i + 1}" else s"${day_1} ${i + 1}")}else{s"${day_1} 23" -> s"${day} 00"}}}.map{case (start,end) => s" EVENTTIME >= to_date('${start}','YYYY-MM-dd HH24') and EVENTTIME < to_date('${end}','yyyy-MM-dd HH24')"}.toArray//返回scala.Array[scala.Predef.String]类型结果
    predicates_day_hour}}

使用到的几个工具类:

也是网上找的;

TimeTools :获取日期的工具类
public class TimeTools {//获取当前时间的前后几个小时public static String getTimeByHour(int hour) {Calendar calendar = Calendar.getInstance();calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) + hour);return new SimpleDateFormat("yyyy-MM-dd HH").format(calendar.getTime());}//获取当前日期public static String getTimeByNowDay(int day) {Calendar calendar = Calendar.getInstance();calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + day);return new SimpleDateFormat("yyyyMMdd").format(calendar.getTime());}//获取当前日期public static String getTimeByNowDay_(int day) {Calendar calendar = Calendar.getInstance();calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + day);return new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());}//获取当前时间的前后几分钟public static String getTimeByMinute(int minute) {Calendar calendar = Calendar.getInstance();calendar.add(Calendar.MINUTE, minute);return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());}
}

转载于:https://www.cnblogs.com/zuizui1204/p/9456793.html

spark读写Oracle、hive的艰辛之路(一)相关推荐

  1. spark2读取oracle工具类,spark读写Oracle、hive的艰辛之路(一)

    前两天工作需求,要通过给的几个Oracle的视图把数据入到hive库中,很遗憾,使用的华为云平台的集区环境中并没有sqoop1,当然也并没有sqoop2,所以,想到的解决方案是使用spark读取Ora ...

  2. spark写入oracle 优化,spark读写数据库大表分区性能优化

    spark读写数据库大表分区性能优化:经常会遇到spark读写数据库再做分析,像mysql或oracle. 在数据量很大的情况下,如果只有一个worker一个excutor一个task,那你excut ...

  3. spark读取oracle写入kafka,spark读取kafka文件写入hive

    1.将hdfs-site,core-site.hive-site文件拷贝到resources目录下 image.png 2.添加maven依赖 org.apache.spark spark-strea ...

  4. Spark读写HBase(主要讲解SHC的使用)

    前言 Spark读写HBase本身来说是没啥可以讲的,最早之前都是基于RDD的,网上的资料就太多了,可以参考: 参考链接1 参考链接2 其实都一样,后来有了Hortonworks公司的研发人员研发了一 ...

  5. Spark SQL操作Hive表

    Spark SQL支持从Hive存储中读写数据.然而,Hive存在很多的依赖,而这些依赖又不包含在默认的各类Spark发型版本中.如果将Hive的依赖放入classpath中,Spark将自动加载它们 ...

  6. 【大数据开发】SparkSQL——RDD、DataFrame、DataSet相互转换、DSL常用方法、SQL风格语法、Spark读写操作、获取Column对象的方式

    take,takeAsList是Action操作 limit⽅法获取指定DataFrame的前n⾏记录,得到⼀个新的DataFrame对象.和take与head不同的是,limit⽅法不是Action ...

  7. OceanBase数据库创始人阳振坤分享征战6088万tpmC的艰辛之路

    前言:中国人民大学常被誉为是"中国人文社会科学的最高学府",其实人民大学也是"中国数据库的发源地".由中国人民大学教授萨师煊与王珊合作编写的<数据库系统概 ...

  8. Spark SQL 与 Hive 的第一场会师

    "你好,一杯热美式,加 2 份shot, 1 份焦糖,谢谢" L 跨进汇智国际中心大厦的 Starbucks, 拿着 iPhone 对着点餐机轻轻一扫,对黑带服务员小妹抛出一个笑脸 ...

  9. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

    引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...

  10. spark为什么比hive速度快?

    spark是什么? spark是针对于大规模数据处理的统一分析引擎,通俗点说就是基于内存计算的框架 spark和hive的区别? spark的job输出结果可保存在内存中,而MapReduce的job ...

最新文章

  1. 电脑卡顿不流畅怎么解决_使命召唤17画面卡顿怎么办-使命召唤17画面卡顿解决方法...
  2. 写在 Dubbo go 的第五年
  3. 洛阳理工Linux实验报告,洛阳理工学院实验报告.doc
  4. Android studio之Unknown run configuration type AndroidRunConfigurationType解决办法
  5. dbus服务自启动方法
  6. 吴恩达作业1:逻辑回归实现猫的分类
  7. LOJ 2085: 洛谷 P1587: bzoj 4652: 「NOI2016」循环之美
  8. 当打开VS2013卡到吐,并且点一下卡一下
  9. VisualStudio中C++程序输出一闪而过的解决方案
  10. 张宇:7~12月考研数学该如何复习?
  11. Activity设置竖屏显示
  12. 《信息系统布线技术》实验报告之交叉线制作
  13. Just For Fun
  14. ESP8266开发板+mysql数据库+DHT11
  15. Unity资源缓存(内存)
  16. 上海交大开源GPGPU青花瓷仿真环境搭建
  17. UniMSE: Towards Unified Multimodal Sentiment Analysisand Emotion Recognition
  18. 图像处理中的梯度、导数如何求?(Robert算子,Sobel算子,Prewitt算子,Laplace算子)
  19. Java整型变量和整型常量
  20. 利用微软接口制作的文字转语音神器Read Aloud

热门文章

  1. 联想电脑的计算机,联想笔记本系统按F几下|联想计算机的系统按钮是什么?
  2. linux 占用缓存前10_Linux查看内存使用情况应该使用什么命令
  3. sqlite数据库语句和mysql的语句_【玩转SQLite系列】(一)初识SQLite,重拾sql语句
  4. 关于调整我省高等教育自学考试计算机及应用等五个专业计划的通知,关于2008年我省高等教育自学考试计算机及应用等五个专业考生执行专业考试计划有关问题的通知...
  5. 自动驾驶 从入门到精通 学习资料汇总 Week1~Week7
  6. 阿里云云计算 7 ECS的产品优势
  7. 翻译:iOS上的MVVM + RxSwift架构对比 MVC,MVVM,MVP和VIPER
  8. 算法:唯一路径Unique Paths 动态规划和二项系数解法
  9. Mac Book Pro Catalina不能打开软件,提示检查为恶意软件
  10. java.lang.ClassNotFoundException: com.mysql.jdbc.Driver解决办法