『壹』 某电商双11数据分析与预测为什么会用到hive,可不可以直接用Hadoop
首先明确Hive和Hadoop两者的关系:
1、Hadoop是一种用于存储、读取以及处理海量数据的技术。你可以将他等价理解为个人PC的文件系统,只不过它能够承载远比一两块硬盘所能储存的多得多的数据;
2、Hive是一种构建在Hadoop之上的工具,它通过书写SQL语句的方式部分实现了Hadoop的功能,也就是说,所有Hive具备的能力,Hadoop都有,只不过Hive提供了一套描述工具,让你用可读性更强、更通用的方式描述你想解决的问题,然后由Hive将其转换成Hadoop的底层逻辑,最终解决问题。
所以,你问的问题也就不言自明了,当然可以直接基于Hadoop,使用Java、Python等语言直接编写MapRece的处理过程;但是,常规的数据分析如果使用Hive,可能只需要若干Select查询语句即可完成,若编写代码完成,可能需要安装配置本地IDE、完成相关代码库的依赖、MapRece完整逻辑的实现、任务的提交、计算结果的获取等等一系列庞杂的细节。两厢对比,我认为虽然理论上可以直接用Hadoop,但是在真实业务场景下,就是不能用的。
希望我说明白了~
『贰』 金融需要 hadoop,spark 等这些大数据分析工具吗使用场景是怎样的
看看用亿信ABI做的相关案例
银行大数据应用
国内不少银行已经开始尝试通过大数据来驱动业务运营,如中信银行信用卡中心使用大数据技术实现了实时营销,光大银行建立了社交网络信息数据库,招商银行则利用大数据发展小微贷款。总的来看银行大数据应用可以分为四大方面:
1、客户画像
客户画像应用主要分为个人客户画像和企业客户画像。个人客户画像包括人口统计学特征、消费能力数据、兴趣数据、风险偏好等;企业客户画像包括企业的生产、流通、运营、财务、销售和客户数据、相关产业链上下游等数据。值得注意的是,银行拥有的客户信息并不全面,基于银行自身拥有的数据有时候难以得出理想的结果甚至可能得出错误的结论。比如,如果某位信用卡客户月均刷卡8次,平均每次刷卡金额800元,平均每年打4次客服电话,从未有过投诉,按照传统的数据分析,该客户是一位满意度较高流失风险较低的客户。但如果看到该客户的微博,得到的真实情况是:工资卡和信用卡不在同一家银行,还款不方便,好几次打客服电话没接通,客户多次在微博上抱怨,该客户流失风险较高。所以银行不仅仅要考虑银行自身业务所采集到的数据,更应考虑整合外部更多的数据,以扩展对客户的了解。包括:
(1)客户在社交媒体上的行为数据(如光大银行建立了社交网络信息数据库)。通过打通银行内部数据和外部社会化的数据可以获得更为完整的客户拼图,从而进行更为精准的营销和管理;
(2)客户在电商网站的交易数据,如建设银行则将自己的电子商务平台和信贷业务结合起来,阿里金融为阿里巴巴用户提供无抵押贷款,用户只需要凭借过去的信用即可;
(3)企业客户的产业链上下游数据。如果银行掌握了企业所在的产业链上下游的数据,可以更好掌握企业的外部环境发展情况,从而可以预测企业未来的状况;
(4)其他有利于扩展银行对客户兴趣爱好的数据,如网络广告界目前正在兴起的DMP数据平台的互联网用户行为数据。
2、精准营销
在客户画像的基础上银行可以有效的开展精准营销,包括:
(1)实时营销。实时营销是根据客户的实时状态来进行营销,比如客户当时的所在地、客户最近一次消费等信息来有针对地进行营销(某客户采用信用卡采购孕妇用品,可以通过建模推测怀孕的概率并推荐孕妇类喜欢的业务);或者将改变生活状态的事件(换工作、改变婚姻状况、置居等)视为营销机会;
(2)交叉营销。即不同业务或产品的交叉推荐,如招商银行可以根据客户交易记录分析,有效地识别小微企业客户,然后用远程银行来实施交叉销售;
(3)个性化推荐。银行可以根据客户的喜欢进行服务或者银行产品的个性化推荐,如根据客户的年龄、资产规模、理财偏好等,对客户群进行精准定位,分析出其潜在金融服务需求,进而有针对性的营销推广;
(4)客户生命周期管理。客户生命周期管理包括新客户获取、客户防流失和客户赢回等。如招商银行通过构建客户流失预警模型,对流失率等级前20%的客户发售高收益理财产品予以挽留,使得金卡和金葵花卡客户流失率分别降低了15个和7个百分点。
3、风险管理与风险控制
在风险管理和控制方面包括中小企业贷款风险评估和欺诈交易识别等手段
(1)中小企业贷款风险评估。银行可通过企业的产、流通、销售、财务等相关信息结合大数据挖掘方法进行贷款风险分析,量化企业的信用额度,更有效的开展中小企业贷款。
(2)实时欺诈交易识别和反洗钱分析。银行可以利用持卡人基本信息、卡基本信息、交易历史、客户历史行为模式、正在发生行为模式(如转账)等,结合智能规则引擎(如从一个不经常出现的国家为一个特有用户转账或从一个不熟悉的位置进行在线交易)进行实时的交易反欺诈分析。如IBM金融犯罪管理解决方案帮助银行利用大数据有效地预防与管理金融犯罪,摩根大通银行则利用大数据技术追踪盗取客户账号或侵入自动柜员机(ATM)系统的罪犯。
4、运营优化
(1)市场和渠道分析优化。通过大数据,银行可以监控不同市场推广渠道尤其是网络渠道推广的质量,从而进行合作渠道的调整和优化。同时,也可以分析哪些渠道更适合推广哪类银行产品或者服务,从而进行渠道推广策略的优化。
(2)产品和服务优化:银行可以将客户行为转化为信息流,并从中分析客户的个性特征和风险偏好,更深层次地理解客户的习惯,智能化分析和预测客户需求,从而进行产品创新和服务优化。如兴业银行目前对大数据进行初步分析,通过对还款数据挖掘比较区分优质客户,根据客户还款数额的差别,提供差异化的金融产品和服务方式。
(3)舆情分析:银行可以通过爬虫技术,抓取社区、论坛和微博上关于银行以及银行产品和服务的相关信息,并通过自然语言处理技术进行正负面判断,尤其是及时掌握银行以及银行产品和服务的负面信息,及时发现和处理问题;对于正面信息,可以加以总结并继续强化。同时,银行也可以抓取同行业的银行正负面信息,及时了解同行做的好的方面,以作为自身业务优化的借鉴。
『叁』 商务数据的作用是什么
商务数据分析平台主要是通过对各类原始数据的集成和处理,实现不同的应用目标,最终达到提高电子商务运营效益的目的。平台构建过程中主要涉及到电子商务数据分析理论,以此为基础,利用Hadoop技术和Map/Rece技术具体构建系统架构,并利用数据挖掘技术、联机分析处理技术等实现应用目标。
电子商务数据中包含着大量的信息,传统的数据处理方式只能够从统计的角度获取有限的知识,而商务智能则可以从海量数据中挖掘对提高商业效益具有重要价值的信息内容。电子商务数据处理分析的过程中需要关注六个重要因素:商业敏感性对电子商务数据分析的重要影响作用;电子商务数据分析的最终目标是提高投资回报率子商务数据分析指标的设置;对指标异常情况的分析和报警;对顾客行为数据的分析是重点;对客户关系的研究和管理是电子商务数据处理分析的重点。
『肆』 hadoop怎么解决即时交互需求
Hadoop通常被认定是能够帮助你解决所有问题的唯一方案。 当人们提到“大数据”或是“数据分析”等相关问题的时候,会听到脱口而出的回答:Hadoop!实际上Hadoop被设计和建造出来,是用来解决一系列特定问题的。对某些问题来说,Hadoop至多算是一个不好的选择。对另一些问题来说,选择Hadoop甚至会是一个错误。对于数据转换的操作,或者更广泛意义上的抽取-转换-装载的操作(译者注:Extraction Transformation Load,ETL,数据仓库中对数据从初始状态到可用状态处理过程的经典定义), 使用Hadoop系统能够得到很多好处, 但是如果你的问题是下面5类之中的一个的话,Hadoop可能会是一不合适的解决方案。
1.对于大数据的渴望
很多人相信他们拥有正真“大”的数据, 但通常情况并非如此。 当考虑数据容量和理解大多数人对“大数据”处理的想法的时候, 我们应当参考这篇研究论文, 没有人会因为买了一个集群的服务器而被辞退,它告诉了我们一些有趣的事实。 Hadoop是被设计成用来处理在TB或PB级别的数据的, 而世界上大多数的计算任务处理的是100GB以下的输入数据。(Microsoft和Yahoo在这个数据统计上的中位数是14GB,而90% Facebook的任务处理的是100GB以下的数据)。对于这样的情况来说, 纵向扩展的解决方案就会在性能上胜过横向扩展(scale-out)的解决方案。
(译者注:纵向扩展scale-up通常是指在一台机器上增加或更换内存、CPU、硬盘或网络设备等硬件来实现系统整体性能的提升, 横向扩展(scale-out)指的是通过在集群中增加机器来提升集群系统整体性能的提升。论文中比较了对Hadoop系统进行各种纵向扩展和横向扩展之后, 在性能指标上进行评测的试验。结论是在某些情况下在一台机器上的纵向扩展会比在Hadoop集群中增加机器得到更高的系统性能,而且性价比会更好。这个结论打破了大多数人对Hadoop系统的简单认识, 那就是一定要用若干廉价的机器组成集群才能到达最好的整体性能。 )
所以你需要问自己:
我是否有超过几个TB的数据?
我是否有稳定、海量的输入数据?
我有多少数据要操作和处理?
2.你在队列中
当你在Hadoop系统中提交计算任务的时候, 最小的延迟时间是1分钟 。 这意味系统对于客户的商品购买信息要花1分钟的时间才能响应并提供相关商品推荐。这要求系统有非常忠实和耐心的客户, 盯着电脑屏幕超过60秒钟等待结果的出现。 一种好的方案是将库存中的每一件商品都做一个预先的相关商品的计算, 放在Hadoop上。 然后提供一个网站,或者是移动应用来访问预先存储的结果,达到1秒或以下的即时响应。 Hadoop是一个非常好的做预先计算的大数据引擎。 当然,随着需要返回的数据越来越复杂,完全的预先计算会变得越来越没有效率。
所以你需要问自己:
用户期望的系统响应时间大概在什么范围?
哪些计算任务是可以通过批处理的方式来运行的?
(译者注:原作者应该是用了B2C电子商务网站上经典的商品推荐功能作为用例,描述如何用Hadoop实现这个功能。)
『伍』 在 hadoop 开发过程中使用过哪些算法
基本MapRece模式
计数与求和
问题陈述:
有许多文档,每个文档都有一些字段组成。需要计算出每个字段在所有文档中的出现次数或者这些字段的其他什么统计值。例如,给定一个log文件,其中的每条记录都包含一个响应时间,需要计算出平均响应时间。
解决方案:
让我们先从简单的例子入手。在下面的代码片段里,Mapper每遇到指定词就把频次记1,Recer一个个遍历这些词的集合然后把他们的频次加和。
1 class Mapper
2 method Map(docid id, doc d)
3 for all term t in doc d do
4 Emit(term t, count 1)
5
6 class Recer
7 method Rece(term t, counts [c1, c2,...])
8 sum = 0
9 for all count c in [c1, c2,...] do
10 sum = sum + c
11 Emit(term t, count sum)
这种方法的缺点显而易见,Mapper提交了太多无意义的计数。它完全可以通过先对每个文档中的词进行计数从而减少传递给Recer的数据量:
1 class Mapper
2 method Map(docid id, doc d)
3 H = new AssociativeArray
4 for all term t in doc d do
5 H{t} = H{t} + 1
6 for all term t in H do
7 Emit(term t, count H{t})
如果要累计计数的的不只是单个文档中的内容,还包括了一个Mapper节点处理的所有文档,那就要用到Combiner了:
1 class Mapper
2 method Map(docid id, doc d)
3 for all term t in doc d do
4 Emit(term t, count 1)
5
6 class Combiner
7 method Combine(term t, [c1, c2,...])
8 sum = 0
9 for all count c in [c1, c2,...] do
10 sum = sum + c
11 Emit(term t, count sum)
12
13 class Recer
14 method Rece(term t, counts [c1, c2,...])
15 sum = 0
16 for all count c in [c1, c2,...] do
17 sum = sum + c
18 Emit(term t, count sum)
应用:Log 分析, 数据查询
整理归类
问题陈述:
有一系列条目,每个条目都有几个属性,要把具有同一属性值的条目都保存在一个文件里,或者把条目按照属性值分组。 最典型的应用是倒排索引。
解决方案:
解决方案很简单。 在 Mapper 中以每个条目的所需属性值作为 key,其本身作为值传递给 Recer。 Recer 取得按照属性值分组的条目,然后可以处理或者保存。如果是在构建倒排索引,那么 每个条目相当于一个词而属性值就是词所在的文档ID。
应用:倒排索引, ETL
过滤 (文本查找),解析和校验
问题陈述:
假设有很多条记录,需要从其中找出满足某个条件的所有记录,或者将每条记录传换成另外一种形式(转换操作相对于各条记录独立,即对一条记录的操作与其他记录无关)。像文本解析、特定值抽取、格式转换等都属于后一种用例。
解决方案:
非常简单,在Mapper 里逐条进行操作,输出需要的值或转换后的形式。
应用:日志分析,数据查询,ETL,数据校验
分布式任务执行
问题陈述:
大型计算可以分解为多个部分分别进行然后合并各个计算的结果以获得最终结果。
解决方案: 将数据切分成多份作为每个 Mapper 的输入,每个Mapper处理一份数据,执行同样的运算,产生结果,Recer把多个Mapper的结果组合成一个。
案例研究: 数字通信系统模拟
像 WiMAX 这样的数字通信模拟软件通过系统模型来传输大量的随机数据,然后计算传输中的错误几率。 每个 Mapper 处理样本 1/N 的数据,计算出这部分数据的错误率,然后在 Recer 里计算平均错误率。
应用:工程模拟,数字分析,性能测试
排序
问题陈述:
有许多条记录,需要按照某种规则将所有记录排序或是按照顺序来处理记录。
解决方案: 简单排序很好办 – Mappers 将待排序的属性值为键,整条记录为值输出。 不过实际应用中的排序要更加巧妙一点, 这就是它之所以被称为MapRece 核心的原因(“核心”是说排序?因为证明Hadoop计算能力的实验是大数据排序?还是说Hadoop的处理过程中对key排序的环节?)。在实践中,常用组合键来实现二次排序和分组。
MapRece 最初只能够对键排序, 但是也有技术利用可以利用Hadoop 的特性来实现按值排序。想了解的话可以看这篇博客。
按照BigTable的概念,使用 MapRece来对最初数据而非中间数据排序,也即保持数据的有序状态更有好处,必须注意这一点。换句话说,在数据插入时排序一次要比在每次查询数据的时候排序更高效。
应用:ETL,数据分析
非基本 MapRece 模式
迭代消息传递 (图处理)
问题陈述:
假设一个实体网络,实体之间存在着关系。 需要按照与它比邻的其他实体的属性计算出一个状态。这个状态可以表现为它和其它节点之间的距离, 存在特定属性的邻接点的迹象, 邻域密度特征等等。
解决方案:
网络存储为系列节点的结合,每个节点包含有其所有邻接点ID的列表。按照这个概念,MapRece 迭代进行,每次迭代中每个节点都发消息给它的邻接点。邻接点根据接收到的信息更新自己的状态。当满足了某些条件的时候迭代停止,如达到了最大迭代次数(网络半径)或两次连续的迭代几乎没有状态改变。从技术上来看,Mapper 以每个邻接点的ID为键发出信息,所有的信息都会按照接受节点分组,recer 就能够重算各节点的状态然后更新那些状态改变了的节点。下面展示了这个算法:
1 class Mapper
2 method Map(id n, object N)
3 Emit(id n, object N)
4 for all id m in N.OutgoingRelations do
5 Emit(id m, message getMessage(N))
6
7 class Recer
8 method Rece(id m, [s1, s2,...])
9 M = null
10 messages = []
11 for all s in [s1, s2,...] do
12 if IsObject(s) then
13 M = s
14 else // s is a message
15 messages.add(s)
16 M.State = calculateState(messages)
17 Emit(id m, item M)
一个节点的状态可以迅速的沿着网络传全网,那些被感染了的节点又去感染它们的邻居,整个过程就像下面的图示一样:
案例研究: 沿分类树的有效性传递
问题陈述:
这个问题来自于真实的电子商务应用。将各种货物分类,这些类别可以组成一个树形结构,比较大的分类(像男人、女人、儿童)可以再分出小分类(像男裤或女装),直到不能再分为止(像男式蓝色牛仔裤)。这些不能再分的基层类别可以是有效(这个类别包含有货品)或者已无效的(没有属于这个分类的货品)。如果一个分类至少含有一个有效的子分类那么认为这个分类也是有效的。我们需要在已知一些基层分类有效的情况下找出分类树上所有有效的分类。
解决方案:
这个问题可以用上一节提到的框架来解决。我们咋下面定义了名为 getMessage和 calculateState 的方法:
1 class N
2 State in {True = 2, False = 1, null = 0},
3 initialized 1 or 2 for end-of-line categories, 0 otherwise
4 method getMessage(object N)
5 return N.State
6 method calculateState(state s, data [d1, d2,...])
7 return max( [d1, d2,...] )
案例研究:广度优先搜索
问题陈述:需要计算出一个图结构中某一个节点到其它所有节点的距离。
解决方案: Source源节点给所有邻接点发出值为0的信号,邻接点把收到的信号再转发给自己的邻接点,每转发一次就对信号值加1:
1 class N
2 State is distance,
3 initialized 0 for source node, INFINITY for all other nodes
4 method getMessage(N)
5 return N.State + 1
6 method calculateState(state s, data [d1, d2,...])
7 min( [d1, d2,...] )
案例研究:网页排名和 Mapper 端数据聚合
这个算法由Google提出,使用权威的PageRank算法,通过连接到一个网页的其他网页来计算网页的相关性。真实算法是相当复杂的,但是核心思想是权重可以传播,也即通过一个节点的各联接节点的权重的均值来计算节点自身的权重。
1 class N
2 State is PageRank
3 method getMessage(object N)
4 return N.State / N.OutgoingRelations.size()
5 method calculateState(state s, data [d1, d2,...])
6 return ( sum([d1, d2,...]) )
要指出的是上面用一个数值来作为评分实际上是一种简化,在实际情况下,我们需要在Mapper端来进行聚合计算得出这个值。下面的代码片段展示了这个改变后的逻辑 (针对于 PageRank 算法):
1 class Mapper
2 method Initialize
3 H = new AssociativeArray
4 method Map(id n, object N)
5 p = N.PageRank / N.OutgoingRelations.size()
6 Emit(id n, object N)
7 for all id m in N.OutgoingRelations do
8 H{m} = H{m} + p
9 method Close
10 for all id n in H do
11 Emit(id n, value H{n})
12
13 class Recer
14 method Rece(id m, [s1, s2,...])
15 M = null
16 p = 0
17 for all s in [s1, s2,...] do
18 if IsObject(s) then
19 M = s
20 else
21 p = p + s
22 M.PageRank = p
23 Emit(id m, item M)
应用:图分析,网页索引
值去重 (对唯一项计数)
问题陈述: 记录包含值域F和值域 G,要分别统计相同G值的记录中不同的F值的数目 (相当于按照 G分组).
这个问题可以推而广之应用于分面搜索(某些电子商务网站称之为Narrow Search)
Record 1: F=1, G={a, b}
Record 2: F=2, G={a, d, e}
Record 3: F=1, G={b}
Record 4: F=3, G={a, b}
Result:
a -> 3 // F=1, F=2, F=3
b -> 2 // F=1, F=3
d -> 1 // F=2
e -> 1 // F=2
解决方案 I:
第一种方法是分两个阶段来解决这个问题。第一阶段在Mapper中使用F和G组成一个复合值对,然后在Recer中输出每个值对,目的是为了保证F值的唯一性。在第二阶段,再将值对按照G值来分组计算每组中的条目数。
第一阶段:
1 class Mapper
2 method Map(null, record [value f, categories [g1, g2,...]])
3 for all category g in [g1, g2,...]
4 Emit(record [g, f], count 1)
5
6 class Recer
7 method Rece(record [g, f], counts [n1, n2, ...])
8 Emit(record [g, f], null )
第二阶段:
1 class Mapper
2 method Map(record [f, g], null)
3 Emit(value g, count 1)
4
5 class Recer
6 method Rece(value g, counts [n1, n2,...])
7 Emit(value g, sum( [n1, n2,...] ) )
解决方案 II:
第二种方法只需要一次MapRece 即可实现,但扩展性不强。算法很简单-Mapper 输出值和分类,在Recer里为每个值对应的分类去重然后给每个所属的分类计数加1,最后再在Recer结束后将所有计数加和。这种方法适用于只有有限个分类,而且拥有相同F值的记录不是很多的情况。例如网络日志处理和用户分类,用户的总数很多,但是每个用户的事件是有限的,以此分类得到的类别也是有限的。值得一提的是在这种模式下可以在数据传输到Recer之前使用Combiner来去除分类的重复值。
1 class Mapper
2 method Map(null, record [value f, categories [g1, g2,...] )
3 for all category g in [g1, g2,...]
4 Emit(value f, category g)
5
6 class Recer
7 method Initialize
8 H = new AssociativeArray : category -> count
9 method Rece(value f, categories [g1, g2,...])
10 [g1', g2',..] = ExcludeDuplicates( [g1, g2,..] )
11 for all category g in [g1', g2',...]
12 H{g} = H{g} + 1
13 method Close
14 for all category g in H do
15 Emit(category g, count H{g})
应用:日志分析,用户计数
互相关
问题陈述:有多个各由若干项构成的组,计算项两两共同出现于一个组中的次数。假如项数是N,那么应该计算N*N。
这种情况常见于文本分析(条目是单词而元组是句子),市场分析(购买了此物的客户还可能购买什么)。如果N*N小到可以容纳于一台机器的内存,实现起来就比较简单了。
配对法
第一种方法是在Mapper中给所有条目配对,然后在Recer中将同一条目对的计数加和。但这种做法也有缺点:
使用 combiners 带来的的好处有限,因为很可能所有项对都是唯一的
不能有效利用内存
1 class Mapper
2 method Map(null, items [i1, i2,...] )
3 for all item i in [i1, i2,...]
4 for all item j in [i1, i2,...]
5 Emit(pair [i j], count 1)
6
7 class Recer
8 method Rece(pair [i j], counts [c1, c2,...])
9 s = sum([c1, c2,...])
10 Emit(pair[i j], count s)
Stripes Approach(条方法?不知道这个名字怎么理解)
第二种方法是将数据按照pair中的第一项来分组,并维护一个关联数组,数组中存储的是所有关联项的计数。The second approach is to group data by the first item in pair and maintain an associative array (“stripe”) where counters for all adjacent items are accumulated. Recer receives all stripes for leading item i, merges them, and emits the same result as in the Pairs approach.
中间结果的键数量相对较少,因此减少了排序消耗。
可以有效利用 combiners。
可在内存中执行,不过如果没有正确执行的话也会带来问题。
实现起来比较复杂。
一般来说, “stripes” 比 “pairs” 更快
1 class Mapper
2 method Map(null, items [i1, i2,...] )
3 for all item i in [i1, i2,...]
4 H = new AssociativeArray : item -> counter
5 for all item j in [i1, i2,...]
6 H{j} = H{j} + 1
7 Emit(item i, stripe H)
8
9 class Recer
10 method Rece(item i, stripes [H1, H2,...])
11 H = new AssociativeArray : item -> counter
12 H = merge-sum( [H1, H2,...] )
13 for all item j in H.keys()
14 Emit(pair [i j], H{j})
应用:文本分析,市场分析
参考资料:Lin J. Dyer C. Hirst G. Data Intensive Processing MapRece
用MapRece 表达关系模式
在这部分我们会讨论一下怎么使用MapRece来进行主要的关系操作。
筛选(Selection)
1 class Mapper
2 method Map(rowkey key, tuple t)
3 if t satisfies the predicate
4 Emit(tuple t, null)
投影(Projection)
投影只比筛选稍微复杂一点,在这种情况下我们可以用Recer来消除可能的重复值。
1 class Mapper
2 method Map(rowkey key, tuple t)
3 tuple g = project(t) // extract required fields to tuple g
4 Emit(tuple g, null)
5
6 class Recer
『陆』 Hadoop和sas是什么关系
都是处理数据的软件,没什么具体的关系,sas一般运用于大型项目。hadoop相对而言成本体,应用更广泛点。
Hadoop原来是Apache Lucene下的一个子项目,它最初是从Nutch项目中分离出来的专门负责分布式存储以及分布式运算的项目。简单地说来,Hadoop是一个可以更容易开发和运行处理大规模数据的软件平台。下面列举hadoop主要的一些特点: 扩容能力(Scalable) 成本低(Economical)高效率(Efficient)可靠性(Reliable)
SAS(Statistics Analysis System) 作为出色的处理大规模复杂数据的软件,目前已广泛应用于统计分析,数据处理,数据合库和商业智能领域
『柒』 在中国有谁在用Hadoop
国内,有网络(集群的规模已经是千台了吧)、淘宝(有自己的文件处理系统TFS),中国移动、搜狗、华为(是社区排名靠前的贡献者)等企业; hadoop的应用场景,给你美国着名科技博客GigaOM的专栏作家Derrick Harris的文章吧,他一直跟踪云计算和Hadoop技术,在最近的一篇文章中总结了10个Hadoop的应用场景:(1)在线旅游:你知道吗,目前全球范围内80%的在线旅游网站都是在使用Cloudera公司提供的Hadoop发行版,其中SearchBI网站曾经报道过的Expedia也在其中。 (2)移动数据:Cloudera运营总监称,美国有70%的智能手机数据服务背后都是由Hadoop来支撑的,也就是说,包括数据的存储以及无线运营商的数据处理等,都是在利用Hadoop技术。(3)电子商务:这一场景应该是非常确定的,eBay就是最大的实践者之一。国内的电商在Hadoop技术上也是储备颇为雄厚的。(4)能源开采:美国Chevron公司是全美第二大石油公司,他们的IT部门主管介绍了Chevron使用Hadoop的经验,他们利用Hadoop进行数据的收集和处理,其中这些数据是海洋的地震数据,以便于他们找到油矿的位置。(5)节能:另外一家能源服务商Opower也在使用Hadoop,为消费者提供节约电费的服务,其中对用户电费单进行了预测分析。(6)基础架构管理:这是一个非常基础的应用场景,用户可以用Hadoop从服务器、交换机以及其他的设备中收集并分析数据。(7)图像处理:创业公司Skybox Imaging 使用Hadoop来存储并处理图片数据,从卫星中拍摄的高清图像中探测地理变化。(8) 诈骗检测:这个场景用户接触的比较少,一般金融服务或者政府机构会用到。利用Hadoop来存储所有的客户交易数据,包括一些非结构化的数据,能够帮助机构发现客户的异常活动,预防欺诈行为。(9) IT安全:除企业IT基础机构的管理之外,Hadoop还可以用来处理机器生成数据以便甄别来自恶意软件或者网络中的攻击。(10)医疗保健:医疗行业也会用到Hadoop,像IBM的Watson就会使用Hadoop集群作为其服务的基础,包括语义分析等高级分析技术等。医疗机构可以利用语义分析为患者提供医护人员,并协助医生更好地为患者进行诊断。
『捌』 hadoop的maprece常见算法案例有几种
基本MapRece模式
计数与求和
问题陈述:
有许多文档,每个文档都有一些字段组成。需要计算出每个字段在所有文档中的出现次数或者这些字段的其他什么统计值。例如,给定一个log文件,其中的每条记录都包含一个响应时间,需要计算出平均响应时间。
解决方案:
让我们先从简单的例子入手。在下面的代码片段里,Mapper每遇到指定词就把频次记1,Recer一个个遍历这些词的集合然后把他们的频次加和。
1 class Mapper
2 method Map(docid id, doc d)
3 for all term t in doc d do
4 Emit(term t, count 1)
5
6 class Recer
7 method Rece(term t, counts [c1, c2,...])
8 sum = 0
9 for all count c in [c1, c2,...] do
10 sum = sum + c
11 Emit(term t, count sum)
这种方法的缺点显而易见,Mapper提交了太多无意义的计数。它完全可以通过先对每个文档中的词进行计数从而减少传递给Recer的数据量:
1 class Mapper
2 method Map(docid id, doc d)
3 H = new AssociativeArray
4 for all term t in doc d do
5 H{t} = H{t} + 1
6 for all term t in H do
7 Emit(term t, count H{t})
如果要累计计数的的不只是单个文档中的内容,还包括了一个Mapper节点处理的所有文档,那就要用到Combiner了:
1 class Mapper
2 method Map(docid id, doc d)
3 for all term t in doc d do
4 Emit(term t, count 1)
5
6 class Combiner
7 method Combine(term t, [c1, c2,...])
8 sum = 0
9 for all count c in [c1, c2,...] do
10 sum = sum + c
11 Emit(term t, count sum)
12
13 class Recer
14 method Rece(term t, counts [c1, c2,...])
15 sum = 0
16 for all count c in [c1, c2,...] do
17 sum = sum + c
18 Emit(term t, count sum)
应用:Log 分析, 数据查询
整理归类
问题陈述:
有一系列条目,每个条目都有几个属性,要把具有同一属性值的条目都保存在一个文件里,或者把条目按照属性值分组。 最典型的应用是倒排索引。
解决方案:
解决方案很简单。 在 Mapper 中以每个条目的所需属性值作为 key,其本身作为值传递给 Recer。 Recer 取得按照属性值分组的条目,然后可以处理或者保存。如果是在构建倒排索引,那么 每个条目相当于一个词而属性值就是词所在的文档ID。
应用:倒排索引, ETL
过滤 (文本查找),解析和校验
问题陈述:
假设有很多条记录,需要从其中找出满足某个条件的所有记录,或者将每条记录传换成另外一种形式(转换操作相对于各条记录独立,即对一条记录的操作与其他记录无关)。像文本解析、特定值抽取、格式转换等都属于后一种用例。
解决方案:
非常简单,在Mapper 里逐条进行操作,输出需要的值或转换后的形式。
应用:日志分析,数据查询,ETL,数据校验
分布式任务执行
问题陈述:
大型计算可以分解为多个部分分别进行然后合并各个计算的结果以获得最终结果。
解决方案: 将数据切分成多份作为每个 Mapper 的输入,每个Mapper处理一份数据,执行同样的运算,产生结果,Recer把多个Mapper的结果组合成一个。
案例研究: 数字通信系统模拟
像 WiMAX 这样的数字通信模拟软件通过系统模型来传输大量的随机数据,然后计算传输中的错误几率。 每个 Mapper 处理样本 1/N 的数据,计算出这部分数据的错误率,然后在 Recer 里计算平均错误率。
应用:工程模拟,数字分析,性能测试
排序
问题陈述:
有许多条记录,需要按照某种规则将所有记录排序或是按照顺序来处理记录。
解决方案: 简单排序很好办 – Mappers 将待排序的属性值为键,整条记录为值输出。 不过实际应用中的排序要更加巧妙一点, 这就是它之所以被称为MapRece 核心的原因(“核心”是说排序?因为证明Hadoop计算能力的实验是大数据排序?还是说Hadoop的处理过程中对key排序的环节?)。在实践中,常用组合键来实现二次排序和分组。
MapRece 最初只能够对键排序, 但是也有技术利用可以利用Hadoop 的特性来实现按值排序。想了解的话可以看这篇博客。
按照BigTable的概念,使用 MapRece来对最初数据而非中间数据排序,也即保持数据的有序状态更有好处,必须注意这一点。换句话说,在数据插入时排序一次要比在每次查询数据的时候排序更高效。
应用:ETL,数据分析
非基本 MapRece 模式
迭代消息传递 (图处理)
问题陈述:
假设一个实体网络,实体之间存在着关系。 需要按照与它比邻的其他实体的属性计算出一个状态。这个状态可以表现为它和其它节点之间的距离, 存在特定属性的邻接点的迹象, 邻域密度特征等等。
解决方案:
网络存储为系列节点的结合,每个节点包含有其所有邻接点ID的列表。按照这个概念,MapRece 迭代进行,每次迭代中每个节点都发消息给它的邻接点。邻接点根据接收到的信息更新自己的状态。当满足了某些条件的时候迭代停止,如达到了最大迭代次数(网络半径)或两次连续的迭代几乎没有状态改变。从技术上来看,Mapper 以每个邻接点的ID为键发出信息,所有的信息都会按照接受节点分组,recer 就能够重算各节点的状态然后更新那些状态改变了的节点。下面展示了这个算法:
1 class Mapper
2 method Map(id n, object N)
3 Emit(id n, object N)
4 for all id m in N.OutgoingRelations do
5 Emit(id m, message getMessage(N))
6
7 class Recer
8 method Rece(id m, [s1, s2,...])
9 M = null
10 messages = []
11 for all s in [s1, s2,...] do
12 if IsObject(s) then
13 M = s
14 else // s is a message
15 messages.add(s)
16 M.State = calculateState(messages)
17 Emit(id m, item M)
一个节点的状态可以迅速的沿着网络传全网,那些被感染了的节点又去感染它们的邻居,整个过程就像下面的图示一样:
案例研究: 沿分类树的有效性传递
问题陈述:
这个问题来自于真实的电子商务应用。将各种货物分类,这些类别可以组成一个树形结构,比较大的分类(像男人、女人、儿童)可以再分出小分类(像男裤或女装),直到不能再分为止(像男式蓝色牛仔裤)。这些不能再分的基层类别可以是有效(这个类别包含有货品)或者已无效的(没有属于这个分类的货品)。如果一个分类至少含有一个有效的子分类那么认为这个分类也是有效的。我们需要在已知一些基层分类有效的情况下找出分类树上所有有效的分类。
解决方案:
这个问题可以用上一节提到的框架来解决。我们咋下面定义了名为 getMessage和 calculateState 的方法:
1 class N
2 State in {True = 2, False = 1, null = 0},
3 initialized 1 or 2 for end-of-line categories, 0 otherwise
4 method getMessage(object N)
5 return N.State
6 method calculateState(state s, data [d1, d2,...])
7 return max( [d1, d2,...] )
案例研究:广度优先搜索
问题陈述:需要计算出一个图结构中某一个节点到其它所有节点的距离。
解决方案: Source源节点给所有邻接点发出值为0的信号,邻接点把收到的信号再转发给自己的邻接点,每转发一次就对信号值加1:
1 class N
2 State is distance,
3 initialized 0 for source node, INFINITY for all other nodes
4 method getMessage(N)
5 return N.State + 1
6 method calculateState(state s, data [d1, d2,...])
7 min( [d1, d2,...] )
案例研究:网页排名和 Mapper 端数据聚合
这个算法由Google提出,使用权威的PageRank算法,通过连接到一个网页的其他网页来计算网页的相关性。真实算法是相当复杂的,但是核心思想是权重可以传播,也即通过一个节点的各联接节点的权重的均值来计算节点自身的权重。
1 class N
2 State is PageRank
3 method getMessage(object N)
4 return N.State / N.OutgoingRelations.size()
5 method calculateState(state s, data [d1, d2,...])
6 return ( sum([d1, d2,...]) )
要指出的是上面用一个数值来作为评分实际上是一种简化,在实际情况下,我们需要在Mapper端来进行聚合计算得出这个值。下面的代码片段展示了这个改变后的逻辑 (针对于 PageRank 算法):
1 class Mapper
2 method Initialize
3 H = new AssociativeArray
4 method Map(id n, object N)
5 p = N.PageRank / N.OutgoingRelations.size()
6 Emit(id n, object N)
7 for all id m in N.OutgoingRelations do
8 H{m} = H{m} + p
9 method Close
10 for all id n in H do
11 Emit(id n, value H{n})
12
13 class Recer
14 method Rece(id m, [s1, s2,...])
15 M = null
16 p = 0
17 for all s in [s1, s2,...] do
18 if IsObject(s) then
19 M = s
20 else
21 p = p + s
22 M.PageRank = p
23 Emit(id m, item M)
应用:图分析,网页索引
值去重 (对唯一项计数)
问题陈述: 记录包含值域F和值域 G,要分别统计相同G值的记录中不同的F值的数目 (相当于按照 G分组).
这个问题可以推而广之应用于分面搜索(某些电子商务网站称之为Narrow Search)
Record 1: F=1, G={a, b}
Record 2: F=2, G={a, d, e}
Record 3: F=1, G={b}
Record 4: F=3, G={a, b}
Result:
a -> 3 // F=1, F=2, F=3
b -> 2 // F=1, F=3
d -> 1 // F=2
e -> 1 // F=2
解决方案 I:
第一种方法是分两个阶段来解决这个问题。第一阶段在Mapper中使用F和G组成一个复合值对,然后在Recer中输出每个值对,目的是为了保证F值的唯一性。在第二阶段,再将值对按照G值来分组计算每组中的条目数。
第一阶段:
1 class Mapper
2 method Map(null, record [value f, categories [g1, g2,...]])
3 for all category g in [g1, g2,...]
4 Emit(record [g, f], count 1)
5
6 class Recer
7 method Rece(record [g, f], counts [n1, n2, ...])
8 Emit(record [g, f], null )
第二阶段:
1 class Mapper
2 method Map(record [f, g], null)
3 Emit(value g, count 1)
4
5 class Recer
6 method Rece(value g, counts [n1, n2,...])
7 Emit(value g, sum( [n1, n2,...] ) )
解决方案 II:
第二种方法只需要一次MapRece 即可实现,但扩展性不强。算法很简单-Mapper 输出值和分类,在Recer里为每个值对应的分类去重然后给每个所属的分类计数加1,最后再在Recer结束后将所有计数加和。这种方法适用于只有有限个分类,而且拥有相同F值的记录不是很多的情况。例如网络日志处理和用户分类,用户的总数很多,但是每个用户的事件是有限的,以此分类得到的类别也是有限的。值得一提的是在这种模式下可以在数据传输到Recer之前使用Combiner来去除分类的重复值。
1 class Mapper
2 method Map(null, record [value f, categories [g1, g2,...] )
3 for all category g in [g1, g2,...]
4 Emit(value f, category g)
5
6 class Recer
7 method Initialize
8 H = new AssociativeArray : category -> count
9 method Rece(value f, categories [g1, g2,...])
10 [g1', g2',..] = ExcludeDuplicates( [g1, g2,..] )
11 for all category g in [g1', g2',...]
12 H{g} = H{g} + 1
13 method Close
14 for all category g in H do
15 Emit(category g, count H{g})
应用:日志分析,用户计数
互相关
问题陈述:有多个各由若干项构成的组,计算项两两共同出现于一个组中的次数。假如项数是N,那么应该计算N*N。
这种情况常见于文本分析(条目是单词而元组是句子),市场分析(购买了此物的客户还可能购买什么)。如果N*N小到可以容纳于一台机器的内存,实现起来就比较简单了。
配对法
第一种方法是在Mapper中给所有条目配对,然后在Recer中将同一条目对的计数加和。但这种做法也有缺点:
使用 combiners 带来的的好处有限,因为很可能所有项对都是唯一的
不能有效利用内存
1 class Mapper
2 method Map(null, items [i1, i2,...] )
3 for all item i in [i1, i2,...]
4 for all item j in [i1, i2,...]
5 Emit(pair [i j], count 1)
6
7 class Recer
8 method Rece(pair [i j], counts [c1, c2,...])
9 s = sum([c1, c2,...])
10 Emit(pair[i j], count s)
Stripes Approach(条方法?不知道这个名字怎么理解)
第二种方法是将数据按照pair中的第一项来分组,并维护一个关联数组,数组中存储的是所有关联项的计数。The second approach is to group data by the first item in pair and maintain an associative array (“stripe”) where counters for all adjacent items are accumulated. Recer receives all stripes for leading item i, merges them, and emits the same result as in the Pairs approach.
中间结果的键数量相对较少,因此减少了排序消耗。
可以有效利用 combiners。
可在内存中执行,不过如果没有正确执行的话也会带来问题。
实现起来比较复杂。
一般来说, “stripes” 比 “pairs” 更快
1 class Mapper
2 method Map(null, items [i1, i2,...] )
3 for all item i in [i1, i2,...]
4 H = new AssociativeArray : item -> counter
5 for all item j in [i1, i2,...]
6 H{j} = H{j} + 1
7 Emit(item i, stripe H)
8
9 class Recer
10 method Rece(item i, stripes [H1, H2,...])
11 H = new AssociativeArray : item -> counter
12 H = merge-sum( [H1, H2,...] )
13 for all item j in H.keys()
14 Emit(pair [i j], H{j})
应用:文本分析,市场分析
参考资料:Lin J. Dyer C. Hirst G. Data Intensive Processing MapRece
用MapRece 表达关系模式
在这部分我们会讨论一下怎么使用MapRece来进行主要的关系操作。
筛选(Selection)
1 class Mapper
2 method Map(rowkey key, tuple t)
3 if t satisfies the predicate
4 Emit(tuple t, null)
投影(Projection)
投影只比筛选稍微复杂一点,在这种情况下我们可以用Recer来消除可能的重复值。
1 class Mapper
2 method Map(rowkey key, tuple t)
3 tuple g = project(t) // extract required fields to tuple g
4 Emit(tuple g, null)
5
6 class Recer
『玖』 如何采集电子商务网站的用户行为的信息
很多方式 比如用cookiees\检索记录\统计代码\
最简单的就是用统计代码了 比如cnzz 量子恒道的
只要在网页插入js代码 就可以记录下用户访问的url 逗留时间 从而分析出用户的关注点
『拾』 什么是大数据时代
世界包含的多得难以想象的数字化信息变得更多更快……从商业到科学,从政府到艺术,这种影响无处不在。科学家和计算机工程师们给这种现象创造了一个新名词:“大数据”。大数据时代什么意思?大数据概念什么意思?大数据分析什么意思?所谓大数据,那到底什么是大数据,他的来源在哪里,定义究竟是什么呢?
七:最后北京开运联合给您总结一下
不管大数据的核心价值是不是预测,但是基于大数据形成决策的模式已经为不少的企业带来了盈利和声誉。
1、从大数据的价值链条来分析,存在三种模式:
1)手握大数据,但是没有利用好;比较典型的是金融机构,电信行业,政府机构等。
2)没有数据,但是知道如何帮助有数据的人利用它;比较典型的是IT咨询和服务企业,比如,埃森哲,IBM,Oracle等。
3)既有数据,又有大数据思维;比较典型的是Google,Amazon,Mastercard等。
2、未来在大数据领域最具有价值的是两种事物:
1)拥有大数据思维的人,这种人可以将大数据的潜在价值转化为实际利益;
2)还未有被大数据触及过的业务领域。这些是还未被挖掘的油井,金矿,是所谓的蓝海。
大数据是信息技术与专业技术、信息技术产业与各行业领域紧密融合的典型领域,有着旺盛的应用需求、广阔的应用前景。为把握这一新兴领域带来的新机遇,需要不断跟踪研究大数据,不断提升对大数据的认知和理解,坚持技术创新与应用创新的协同共进,加快经济社会各领域的大数据开发与利用,推动国家、行业、企业对于数据的应用需求和应用水平进入新的阶段。