我有一个oozie的工作可以触发一个r脚本。r脚本依次运行一个配置单元查询,将一行插入到配置单元表中。但问题是,当我运行作业时,一个insert语句要插入4行。但是,如果我单独运行rscript而不运行oozie作业,它就可以正常工作,并且只向表中插入一行。
请注意:oozie作业在cloudera hadoop发行版上运行。我怀疑问题出在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文件加载到配置单元表中。这也返回了相同的结果(即,在配置单元表中插入单行时插入4行)
1条答案
按热度按时间gc0ot86w1#
嗯,我自己找到了背后的原因。配置hadoop环境时,在hadoop环境中运行的任何脚本都将以分布式方式在多个服务器上并行运行。
在本例中,我发布的脚本被发送到3个服务器(我的配置中有3个服务器)。对于分布式计算,如果您有许多不同的方法,它可能会有所不同。唉!这就是hadoop的体系结构。由于oozie作业在多个服务器上处理脚本,因此脚本将运行3次,每台服务器运行一次,因此每次运行作业时,配置单元表中都会发生3次插入。