回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我在使用azurebatchpythonapi将包加载到计算池节点上的R时遇到了困难。我使用的代码与<a href="https://docs.microsoft.com/en-us/azure/batch/batch-python-tutorial" rel="nofollow noreferrer">Azure Batch Python SDK Tutorial</a>中提供的代码类似,只是任务更复杂——我希望作业池中的每个节点执行一个R脚本,该脚本需要特定的包依赖关系。在</p>
<p>因此,在下面的start task命令中,我让每个节点(Canonical UbuntuServer SKU:16)通过apt安装R并安装R包依赖项(我将R package installation添加到start任务的原因是,即使在创建具有通用权限的lib目录<code>~/Rpkgs</code>之后,在任务脚本中运行<code>install.packages(list_of_packages, lib="~/Rpkgs/", repos="http://cran.r-project.org")</code>会导致“不可写”错误。)</p>
<pre><code>task_commands = [
'cp -p {} $AZ_BATCH_NODE_SHARED_DIR'.format(_R_TASK_SCRIPT),
# Install pip
'curl -fSsL https://bootstrap.pypa.io/get-pip.py | python',
# Install the azure-storage module so that the task script can access Azure Blob storage, pre-cryptography version
'pip install azure-storage==0.32.0',
# Install R
'sudo apt -y install r-base-core',
'mkdir ~/Rpkgs/',
'sudo chown _azbatch:_azbatchgrp ~/Rpkgs/',
'sudo chmod 777 ~/Rpkgs/',
# Install R package dependencies
# *NOTE*: the double escape below is necessary because Azure strips the forward slash
'printf "install.packages( c(\\"foreach\\", \\"iterators\\", \\"optparse\\", \\"glmnet\\", \\"doMC\\"), lib=\\"~/Rpkgs/\\", repos=\\"https://cran.cnr.berkeley.edu\\")\n" > ~/startTask.txt',
'R < startTask.txt --no-save'
]
</code></pre>
<p>无论如何,我在Azure门户中确认这些包按预期安装在计算池节点上(您可以看到它们位于节点文件系统中的<code>startup/wd/Rpkgs/</code>,也就是<code>~/Rpkgs/</code>)。但是,当<code>_R_TASK_SCRIPT</code>任务成功添加到作业池中时,它以非零退出代码终止,因为它无法加载已安装在开始任务中的任何包(例如<code>foreach</code>、<code>iterators</code>、<code>optparse</code>等)。在</p>
<p>更具体地说,<code>_R_TASK_SCRIPT</code>包含以下R代码并返回以下输出:</p>
<p>R代码:</p>
^{pr2}$
<p>Azure批处理节点上的R stderr,<code>stderr.txt</code>:</p>
<pre><code>Loading required package: iterators
Loading required package: foreach
Loading required package: optparse
Loading required package: glmnet
Loading required package: doMC
</code></pre>
<p>Azure批处理节点上的R stdout,<code>stdout.txt</code>:</p>
<pre><code>[[1]]
[1] FALSE
[[2]]
[1] FALSE
[[3]]
[1] FALSE
[[4]]
[1] FALSE
[[5]]
[1] FALSE
</code></pre>
<p>上面的<code>FALSE</code>表示它无法加载R包。这就是我面临的问题,我想找出原因。在</p>
<p>值得注意的是,当我启动一个可比较的VM(Canonical UbuntuServer SKU:16)并手动运行相同的安装时,它成功地加载了所有包。在</p>
<pre><code>myusername@rnode:~$ pwd
/home/myusername
myusername@rnode:~$ mkdir ~/Rpkgs/
myusername@rnode:~$ printf "install.packages( c(\"foreach\", \"iterators\", \"optparse\", \"glmnet\", \"doMC\"), lib=\"~/Rpkgs/\", repos=\"http://cran.r-project.org\")\n" > ~/startTask.txt
myusername@rnode:~$ R < startTask.txt --no-save
myusername@rnode:~$ R
R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree"
...
> lapply( c("iterators", "foreach", "optparse", "glmnet", "doMC"), require, character.only=TRUE, lib.loc="~/Rpkgs/")
Loading required package: iterators
Loading required package: foreach
...
Loading required package: optparse
Loading required package: glmnet
Loading required package: Matrix
Loaded glmnet 2.0-10
Loading required package: doMC
Loading required package: parallel
[[1]]
[1] TRUE
[[2]]
[1] TRUE
[[3]]
[1] TRUE
[[4]]
[1] TRUE
[[5]]
[1] TRUE
</code></pre>
<p>提前感谢您的帮助和建议。在</p>