r外部库

wnavrhmk  于 2021-06-03  发布在  Hadoop
关注(0)|答案(0)|浏览(271)

我有这样一个场景:
hadoop客户端节点(安装了r和rmr2)
hadoop集群(安装的所有节点中都有r和rmr2)
群集中没有安装外部库的管理员权限
这个问题类似于在hadoop节点上临时安装r包来执行流式处理作业,但是我不能添加评论,因为我是新来的。
我有一个脚本test.r来测试rmr2。在这个脚本中,map函数使用一个r库,它只安装在客户机节点中,而不安装在集群中。
显然,作业在每个map任务中都会失败,因为它无法加载库。
我的问题是:
¿如何使用此库而不在具有管理员权限的所有节点中安装它?
¿如何附加、发送或共享?我不想每次使用新的库时都在每个节点中安装每个库。
有可能吗?
我在hadoop中找不到任何类似于--jars的参数,或者在spark和python中找不到--py libs的参数。
下面是一个愚蠢的wordcount代码示例,它使用“tm”库(“stopword”函数),该库安装在客户机中,但不安装在集群的所有节点中。

Sys.setenv(HADOOP_CMD="/opt/cloudera/parcels/CDH-5.4.2-1.cdh5.4.2.p0.2/lib/hadoop/bin/hadoop")
Sys.setenv(HADOOP_CONF_DIR="/etc/hadoop/conf")
Sys.setenv(HADOOP_STREAMING="/opt/cloudera/parcels/CDH-5.4.2-1.cdh5.4.2.p0.2/lib/hadoop-mapreduce/hadoop-streaming-2.6.0-cdh5.4.2.jar")

library(rmr2)
library(tm)

map <- function(k,lines) {
  x = stopwords("en")
  y = paste(x, collapse=" ")
  words.list <- strsplit(paste(lines,y,sep=" "), '\\s')
  words <- unlist(words.list)
  sessionInfo()
  return( keyval(words, 1) )
}

reduce <- function(word, counts) {
  keyval(word, sum(counts))
}

wordcount <- function (input, output=NULL) {
  mapreduce(input=input, output=output, input.format="text", map=map, reduce=reduce)
}

## read text files from folder wordcount/data

## save result in folder wordcount/out

## Submit job

hdfs.root <- '/user/ec2-user/ '
hdfs.data <- file.path(hdfs.root, 'input')
hdfs.out <- file.path(hdfs.root, 'output_rmr2_external_test')
out <- wordcount(hdfs.data, hdfs.out)

从客户端节点执行:

Rscript test.R

编辑:
将此问题与在hadoop节点上临时安装r包以进行流式处理作业进行比较
1) 这个问题与另一个问题的含义相同,但我认为这更完整,因为有一个具体的例子和场景。所以我认为这更清楚。
2) 第一个答案是你的,piccolbo,但它是从2012年开始的,我们是在2015年,所以我认为它会过时。其余的答案是有帮助的,但不是所有。如果传递外部r库压缩,则必须在每个节点上解压它,并将路径添加到r的libpaths。对吗?但我不知道是否有一个参数。
3) 我想知道这是不是可能的,用一种简单的方法。
谢谢您

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题