当前位置:首页>开发>正文

MapReduce和Hadoop的理解 hadoop和spark是什么关系啊

2023-04-18 15:21:39 互联网 未知 开发

 MapReduce和Hadoop的理解 hadoop和spark是什么关系啊

MapReduce和Hadoop的理解

hadoop是一种分布式系统的平台,通过它可以很轻松的搭建一个高效、高质量的分布系统,而且它还有许多其它的相关子项目,也就是对它的功能的极大扩充,包括Zookeeper,Hive,Hbase等。
MapReduce是hadoop的核心组件之一,hadoop要分布式包括两部分,一是分布式文件系统hdfs,一部是分布式计算框mapreduce,也就是说,可以通过mapreduce很容易在hadoop平台上进行分布式的计算编程。

hadoop和spark是什么关系啊?

Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。
优势应该在于分布式架构比较相似能快速上手吧

Hadoop,MapReduce,YARN和Spark的区别与联系

mapreduce应该是指MapReduce吧,是一种编程模式,用于大规模数据的并行计算。
Spark作为名词是火花的意思,作为动词是产生,触发,发出火星,强烈赞同,正常运转的意思
Yarn做为名词是纱线,故事的意思,作为动词是讲故事的意思。
因此,这三者之间没有任何联系啊,所有的意思都是区别。

云计算,分布式,Map-reduce,hadoop是个什么样的关系

首先你需要了解这些名词的概念。
分布式计算是云计算的一种,而hadoop正是一种分布式的并行计算。
就是可以把任务放在多个机器上进行并行的运行任务。
hadoop是基于建立在多个计算集群组上的,而Mapreduce是hadoop中提供的实现方法,map和reduce函数实现拆分和整合。
不知道你要做的是数据挖掘方面的还是数据仓库方面的工作,大数据的应用是因为hadoop可以处理海量的数据。hadoop是利用HDFS存储海量数据,mapreduce进行海量数据的计算。
SOA就是面对客户的要求来解决问题。

Hadoop中mapred包和mapreduce包的区别

今天写了段代码突然发现,很多类在mapred和mapreduce中分别都有定义,下面是小菜写的一段代码:
public class MyJob extends Configured implements Tool
{

public static class MapClass extends MapReduceBase implements Mapper
{//
public void map(Text key, Text value, OutputCollector output, Reporter reporter) throws IOException
{
output.collect(value, key)
}

}

public static class Reduce extends MapReduceBase implements Reducer
{

@Override
public void reduce(Text key, Iterator values, OutputCollector output, Reporter reporter) throws IOException
{
String csv = ""
while (values.hasNext())
{
csv = csv.length() > 0 ? "," : ""
csv = values.next().toString()
}
output.collect(key, new Text(csv))
}

}

@Override
public int run(String[] args) throws Exception
{
Configuration conf = getConf()

JobConf job = new JobConf(conf, MyJob.class) //JobConf job = new JobConf(conf, MyJob.class)

Path in = new Path(args[0])
Path out = new Path(args[1])
FileInputFormat.setInputPaths(job, in)
FileOutputFormat.setOutputPath(job, out)

job.setJobName("MyJob")
job.setMapperClass(MapClass.class)
job.setReducerClass(Reduce.class)

job.setInputFormat(KeyValueTextInputFormat.class)
job.setOutputFormat(TextOutputFormat.class)
job.setOutputKeyClass(Text.class)
job.setOutputValueClass(Text.class)
job.set("key.value.separator.in.input.line", ",")

JobClient.runJob(job)

return 0
}

public static void main(String[] args) throws Exception
{
// TODO Auto-generated method stub
int res = ToolRunner.run(new Configuration(), new MyJob(), args)
System.exit(res)
}
}

主要看run方法:

上面代码中的Jobconf无可厚非,只有在mapred包中有定义,这个没问题。
但是FileInputFormat和FileOutputFormat在mapred和mapreduce中都有定义,刚开始脑海里对这些都没有概念,就引用了mapreduce中的FileInputFormat和FIleOutputFormat。
这样操作就带来了后面的问题
FileInputFormat.setInputPaths(job, in)
FileOutputFormat.setOutputPath(job, out)

这两条语句不能通过编译,为什么呢,因为FileInputFormat.setInputPaths和FileOutputFormat.setOutputPath的第一个参数都是Job,而不是JobConf,找了很多资料,由于对Hadoop了解少,所以找资料没有方向感,这也是学习新东西效率低下的原因,如果有哪位大牛,知道怎么克服效率低下的问题,请不吝赐教!
后来,无意中,看到mapred包中也有这两个类的定义,于是火箭速度修改为mapred下的包,OK,顺利通过编译!
下面还有 job.setOutputFormat(TextOutputFormat.class)语句编译不同通过,提示参数需要扩展。。。的参数;于是小菜也去mapred下面查找是否存在此类,正如期望,也存在此类,当即立段,修改为此包下的类,顺利编译通过,此时,颇有成就感!

可是现在小菜发现,mapred包下和mapreduce包下同时都存在又相应的类,不知道是为什么,那么下面就有目标的请教搜索引擎啦,呵呵,比刚才有很大进步。
结果令小菜很失望,就找到了一个符合理想的帖子。但是通过这个帖子,小菜知道了,mapred代表的是hadoop旧API,而mapreduce代表的是hadoop新的API。
OK,小菜在google输入框中输入“hadoop新旧API的区别”,结果很多。看了之后,又结合权威指南归结如下:
1. 首先第一条,也是小菜今天碰到这些问题的原因,新旧API不兼容。所以,以前用旧API写的hadoop程序,如果旧API不可用之后需要重写,也就是上面我的程序需要重写,如果旧API不能用的话,如果真不能用,这个有点儿小遗憾!
2. 新的API倾向于使用抽象类,而不是接口,使用抽象类更容易扩展。例如,我们可以向一个抽象类中添加一个方法(用默认的实现)而不用修改类之前的实现方法。因此,在新的API中,Mapper和Reducer是抽象类。
3. 新的API广泛使用context object(上下文对象),并允许用户代码与MapReduce系统进行通信。例如,在新的API中,MapContext基本上充当着JobConf的OutputCollector和Reporter的角色。
4. 新的API同时支持"推"和"拉"式的迭代。在这两个新老API中,键/值记录对被推mapper中,但除此之外,新的API允许把记录从map()方法中拉出,这也适用于reducer。分批处理记录是应用"拉"式的一个例子。
5. 新的API统一了配置。旧的API有一个特殊的JobConf对象用于作业配置,这是一个对于Hadoop通常的Configuration对象的扩展。在新的API中,这种区别没有了,所以作业配置通过Configuration来完成。作业控制的执行由Job类来负责,而不是JobClient,并且JobConf和JobClient在新的API中已经荡然无存。这就是上面提到的,为什么只有在mapred中才有Jobconf的原因。
6. 输出文件的命名也略有不同,map的输出命名为part-m-nnnnn,而reduce的输出命名为part-r-nnnnn,这里nnnnn指的是从0开始的部分编号。

这样了解了二者的区别就可以通过程序的引用包来判别新旧API编写的程序了。小菜建议最好用新的API编写hadoop程序,以防旧的API被抛弃!!!

MPP 与 Hadoop是什么关系

先从NUMA说起吧,NUMA全称为Non-Uniform Memory Access,是主流服务服务器为了提高SMP的可扩展性而采用的一种体系结构。主流服务器一般由多个NUMA节点组成,每个NUMA节点是一个SMP结构,一般由多个CPU组成,并且具有本地内存和IO设备。NUMA节点可以直接访问本地内存,也可以通过NUMA互联模块访问其他NUMA节点的内存,但是访问本地内存的速度远远高于远程访问速度,因此,开发程序要尽量减少不同NUMA节点之间的信息交互。
MPP是一种海量数据实时分析架构。MPP作为一种不共享架构,每个节点运行自己的操作系统和数据库等,节点之间信息交互只能通过网络连接实现。MPP架构目前被并行数据库广泛采用,一般通过scan、sort和merge等操作符实时返回查询结果。目前采用MPP架构的实时查询系统有EMC Greenplum、HP Vertica和Google Dremel,这些都是实时数据处理领域非常有特点的系统,尤其是Dremel可以轻松扩展到上千台服务器,并在数秒内完成TB级数据的分析。
Hadoop作为一个开源项目群本身和MPP并没有什么直接关系,Hadoop中的子项目MapReduce虽然也是做数据分析处理的,但是一般只适用于离线数据分析,区别与MPP较为明显。因为Map和Reduce两个过程涉及到输出文件的存取和大量网络传输,因此往往达不到实时处理的要求。与MapReduce相似的系统还有Microsoft Dryad和Google pregel。
综上所述,NUMA是一种体系结构,MPP是一种实时海量数据分析架构,而Hadoop是一个关于数据存储处理的项目群,其中的MapReduce是一种离线海量数据分析架构。