如何让Hadoop结合R语言做大数据分析?

如何让Hadoop结合R语言做大数据分析?,第1张

R语言和Hadoop让我们体会到了,两种技术在各自领域的强大。很多开发人员在计算机的角度,都会提出下面2个问题。问题1: Hadoop的家族如此之强大,为什么还要结合R语言?\x0d\x0a问题2: Mahout同样可以做数据挖掘和机器学习,和R语言的区别是什么?下面我尝试着做一个解答:问题1: Hadoop的家族如此之强大,为什么还要结合R语言?\x0d\x0a\x0d\x0aa. Hadoop家族的强大之处,在于对大数据的处理,让原来的不可能(TB,PB数据量计算),成为了可能。\x0d\x0ab. R语言的强大之处,在于统计分析,在没有Hadoop之前,我们对于大数据的处理,要取样本,假设检验,做回归,长久以来R语言都是统计学家专属的工具。\x0d\x0ac. 从a和b两点,我们可以看出,hadoop重点是全量数据分析,而R语言重点是样本数据分析。 两种技术放在一起,刚好是最长补短!\x0d\x0ad. 模拟场景:对1PB的新闻网站访问日志做分析,预测未来流量变化\x0d\x0ad1:用R语言,通过分析少量数据,对业务目标建回归建模,并定义指标d2:用Hadoop从海量日志数据中,提取指标数据d3:用R语言模型,对指标数据进行测试和调优d4:用Hadoop分步式算法,重写R语言的模型,部署上线这个场景中,R和Hadoop分别都起着非常重要的作用。以计算机开发人员的思路,所有有事情都用Hadoop去做,没有数据建模和证明,”预测的结果”一定是有问题的。以统计人员的思路,所有的事情都用R去做,以抽样方式,得到的“预测的结果”也一定是有问题的。所以让二者结合,是产界业的必然的导向,也是产界业和学术界的交集,同时也为交叉学科的人才提供了无限广阔的想象空间。问题2: Mahout同样可以做数据挖掘和机器学习,和R语言的区别是什么?\x0d\x0a\x0d\x0aa. Mahout是基于Hadoop的数据挖掘和机器学习的算法框架,Mahout的重点同样是解决行隐大数据的计算的问题。\x0d\x0ab. Mahout目前已支持的算法包括,协同过滤,推荐算法,聚类算法,分类算法,LDA, 朴素bayes,随机森林。上面的算法中,大部分都是距离的算法,可以通过矩阵分解后,充分陵历利用MapReduce的并行计算框架,高效地完成计算任务。\x0d\x0ac. Mahout的空白点,还有很多的数据挖掘算法,很难实现MapReduce并行化。Mahout的现有模型,都是通用模型,直接用到的项目中,计算结果只会比随机结果好一点点。Mahout二次开发,要求有深厚的JAVA和Hadoop的技术基础,最好兼有 “线性代数”,“概率统计”,“算法导论” 等的基础知识。所以想玩转Mahout真尺带搜的不是一件容易的事情。\x0d\x0ad. R语言同样提供了Mahout支持的约大多数算法(除专有算法),并且还支持大量的Mahout不支持的算法,算法的增长速度比mahout快N倍。并且开发简单,参数配置灵活,对小型数据集运算速度非常快。\x0d\x0a虽然,Mahout同样可以做数据挖掘和机器学习,但是和R语言的擅长领域并不重合。集百家之长,在适合的领域选择合适的技术,才能真正地“保质保量”做软件。\x0d\x0a\x0d\x0a如何让Hadoop结合R语言?\x0d\x0a\x0d\x0a从上一节我们看到,Hadoop和R语言是可以互补的,但所介绍的场景都是Hadoop和R语言的分别处理各自的数据。一旦市场有需求,自然会有商家填补这个空白。\x0d\x0a\x0d\x0a1). RHadoop\x0d\x0a\x0d\x0aRHadoop是一款Hadoop和R语言的结合的产品,由RevolutionAnalytics公司开发,并将代码开源到github社区上面。RHadoop包含三个R包 (rmr,rhdfs,rhbase),分别是对应Hadoop系统架构中的,MapReduce, HDFS, HBase 三个部分。\x0d\x0a\x0d\x0a2). RHiveRHive是一款通过R语言直接访问Hive的工具包,是由NexR一个韩国公司研发的。\x0d\x0a\x0d\x0a3). 重写Mahout用R语言重写Mahout的实现也是一种结合的思路,我也做过相关的尝试。\x0d\x0a\x0d\x0a4).Hadoop调用R\x0d\x0a\x0d\x0a上面说的都是R如何调用Hadoop,当然我们也可以反相 *** 作,打通JAVA和R的连接通道,让Hadoop调用R的函数。但是,这部分还没有商家做出成形的产品。\x0d\x0a\x0d\x0a5. R和Hadoop在实际中的案例\x0d\x0a\x0d\x0aR和Hadoop的结合,技术门槛还是有点高的。对于一个人来说,不仅要掌握Linux, Java, Hadoop, R的技术,还要具备 软件开发,算法,概率统计,线性代数,数据可视化,行业背景 的一些基本素质。在公司部署这套环境,同样需要多个部门,多种人才的的配合。Hadoop运维,Hadoop算法研发,R语言建模,R语言MapReduce化,软件开发,测试等等。所以,这样的案例并不太多。

如何执行Hadoop自带的例子

 1、在linux系统中,所在目录“/home/kcm”下建立一个档案input

[ubuntu@701~]$ mkdir input

2.在资料夹input中建立两个文字档案file1.txt和file2.txt,file1.txt中内容是“hello word”,file2.txt中内容是“hello hadoop”、“hello mapreduce”(分两行)。

[ubuntu@701~]$ cd input

[ubuntu@701~]$ vi file1.txt(编辑档案并储存)

[ubuntu@701~]$ vi file2.txt(编辑档案并储存)

[ubuntu@701~]$ ls -l /home/kcm/input

file1.txt file2.txt

显示档案内容可用:

[ubuntu@701~]$ cat/home/kcm/input/file1.txt

hello word

[ubuntu@701~]$ cat /home/kcm/input/file2.txt

hello mapreduce

hello hadoop

3.在HDFS上建立输入资料夹wc_input,并将本地资料夹input中的两个文字档案上传到丛集的wc_input下

[ubuntu@701~]$ hadoop fs -mkdir wc_input

[ubuntu@701~]$ hadoop fs -put/home/kcm/input/file* wc_input

检视wc_input中的档案:

[ubuntu@701~]$ /hadoop fs -ls wc_input

Found 2 items

-rw-r--r-- 1 root supergroup 11 2014-03-13 01:19 /user/hadoop/wc_input/file1.txt

-rw-r--r-- 1 root supergroup 29 2014-03-13 01:19 /user/hadoop/wc_input/file2.txt

4.首先,在window下将wordcount进行打包,我们这里把它打包成wordcount.jar;然后,将wordcount.jar拷贝到linux系统中,存放的首含目录自己决定即可。我们这里存放到/home/kcm目录下面。

5.执行wordcount.jar包(转到该jar包存放的目录下):

[ubuntu@701~]$ hadoop jar wordcount.jar /user/hadoop/wc_input /user/hadoop/output

android sdk中自带的例子怎样执行

新建一个android project 在建立画面选择Create project frome exceting

sourse 接着选择android版本。然后location里面选择你sdk资料夹下sample/androi-7/ApiDemos 这个资料夹 apidemos资料夹下面就是所有的例子程式。建立以后右键点选选择Run us选单下面第一个选项执行它。

就会自动建立一个虚拟机器跑起来这个例子程式了。

里面是各种元件的帆芹乎态悉程式码...

希望你满意我的答案

执行Android自带的例子时出错。

只能看到 Activity03 这个类的 onCreate方法 28行有个错误.... 应该是resultListener 这个类有问题,要看原始码 才知道的

MAPXTREME 6.7.1自带的例子里Routing and Geocoding无法执行

指定的URL可能没有Envinsa伺服器或伺服器无法处理请求

:localhost:8080/LocationUtility/services/LocationUtility

路径是否正确?

localhost:8080

指定的伺服器是否正确

GetMiAwareGeocodeClient是GeocodeClientFactory的属性吗?

我的是这样设定

puconn.ConnectionString = copConnStr

puconn.ConnectionString = Session("copconnstr").ToString

如何看tomcat自带的例子?

启动 tomcat(bin目录下的tomcat6.exe)

在浏览器位址列输入

:localhost:8080/examples/index. 即可

其实tomcat安装完成后

自带的例子会以一个工程的形式被发布到了webapps目录下

即上面提到的examples工程(tomcat 6.0) 5.0的版本也类似

ansys自带的例子如何看

应该是找在什么位置吧?

在ansys软体上面一行的最后一个的按钮help中,点选,然后再次点选下拉选单的help Topics

然后在开启的chm档案中点选Search(搜寻),然后在下面的输入框里面输入

Wele to the ANSYS Tutorials

就进入到自带例子的介面,如果还是不会,那就多练练windows怎么使用,,其他的一些例子在本人的百度部落格里面有说明

osgearth中自带的例子是怎么执行的

1、档案-->开启驱动器设定“测试事例目录”

2、双击又测树目录,载入.earth文件,如有修改,可储存

3、xml-->检视方式设定文字显示格式。

4、可在命令文字框中,自定义命令。

5、档案-->执行,执行“命令”串,检视osgEarth例项程式。

如何执行blazeds的例子

有文件的架构可以提供追溯其他工作产品的上下文。 有文件的架构可以传达可供选择的架构解决方案。 有文件的架构有助于从一个现有架构转换到一个新架构计划的计划编制。 有文件的架构通常能通过识别组成架构的元素及它们之间的依赖性来帮助编制计划。 有文件的架构可以提醒架构师在其所作的某些决定背后的基本原理。 有文件的架构有助于架构的评估。 选择视点。 建立工作产品。 给架构描述打包。 (1)功能性视点:它关注支援系统功能性的元素。 (2)部署视点:它关注支援系统分布的元素。 (3)需求视点:为形成架构的系统需求提供说明,它包括功能性需求、品质和约束。 (4)确认视点:为系统提供必需的功能、展示必需的品质和适应定义的约束提供说明。 交叉视点是从某一特定功能的视点出发,与基础视点交叉综合关注的元素,下图为一交叉视点的例子。 实现层级。 交叉关注。 逻辑检视是设计的物件模型。 过程检视获取设计的并发和同步方面的资讯。 开发检视描述的是软体开发环境中的软体静态组织。 物理检视描述了软体与硬体之间的对映,还反映了它在分散式方面的资讯。

求教eclipse如何学习自带的例子

例项就在安装目录下的tutorial里

执行起来后,多看,多写,多总结

如何确定oracle自带的例子在哪个owner里

登入sys as sysdba

[sql] view plain copy

select t.owner from all_tables t where t.table_name='例子的表名'

就可以查到owner了

然后用owner登入就可以测试给的example了

比如Oracle文件我看到一个example

UNION Example The following statement bines the results of o queries with the UNION operator, which eliminates duplicate selected rows. This statement shows that you must match data type (using the TO_CHAR function) when columns do not exist in one or the other table:

[sql] view plain copy

SELECT location_id, department_name "Department",

TO_CHAR(NULL) "Warehouse" FROM departments

UNION

SELECT location_id, TO_CHAR(NULL) "Department", warehouse_name

FROM warehouses

LOCATION_ID Department Warehouse

----------- ------------------------------ ---------------------------

1400 IT

1400 Southlake, Texas

1500 Shipping

1500 San Francisco

1600 New Jersey

1700 Aounting

1700 Administration

1700 Benefits

1700 Construction

1700 Contracting

1700 Control And Credit

...

而我不知道departments,warehouses表是属于scott还是Oe还是Hr或者别的owner?

我就用sys as sysdba登入

然后查询

[sql] view plain copy

select t.owner from all_tables t where t.table_name='WAREHOUSES'

得到

OWNER

OE

那么用OE登入就可以实验这个example了

这个是Oracle? Database Sample Schemas

11g Release 2 (11.2)

:docs.oracle./cd/E11882_01/server.112/e10831/toc.htm

在这个实例中,我将会向大家介绍如何使用Python 为 Hadoop编写一个简单的MapReduce

程序。

尽管Hadoop 框架是使用Java编写的但是我们仍然需要使用像仔氏C++、Python等语言来实现Hadoop程序。尽管Hadoop官方网站给的示例程序是使用Jython编写并打包成Jar文件,这样显然造成了不便,其实,不一定非要这样来实现,我们可以使用Python与Hadoop 关联进行编程,看看位于/src/examples/python/WordCount.py 的例子,你将了解到我在说什么。

我们想要做什么?

我们将编写一个简单的 MapReduce 程序,使用的是C-Python,而不是Jython编写后打包成jar包的程序。

我们的这个例子将模仿 WordCount 并使用Python来实现,例子通过读取文本文件来统计出单词的出现次数。结果也以文本形式输出,每一行包含一个单词和单词出现的次数,两者中间使用制表符来想间隔。

先决条件

编写这个程序之前,你学要架设好Hadoop 集群,这样才能不会在后期工作抓瞎。如果你没有架设好,那么在后面有个简明教程来教你在Ubuntu Linux 上搭建(同样适用于其他发行版linux、unix)

如何使用Hadoop Distributed File System (HDFS)在Ubuntu Linux 建立单节点的 Hadoop 集群

如何使用Hadoop Distributed File System (HDFS)在Ubuntu Linux 建立多节点的 Hadoop 集群州伍

Python的MapReduce代码

使用Python编写MapReduce代码的技巧就在于我们使用了 HadoopStreaming 来帮助我们在Map 和 Reduce间传递数据通过STDIN (标准念迹散输入)和STDOUT (标准输出).我们仅仅使用Python的sys.stdin来输入数据,使用sys.stdout输出数据,这样做是因为HadoopStreaming会帮我们办好其他事。这是真的,别不相信!

Map: mapper.py

将下列的代码保存在/home/hadoop/mapper.py中,他将从STDIN读取数据并将单词成行分隔开,生成一个列表映射单词与发生次数的关系:

注意:要确保这个脚本有足够权限(chmod +x /home/hadoop/mapper.py)。

#!/usr/bin/env python

import sys

# input comes from STDIN (standard input)

for line in sys.stdin:

# remove leading and trailing whitespace

line = line.strip()

# split the line into words

words = line.split()

# increase counters

for word in words:

# write the results to STDOUT (standard output)

# what we output here will be the input for the

# Reduce step, i.e. the input for reducer.py

#

# tab-delimitedthe trivial word count is 1

print '%s\\t%s' % (word, 1)在这个脚本中,并不计算出单词出现的总数,它将输出 "<word>1" 迅速地,尽管<word>可能会在输入中出现多次,计算是留给后来的Reduce步骤(或叫做程序)来实现。当然你可以改变下编码风格,完全尊重你的习惯。

Reduce: reducer.py

将代码存储在/home/hadoop/reducer.py 中,这个脚本的作用是从mapper.py 的STDIN中读取结果,然后计算每个单词出现次数的总和,并输出结果到STDOUT。

同样,要注意脚本权限:chmod +x /home/hadoop/reducer.py

#!/usr/bin/env python

from operator import itemgetter

import sys

# maps words to their counts

word2count = {}

# input comes from STDIN

for line in sys.stdin:

# remove leading and trailing whitespace

line = line.strip()

# parse the input we got from mapper.py

word, count = line.split('\\t', 1)

# convert count (currently a string) to int

try:

count = int(count)

word2count[word] = word2count.get(word, 0) + count

except ValueError:

# count was not a number, so silently

# ignore/discard this line

pass

# sort the words lexigraphically

#

# this step is NOT required, we just do it so that our

# final output will look more like the official Hadoop

# word count examples

sorted_word2count = sorted(word2count.items(), key=itemgetter(0))

# write the results to STDOUT (standard output)

for word, count in sorted_word2count:

print '%s\\t%s'% (word, count)

测试你的代码(cat data | map | sort | reduce)

我建议你在运行MapReduce job测试前尝试手工测试你的mapper.py 和 reducer.py脚本,以免得不到任何返回结果

这里有一些建议,关于如何测试你的Map和Reduce的功能:

——————————————————————————————————————————————

\r\n

# very basic test

hadoop@ubuntu:~$ echo "foo foo quux labs foo bar quux" | /home/hadoop/mapper.py

foo 1

foo 1

quux1

labs1

foo 1

bar 1

——————————————————————————————————————————————

hadoop@ubuntu:~$ echo "foo foo quux labs foo bar quux" | /home/hadoop/mapper.py | sort | /home/hadoop/reducer.py

bar 1

foo 3

labs1

——————————————————————————————————————————————

# using one of the ebooks as example input

# (see below on where to get the ebooks)

hadoop@ubuntu:~$ cat /tmp/gutenberg/20417-8.txt | /home/hadoop/mapper.py

The 1

Project 1

Gutenberg 1

EBook 1

of 1

[...]

(you get the idea)

quux2

quux1

——————————————————————————————————————————————

在Hadoop平台上运行Python脚本

为了这个例子,我们将需要三种电子书:

The Outline of Science, Vol. 1 (of 4) by J. Arthur Thomson\r\n

The Notebooks of Leonardo Da Vinci\r\n

Ulysses by James Joyce

下载他们,并使用us-ascii编码存储 解压后的文件,保存在临时目录,比如/tmp/gutenberg.

hadoop@ubuntu:~$ ls -l /tmp/gutenberg/

total 3592

-rw-r--r-- 1 hadoop hadoop 674425 2007-01-22 12:56 20417-8.txt

-rw-r--r-- 1 hadoop hadoop 1423808 2006-08-03 16:36 7ldvc10.txt

-rw-r--r-- 1 hadoop hadoop 1561677 2004-11-26 09:48 ulyss12.txt

hadoop@ubuntu:~$

复制本地数据到HDFS

在我们运行MapReduce job 前,我们需要将本地的文件复制到HDFS中:

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -copyFromLocal /tmp/gutenberg gutenberg

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -ls

Found 1 items

/user/hadoop/gutenberg <dir>

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -ls gutenberg

Found 3 items

/user/hadoop/gutenberg/20417-8.txt <r 1> 674425

/user/hadoop/gutenberg/7ldvc10.txt <r 1> 1423808

/user/hadoop/gutenberg/ulyss12.txt <r 1> 1561677

执行 MapReduce job

现在,一切准备就绪,我们将在运行Python MapReduce job 在Hadoop集群上。像我上面所说的,我们使用的是

HadoopStreaming 帮助我们传递数据在Map和Reduce间并通过STDIN和STDOUT,进行标准化输入输出。

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar contrib/streaming/hadoop-0.19.1-streaming.jar

-mapper /home/hadoop/mapper.py -reducer /home/hadoop/reducer.py -input gutenberg/*

-output gutenberg-output

在运行中,如果你想更改Hadoop的一些设置,如增加Reduce任务的数量,你可以使用“-jobconf”选项:

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar contrib/streaming/hadoop-0.19.1-streaming.jar

-jobconf mapred.reduce.tasks=16 -mapper ...

一个重要的备忘是关于Hadoop does not honor mapred.map.tasks

这个任务将会读取HDFS目录下的gutenberg并处理他们,将结果存储在独立的结果文件中,并存储在HDFS目录下的

gutenberg-output目录。

之前执行的结果如下:

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar contrib/streaming/hadoop-0.19.1-streaming.jar

-mapper /home/hadoop/mapper.py -reducer /home/hadoop/reducer.py -input gutenberg/*

-output gutenberg-output

additionalConfSpec_:null

null=@@@userJobConfProps_.get(stream.shipped.hadoopstreaming

packageJobJar: [/usr/local/hadoop-datastore/hadoop-hadoop/hadoop-unjar54543/]

[] /tmp/streamjob54544.jar tmpDir=null

[...] INFO mapred.FileInputFormat: Total input paths to process : 7

[...] INFO streaming.StreamJob: getLocalDirs(): [/usr/local/hadoop-datastore/hadoop-hadoop/mapred/local]

[...] INFO streaming.StreamJob: Running job: job_200803031615_0021

[...]

[...] INFO streaming.StreamJob: map 0% reduce 0%

[...] INFO streaming.StreamJob: map 43% reduce 0%

[...] INFO streaming.StreamJob: map 86% reduce 0%

[...] INFO streaming.StreamJob: map 100% reduce 0%

[...] INFO streaming.StreamJob: map 100% reduce 33%

[...] INFO streaming.StreamJob: map 100% reduce 70%

[...] INFO streaming.StreamJob: map 100% reduce 77%

[...] INFO streaming.StreamJob: map 100% reduce 100%

[...] INFO streaming.StreamJob: Job complete: job_200803031615_0021

[...] INFO streaming.StreamJob: Output: gutenberg-output hadoop@ubuntu:/usr/local/hadoop$

正如你所见到的上面的输出结果,Hadoop 同时还提供了一个基本的WEB接口显示统计结果和信息。

当Hadoop集群在执行时,你可以使用浏览器访问 http://localhost:50030/ ,如图:

检查结果是否输出并存储在HDFS目录下的gutenberg-output中:

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -ls gutenberg-output

Found 1 items

/user/hadoop/gutenberg-output/part-00000 <r 1> 903193 2007-09-21 13:00

hadoop@ubuntu:/usr/local/hadoop$

可以使用dfs -cat 命令检查文件目录

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -cat gutenberg-output/part-00000

"(Lo)cra" 1

"1490 1

"1498," 1

"35"1

"40," 1

"A 2

"AS-IS".2

"A_ 1

"Absoluti 1

[...]

hadoop@ubuntu:/usr/local/hadoop$

注意比输出,上面结果的(")符号不是Hadoop插入的。

转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12519557.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存