我在Hortonworks Sandbox上使用Rhadoop将数据从HDFS读取到R,在读取R中的数据后,我将对该文件执行某些操作。
我想安排(每天,每周,每月)这个R脚本使用Oozie。
我们非常感谢您的帮助。
感谢
似乎有人为你做了这件事:
以下是来自Github上Oozie R助手的相关bash脚本和使用说明。
#!/bin/bash
die () {
echo >&2 "$@"
exit 1
}
[ "$#" -eq 3 ] || die "3 arguments required, $# provided"
hdfs_file=$1
r_file=$2
hdfs_output=$3
if [[ ${hdfs_output} =~ ^/tmp/.*$ ]]; then
echo "I will run the r script $2 on the hdfs $1"
tmp_filename="/tmp/`date +"%Y%m%d.%H%M%S"`"
echo "using tmp_dir $tmp_filename"
tmp_output="/tmp/out`date +"%Y%m%d.%H%M%S"`"
hadoop fs -getmerge $hdfs_file $tmp_filename
R -f $r_file --args $tmp_filename $tmp_output
hadoop fs -rmr $hdfs_output
hadoop fs -put $tmp_output $hdfs_output
else
die "$hdfs_output must be in /tmp/"
fi
Oozie R助手,
数据科学团队希望能够使用oozie、运行R脚本
他们希望能够使用Hive运行ETL,并以此为基础ETL他们想要运行r脚本。
因此,我创建了一个包含3个参数的bash脚本:1。的HDFS输入他们想要运行的文件2。他们想要运行的R脚本3。这个hdfs上他们希望结果所在位置的输出。(currentlt因为用户是映射的,所以我只允许/tmp/)
如何运行
你可以使用这样的shell oozie操作:
<shell xmlns="uri:oozie:shell-action:0.1"> <job-tracker>${jobTracker}</job-tracker> <name-node>${nameNode}</name-node> <exec>run_r_hadoop.sh</exec> <argument>/user/hive/warehouse/dual</argument> <argument>count.r</argument> <argument>/tmp/r_test</argument> <file>count.r#count.r</file> </shell>
Prequesite
R及其所有库都应该安装在所有Hadoop服务器上,包括所有使用的库