内存计算 并行计算 搜狗云计算太占内存这三者关系是什么?有大神可以解答一下吗?

贵阳大数据是什么?Hadoop是什么?云计算是什么?
大数据和云计算是何关系?关于大数据和云计算的关系人们通常会有误解。而且也会把它们混起来说,分别做一句话直白解释就是:云计算就是硬件资源的虚拟化;大数据就是海量数据的高效处理。大数据、hadoop及云计算之间到底是什么关系呢?科多大数据为你解答
大数据开发入门课程:hadoop大数据与hadoop云计算,Hadoop最擅长的事情就是可以高效地处理海量规模的数据,这样Hadoop就和大数据及云计算结下了不解之缘。先介绍与大数据相关的内容,然后讲解Hadoop、大数据以及云计算之间的关系,使读者从大数据和云计算的角度来认识Hadoop。
正是由于大数据对系统提出了很多极限的要求,不论是存储、传输还是计算,现有计算技术难以满足大数据的需求,因此整个IT架构的革命性重构势在必行,存储能力的增长远远赶不上数据的增长,设计最合理的分层存储架构已成为信息系统的关键。分布式存储架构不仅需要scale up式的可扩展性,也需要scale out式的可扩展性,因此大数据处理离不开云计算技术,云计算可为大数据提供弹性可扩展的基础设施支撑环境以及数据服务的高效模式,大数据则为云计算提供了新的商业价值,大数据技术与云计算技术必将有更完美的结合。
我们知道云计算的关键技术包括分布式并行计算、分布式存储以及分布式数据管理技术,而Hadoop就是一个实现了Google云计算系统的开源平台,包括并行计算模型MapReduce、分布式文件系统HDFS,以及分布式数据库Hbase,同时Hadoop的相关项目也很丰富,包括ZooKeeper、Pig、Chukwa、Hive、hbase、Mahout等,这些项目都使得Hadoop成为一个很大很完备的生态链系统。目前使用Hadoop技术实现的云计算平台包括IBM的蓝云,雅虎、英特尔的“云计划”,百度的云计算基础架构,阿里巴巴云计算平台,以及中国移动的BigCloud大云平台。
总而言之,用一句话概括就是云计算因大数据问题而生,大数据驱动了云计算的发展,而Hadoop在大数据和云计算之间建起了一座坚实可靠的桥梁。东时Java大数据培训培养能够满足企业要求的以java web开发技术为主要能力的工程师。完成学习后的工程师应当胜任java web开发工程师、大数据开发工程师等职位。
现在还不清楚自己是否适合学习大数据的小伙伴们可以点击以下链接或者扫描二维码测试一下哦~
/cand/index?paperId=IPBAKU
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点网格计算和云计算之间的比较
你好,游客
网格计算和云计算之间的比较
来源:数字企业化&
  随着网络技术的不断的发展和深入,网络信息越来越多,数据海量的进行挖挖取,而随之而来的就是新概念和新技术的诞生,目前有两种网络的计算方法最受人们关注,那就是和网格计算,因为他们在人们日常的生活当中所占的应用比例越来越大。那么网格计算和云计算之间到底谁更有优势呢?各自的特点是哪些?这个问题引来大家的的关注和讨论。
  对这两种技术的概念进行了简要说明,并对其异同之处进行了分析对比。
  1 、网格计算
  网格计算是利用互联网地理位置相对分散的计算机组成一个&虚拟的超级计算机&,其中每一台参与计算的计算机就是一个&节点&,而整个计算是由数以万计个&节点&组成的&一张网格&,网格计算是专门针对复杂科学计算的计算模式。网格计算模式的数据处理能力超强,使用分布式计算,而且充分利用了网络上闲置的处理能力,网格计算模式把要计算的数据分割成若干&小片&,而计算这些&小片&的软件通常是预先编制好的程序,不同节点的计算机根据自己的处理能力下载一个或多个数据片断进行计算。
  2 、云计算
  云计算是一种借助互联网提供按需的、面向海量数据处理和完成复杂计算的平台。云计算是网格计算、并行计算、分布式计算、网络存储、、负载均衡等计算机技术和网络技术发展融合的产物。其基本原理是用户端仅负责数据输入和读取,复杂的数据处理工作交给中的&云&来处理,&云&是由数以万计的各种各样的计算机、服务器和数据存储系统共同组成。云计算具有以下特点:
  ①按需采用&即用即付费&的方式分配计算、存储和带宽资源。客户可以根据自己的需要、随时随地自动获取计算能力,云系统对服务(存储、处理能力、带宽、活动用户)进行适当的抽象,并提供服务计量能力,自动控制和优化资源使用情况。
  ②云计算描述了一种可以通过互联网进行访问的可扩展和动态重构的模式。它使用多租户模式可以提供各种各样的服务,根据客户的需求动态提供物理或虚拟化的资源(存储、处理能力、内存、网络带宽和虚拟机)。从而在一定程度上实现了网络上数据与应用的共享。
  ③虚拟化,用户在任意位置使用多种不同的终端都可以获取所需要的应用服务,所请求的资源来自&云&,而不是固定的、有形的实体。
  ④高可靠性。&云&使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性,云计算与本地计算相比,可靠性更高。
  3 、网格计算和云计算的比较
  云计算是从网格计算发展演化而来的,网格计算为云计算提供了基本的框架支持。网格计算关注于提供计算能力和存储能力,而云计算侧重于在此基础上提供抽象的资源和服务,两者具有如下相同点:
  ①都具有超强的数据处理能力:都能够通过互联网将本地计算机上的计算转移到网络计算机上。以此来获得数据或者计算能力。
  ②都构建自己的虚拟资源池而且资源及使用都是动态可伸缩的:服务可以快速方便地获得,某种情况下是自动化的。都可通过增加新的节点或者分配新的计算资源来解决计算量的增加。根据需要分配和回收CPU和网络带宽。根据特定时间的用户数量、实例的数量和传输的数据量调整系统存储能力。
  ③两种计算类型都涉及到多承租和多任务,即很多用户可以执行不同的任务,访问一个或多个应用程序实例。
  可以看出云计算和网格计算有着很多相同点,但它们的区别也是明显的,其不同点如下:
  ①网格计算重在资源共享,强调转移工作量到远程的可用计算资源上。云计算则强调专有,任何人都可以获取自己的专有资源。网格计算侧重并行的集中性计算需求,并且难以自动扩展。云计算侧重事务性应用,大量的单独请求,可以实现自动或半自动的扩展。
  ②网格构建是尽可能地聚合网络上的各种分布资源,来支持挑战性的应用或者完成某一个特定的任务需要。它使用网格软件,将庞大的项目分解为相互独立的、不太相关的若干子任务,然后交由各个计算节点进行计算。云计算一般来说都是为了通用应用而设计的,云计算的资源相对集中,以Internet的形式提供底层资源的获得和使用。
  ③对待异构理念不同。网格计算屏蔽异构系统使用了中间件,力图使用户面向同样的环境,把困难留在中间件,让中间件完成任务。实现跨组织、跨信任域、跨平台的复杂异构环境中的资源共享和协同解决问题。而云计算,是不同的服务采用不同的方法对待异构型,一般用镜像执行,或者提供服务的机制来解决异构性的问题。
  4、 结束语
  云计算是并行计算、分布式计算、网格计算的发展,能够提供自定义的、可靠的、最大化资源利用的服务,是一种崭新的分布式计算模式。网格计算是利用互联网上计算机闲置的计算资源进行计算,而云计算是利用互联网中的计算系统,支持互联网上多种应用的系统。网格计算作为一种面向特殊应用的解决方案将会在某些领域继续存在,而云计算作为一场IT变革,则会对整个lT产业和人类社会产生深刻的影响。
相关新闻 & & &
& (09/28/:50)
& (03/17/:25)
& (03/10/:22)
& (07/06/:09)
& (03/14/:00)
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款并行计算简介(1) - 简书
并行计算简介(1)
研一上学期上了多核软件设计,以及算法设计与分析的并行算法部分,其中算法的课程大作业是要使用MPI,openmp以及pthread实现大型稀疏矩阵的求解算法。下学期上了分布式与并行计算,主要了解了分布式计算的内容,学了MapReduce,Hadoop,Spark以及了解了虚拟化等相关技术,动手搭建了Hadoop集群,OpenStack云平台,算是对云计算有了初步的了解。
当前利用并行技术开发软件是一个趋势,无论是在移动的APP,桌面应用,还是在云服务应用领域,并行计算越来越得到开发者的关注。下面总结一下并行计算,也算是对这一段时间学习的总结,以下内容是作者学习中的总结,如果有错误请在评论区指出。
什么是并行计算
并行计算是相对于串行计算而言,比如一个矩阵相乘的例子,下面给出串行程序的代码
void matrixMultiplication(int a[][SIZE], int b[][SIZE])
int i,j,k;
for(i = 0; i & c_ i++)
for(j = 0; j & c_ j++)
for(k = 0; k & a_ k++)
c[i][j] += a[i][k] * b[k][j];
在上面的程序中,程序编译运行之后以一个进程(注意区分进程和线程这两个概念)的方式是按照for循环迭代顺序执行。那怎么并行矩阵相乘的代码呢?这里需要使用高级语言级别的并行库,常见的并行库有opemp,pthread,MPI,CUDA等,这些并行库一般都支持C/C++,程序员可以直接调用并行库的函数而不需要实现底层的CPU多核调用。下面给出opemmp版本的矩阵相乘程序。
void matrixMultiplication(int a[][SIZE], int b[][SIZE])
int i,j,k;
#pragma omp parallel shared(a,b,c) private(i,j,k)
#pragma omp for schedule(dynamic)
for(i = 0; i & c_ i++)
for(j = 0; j & c_ j++)
for(k = 0; k & a_ k++)
c[i][j] += a[i][k] * b[k][j];
在没有改动原本代码的基础上实现了矩阵相乘的并行化,实现的办法仅仅是添加了两条openmp编译制导语句,在程序运行到并行代码时,程序的主线程会启动多线程把任务分成n份(n=CPU核心数),然后在多核心上同时计算,最后主线程得到结果。当然除了多线程,程序也可以启动多进程进行并行计算,关于多进程,Linux下的fork()想必很多人都有了解,而mpich是目前很流行的多进程消息传递库。并行化看起来很简单不是么,但是,要设计高效能解决复杂问题的并行程序可不那么容易。
上面提到了多核,这里聊聊多核吧。
多核,就是多核处理器,我们知道,目前的计算机的CPU一般是双核的,有的甚至更多,下图是我的电脑的处理器
我的电脑是8个核心的,其实并行计算就是利用CPU的多核处理器的特点,把之前在单核心上串行的代码并行化,从而缩短得到计算结果的时间。比如上文中提及的矩阵相乘的并行程序,就是把计算任务平分到每个处理器,然后把结果返回,这样相比串行执行时间上要高效。那怎么判断并行程序的效率呢?那就是加速比了,下文会介绍加速比。
关于多核,需要介绍摩尔定律(Moore’s Law)
摩尔定律由英特尔联合创始人之一的Gordon Moore于1965提出,摩尔定律的内容为:
The number of transistors per square inch on integrated circuits had doubledevery year since the integrated circuit was invented.
其中文意思为
当价格不变时,集成电路上每平方英寸可容纳的晶体管的数目,约每隔一年便会增加一倍,性能也将提升一倍。
这意味着没有摩尔定律,就没有如今廉价的处理器。而随着集成电路上的晶体管数据量越来越多,功耗的增加以及过热问题,使得在集成电路上增加更多的晶体管变得更加困难,摩尔定律所预言的指数增长必定放缓。因此,摩尔定律失效。
当前和未来五年,微处理器技术朝着多核方向发展,充分利用摩尔定律带来的芯片面积,放置多个微处理器内核,以及采用更加先进的技术降低功耗。
当然,多核并行计算不仅仅可以使用CPU,而且还可以使用GPU(图形处理器),一个GPU有多大上千个核心,可以同时运行上千个线程。那怎么利用GPU做并行计算呢?可以使用英伟达的CUDA库,不过前提是计算机安装了英伟达的显卡。
并行计算的分类
虽然并行计算可分为时间上的并行和空间上的并行, 时间上的并行是指流水线技术,而空间上的并行则是指多核心并发的执行计算。但是目前并行计算主要研究空间上的并行问题。
按照Flynn分类(1966年)的标准,根据指令流和数据流的多倍性(机器瓶颈部件所能支持最多指令条数或数据个数)可以分成以下几类
单指令流单数据流机SISD,即传统的单处理机
单指令流多数据流机SIMD
多指令流单数据流机MISD
多指令流多数据流机MIMD
下图是并行计算四种分类的计算机体系结构
并行计算的分类
既然有了并行计算,那少不了并行计算机,大家比较熟悉的并行计算机应该是天河一号,天河二号以及最近大家熟知的神威·太湖之光超级计算机。超级计算机涉及CPU,内存,存储,缓存,通信,I/O,网络,制冷等多个领域的知识,由于本文主要介绍并行计算,因此超级计算机的内容不在本文中详述。
并行程序的评价指标
评价并行计算程序效率,不单单从并行程序的执行时间来考虑,而是从与串行程序的对比来去评价。最常用的指标是加速比(speedup)
加速比=串行执行时间/并行执行时间
效率=加速比/处理器个数
成本=并行执行时间×所用处理器的数目
举个例子:用N个处理器计算N个数的和(N为2的整数次幂)
串行计算需要O(N)的时间
并行方法:每个处理器获得一个数,两个处理器之一将其叠加,递归上述步骤。需要O(logN)的时间
加速比S = O(N/logN)
成本C = O(N*logN)
并行计算模型
并行计算模型是并行算法设计与分析的模型,不涉及并行算法实现的程序设计模型和并行算法执行的程序执行模型,如PRAM模型(SIMD模型)。
并行程序设计模型侧重于并行算法如何使用某种程序设计语言正确地编程实现,如MPI,OpenMP,pthread。
并行程序执行模型侧重于并行算法如何在具体的并行机上运行并优化性能,如指令级并行程序执行模型ILPPEM
并行计算模型是算法设计者与体系结构之间的桥梁,并行计算模型屏蔽不同并行机的具体差异,只抽取若干能反映计算特性模型参数,按照模型所定义的计算行为构造成本函数,以此分析时空复杂度。机器参数(如CPU性能参数、存储器参数、通信网络参数)、计算行为(同步或异步)和成本函数(机器参数构成自变量)构成并行计算模型的三要素
写着写着,好像越写越底层了,下面说说并行计算与大数据吧。
并行计算与大数据
大数据不仅给我们带来了大量的数据,而且还带来了计算和查询的麻烦。在数据挖掘领域,对大数据集进行logistic回归,如果不使用并行计算,可能需要好几个月,如果使用分布式的计算平台,计算结果可能只需要几个小时。而在深度学习,人工智能,科学计算领域同样也需要使用并行计算,并行计算缩短了得到结果的时间。
在大数据环境下的并行计算,Hadoop MapReduce和Spark大家一定不会陌生,Hadoop MapReduce把任务分成Map和Reduce两个部分,把大型任务切分成子任务,而Spark提供一种新的存储方式——resilient distributed datasets (RDDs),弹性分布式数据集。RDD是一个容错的、并行的数据结构。RDD只读,可分区,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用。所谓弹性,是指在内存不够时可以与磁盘进行交互。这涉及到RDD的另一个特性:内存计算,就是将数据集存到内存中。同时为了解决内存容量限制的问题,Spark为我们提供了最大的自由度,将所有数据均可以由用户进行cache的设置。RDD还提供了一组丰富的操作来操作这些数据,如map、flatMap、filter、reduce、reduceBy、groupBy等。
下面以一个统计网页中词频的方式来介绍Hadoop MapReduce和Spark,数据存储在MongoDB中,下面是数据的样例。
{ "doc" : "good good day", "url" : "url_1" }
{ "doc" : "hello world good world", "url" : "url_2" }
Hadoop MapReduce
下面给出Map和Reduce的代码
public void map(Object key, BSONObject value, Context context)
throws IOException, InterruptedException {
ArrayList&String& tags = (ArrayList&String&) value.get("tag");
for (int i = 0; i & tags.size(); i++) {
tagSet.add(tags.get(i));
String url = value.get("url").toString();
String doc = value.get("summary").toString().replaceAll("\\p{Punct}|\\d", "")
.replaceAll("\r\n", " ").replace("\r", " ").replace("\n", " ").toLowerCase();
StringTokenizer itr = new StringTokenizer(doc);
HashMap&String, Integer& word_count = new HashMap&String, Integer&();
while (itr.hasMoreTokens()) {
String kk = itr.nextToken();
if (tagSet.contains(kk)) {
if (word_count.containsKey(kk)) {
word_count.put(kk, word_count.get(kk)+1);
word_count.put(kk, 1);
// get word and counts (url, counts)
for (Map.Entry&String, Integer& entry : word_count.entrySet())
BasicBSONObject counts = new BasicBSONObject();
counts.put(url, entry.getValue());
Text myword = new Text(entry.getKey());
context.write(myword, new BSONWritable(counts));
public void reduce(Text key, Iterable&BSONWritable& values, Context context)
throws IOException, InterruptedException {
HashMap&String, Integer& mymap = new HashMap&String, Integer&();
BasicBSONObject result = new BasicBSONObject();
for (BSONWritable val : values) {
@SuppressWarnings("unchecked")
HashMap&String, Integer& temp = (HashMap&String, Integer&) val.getDoc().toMap();
for (Map.Entry&String, Integer& entry : temp.entrySet()) {
mymap.put(entry.getKey(), entry.getValue());
result.putAll(mymap);
context.write(new Text(key.toString()), new BSONWritable(result));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
System.out.println(" \n\n ERROR HERE BulkWriteException \n\n");
写Hadoop MapReduce程序必须重新写map和reduce类,在程序员自定义的map和reduce类添加计算逻辑。但是Spark却没有这种限制。
Spark代码主要是对RDD进行操作,下面给出代码
# 定义统计单词和词频的函数
def f(record):
table = string.maketrans("", "")
raw_summary = record[1]['summary']
temp = raw_summary.encode("utf-8").translate(table, string.punctuation)
temp_str = re.sub("[+——!,。?、~@#¥%……&*()]+".decode("utf8"),
"".decode("utf8"), temp).replace("\r\n", " ").replace("\n", " ")
summary = re.sub(r'([\d]+)', ' ', temp_str).lower()
url = record[1]['url']
_temp = dict(collections.Counter(summary.split()))
result = [(key,{url:value}) for key,value in _temp.items()]
return result
# reduce操作函数
def reduce_values(record):
result = {}
for element in record[1]:
key, value = element.items()[0]
result[key] = result.get(key, 0) + value
return [(record[0], result)]
# 从MongoDB中读取数据
rdd = sc.mongoPairRDD(
"mongodb://localhost/testmr.test_in")
newrdd = rdd.flatMap(f) # map
sortrdd = newrdd.sortByKey() # sort
resultrdd = sortrdd.groupByKey()
.flatMap(reduce_values) # reduce
resultrdd.saveToMongoDB('
mongodb://localhost:27017/testmr.test_out')
在Spark中,虽然有map和reduce这两个RDD的操作接口,但却不是和Hadoop的MapReduce一一对应。在Spark中,可以通过两个RDD的flatMap操作来实现Hadoop MapReduce。
Spark的速度比Hadoop更快。最后Hadoop Reduce和Spark的结果(以下是样例的结果)为
& db.stackout.find().limit(4)
{ "_id" : "world", "data" : [
"url_2" : 2 },
"url_3" : 1 },
"url_4" : 1 } ] }
{ "_id" : "good",
"data" : [
"url_1" : 2 },
"url_2" : 1 },
"url_3" : 2 } ] }
{ "_id" : "day",
"data" : [
"url_1" : 1 } ] }
{ "_id" : "hello",
"data" : [
"url_2" : 1 },
"url_3" : 2 },
"url_4" : 2 } ] }
延伸阅读和推荐书籍
要进一步了解并行计算及并行程序的开发,大家除了需要具备基本的编程能力之外,还需要了解计算机体系结构及操作系统,特别是CPU,cache,内存,多进程,多线程,堆,栈等概念。就比如cache优化的问题吧,如果在实现矩阵相乘并行化程序时考虑cache优化的问题,那么运行的时间又会缩短,加速比又会提高。另外还需要使用一些常用的并行计算的库,不过这些库几乎都比较容易上手使用。不过我觉得在开发并行程序时最重要的是并行算法的设计——把串行问题并行化,虽然矩阵相乘的问题很容易并行化,但是现实世界中的很多计算问题都很复杂,如何将串行问题并行化这也考验着一个开发者的算法基础和数学能力。
下面给出课堂上老师推荐的书,我目前在看《Hadoop 权威指南》。其实还有一本叫做《深入理解计算机系统》的书没有列出,推荐给有经验的程序员阅读。
Distributed and Cloud Computing
计算机体系结构
virtual machines
并行程序设计导论
Hadoop权威指南
并行计算其实是一个很大的概念,今天只是蜻蜓点水,接下来还要好好写文章总结并行计算领域的技术知识。
&No one can make you feel inferior without your consent.&-- Eleanor Roosevelt(今天不画图)
(我主沉浮)
(风和日丽踏春去)
(活动家小明)
第三方登录:

我要回帖

更多关于 搜狗云计算太占内存 的文章

 

随机推荐