Hadoop Ecosystem介绍
什么是Hadoop
Hadoop是Apache基金会下的一个开源分布式计算平台,以Hadoop分布式文件系统(Hadoop distributed file system, HDFS)和MapReduce分布式计算框架为核心,为用户提供了底层细节透明的分布式基础设施。
经过几年的快速发展,Hadoop现在已经发展成为包含多个相关项目的软件生态系统。侠义的Hadoop核心:
Hadoop Common:0.20+版本中,从core更名为common,提供一些常用的工具,包括系统配置工具Configuration、远程过程调用RPC、序列化机制和Hadoop抽象文件系统FileSystem等。
Hadoop HDFS:是一个高度容错的系统、能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。
Hadoop MapReduce:是一种编程模型,用以进行大数据量的计算。将应用划分为Map和Reduce两个步骤,其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果,Reduce对中间结果中相同的“键”的所有“值”进行规约,得到最终结果。
Hadoop生态系统
Sqoop
是SQL-to-Hadoop的缩写,是Hadoop的周边工具,主要作用是在结构化数据存储与Hadoop之间进行数据交换。
Sqoop可以将一个关系型数据库(Mysql、Oracle等)中的数据导入Hadoop的HDFS、Hive中,也可逆向导入。
Mahout
主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。
Mahout现在已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等使用的数据挖掘方法。
除了算法,还包含数据的输入和输出工具、与其他存储系统集成(数据库、MongoDB)
ZooKeeper
作为一个分布式的服务框架,解决分布式计算中的一致性问题。
如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。常作为组件使用。
主要用于协调各个组件之间的一致性。
Hive
最早由FaceBook设计,是建立在Hadoop基础上的数据仓库架构。
数据仓库的管理,包括了数据ETL(抽取、转换和加载)工具、数据存储管理和大型数据集的查询和分析能力。
Hive提供的是一种结构化数据机制,Hive QL,通过该查询语言,数据分析人员可以很方便地运行数据分析业务。
Pig
运行在Hadoop之上,是对大型数据集进行分析和评估的平台。
简化使用Hadoop进行数据分析的要求,提供一个高层次的、面向领域的抽象语言Pig Latin。
通过Pig Latin,可以将复杂且相互关联的数据分析任务编码为Pig操作上的数据流脚本,通过将脚本转换为MapReduce任务链。和Hive一样,Pig降低了对大型数据集进行分析和评估的门槛。
HBase
继Google的BigTable系统论文,开源社区在HDFS上构建HBase。
是一个针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。
和传统的关系数据库不同,HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。提供对大规模数据的随机、实时读写访问。
HBase中保存的数据可以使用MapReduce来处理,将数据存储和并行计算完美结合。
Hadoop的Master和Slave
Namenode 和 Datanode
HDFS采用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。
Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。
集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode上。
Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。
JobTracker和TaskTracker
Hadoop MapReduce采用Master/Slave结构
Master:是整个集群的唯一的全局管理者,功能包括:作业管理、状态监控和任务调度等,即MapReduce中的JobTracker
Slave:负责任务的执行和任务状态的汇报,即MapReduce中的TaskTracker。
JobTracker
JobTracker是一个后台服务进程,启动之后,会一直监听并接收来自各个TaskTracker发送的心跳信息,包括资源使用情况和任务运行情况等信息。
作业控制:在hadoop中每个应用程序被表示成一个作业,每个作业又被分成多个任务,JobTracker的作业控制模块则负责作业的分解和状态监控。
资源管理
TaskTracker
TaskTracker是JobTracker和Task之间的桥梁:一方面,从JobTracker接收并执行各种命令:运行任务、提交任务、杀死任务等;另一方面,将本地节点上各个任务的状态通过心跳周期性汇报给JobTracker。TaskTracker与JobTracker和Task之间采用了RPC协议进行通信
汇报心跳:Tracker周期性将所有节点上各种信息通过心跳机制汇报给JobTracker。这些信息包括两部分:
机器级别信息:节点健康情况、资源使用情况等
任务级别信息:任务执行进度、任务运行状态等
执行命令:JobTracker会给TaskTracker下达各种命令.
Hadoop集群配置
Hadoop现在的最新版本2.5.1,主要包括三个核心组件:
Common
HDFS
YARN(0.23.0 +,新Hadoop MapReduce框架MapReduceV2 或者叫 Yarn)
配置前提
平台:Unbuntu Linux
软件要求:JDK(与hadoop版本对应)、SSH
下载Hadoop最新稳定版hadoop-2.5.1.tar.gz
解压hadoop-2.5.1.tar.gz,编辑
etc/hadoop/hadoop-env.sh
文件1
2
3
4
5# set to the root of your Java installation
export JAVA_HOME=/usr/java/latest
# Assuming your installation directory is /usr/local/hadoop
export HADOOP_PREFIX=/usr/local/hadoop执行
$ bin/hadoop
指令
开启hadoop集群有三种模式
本地(单例)模式
1
2
3
4$ mkdir input
$ cp etc/hadoop/*.xml input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.1.jar grep input output 'dfs[a-z.]+'
$ cat output/*伪分布式模式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<!--编辑 etc/hadoop/core-site.xml-->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
<!--编辑 etc/hadoop/hdfs-site.xml:-->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>1
2
3
4
5# 开启ssh
$ ssh localhost
# 如果启动不了,执行以下操作
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29# 下面就可以在本地运行map reduce程序了
# 首先格式化文件系统
$ bin/hdfs namenode -format
# 第二步,开启namenode和datanode后台守护进程。同时产生的日志将会写到$HADOOP_LOG_DIR目录中,默认为 $HADOOP_HOME/logs
$ sbin/start-dfs.sh
# 第三步,浏览namenode的web界面,默认的地址是NameNode - http://localhost:50070/
# 第四步,设定mapreduce 程序运行要求的工作目录
$ bin/hdfs dfs -mkdir /user
$ bin/hdfs dfs -mkdir /user/<username>
# 第五步,将输入文件拷贝到hadoop的分布式文件系统中
$ bin/hdfs dfs -put etc/hadoop input
# 第六步,运行hadoop中自带的一些例子程序
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.1.jar grep input output 'dfs[a-z.]+'
# 第七步,查看输出的结果
# 可以将结果文件从分布式文件系统中拷贝到本地文件系统中查看
$ bin/hdfs dfs -get output output
$ cat output/*
# 也可以直接在分布式文件系统中查看
$ bin/hdfs dfs -cat output/*
# 第八步,完成任务后,关闭后台守护进程
$ sbin/stop-dfs.sh1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<!--如果想要在YARN上来运行map reduce程序,需要配置一些参数-->
<!--从第五-八步有所区别-->
<!--编辑etc/hadoop/mapred-site.xml-->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
<!--编辑etc/hadoop/yarn-site.xml:-->
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>1
2
3
4
5
6# 开启ResourceManager daemon和NodeManager daemon
$ sbin/start-yarn.sh
# 浏览ResourceManage的web界面,默认地址为ResourceManager - http://localhost:8088/
# 运行MapReduce job
# 执行完成,关闭daemon
$ sbin/stop-yarn.sh完全分布式模式
涉及到的主要配置文件
只读默认配置:core-default.xml, hdfs-default.xml, yarn-default.xml and mapred-default.xml.
特定配置:conf/core-site.xml, conf/hdfs-site.xml, conf/yarn-site.xml and conf/mapred-site.xml.
Hadoop Daemon运行环境配置
- conf/hadoop-env.sh和conf/yarn-env.sh
参考文档:http://hadoop.apache.org/docs/r2.5.1/hadoop-project-dist/hadoop-common/ClusterSetup.html