Hadoop和R编程语言的整合
Hadoop是一个开源框架,由ASF – Apache软件基金会推出 。 Hadoop是应对大数据的最关键框架。Hadoop是用Java编写的,它不是 ,而是基于OLAP(在线分析处理)。这个大数据框架最好的部分是,它是可扩展的,可以部署在任何类型的数据上,如结构化、非结构化和半结构化的数据。 Hadoop是一个中间件工具,为我们提供了一个管理大型复杂计算机集群的平台,它是用Java开发的,虽然Java是Hadoop的主要编程语言,但也可以使用其他语言–R、Python或Ruby。
Hadoop框架包括:
- Hadoop分布式文件系统(HDFS)- 它是一个文件系统,提供了一个强大的分布式文件系统。Hadoop有一个框架,用于作业调度和集群资源管理,其名称为YARN。
- Hadoop MapReduce- 它是一个用于并行处理大型数据集的系统,实现了分布式编程的MapReduce模型。
Hadoop在 HDFS 的帮助下扩展了一个更容易的分布式存储,并通过MapReduce提供一个分析系统。它有一个精心设计的架构,可以根据用户的要求扩大或缩小服务器的规模,从一台到数百或数千台计算机,具有高度的容错性。Hadoop已经证明了它在大数据处理和高效存储管理方面的无懈可击的需求和标准,它提供了无限的可扩展性,并得到了软件业主要供应商的支持。
Hadoop和R的整合
我们知道,数据是一个组织最宝贵的东西,如果我们说数据是最有价值的资产,那也不为过。但是,为了处理这些巨大的结构和非结构,我们需要一个有效的工具,可以有效地进行数据分析,所以我们通过合并 R语言 和 Hadoop 大数据分析 框架 的功能来获得这个工具,这种合并的结果是增加其可扩展性。因此,我们需要将两者结合起来,只有这样我们才能从数据中找到更好的见解和结果。很快,我们将通过各种方法学来帮助整合这两者。
R 是一种开源的编程语言,被广泛用于统计和图形分析。R支持大量基于统计数学的库,用于(线性和非线性建模、经典统计测试、时间序列分析、数据分类、数据聚类等)和图形技术,以有效处理数据。
R的 一个主要特点是,它能更容易地生成设计良好的高质量图表,包括在需要时使用数学符号和公式。如果你正处于强大的数据分析和可视化功能的危机中,那么将这种R语言与Hadoop结合到你的任务中,将是你减少复杂性的最后选择。它是一种高度可扩展的面向对象的编程语言,它有很强的图形能力。
R被认为是最适合数据分析的一些原因
- 一个强大的软件包集合
- 强大的数据可视化技术
- 值得称赞的统计和图形编程功能
- 面向对象的编程语言
- 它有一个广泛的智能运算符集,用于计算数组、特定矩阵等。
- 在显示器或硬拷贝上的图形表示能力。
R和Hadoop整合背后的主要动机
毫无疑问,R是统计计算、数据的图形分析、数据分析和数据可视化方面最受欢迎的编程语言。另一方面,Hadoop是一个强大的大数据框架,能够处理大量的数据。在所有的数据处理和分析中,Hadoop的分布式文件系统(HDFS)起着至关重要的作用,它在数据处理过程中应用了地图还原处理方法(由R Hadoop的rmr包提供),这使得数据分析过程更加高效和简单。
如果两者相互协作,会发生什么?很明显,数据管理和分析过程的效率将提高数倍。因此,为了提高数据分析和可视化过程的效率,我们必须将R和Hadoop结合起来。
将这两种技术结合起来后,R的统计计算能力就会提高,那么我们就可以。
- 使用Hadoop来执行R代码。
- 使用R来访问存储在Hadoop中的数据。
有几种方法可以将R和Hadoop结合起来
以下是最流行和最常用的方法,但也有一些其他的RODBC/RJDBC可以使用,但不像以下方法那样流行。与Hadoop集成的分析工具的一般架构以及其不同的分层结构如下所示。
第一层: 是硬件层–它由计算机系统的集群组成。
第二层: 它是 ,是Hadoop的 中间件层 。这一层也通过使用HDFS和MapReduce作业的功能,完美地处理了文件的分发。
第三层: 它是接口层,为数据的分析提供接口。 在这一层,我们可以使用像Pig这样的有效工具,它为我们提供了一个高级平台,可以使用我们称之为Pig-Latin的语言创建MapReduce程序。我们还可以使用Hive,这是一个由Apache开发的数据仓库基础设施,建立在Hadoop之上。Hive为我们提供了一些运行复杂查询的设施,并帮助我们使用一种叫做HiveQL的类似于SQL的语言来分析数据,它还扩展了对实现MapReduce任务的支持。
除了使用Hive和Pig,我们还可以使用Rhipe或Rhadoop库,该库建立了一个接口来提供Hadoop和R之间的集成,使用户能够从Hadoop文件系统中访问数据,并能够编写自己的脚本来实现Map和Reduce工作,或者我们也可以使用Hadoop-流,这是一种用于集成Hadoop的技术。
a) R Hadoop: R Hadoop方法包括四个包,如下所示。
- 因此,R程序员只需将他们的应用程序的逻辑和想法分为地图和减少阶段,然后用 rmr 方法提交即可。之后,rmr包通过输入目录、输出目录、还原器、映射器等多个作业参数调用Hadoop流和MapReduce API,在Hadoop集群上执行R MapReduce作业(大部分组件与Hadoop流相似)。
- rhbase包 – 允许R开发人员使用Thrift服务器将Hadoop HBASE连接到R。它还提供了一些功能,如(从R读取、写入和修改存储在HBASE中的表)。
利用RHаdoop功能的脚本看起来如下图所示,如下图所示。
library(rmr)
map<-function(k,v){...}
reduce<-function(k,vv){...}
mapreduce(
input = "data.txt",
output ="output",
textinputformat = rawtextinputformat,
map = map,
reduce = reduce
)
- rhdfs包– 它在R中提供HDFS文件管理,因为数据本身存储在Hadoop文件系统中 。 这个包的功能如下。 文件操作–( hdfs.delete, hdfs.rm, hdfs.del, hdfs.chown, hdfs.put, hdfs.get等。rm, hdfs.del, hdfs.chown, hdfs.put, hdfs.get等),文件读写-(hdfs.flush, hdfs.read, hdfs.seek, hdfs.tell, hdfs.line.reader等),目录-hdfs.dircreate, hdfs.mkdir,初始化:hdfs.init,hdfs.defaults。
- dplyr包– 它提供的功能喜欢数据处理、输出结果的总结、执行集合操作(union、intersection、 subtraction、merge、unique)。
b) RHIPE: Rhipe 在R中使用,通过Hadoop是一个集成的编程环境工具,由Divide and Recombine(D&R)带来的大量数据集的分析。
RHIPE = R and Hadoop Integrated Programming Environment
RHIPE是R的一个包,可以在Hadoop中使用API。因此,这种方式我们可以读取、保存使用RHIPE MapReduce创建的完整数据。RHIPE部署了许多功能,帮助我们有效地与HDFS互动。 个人也可以使用Perl、Java或Python等各种语言来读取RHIPE中的数据集。使用 Rhipe 的 R脚本 的一般结构如下所示。
library(Rhipe)
rhint(TRUE, TRUE);
map < -expression({lapply(map.values, function(mapper)...)})
reduce < -expression(
pre={...},
reduce={...},
post={...}, }
x < - rhmr(
map=map, reduce=reduce,
ifolder=inputPath,
ofolder=outputPath,
inout=c('text', 'text'),
jobname='a job name'))
rhex(z)
Rhipe允许R用户创建完全在R环境中使用R表达式工作的MapReduce作业(rmr包也有助于完成这项工作)。这种MapReduce功能:允许分析师使用R解释语言的全部功能、灵活性和表达能力快速指定Maps和Reduces。
c) Oracle R Connector for Hadoop (ORCH) :
Orch是一个 R包 的集合,提供以下功能。
- 各种有吸引力的接口,与维护在Hive表中的数据一起工作,能够使用基于Apache Hadoop的计算基础设施,并且还提供本地R环境和Oracle数据库表。
- 使用预测性分析技术,用R或Java写成Hadoop MapReduce作业,可以应用于存储在HDFS文件中的数据
在R中安装这个包后,你将变得能够完成以下各种功能。
- 能够使用支持Hive的透明层使HDFS数据更容易访问和转换,供一般使用。
- 我们能够有效地使用R语言来编写映射器和还原器。
- 在R内存与本地文件系统、HDFS、Hive和Oracle数据库之间复制数据。
- 能够轻松地安排R程序,以便将程序作为Hadoop MapReduce作业执行,并将结果返回到任何相应的位置等。
Hadoop的Oracle R连接器能够使用以下函数前缀从R的本地客户端访问Apache Hadoop 。
- Hadoop – 确定了为Hadoop MapReduce提供接口的函数。
- hdfs – 识别提供HDFS接口的函数。
- Orch – 识别各种函数;orch是ORCH函数的一个通用前缀。
- Ore – 标识了提供给Hive数据存储接口的函数。
d) Hadoop流 :Hadoop流是一个Hadoop工具,用于运行Hadoop MapReduce作业的可执行脚本,如Mapper和Reducer。该脚本可作为CRAN上R包的一部分。它的目的是使R在基于Hadoop流的应用中更容易使用。
这正好与Linux中的管道操作相吻合。有了它,文本输入文件被打印在流(stdin)上,作为Mapper的输入,而Mapper的输出(stdout)被提供给Reducer;最后,Reducer将输出写入HDFS目录。
带有mаp和reduce任务的命令行作为R脚本实现,看起来像下面这样。
$ ${HADOOP_HOME}/bin/Hadoop jar
$ {HADOOP_HOME}/contrib/streaming/*.jar\
-inputformat org.apache.hadoop.mapred.TextInputFormat \
-input input_data.txt \
-output output \
-mapper /home/tst/src/map.R \
-reducer /home/tst/src/reduce.R \
-file /home/ts/src/map.R \
-file /home/tst/src/reduce.R
Hadoop流的主要好处是允许在Hadoop集群上执行基于Java和非Java编程的MapReduce作业。Hadoop流支持各种语言,如Perl、Python、PHP、R和C++,以及其他有效的编程语言。Hadoop流式MapReduce作业的各种 组件。