#《Hadoop权威指南》——Hadoop简介

Hadoop简介(记)

是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

你可能感兴趣的:(#《Hadoop权威指南》——Hadoop简介)