在Hadoop集群上运行R程序--安装RHadoop

2019-03-28 13:35|来源: 网络

Hadoop是由Revolution Analytics发起的一个开源项目,它可以将统计语言R与Hadoop结合起来。目前该项目包括三个R packages,分别为支持用R来编写MapReduce应用的rmr、用于R语言访问HDFS的rhdfs以及用于R语言访问HBASE的rhbase。下载网址为https://github.com/RevolutionAnalytics/RHadoop/wiki/Downloads

说明:下面的记录是在安装成功后的总结,中间的过程描述及解决方法可能并不精确(用红色进行了标记),仅供参考。服务器操作系统为CentOS 5.6。

一、软件版本

R 2.13.1、Hadoop集群(CDH3)、JDK1.6。

二、安装节点

其中rhbase和rhdfs在Hadoop集群的namenode上安装即可,而rmr则需要在集群上的每一个节点上安装。

三、安装

由于网络限制,只能先将源文件下载到本地,然后通过shell命令R CMD INSTALL ‘package_name’来安装。

a)         首先安装rhdfs。该包依赖于包 rJava。所以还需要先下载rJava的源代码并安装。

R CMD INSTALL ‘rJava_0.9-3.tar.gz’

R CMD INSTALL ‘rhdfs_1.0.1.tar.gz’

在执行安装rJava时,可能会失败,提示错误信息“checking whether JNI programs can be compiled... configure: error: Cannot compile a simple JNI program. See config.log for details.”,这可能是由于jdk的版本问题造成的,建议安装jdk1.6。

b)         安装rmr。该包依赖于包RJSONIO、 itertools 、digest,而包itertools 又依赖于iterators。

R CMD INSTALL ‘iterators_1.0.5.tar.gz’

R CMD INSTALL ‘itertools_0.1-1.tar.gz’

R CMD INSTALL ‘RJSONIO_0.96-0.tar.gz’

R CMD INSTALL ‘digest_0.5.1.tar.gz’

R CMD INSTALL ‘rmr_1.1.tar.gz’

c) 安装rhbase(参见https://github.com/RevolutionAnalytics/RHadoop/wiki/rhbase)。在安装rhbase之前,还需要安装Thrift库,建议安装Thrift 0.6.1版本,下载网址为http://thrift.apache.org/。详细的安装步骤如下:

i.在centos系统下输入shell命令sudo yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel lib-devel python-devel ruby-devel,安装一些Thrift相关的工具或库。由于网络连接的问题,在尝试的时候并不能完全安装,个人觉得也没有必要完全安装,只需保证g++ 3.3.5以上版本、boost 1.33.1以上版本即可。

ii.解压并安装Thrift。

tar -zvxf thrift-0.6.1.tar.gz

cd thrift-0.6.1

./configure --with-boost=/usr/include/boost JAVAC=/usr/jdk1.6/bin/javac

make

make install

其中—with-boost及JAVAC的值根据服务器的实际情况进行修改(不确定javac的设置是不是必须的)。

iii.设置环境变量PKG_CONFIG_PATH。

在/etc/profile中输入

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig/(并通过命令souce /etc/profile命令使得环境变量生效)。之后输入shell命令pkg-config --cflags thrift验证pkg-config路径是否设置正确,返回结果若为-I/usr/local/include/thrift则表示成功。

iv.复制library文件。

cp /usr/local/lib/libthrift.so.0 /usr/lib

v.安装rhbase。

R CMD INSTALL 'rhbase_1.0.1.tar.gz'

四、验证并测试

在R命令行中输入library(rmr)、library(rhdfs)、library(rhbase),载入成功即表示安装成功。

测试用例:利用mapreduce实现和函数sapply相同的功能。

普通R代码:
groups = rbinom(32, n = 50, prob = 0.4)
tapply(groups, groups, length)
利用mapreduce实现的R代码:

groups = to.dfs(groups) (为保证相同的数据,仍然利用了之前的groups)

from.dfs(mapreduce(input = groups, map = function(k,v) keyval(v, NULL), reduce = function(k,vv) keyval(k, length(vv))))

五、更多参考网址:

https://github.com/RevolutionAnalytics/RHadoop/wiki/Tutorial

https://github.com/RevolutionAnalytics/RHadoop/wiki/Writing-composable-mapreduce-jobs

https://github.com/RevolutionAnalytics/RHadoop/wiki/Efficient-rmr-techniques

相关问答

更多
  • 1、安装openssh,主要是为了主机间安全通信用的。除此之外,还要在此基础上加上无密码访问的设置。否则的话,主机之间交互时总是要求输入密码。这个无密码ssh访问的作法一搜有很多,就不多说了。 2、具体的不同点,主要就一点,主节点的openssh要持有所有子节点的无密码ssh登陆,只要交换下密钥就可以了。而子节点之间一般是无需无密码ssh登陆的,除非有特殊要求。 试下看吧。
  • 既然完成了安装,你要做的无非就两样: 1. 数据存在哪? 2. 怎么计算处理数据? 对于前者,你可以使用hbase或者hive作为数据存储,当然你也可以使用hadoop自己的分布式存储系统hdfs,不过hbase和hive可以提供给你数据库类的结构存储,更方便操作。 对于后者,你可以使用hadoop自己的计算框架Map-Reduce,这里无所谓数据存储在哪,你可以使用MR计算处理离线数据;如果使用hive,也可以使用hive的hql直接以sql方式进行统计计算离线数据线;也可以使用storm等处理实时数据流 ...
  • 1.下载hadoop的安装包,这里使用的是"hadoop-2.6.4.tar.gz": 2.将安装包直接解压到D盘根目录: 3.配置环境变量: 4.下载hadoop的eclipse插件,并将插件放到eclipse的plugins目录下: 5.打开Eclipse,选择菜单"Window"-->"Preferences",在左侧找到"Hadoop Map/Reduce", 在右侧选择hadoop的目录: 6.打开菜单"Window"中的"Show View"窗口,选择"Map/Reduce Locations" ...
  • 要在Hadoop集群运行上运行JNI程序,首先要在单机上调试程序直到可以正确运行JNI程序,之后移植到Hadoop集群就是水到渠成的事情。 Hadoop运行程序的方式是通过jar包,所以我们需要将所有的class文件打包成jar包。在打包的过程中,无需将动态链接...
  • 由于我在HDP上运行RHadoop没有运气,我转而在HDP上运行H2O,同时RStudio / R远程连接到H2O。 这样的组合似乎与我的VM有关。 因此,在我个人看来,避免在HDP之上使用RHadoop。 Since I got no luck with running RHadoop on HDP, I switched to run H2O on top of HDP, together with RStudio/R remotely connecting to H2O. Such a combina ...
  • 创建一个目录来存放已编译的类: mkdir WordCount_classes 编译你的课程: javac -classpath $ {HADOOP_HOME} / hadoop - $ {HADOOP_VERSION} -core.jar -d WordCount_classes WordCount.java 从编译的类创建一个jar文件: jar -cvf $ HOME / code / hadoop / WordCount.jar -C WordCount_classes /。 为您的输入创建一个目录 ...
  • 它的权限被拒绝错误。 您正在以user身份运行该命令。 只需在命令之前运行su hduser (该错误指出hduser具有所需的权限)。 或者用chmod授予user所需的权限。 Its a permission denied error. You are running the command as user. Just run su hduser before your command (the error states that hduser has the required permissions) ...
  • 了解Kafka更多信息的最简单方法是使用http://landoop.com/docs/lenses/developers 您将需要运行1个docker - 在本地调出所有内容,然后开发Python应用程序,使用通过Kafka API连接到Kafka的相应Kafka库并向其生成消息 一旦你构建了你的应用程序 - 然后你可以打包它并对你的Hadoop的Kafka经纪人运行它 Easiest way to learn more about Kafka is to use http://landoop.com/d ...
  • 我不确定当你执行hadoop命令时,你实际上在客户端jar中执行代码时会有什么效果。 你能不能使用MR1? 问题说这个问题只发生在你使用MR2时,所以除非你真的需要Yarn,否则你可能更好地使用MR1库来运行你的map / reduce。 I'm not sure how that would work as when you're executing the hadoop command you're actually executing code in the client jar. Can you n ...
  • 是的,有一个Elasticsearch和Hadoop的连接器,由Elasticsearch构建和发布: http://www.elasticsearch.org/guide/en/elasticsearch/hadoop/current/index.html 他们刚刚发布了GA版本2.0 - 这是关于它的博客文章: http://www.elasticsearch.org/blog/es-hadoop-2-0-g/ Yes, there is a connector for Elasticsearch an ...