1、Hadoop是什么?


Hadoop是一个由Apache基金会所开发的分布式系统基础架构。Hadoop是一个开源的框架,可编写和运行分布式应用处理大规模数据,是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式。Hadoop=HDFS(文件系统,数据存储技术相关)+ Mapreduce(数据处理),Hadoop的数据来源可以是任何形式,在处理半结构化和非结构化数据上与关系型数据库相比有更好的性能,具有更灵活的处理能力,不管任何数据形式最终会转化为key/value,key/value是基本数据单元。用函数式变成Mapreduce代替SQL,SQL是查询语句,而Mapreduce则是使用脚本和代码,而对于适用于关系型数据库,习惯SQL的Hadoop有开源工具hive代替。

2、Hadoop能做什么?

(1)大数据量存储:分布式存储
(2)日志处理
(3)海量计算:并行计算
(4)ETL:数据抽取到Oracle、MySQL、DB2、mongdb及主流数据库
(5)使用Hbase做数据分析:用扩展性应对大量的写操作—Facebook构建了基于HBase的实时数据分析系统
(6)机器学习:比如Apache Mahout项目
(7)搜索引擎:hadoop + lucene实现
(8)数据挖掘:目前比较流行的广告推荐
(9)用户细分特征建模

(10)个性化广告推荐

下面举例说明:
      设想一下这样的应用场景. 我有一个100M 的数据库备份的sql 文件.我现在想在不导入到数据库的情况下直接用grep操作通过正则过滤出我想要的内容。例如:某个表中 含有相同关键字的记录那么有几种方式,一种是直接用Linux的命令 grep 还有一种就是通过编程来读取文件,然后对每行数据进行正则匹配得到结果好了 现在是100M 的数据库备份.上述两种方法都可以轻松应对。
那么如果是1G,1T甚至1PB 的数据呢,上面2种方法还能行得通吗? 答案是不能。毕竟单台服务器的性能总有其上限.那么对于这种超大数据文件怎么得到我们想要的结果呢?
有种方法就是分布式计算——分布式计算的核心就在于利用分布式算法把运行在单台机器上的程序扩展到多台机器上并行运行,从而使数据处理能力成倍增加,但是这种分布式计算一般对编程人员要求很高,而且对服务器也有要求.导致了成本变得非常高。
Haddop 就是为了解决这个问题诞生的,Hadoop 可以很轻易的把很多Linux的廉价pc 组成分布式结点,然后编程人员也不需要知道分布式算法之类,只需要根据mapreduce的规则定义好接口方法,剩下的就交给Haddop. 它会自动把相关的计算分布到各个结点上去,然后得出结果。
例如上述的例子:Hadoop 要做的事首先把1PB的数据文件导入到HDFS中, 然后编程人员定义好map和reduce, 也就是把文件的行定义为key,每行的内容定义为value,然后进行正则匹配,匹配成功则把结果通过reduce聚合起来返回,Hadoop 就会把这个程序分布到N 个结点去并行的操作。
那么原本可能需要计算好几天,在有了足够多的结点之后就可以把时间缩小到几小时之内。

这也就是所谓的大数据云计算了.如果还是不懂的话再举个简单的例子
比如 1亿个1 相加得出计算结果,我们很轻易知道结果是1亿。但是计算机不知道.那么单台计算机处理的方式做一个一亿次的循环每次结果+1。那么分布式的处理方式则变成我用1万台计算机,每个计算机只需要计算1万个1 相加,然后再有一台计算机把1万台计算机得到的结果再相加,从而得到最后的结果。理论上讲,计算速度就提高了1万倍. 当然上面可能是一个不恰当的例子,但所谓分布式、大数据、云计算大抵也就是这么回事了。

3、Hadoop主要学习哪些模块?

主要学习Hadoop的核心组件:hdfs、mapreduce、yarn。它们是hadoop最最核心的部分。在它们的基础上,我们还可以选择性的学习Hadoop生态圈中的日志收集工具flume、数据仓库Hive、分布式数据库Hbase、数据导入导出工具sqoop。

4、Hadoop学习需要什么样的基础?

Hadoop需要具备JavaSE的基础知识,对于JavaEE(jsp/servlet/三大框架)没有要求。需要熟练使用Linux系统。大体上,有这些预备知识就够了。也有人说,只需要具备JavaSE知识就足够了。

5、Hadoop学习对算法和数据结构要求高吗?

一般海量数据的处理都是自定义存储结构,实现自己的算法,这是业界的通用处理思路。这对普通程序员而言要求还是很高的。Hadoop的优点就是进行了封装,写的算法都是偏向于业务的,不需要创造算法。因此大可放心。但是,如果工作的公司不使用Hadoop去处理大数据,这时候对算法和数据结构的要求就高了。