Hadoop教程
Hadoop是一个开源的分布式计算和存储框架,由Apache基金会开发和维护。
Hadoop为庞大的计算机集群提供可靠的、可伸缩的应用层计算和存储支持,它允许使用简单的编程模型跨计算机群集分布式处理大型数据集,并且支持在单台计算机到几千台计算机之间进行扩展。
Hadoop使用Java开发,所以可以在多种不同硬件平台的计算机上部署和使用。其核心部件包括分布式文件系统(HadoopDFS,HDFS)和MapReduce。
Hadoop历史
2003年和2004年,Google公司先后发表了两篇著名的论文GFS和MapReduce。
这两篇论文和2006年发表的BigTable成为了现在著名的Google三大论文。
DougCutting在受到了这些理论的影响后开始了Hadoop的开发。
Hadoop包含了两大核心组件。在Google的论文中,GFS是一个在庞大的计算机集群中运行的分布式文件系统,在Hadoop中HDFS实现了它的功能。MapReduce是一个分布式计算的方式,Hadoop用同名称的MapReduce框架实现了它的功能。我们会在之后的MapReduce章节中详细介绍它。从2008年开始,Hadoop作为Apache顶级项目存在。它与它的众多子项目广泛应用于包括Yahoo、阿里巴巴、腾讯等大型网络服务企业,并被IBM、Intel、Microsoft等平台公司列为支持对象。
Hadoop的作用
Hadoop的作用非常简单,就是在多计算机集群环境中营造一个统一而稳定的存储和计算环境,并能为其他分布式应用服务提供平台支持。
也就是说,Hadoop在某种程度上将多台计算机组织成了一台计算机(做同一件事),那么HDFS就相当于这台计算机的硬盘,而MapReduce就是这台计算机的CPU控制器。
1、Hadoop运行环境
由于Hadoop是为集群设计的软件,所以我们在学习它的使用时难免会遇到在多台计算机上配置Hadoop的情况,这对于学习者来说会制造诸多障碍,主要有两个:
昂贵的计算机集群。多计算机构成的集群环境需要昂贵的硬件.
难以部署和维护。在众多计算机上部署相同的软件环境是一个大量的工作,而且非常不灵活,难以在环境更改后重新部署。
为了解决这些问题,我们有一个非常成熟的方式?Docker。
Docker是一个容器管理系统,它可以向虚拟机一样运行多个虚拟机(容器),并构成一个集群。因为虚拟机会完整的虚拟出一个计算机来,所以会消耗大量的硬件资源且效率低下,而Docker仅提供一个独立的、可复制的运行环境,实际上容器中所有进程依然在主机上的内核中被执行,因此它的效率几乎和主机上的进程一样(接近100%)。
本教程将会以Docker为底层环境来描述Hadoop的使用,如果你不会使用Docker并且不了解更好的方式,
Docker部署
进入Docker命令行之后,拉取一个Linux镜像作为Hadoop运行的环境,这里推荐使用CentOS镜像(Debian和其它镜像暂时会出现一些问题)。
dockerpullcentos:8
然后通过?dockerimages?命令可以查看到当前本地的镜像:
现在,我们创建一个容器:
dockerrun-dcentos:8/usr/sbin/init
通过?dockerps?可以查看运行中的容器:
我们可以令容器打印出HelloWorld:
到这里说明Docker已经安装并部署成功。
创建容器
Hadoop支持在单个设备上运行,主要有两种模式:单机模式和伪集群模式。
本章讲述Hadoop的安装与单机模式。
配置Java与SSH环境
现在创建一个容器,名为java_ssh_proto,用于配置一个包含Java和SSH的环境:
dockerrun-d--name=java_ssh_proto--privilegedcentos:8/usr/sbin/init
然后进入容器:
dockerexec-itjava_ssh_protobash
配置镜像:
sed-es|^mirrorlist=|#mirrorlist=|g\
-es|^#baseurl=XXXn/centos|g\
-i.bak\
/etc/yum.repos.d/CentOS-Stream-AppStream.repo\
/etc/yum.repos.d/CentOS-Stream-BaseOS.repo