【问题标题】:Rhive query inserts multiple entries into Hive table for a single row insert when run via an Oozie jobRhive 查询在通过 Oozie 作业运行时将多个条目插入 Hive 表以进行单行插入
【发布时间】:2018-05-10 14:02:23
【问题描述】:

我有一个触发 R 脚本的 Oozie 作业。 R 脚本依次运行 Hive 查询以将单行插入 Hive 表。但问题是当我运行作业时,一条插入语句插入了 4 行。但是,如果我在没有 Oozie 作业的情况下单独运行 Rscript,它可以正常工作,并且只有一行插入到表中。

请注意: Oozie 作业在 Cloudera Hadoop Distribution 上运行。我怀疑问题出在 BigData 环境中,因为处理会在节点之间拆分。 以下是 R 脚本中的代码。

library(RHive)
Sys.setenv("HADOOP_HOME"="/opt/cloudera/parcels/CDH/lib/hadoop")
Sys.setenv("HIVE_HOME"="/opt/cloudera/parcels/CDH/lib/hive")
Sys.setenv("HADOOP_CMD"="/etc/hadoop")
library(rhdfs)

rhive.init()
rhive.connect(host="10.223.99.33", port="10000", defaultFS="hdfs://10.223.69.37:8020")

rhive.execute("insert into table apphalo.errorlogtable values ('2017-08-21 15:00:08','Sampling','3657','3658','1','3','112')

为了缓解该问题,我尝试将行写入 HDFS 中的 csv 文件,然后将 csv 文件加载到 hive 表中。这也返回了相同的结果(即插入 4 行以将单行插入 hive 表)

【问题讨论】:

    标签: r hive insert oozie


    【解决方案1】:

    嗯,我自己发现了这背后的原因。当您配置您的 hadoop 环境时,在 hadoop 环境中运行的任何脚本都以分布式方式在多个服务器上并行运行。

    在这种情况下,我发布的脚本被发送到 3 台服务器(我的配置中有 3 台服务器。如果有很多,可能会有所不同)用于分布式计算。唉!这就是 Hadoop 的架构。由于 oozie 作业在多台服务器上处理脚本,因此脚本会运行 3 次,每个服务器运行一次,因此每次运行作业都会在 Hive 表中插入 3 次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 2013-10-31
      • 1970-01-01
      相关资源
      最近更新 更多