作者:empty 出版社:empty |
Apache Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构。可以让用户在不了解分布式底层细节的情况下,开发出可靠、可扩展的分布式计算应用。Apache Hadoop 框架,允许用户使用简单的编程模型来实现计算机集群的大型数据集的分布式处理。它的目的是支持从单一服务器到上千台机器的扩展,充分利用了每台机器所提供本地计算和存储,而不是依靠硬件来提供高可用性。其本身被设计成在应用层检测和处理故障的库,对于计算机集群来说,其中每台机器的顶层都被设计成可以容错的,以便提供一个高度可用的服务。
Apache Hadoop 的框架最核心的设计就是:HDFS 和MapReduce。HDFS 为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。
正如上一节MapReduce所提到的那样,Apache Hadoop 受到了 Google 的 GFS 和MapReduce的启发,而前者产生了 Apache Hadoop 的分布式文件系统 NDFS (Nutch Distributed File System) ,而后者也被纳入到 Apache Hadoop 作为核心组件之一。
Apache Hadoop 的雏形开始于2002年的 Apache 的Nutch。Nutch是一个开源 Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具,包括全文搜索和 Web 爬虫。
随后在 2003 年 Google 发表了一篇技术学术论文关于 Google 文件系统(GFS)。GFS 也就是 Google File System,是 Google 公司为了存储海量搜索数据而设计的专用文件系统。
2004年Nutch创始人 Doug Cutting(同时也是 Apache Lucene的创始人)基于 Google 的 GFS 论文实现了分布式文件存储系统名为 NDFS。
Apache Hadoop 它主要有以下几个优点:
高可靠性。Hadoop 按位存储和处理数据的能力值得人们信赖。
高扩展性。Hadoop 是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
高效性。Hadoop 能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
高容错性。Hadoop 能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
低成本。Hadoop 是开源的,项目的软件成本因此会大大降低。
Apache Hadoop 核心组件
Apache Hadoop 包含以下模块:
Hadoop Common:常见实用工具,用来支持其他 Hadoop 模块。
Hadoop Distributed File System(HDFS):分布式文件系统,它提供对应用程序数据的高吞吐量访问。
Hadoop YARN:一个作业调度和集群资源管理框架。
Hadoop MapReduce:基于 YARN 的大型数据集的并行处理系统。
其他与 Apache Hadoop 的相关项目包括:
Ambari:一个基于Web 的工具,用于配置、管理和监控的 Apache Hadoop 集群,其中包括支持 Hadoop HDFS、Hadoop MapReduce、Hive、HCatalog、HBase、ZooKeeper、Oozie、Pig 和Sqoop。Ambari还提供了仪表盘查看集群的健康,如热图,并能够以用户友好的方式来查看的MapReduce、Pig 和 Hive 应用,方便诊断其性能。
Avro:数据序列化系统。
Cassandra:可扩展的、无单点故障的多主数据库。
Chukwa:数据采集系统,用于管理大型分布式系统。
HBase:一个可扩展的分布式数据库,支持结构化数据的大表存储。(有关HBase的内容,会在后面章节讲述)
Hive:数据仓库基础设施,提供数据汇总以及特定的查询。
Mahout:一种可扩展的机器学习和数据挖掘库。
Pig:一个高层次的数据流并行计算语言和执行框架。
Spark:Hadoop 数据的快速和通用计算引擎。Spark 提供了简单和强大的编程模型用以支持广泛的应用,其中包括 ETL、机器学习、流处理和图形计算。(有关 Spark 的内容,会在后面章节讲述)
TEZ:通用的数据流编程框架,建立在 Hadoop YARN 之上。它提供了一个强大而灵活的引擎来执行任意 DAG 任务,以实现批量和交互式数据的处理。TEZ 正在被 Hive、Pig 和 Hadoop 生态系统中其他框架所采用,也可以通过其他商业软件(例如 ETL 工具),以取代的 Hadoop MapReduce作为底层执行引擎。
ZooKeeper:一个高性能的分布式应用程序协调服务。(有关ZooKeeper的内容,会在后面章节讲述)
Apache Hadoop 单节点上的安装配置
下面将演示快速完成在单节点上的 Hadoop 安装与配置,以便你对 Hadoop HDFS 和MapReduce框架有所体会。
1. 先决条件
支持平台:
GNU/Linux:已经证实了 Hadoop 在 GNU/Linux 平台上可以支持 2000 个节点的集群;
Windows。本文所演示的例子都是在 GNU/Linux 平台上运行,若在 Windows 运行,可以参阅http://wiki.apache.org/hadoop/Hadoop2OnWindows。
所需软件:
Java 必须安装。Hadoop 2.7 及以后版本,需要安装 Java 7,可以是OpenJDK或者是 Oracle(HotSpot)的 JDK/JRE。其他版本的 JDK 要求,可以参阅 http://wiki.apache.org/hadoop/HadoopJavaVersions;
ssh必须安装并且保证sshd一直运行,以便用 Hadoop 脚本管理远端Hadoop 守护进程。下面是在 Ubuntu 上的安装的示例:
$ sudo apt-get install ssh
$ sudo apt-get install rsync
2. 运行 Hadoop 集群的准备工作
解压所下载的 Hadoop 发行版。编辑 etc/hadoop/hadoop-env.sh 文件,定义如下参数:
现在你可以用以下三种支持的模式中的一种启动 Hadoop 集群:
本地(单机)模式
伪分布式模式
完全分布式模式
3. 单机模式的操作方法
默认情况下,Hadoop 被配置成以非分布式模式运行的一个独立 Java 进程。这对调试非常有帮助。
下面的实例将已解压的conf目录拷贝作为输入,查找并显示匹配给定正则表达式的条目。输出写入到指定的 output 目录。
$ mkdir input
$ cpetc/hadoop/*.xml input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'
5. 伪分布式模式的操作方法
Hadoop 可以在单节点上以所谓的伪分布式模式运行,此时每一个 Hadoop 守护进程都作为一个独立的 Java 进程运行。
配置
使用如下的:
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>
免密码ssh设置
现在确认能否不输入口令就用ssh登录localhost:
$ sshlocalhost
如果不输入口令就无法用ssh登陆localhost,执行下面的命令:
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod0600 ~/.ssh/authorized_keys
执行
下面演示本地运行一个MapReduce的 job,以下是运行步骤。
(1)格式化一个新的分布式文件系统:
$ bin/hdfsnamenode -format
1
1
(2)启动NameNode守护进程和DataNode守护进程:
$ sbin/start-dfs.sh
1
1
Hadoop 守护进程的日志写入到 $HADOOP_LOG_DIR目录(默认是 $HADOOP_HOME/logs)
(3)浏览NameNode的网络接口,它们的地址默认为:
NameNode - http://localhost:50070/
empty