2.4 大数据分析与R
随着大数据时代的到来,大量来自互联网、金融、生物等领域的数据需要分析处理。Hadoop的分布式数据处理模式让原来不可能的TB、PB级数据量计算成为了可能,而R语言的强大之处在于其统计分析功能,但是对于大数据的处理,R受到内存和性能方面的限制,只能通过抽样进行计算分析。为了克服这一不足,使得R能够有效地处理大数据,RHadoop应运而生。RHadoop是由Revolution Analytics公司发起的一个开源项目,它使得Hadoop集群上存储在Hadoop分布式文件系统中的数据可以实现本地R分析,并对这些计算结果进行整合,这一举措使得大规模数据得到了有效的管理,同时充分利用了R强大的数据分析功能。由此可以看出,这两种技术的结合既是产业界的必然导向,也是产业界和学术界的交集,更为交叉学科的人才提供了无限广阔的想象空间。
2.4.1 RHadoop
RHadoop包含三个R包:rhdfs、rmr及rhbase,它们分别对应Hadoop架构中的HDFS、MapReduce和HBase三个部分。RHadoop的三个包为R进行大数据的分析操作提供了以下功能:
rhdfs包的主要功能是调用HDFS API对存储在HDFS上的数据进行操作,使得R对分布式数据文件的操作变得更加简便。
rmr包为R提供了Hadoop MapReduce功能,在R上需要将程序分成两个阶段(Map阶段和Reduce阶段),然后调用rmr实现任务的提交,进而调用Hadoop streaming的MapReduce API,从而在集群上分布式地实现R MapReduce程序,完成R对大数据的分析操作。
rhbase包为R提供了HBase数据库管理功能,在R环境中实现对HBase中数据的读写查询等操作。
1.Rhdfs包的基本操作函数
●hdfs.init:初始化rhdfs,该操作的语法为hdfs.init()。
●hdfs.defaults:获得rhdfs的默认设置,该操作的语法为hdfs.defaults ()。
●hdfs.put:从本地文件系统复制文件到HDFS系统中。例如将存放于本地文件系统中的sample.txt文件复制到HDFS中,操作如下:
hdfs.put('/local/hadoop/sample.txt','/RHadoop/first')
●hdfs.copy:从HDFS目录复制文件到本地文件系统,例如:
hdfs.copy('/RHadoop/first','/RHadoop/second')
●hdfs.move:移动文件,将文件从HDFS文件夹移动到另一个HDFS文件夹中,例如:
●hdfs.move('/local/hadoop/sample.txt','/RHadoop/first')
●hdfs.rename:重命名文件,在R环境中重命名存储在HDFS中的文件,例如:
hdfs.rename('/RHadoop/first/ sample1.txt',' /RHadoop/first/ sample2.txt')
●hdfs.delete/ hdfs.rm/hdfs.rmr:在R中将HDFS中的文件或文件夹删除,例如:
hdfs.delete('/RHadoop')
●hdfs.chmod:修改文件权限,例如:
hdfs.chmod('/RHadoop',permissions="777")
●hdfs.file:初始化文件,使得在HDFS中的文件能够进行读写操作,例如:
F=hdfs.file('/Rhadoop/first/sample.txt',mode="r",buffersize=5242880,overwrite=TRUE)
●hdfs.write:写入文件,将R对象通过streaming写入存储在HDFS中的文件,语法为hdfs.write(object,con,hsync)。
其中,object为写入磁盘的R对象,con为已初始化能够进行读写操作的文件。如果参数hsync设置为TRUE,那么写入对象后该文件将被同步。
●hdfs.close:关闭读写流,关闭后不能对文件进行读写。例如,关闭初始化的HDFS文件F,hdfs.close(F)。
●hdfs.read:从HDFS中的文件读取文件内容,语法为:hdfs.read(con,n,start)。
其中,con为已初始化能够进行读写操作的文件,n为所读取的字节数,start为开始读取的位置,默认为当前位置。
●hdfs.dircreate/hdfs.mkdir:创建文件夹,用于在HDFS中创建文件夹,例如:
hdfs.dircreate("/Rhadoop/1/")
●hdfs.ls:将HDFS中的文件夹内容列出来,例如:
hdfs.ls("/tmp")
●hdfs.file.info:获取HDFS文件的元信息,例如:
hdfs.file.info("/tmp")
2.rmr包的基本操作函数
●to.dfs:向HDFS文件系统中写入R对象。
●from.dfs:从HDFS文件系统中读取R对象。
●mapreduce:定义、执行MapReduce任务,函数语法如下:
mapreduce(input,output,map,reduce,combine,input.format,output.format,verbose)
●keyval:创建、提取键值对,函数语法为keyval(key,val)。
2.4.2 RHIPE
RHIPE(R and Hadoop Integrated Programming Environment,Hadoop和R集成编程环境)是一种R和Hadoop的结合技术,使用Divide和Recombine技术实现大数据分析。RHIPE在R和Hadoop之间充当桥梁的作用,它使得R分析大规模数据得以实现,可以在R上操作MapReduce程序。
2.4.3 RHive
RHive是一款通过R语言直接访问Hive的工具包,是由NexR公司研发的。通过使用RHive可以在R环境中写HQL(HiveQL),将R的对象传入到hive中,在hive中进行计算。在RHive中小数据集在R中执行,大数据集在hive中运行。
RHive的一些基本操作如下:
●rhive.init:初始化Rhive,语法为rhive.init()。
●rhive.connect:连接hive服务器,例如:
rhive.connect("192.168.85.105")
●rhive.list.tables:列出所有的表,语法为rhive.list.tables()。
●rhive.desc.table:查看某个表的结构,例如:
rhive.desc.table('hivetable')
●rhive.query:执行HQL查询操作,例如:
rhive.query("select * from hivetable")
●rhive.close:断开与hive服务器的连接,语法为rhive.close()。
2.4.4 RHBase
RHBase依赖于Hadoop、HBase和Thrift,通过RHBase可以实现从HBase将数据加载到R中,包括新建或删除表、显示表结构、读取或插入数据等操作。
RHBase的一些基本操作:
●hb.list.tables:列出所有HBase表,语法为hb.list.tables()。
●hb.new.table:创建HBase表,例如:
hb.new.table("hbasetable")
●hb.describe.table:显示表结构,例如:
hb. describe.table("hbasetable")
●hb.get:读取表中的数据,例如读取hbasetable表中行关键字为1001的字段:
hb.get("hbasetable","1001")
●hb.insert:向表中插入数据,语法为:
hb.insert(tablename,changes)
其中,tablename为需要插入数据的HBase表,changes为插入的字段内容,为列表的形式。
●hb.delete.table:删除HBase表,例如删除表hbasetable:
hb.delete.table("hbasetable")
●hb.delete:删除表中的字段,例如删除表hbasetable中行关键字为1001的字段:
hb.delete("hbasetable","1001")