是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。
对于Hadoop的集群来讲,可以分成两大类角色:Master和Salve。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。MapReduce框架是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点的TaskTracker共同组成的。主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个Job被提交时,JobTracker接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。
从上面的介绍可以看出,HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了Hadoop分布式集群的主要任务。
虚拟机配置伪分布式 hadoop环境配置
----------------------------------------------------------一些概念----------------------------------------------------------------
Hadoop定制:
Hadoop是由好多不同的服务(比如HDFS,Hive,HBase,Spark等等)构成的,这些服务之间还有些依赖关系,如果直接下Apache上的原始的包,需要下载多次,配置多次,显得比较麻烦。由此就产生了一些对Hadoop进行定制的公司,比如 Cloudera , Hortonworks ,还有 MapR . 这些公司都有自己的Hadoop发行版,Cloudera的发行版叫CDH。
HDFS:(Hadoop Distributed FileSystem) 分布式文件系统。
文件备份多份。
Hive:基于Hadoop的一个数据仓库工具。
类SQL的引擎,并且运行MapReduce任务,可以将结构化的数据文件映射为一张数据库表。优点:学习成本低,可通过类SQL语句快速实现简单的MapReduce统计。缺点:不能实时处理,只能批量处理。
HBase:在Hadoop之上的NoSQL 的Key/vale数据库。
一个Key/Value系统。优点:实时运行,而不是运行MapReduce任务。
Spark:开源的类Hadoop MapReduce的通用并行框架。
不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Hive与HBase区别:
Hive被分区为表格,表格又被进一步分割为列簇。列簇必须使用schema定义,列簇将某一类型列集合起来(列不要求schema定义)。Hbase中行是key/value映射的集合,这个映射通过row-key来唯一标识。它支持四种主要的操作:增加或者更新行,查看一个范围内的cell,获取指定的行,删除指定的行、列或者是列的版本。
Hive帮助熟悉SQL的人运行MapReduce任务。HBase查询是通过特定的语言来编写的,这种语言需要重新学习。为了运行Hbase,Zookeeper(一个分布式应用程序协调服务)是必须的。
HPC (high performance computing): 高性能计算
GC (grid computing):网格计算
HDFS和MapReduce是Hadoop的核心
MapReduce 是一种线性的可伸缩编程模型,包括map和reduce两个函数。
map函数是一个数据准备阶段:映射+筛选
reduce函数是一个数据处理过程:求出结果
执行过程:(1)数据分片。最佳分片大小应与块相同
(2)map过程。即数据本地优化。输出写入本地硬盘,而不是HDFS,因为只是中间结果。如果传送失败只需再次运行
(3)合并及求解过程。map输出结果传送带reduce任务节点进行合并,结果写入HDFS。
---------------------------------------------------------------------------------------------------------------------------------------
1. 问题:根据气象数据中心求出一年气温最高值
2. 数据来源
github下载
3.代码
# coding: utf-8 import re import sys def mapper(): with open("F:/hadoop/data/1901", "r") as fd: rawlist = fd.readlines() maplist = [] for line in rawlist: val = line.strip() # 预处理 (year, temp, q) = (val[15:19], val[87:92], val[92:93]) # 分离 if (temp != "+9999" and re.match("[01459]", q)): maplist.append((year, temp)) print "%s\t%s" % (year, temp) return maplist def reducer(inputlist): (last_key, max_val) = (None, -sys.maxint) for line in inputlist: (key, val) = line if last_key and last_key != key: print "%s\t%s" % (last_key, max_val) (last_key, max_val) = (key, int(val)) else: (last_key, max_val) = (key, max(max_val, int(val))) if last_key: print "%s\t%s" % (last_key, max_val) reducer(mapper())文件会读取mapper.py的结果作为reducer.py 的输入,并统计每个单词出现的总的次数,把最终的结果输出到HDFS
4.在Hadoop上运行python代码
4.1 数据准备
下载以下三个文件的
Plain Text UTF-8
Plain Text UTF-8
Plain Text UTF-8
把上面三个文件放到hadoop-0.20.2/test/datas/目录下
4.2 运行
把本地的数据文件拷贝到分布式文件系统HDFS中。
bin/hadoop dfs -copyFromLocal /test/datas hdfs_in
查看
bin/hadoop dfs -ls
结果
1
drwxr-xr-x - rte supergroup 0 2014-07-05 15:40 /user/rte/hdfs_in
查看具体的文件
bin/hadoop dfs -ls /user/rte/hdfs_in
执行MapReduce job
bin/hadoop jar contrib/streaming/hadoop-*streaming*.jar \
-file test/code/mapper.py -mapper test/code/mapper.py \
-file test/code/reducer.py -reducer test/code/reducer.py \
-input /user/rte/hdfs_in/* -output /user/rte/hdfs_out
实例输出
查看输出结果是否在目标目录/user/rte/hdfs_out
bin/hadoop dfs -ls /user/rte/hdfs_out
查看结果
bin/hadoop dfs -cat /user/rte/hdfs_out2/part-00000