本部分介绍hadoop简介hadoop的安装以及理解MapReduce,并运行一个MapReduce
1 Hadoop简介
1.1 Hadoop特点
Hadoop是一个开源框架,可编写、运行分布式应用程序处理大规模数据
方便:Hadoop运行在由商用机器组合成的集群上或者云服务上
健壮:Hadoop可以在集群的某个节点失效的情况下,进行故障处理
可扩展:通过增加节点,Hadoop可以线性扩展处理数据
简单:可以快速编写代码运行在Hadoop平台上
1.2 了解分布式系统和hadoop
分布式系统与大型单机服务器:
分布式系统是将许多台计算机进行组网,形成一个集群,每一台计算机相当于一个节点,而大型单机服务器配置很高的计算机。分布式系统是向外扩展(节点增加),大型单机服务器是向上扩展(配置更高)
分布式系统的两种数据处理方式:
一种处理方式是:处理程序在客户机上,而服务器会把(收集)的数据,分成若干小块发送给客户机进行处理,处理结果再返回给服务器
一种处理方式是:数据存储在客户机上,而服务器把处理程序发送给客户机进行处理。
Hadoop采用的方式是第二章,即程序向数据迁移,要运行的代码要比数据要小许多个数量级
1.3 比较SQL数据库与Hadoop
1.3.1用向外扩展代替向上扩展
扩展商用数据库型机器代价昂贵,要想处理一个更大的数据库,就需要有更强处理能力的机器,这种扩展成本很高。4倍于标准PC性能的服务器的成本要远高于将4台标准PC的集群,Hadoop的目的就是利用集群来处理数据。一个hadoop集群是十至数百台服务器,如果不是开放目的hadoop没必要放在单个服务器上。
1.3.2.用键值代替关系表
关系数据库的基本原则是让数据按照某种模式存放在关系型数据库的表中,由于当前应用处理的数据很多时候不能适应这个模式,如文本、图片和xml文件,大型数据集往往是非形式化的,hadoop的处理数据可以是非形式化的。
1.3.3.用函数式编程代替声明式查询SQL
MapReduce的处理能力比SQL更强
1.3.4.用批量处理代替在线处理
1.4理解MapReduce
MapReduce是一个数据处理模型,它最大的优点是可以扩展到集群的多个节点上进行数据处理
单词统计程序存在的问题:
1.添加存储文件到多台计算机上
2.编写基于磁盘的散列表使其不受内存空间限制
3.划分来自第一阶段的中间数据
4.洗牌这些分区数据到第二阶段合适的计算机上
MapReduce执行程序的阶段 mapping和reducing阶段,每一个阶段均定义一个函数进行处理分别称为mapper和reducer,reducer处理来自mapper的数据,mapper进行数据的过滤和转换,reducer进行聚合
1.5 运行一个hadoop程序
hadoop命令的参数
Usage: hadoop [--config confdir] COMMAND
where COMMAND is one of:
namenode -format format the DFS filesystem
secondary namenode run the DFS secondary namenode
namenode run the DFS namenode
datanode run a DFS datanode
dfsadmin run a DFS admin client
mradmin run a Map-Reduce admin client
fsck run a DFS filesystem checking utility
fs run a generic filesystem user client
balancer run a cluster balancing utility
jobtracker run the MapReduce job Tracker node
pipes run a Pipes job
tasktracker run a MapReduce task Tracker node
job manipulate MapReduce jobs
queue get information regarding JobQueues
version print the version
jar <jar> run a jar file
distcp <srcurl> <desturl> copy file or directories recursively
archive -archiveName NAME <src>* <dest> create a hadoop archive
daemonlog get/set the log level for each daemon
or
CLASSNAME run the class named CLASSNAME
逐个介绍上面的命令
hadoop jar<jar> 运行一个jar包
如hadoop jar hadoop-*-example.jar
运行hadoop wordcount程序
2.初识hadoop
2.1 hadoop构造模块
hadoop的运行节点有如下几种
NameNode 名字节点
DataNode 数据节点
secondary namenode 次名称节点
jobtracker 作业跟踪节点
tasktracker 任务跟踪节点
介绍上面的节点
NameNode 名字节点
NameNode是hadoop集群中最重要的节点,Hadoop分布式计算和分布式存储都采用了主/从(master/slave)结构,分布式存储系统称为hadoop文件系统,也就是HDFS系统。一个HDFS系统是由很多台计算机集群组合在一起的,NameNode位于HDFS系统主端,也就是master端,它指导从端(即slave端)的DataNode执行底层的I/O任务。NameNode是HDFS的书记员,它跟踪文件如何被分成块,而这些块在哪些节点存储,以及分布式存储系统整体运行是否正常。运行NameNode节点通常会占用大量内存和I/O资源,因此NameNode节点上通常不会有数据存储或MapReduce程序执行。
NameNode是很重要的,这样也有一个负面影响就是,如果NameNode失效,hadoop运行将不像其他DataNode节点那样可以快速切换到其他节点上。
DataNode 数据节点
每一个集群的从节点都会驻留一个DataNode守护进程来执行分布式文件系统繁重工作——将HDFS数据块读取或者写入本地文件系统的实际文件中。当希望对HDFS文件进行读写时,文件被分成多块,由NameNode告知客户端每个数据块放在哪个DataNode中,客户端也会与DataNode守护进程,来处理数据块相对应的实际文件。DataNode会与其他DataNode进程进行通信,复制数据块以实现数据冗余,让每一个数据块都进行若干次如N次备份,当某个数据节点出现问题时,其他数据节点仍然保留数据块的N-1次的备份,使系统依然能够正常工作
Secondary NameNode即SNN
SNN节点上面也运行监测HDFS集群状态的进程,每一个集群通常有一个SNN并独占一台服务器。通常该服务器也不会运行TaskTracker或DataNode进程 ,SNN与NameNode的区别在于它不接收实时的HDFS的状态,而是与NameNode进行通信,根据集群配置的时间,定时接收HDFS元数据的快照。由于DataNode备份有HDFS数据库的数据,因此NameNode是HDFS文件系统的唯一可能失效的节点,使用SNN相当于起了NameNode的作用,可以减少停机时间并降低数据丢失风险。
JobTracker
JobTracker守护进程是应用程序与hadoop之间的纽带
hadoop client 客户端是什么
装有hadoop的是服务器,用来存数据。
客户端就是用来访问这个hadoop文件系统的机器,它可以是装有hadoop的机器,也可以是没有装hadoop的机器。
如果你的机器装有hadoop,那你这台机器既是服务器,又是客户端。如果你要上传数据到hadoop,那上传的就是client,同理发起mapreduce的了是client,你也可以使用hadoop SDK自己写client。