




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Hadoop数据分析平台 第15周法律【】本和幻灯片为炼数成金网络课程的教学资料,所有资料只能在课程内使用,不得在课程以外范围散播,违者将可能被责任。法律和经济课程详情炼数成金培训http:Hadoop圈本周内容:扩展开发,与应用集成n UDFn Thrift接口n Rhadoop(选学)UDFn 什么是UDFn 支持UDF的项目:例如Pig, HiveHive中编写UDFn 权威指南中文第二版第403页Pig编写UDFn 权威指南中文第二版第344页应用与Hbase的对接:通过Thriftn Thrift是一个跨语言的服务部署框架,最初由于2007年开发,2008年进入Apache开源项目。
2、Thrift通过一个中间语言 (IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(目前支持C+,Java, Python,PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。8Thrift架构9参考资料10PHP通过Thrift连接Hbase的主要步骤并且编译、安装Thriftnn 生成php和hbase的接口文件n 把PHP客户端需要的包及刚才生成的接口文件n 启动hbase thrift server,测试php连接hbasen 参
3、考文档:出来供php程序调用11RHadoop安装与使用n RHadoop安装 rhdfs rmr2n RHadoop程序实例(1,2,3,4)n rhbase安装与使用 rhbasen 进阶内容:用R现实MapReduce协同过滤算法 基于物品推荐的协同过滤算法介绍 R本地程序实现 R基于Hadoop分步式程序实现12RHadoop介绍n RHadoop是RevolutionAnalytics的工程的项目,开源实现代码在社区可以找到。RHadoop包含三个R包 (rmr,rhdfs,rhbase),分别是对应Hadoop系统架构中的,MapReduce, HDFS, HBase 三个部分。由
4、于这三个库不能在CRAN中找到,所以需要自己 /RevolutionAnalytics/RHadoop/wiki。13RHadoop安装 环境准备n Linux Ubuntu 12.04 64位n JDK一定要用Oracle SUN的版本,请从官网。htt/technetwork/java/javase/downloads/index.html操作系统的自带的OpenJDK会有各种不兼容。JDK请选择1.6.x的版本,JDK1.7版本也会有各种的不兼容情况。n Hadoop版本 1.0.3n R语言版本2.15,2.14是不能够支持RHadoop的。14Ubuntu环境用apt-get安装Rn
5、 Linux Ubuntu 12.04 64位 环境用apt-get安装R,请先更新软件包源,否则只能到2.14版本的R。n 执行命令: sh -c "echo deb http:/m>>/etc/apt/sources.list" apt-get update apt-get install r-base/cran/bin/linux/ubuntu precise/请使用下面的安装命令 sudo apt-get install r-base-core=2.15.3-1precise0precise115RHadoop安装 依赖库n 首先是rJava,运行R C
6、MD javareconf命令,R的程序从系统变量中会然后打开R程序,通过install.packages的方式,安装rJava。Java配置。n 然后,我还要安装其他的几个依赖库,reshape2,Rcpp,iterators,itertools,digest,RJSONIO,functional,通过install.packages都可以直接安装。16RHadoop安装 依赖库命令命令行执行 R CMD javareconf R启动R程序install.packages("rJava") install.packages("reshape2") in
7、stall.packages("Rcpp") install.packages("iterators") install.packages("itertools") install.packages("digest") install.packages("RJSONIO")install.packages("functional")17RHadoop安装 rhdfs,rmr2n 安装rhdfs库,在环境变量中增加 HADOOP_CMD 和 HADOOP_STREAMING 两
8、个变量,可以用export在当前命令窗口中增加。但为下次方便使用,最好把变量增加到系统环境变更/etc/environment文件中。HADOOP_CMD=/home/conan/hadoop/hadoop-1.0.3/bin/hadoopHADOOP_STREAMING=/home/conan/hadoop/hadoop- 1.0.3/contrib/streaming/hadoop-streaming-1.0.3.jarn 用 R CMD INSTALL安装rhdfs包,顺利完成了n 用 R CMD INSTALL安装rmr2包,顺利完成了18Rhadoop安装 设置环境变量 export
9、 HADOOP_CMD=/root/hadoop/hadoop-1.0.3/bin/hadoop export HADOOP_STREAMING=/root/hadoop/hadoop- 1.0.3/contrib/streaming/hadoop-streaming-1.0.3.jar设置环境变量vi /etc/environment HADOOP_CMD=/root/hadoop/hadoop-1.0.3/bin/hadoop HADOOP_STREAMING=/root/hadoop/hadoop- 1.0.3/contrib/streaming/hadoop-streaming-1.0
10、.3.jar. /etc/environmentn19RHadoop安装 rhdfs,rmr2n R CMD INSTALL /root/R/rhdfs_1.0.5.tar.gzn R CMD INSTALL /root/R/rmr2_2.1.0.tar.gz20列出所有安装包由于硬盘是外接的,使用mount和软连接(ln -s)挂载了R类库的目录,所以是R的n类库在/disk1/system下面/disk1/system/usr/local/lib/R/site-library/一般R的类库目录是/usr/lib/R/site-library或者/usr/local/lib/R/site-l
11、ibrary,用户也可以使用whereis R令,自己电脑上R类库的安装位置ls /disk1/system/usr/local/lib/R/site-library/digest functional iterators itertools plyr Rcpp reshape2 rhdfs rJava RJSONIO rmr2 stringr21rhdfs包的使用n 启动R程序> library(rhdfs)Loading required package: rJava HADOOP_CMD=/root/hadoop/hadoop-1.0.3/bin/hadoop Be sure to
12、 run> hdfs.init()n 注:hdfs.init() 方初始化本地的hdfs环境信息22实例1:查看hdfs文件目录n 查看hdfs文件目录hadoop令:hadoop fs -ls /userR语言函数:hdfs.ls(”/user/“)23实例2:查看hadoop数据文件n 查看hadoop数据文件hadoop令:hadoop fs -cat /user/hdfs/o_same_school/part-m-00000R语言函数:hdfs.cat(”/user/hdfs/o_same_school/part-m-00000)24rmr2包的使用n 启动R程序> lib
13、rary(rmr2)Loading required package: Rcpp Loading required package: RJSONIO Loading required package: digest Loading required package: functional Loading required package: stringr Loading required package: plyrLoading required package: reshape2n 注:rhdfs和rmr2包之间没有依赖关系25实例3:rmr实现MapReduce算法n MapReduce算
14、法普通的R语言程序:> s = 1:10> sapply(s, function(x) x2)结果:164 81 10026实例3:rmr实现MapReduce算法MapReduce的R语言程序:> s = to.dfs(1:10)> mapreduce(input = s, map = function(k, v) cbind(v, v2)> from.dfs("/tmp/RtmpWnzxl4/file5deb791fcbd5")结果:$keyNULL注: 因为MapRe
15、duce只能HDFS文件系统,先要用to.dfs()把数据到HDFS文件系统里。$val v1, 1 12, 2 43, 3 94, 4 165, 5 256, 6 367, 7 498, 8 649, 9 8110, 10 100MapReduce的运算结果再用from.dfs()函数从HDFS文件系统中取出。27实例4:rmr对文件中的单词计数> input<- '/user/hdfs/o_same_school/part-m-00000'>wordcount = function(input, output = NULL, pattern = "
16、; ")wc.map = function(., lines) keyval(unlist( strsplit( x = lines,split = pattern),1)wc.reduce =function(word, counts ) keyval(word, sum(counts)mapreduce(input = input ,output = output, input.format = "text",map = wc.map, reduce =bine = T)> wordcount(input)28rhbase安装与使用开始之前请大家把HBa
17、se,Thrift配置好Hbase版本:hbase-0.94.2 Thrift版本: thrift-0.8.0n rhbase安装n rhbase程序用例29rhbase安装n 启动Hadoop, Hbase,Thrift Server /hbase-0.94.2/bin/hbase-daemon.sh start thrift jps12041 HMaster12209 HRegionServer13222 ThriftServer31734 TaskTracker31343 DataNode31499 SecondaryNameNode13328 Jps31596 JobTracker11
18、916 HQuorumPeer31216 NameNode安装rhbase R CMD INSTALL /root/R/rhbase_1.1.1.tar.gz30rhbase函数列表n hb.deleten hb.get.data.framen hb.list.tablesn hb.scan.exn hb.delete.tablen hb.initn hb.new.tablen hb.set.table.modepact.tablenn hb.describe.tablen hb.insertn hb.regions.tablen hb.defaultsn hb.getn hb.insert.
19、data.framen hb.scann hb.delete31实例1:rhbase建表,列出所有表n 建表 :HBASE: create 'student_shell','info'RHBASE: hb.new.table("student_rhbase","info")n 列出所有表 :HBASE: listRHBASE: hb.list.tables()32实例2:rhbase显示表结构,数据n 显示表结构HBASE: describe 'student_shell'RHBASE: hb.descri
20、be.table("student_rhbase")一条数据nHBASE: put 'student_shell','mary','info:age','19'RHBASE: hb.insert("student_rhbase",list(list("mary","info:age", "24")33实例3:rhbase读数据,删除表数据nHBASE: get 'student_shell','mary
21、9;RHBASE: hb.get('student_rhbase','mary')n 删除表(HBASE需要两条命令,rhbase仅是一个操作)HBASE: disable 'student_shell' drop 'student_shell'RHBASE: hb.delete.table('student_rhbase')34用R现实MapReduce协同过滤算法接下是高阶一些的内容n 基于物品推荐的协同过滤算法介绍n R本地程序实现n R基于Hadoop分步式程序实现35基于物品推荐的协同过滤算法介绍n 越来
22、越多的互联网应用,都开始使用推荐算法(协同过滤算法)。n 根据用户活跃度和物品流行度,可以分为”基于用户的协同过滤算法”和”基于物品的协同过滤算法”。n 基于用户的协同过滤算法,是给用户推荐和他相似的其他用户喜欢的物品。n 基于物品的协同过滤算法,是给用户推荐和他之前喜欢的物品相似的物品。基于物品的协同过滤算法,是目前广泛使用的一种推荐算法,像Netflix,。, Amazon等36基于物品的协同过滤算法n 算法主要分为两步:1. 计算物品之间的相似度2. 根据物品的相似度和用户的历史行为给用户生成推荐列表n 有关算法的细节请参考:”Mahout In Action”和”推荐系统实践”两本书。
23、n 为开发方便,我们选择一组很小的测试数据集。37测试数据集1,101,5.01,102,3.01,103,2.52,101,2.02,102,2.52,103,5.02,104,2.03,101,2.03,104,4.03,105,4.53,107,5.04,101,5.04,103,3.04,104,4.54,106,4.05,101,4.05,102,3.05,103,2.05,104,4.05,105,3.55,106,4.038R语言程序实现 1n 首先,通过R语言实现基于物品的协同过滤算法,为和RHadoop实现进行对比。这里我使用”Mahout In Action”书里,第一章第
24、六节介绍的分步式基于物品的协同过滤算法进行实现。Chapter 6: Distributingmendation computationsn 算法的思想:1. 建立物品的同现矩阵2. 建立用户对物品的评分矩阵3. 矩阵计算推荐结果39R语言程序实现 2建立物品的同现矩阵n 按用户分组,找到每个用户所选的物品,单独出现计数,及两两一组计数。n 例如:用户ID为3的用户,分别给101,104,105,107,这4个物品打分。1) (101,101),(104,104),(105,105),(107,107),单独出现计算各加1。2) (101,104),(101,105),(101,107),(1
25、04,105),(104,107),(105,107),两个一组计数各加1。3) 把所有用户的计算结果求和,生成一个三角矩阵,再补全三角矩阵,就建立了物品的同现矩阵。40R语言程序实现 3建立用户对物品的评分矩阵n 按用户分组,找到每个用户所选的物品及评分n 例如:用户ID为3的用户,分别给(3,101,2.0),(3,104,4.0),(3,105,4.5),(3,107,5.0)这4个物品打分。1) 找到物品评分(3,101,2.0),(3,104,4.0),(3,105,4.5),(3,107,5.0)2) 建立用户对物品的评分矩阵41R语言程序实现 4矩阵计算推荐结果n 同现矩阵*评分
26、矩阵=推荐结果图片摘自Mahout In Action42R语言程序实现 5 代码1#plyr包library(plyr)#数据集train<-read.csv(file="small.csv",header=FALSE)names(train)<-c("user","item","pref")#计算用户列表usersUnique<-function()users<-unique(train$user)usersorder(users)#计算商品列表方法itemsUnique<-fun
27、ction()items<-unique(train$item)itemsorder(items)# 用户列表users<-usersUnique()users1 1 2 3 4 5# 商品列表items<-itemsUnique()items1 101 102 103 104 105 106 10743R语言程序实现 5 代码2#推荐算法mend<-function( n<-length(items)# all of prefpref<-rep(0,n) prefudata$idx<-udata$pref#建立商品列表索引index<-func
28、tion(x) which(items %in% x)data<-ddply(train,.(user,item,pref),summarize,idx=index(item)atrix,num=0)#同现矩阵cooccurrence<-function(data)n<-length(items)co<-matrix(rep(0,n*n),nrow=n)for(u in users)idx<-index(data$itemwhich(data$user=u)m<-merge(idx,idx)for(i in 1:nrow(m)com$xi,m$yi=com$
29、xi,m$yi+1return(co)# 用户评分矩阵userx<-matrix(pref,nrow=n)# 同现矩阵*评分矩阵r<-co %*% userx# 推荐结果排序rudata$idx<-0idx<-order(r,decreasing=TRUE)topn<-data.frame(user=rep(udata$user1,length(idx), item=itemsidx,val=ridx) topn0),# 推荐结果取前num个if(num>0)topn<-head(topn,num)#返回结果return(topn)44R语言程序实现
30、5 代码3通过上面几步操作,我们用R语言实现了,基于物品的协同过滤算法。注:这种算法是基于分步式设计的,单机有种选择45R基于Hadoop分步式程序实现 1算法思想同上面R语言实现思想,但略有复杂。(真正难点)R语言实现的MapReduce算法,可以基于R的数据对象实现,不必如JAVA一样使用文nn本。算法的思想:1. 建立物品的同现矩阵1) 按用户分组,得到所有物品出现的组合列表。2) 对物品组合列表进行计数,建立物品的同现矩阵2. 建立用户对物品的评分矩阵3. 合并同现矩阵和评分矩阵4. 计算推荐结果列表5. 按输入格式得到推荐评分列表n46R基于Hadoop分步式程序实现 2n 通过Ma
31、pReduce实现时,所有操作都要使用Map和Reduce的任务完成,程序实现过程略有变化。47R基于Hadoop分步式程序实现 3n 1. 建立物品的同现矩阵n 1) 按用户分组,得到所有物品出现的组合列表。n key:物品列表向量val:物品组合向量48R基于Hadoop分步式程序实现 4n 2) 对物品组合列表进行计数,建立物品的同现矩阵n key:物品列表向量val:同现矩阵的数据框值(item,item,Freq)注:矩阵格式,要与”2. 建立用户对物品的评分矩阵”的格式一致,把异构的两种数据源,合并为同一种数据格式, 为”3. 合并 同现矩阵 和 评分矩阵”做数据基础。49R基于H
32、adoop分步式程序实现 5n 2. 建立用户对物品的评分矩阵n key:物品列表val:用户对物品打分矩阵注:矩阵格式,要与”2) 对物品组合列表进行计数,建立物品的同现矩阵”的格式一致,把异构的两种数据源,合并为同一种数据格式,为”3. 合并 同现矩阵 和 评分矩阵”做数据基础50R基于Hadoop分步式程序实现 6n 3. 合并 同现矩阵 和 评分矩阵n 这一步操作是MapReduce比较特殊的,因为数据源是两个异构数据源,进行MapReduce的操作。在之前,我们已经把两种格式合并为一样的。使用equijoin这个rmr2包的函数,进行矩阵合并。n key:NULLval:合并的数据框51R基于Hadoop分步式程序实现
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮团队建设培训
- 备考CPSM考试心态调整试题及答案
- 钢厂安全管理
- 音乐的魅力与探索-从基础知识到音乐的培养价值
- 肿瘤免疫治疗
- 培养团队精神-成长路上我与团队共进步
- CPSM考试文献阅读技巧及试题及答案
- 安全生产月活动方案范本
- 2024年SCMP专业评审试题与答案
- 2024年CPMM常识题库试题及答案
- 2025年计算机等级考试一级计算机基础及WPS Office应用试题及答案指导
- 院内突发心跳呼吸骤停、昏迷、跌倒事件应急预案及程序
- 2024年小区地下车位租赁合同
- 先进个人申报登记表
- 2022-2023学年广东省江门市新会区会城镇城南小学部编版一年级下册3月月考语文试卷
- 抖音火花合同电子版获取教程
- 电影赏析绿皮书课件(内容详细)
- 轴线-对话场面的拍摄
- 中国电信营业厅服务规范与基础管理指导手册
- 湖南省2021年普通高等学校对口招生考试英语
- 控制性详细规划城市用地分类和代号
评论
0/150
提交评论