
在没有root权限且暂时无法联系到管理员的集群环境下如何解决需要使用R语言的需求?
关键词: PBS作业调度系统; HPC; R;
本文最初思路构思于2018/05,成文于2018/10/17
本文背景是在我的最新一篇论文(上位基因检测机器学习算法创新)临近实验尾声时,已经完成在模拟数据中的检测,需要在真实数据(e.g. WTCCC)上进行测试。奈何真实基因数据过于庞大,本地、单机的解决方案捉襟见肘,所以需要调用学院的集群来进行数据处理和运算。
本文设定实验环境有一个最大的痛点是无法重启,原因有二。其一,我并非管理员只是使用者。再一个,集群并非是我一用户在使用。所以使用本文的方案,无需重启集群,且不需要拥有管理员权限。
TL;DR (太长不看): This article is designed to instruct the installation process of R on a cluster, it may resemble the same process of installing R on a regular Linux machine, that's because it is. The two processes are nearly identical, but most people just don't know about this, which is the reason I compiled this blog.(本文旨在指导集群上R的安装过程,它可能类似于在常规Linux机器上安装R的过程,因为两者确实是相似的,但是大多数人都不知道这件事,而这就是我编写这个博客的原因)。
一、集群操作环境
系统环境:CentOS/Redhat系--20节点集群
登陆节点硬件配置:Intel(R) Xeon(R) CPU E5-2609 v2 @ 2.50GHz
据有经验的老司机说装最新版本的R有可能会出现什么bug所以要装旧一点版本的R。所以我使用了与本机(Mac)开发环境相同的R版本:3.4.1
。我已经开发完毕的R包也是基于这个版本的R。
另外一点是需要集群已经安装了gcc,不需要7.1.0
那么新的版本,但最少也要4.4.7
这样的版本。
二、安装包下载
2.1 文件夹创建
- 进入登陆节点的
~
路径下,建立两个文件夹:package、src - 进入src中:
cd src
2.2 下载R安装包
- 在
src文件夹
中使用如下命令:
$> wget https://cran.r-project.org/src/base/R-3/R-3.4.1.tar.gz
$> tar -zxvf R-3.4.1.tar.gz
# -z:有gzip属性的
# -x:解压
# -v:显示所有过程
# -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。Copyright © https://zhuanlan.zhihu.com/ysimonguo-research. All Rights Reserved
三、安装R以及各种依赖
以下出现的命令建议一条一条复制粘贴回车运行,不过高端玩家搞一个.sh
文件运行也可行。
3.1 直接安装R-3.4.1会遇到的问题
- 在
src文件夹
中使用如下命令
cd R-3.4.1
mkdir builddir
cd builddir
../configure --prefix=$HOME/packages/R '--with-cairo'
'--with-jpeglib' '--with-readline' '--with-tcltk'
'--with-blas' '--with-lapack' '--enable-R-profiling'
'--enable-R-shlib'
'--enable-memory-profiling'
# Copyright © https://zhuanlan.zhihu.com/ysimonguo-research. All Rights Reserved
走到这步,zlib会报错,不用担心, 一切尽在掌握中。
因为这么直接安装R一定不会成功。包括zlib,R的安装还需要很多依赖。所以与其不停重新安装R看它报错哪个再去修依赖,不如全部提前安装好再回头去装R这样一次成功。所以下面的每部分,都应该在安装R之前执行,不过我也会把如果不提前装以下某个特定依赖而直接安装R会产生的报错信息一并给出,作为后面来的朋友的troubleshoot。
3.2 安装zlib依赖
3.2.1 本部分是针对安装R中出现类似如下报错
checking if zlib version >= 1.2.5... no
checking whether zlib support suffices... configure: error: zlib
library and headers are required
而提供解决办法,更好的方案是直接按照下面的命令先把所有依赖装好,最后再安装R,一次成功。
3.2.2 zlib依赖安装命令
cd ~/src
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -xzvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure --prefix=$HOME/packages
make
make install
3.3 安装bzip依赖
3.3.1 本部分是针对安装R中出现类似如下报错
checking bzlib.h presence... yes
checking for bzlib.h... yes
checking if bzip2 version >= 1.0.6... no
checking whether bzip2 support suffices... configure:
error: bzip2 library and headers are required
而提供解决办法,更好的方案是直接按照下面的命令先把所有依赖装好,最后再安装R,一次成功。
3.3.2 bzip依赖安装命令
cd ~/src
wget http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
tar xzvf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
# 记住要加入一个 -fPIC 到 CFLAG 。(在 Makefile中CFLAG=-fPIC -Wall -Winline -O2 -g...)
# Copyright © https://zhuanlan.zhihu.com/ysimonguo-research. All Rights Reserved
make -f Makefile-libbz2_so
make clean
make
make -n install PREFIX=$HOME/packages
make install PREFIX=$HOME/packages
3.4 安装liblzma依赖
3.4.1 本部分是针对安装R中出现类似如下报错
checking whether bzip2 support suffices... no
checking for lzma_version_number in -llzma... no
configure: error: "liblzma library and headers are required"
而提供解决办法,更好的方案是直接按照下面的命令先把所有依赖装好,最后再安装R,一次成功。
直接安装liblzma
依赖我就没见有人成功过,更好的解决办法是安装一个名为xz
的包,它包含了liblzma
,而且安装成功率极高。
3.4.2 xz依赖安装命令
cd ~/src
wget http://tukaani.org/xz/xz-5.2.2.tar.gz
tar xzvf xz-5.2.2.tar.gz
cd xz-5.2.2
./configure --prefix=$HOME/packages
make -j3
make install
3.5 安装pcre依赖
3.5.1 本部分是针对安装R中出现类似如下报错
checking for pcre/pcre.h... no
checking if PCRE version >= 8.10, < 10.0 and has UTF-8 support... no checking whether PCRE support suffices... configure: error: pcre >= 8.10 library and headers are required
而提供解决办法,更好的方案是直接按照下面的命令先把所有依赖装好,最后再安装R,一次成功。
3.5.2 pcre依赖安装命令
cd ~/src
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz
tar xzvf pcre-8.38.tar.gz
cd pcre-8.38
./configure --enable-utf8 --prefix=$HOME/packages
make
make install
3.6 安装libcurl依赖
3.6.1 本部分是针对安装R中出现类似如下报错
checking libcurl version ... 7.19.7
checking curl/curl.h usability... yes
checking curl/curl.h presence... yes
checking for curl/curl.h... yes
checking if libcurl is version 7 and >= 7.28.0... no
configure: error: libcurl >= 7.28.0 library and headers are
required with support for https
而提供解决办法,更好的方案是直接按照下面的命令先把所有依赖装好,最后再安装R,一次成功。
3.6.2 libcurl依赖安装命令
cd ~/src
# Copyright © https://zhuanlan.zhihu.com/ysimonguo-research. All Rights Reserved
wget --no-check-certificate https://curl.haxx.se/download/curl-7.47.1.tar.gz
tar xzvf curl-7.47.1.tar.gz
cd curl-7.47.1
./configure --prefix=$HOME/packages
make -j3
make install
3.7 所有依赖都安装完毕,重新安装R
cd ~/src
cd R-3.4.1/
rm -rf builddir # Copyright © https://zhuanlan.zhihu.com/ysimonguo-research. All Rights Reserved
mkdir builddir
cd builddir/
../configure --prefix=$HOME/packages/R --enable-R-shlib=yes --with-tcltk
make
make install
此时按照我的情况,R直接成功安装。
四、调用R来跑你的代码
因为我只是集群的使用者,没有管理员权限,所以我能做的只有通过修改.bashrc
文件来在命令行直接通过命令R、Rscript
来调用R。
vim ~/.bashrc
在vim下修改.bashrc
文件中R_HOME
和R_LIB
(加入这几个变量)
# .bashrc file under vim, add these lines
export R_HOME=$HOME/packages/R
export R_LIBS=$HOME/packages/R/lib64/library # Copyright © https://zhuanlan.zhihu.com/ysimonguo-research. All Rights Reserved
export PATH=$PATH:$R_HOME/bin
source
命令使.bashrc
文件的修改生效:
source ~/.bashrc
五、PBS脚本的编写--用来在集群中运行R程序
与文章主题相关度不高故暂不添加。
如果有需要,想了解这部分的内容,在评论区提出,然后点赞。
如果很多人有此需求,我会考虑增加本部分。
最后附一张集群节点当前占用情况图:

Reference
[1] Paul E. Johnson, Building R-devel on RedHat Linux 6, PJ. Mostly Harmless, 2016.
首发于我的优快云博客。
--------------------
感觉不错就点个赞,以上。