当前位置: 首页 > 科技观察

三分钟看懂Hadoop、HBase、Hive、Spark分布式系统架构

时间:2023-03-14 11:56:22 科技观察

机器学习、数据挖掘等大数据处理离不开各种开源分布式系统,hadoop用于分布式存储和map-reduce计算,spark是用于分布式机器学习,hive是分布式数据库,hbase是分布式kv系统。它们看似无关,但都是基于相同的hdfs存储和yarn资源管理。本文采用全套部署方式,让大家深入系统,全面了解分布式系统架构以及它们之间的关系。这篇文章比较长,精华在最后。本文结构先,我们分别部署一套hadoop、hbase、hive、spark。在讲解部署方式的过程中,会专门讲解一些重要的配置和一些架构图,帮助我们理解。目的是为了后面解释系统架构和关系。根据。之后,我们将通过运行一些程序来分析这些系统的功能。最后,我们将总结这些系统之间的关系。分布式hadoop部署首先在http://hadoop.apache.org/releases.html找到稳定版tar,下载包到/data/apache并解压。在实际部署之前,先了解一下Hadoop架构。Hadoop分为几个部分:yarn负责资源和任务管理,hdfs负责分布式存储,map-reduce负责分布式计算。了解yarn的架构:yarn的两部分:资源管理和任务调度。资源管理需要一个全局的ResourceManager(RM)和分布在每台机器上的NodeManager协同工作。RM负责资源仲裁,NodeManager负责各节点的资源监控、状态上报、Container管理任务调度。ResourceManager也负责任务。接受和调度,在任务调度中,Container中启动的ApplicationMaster(AM)负责管理这个任务,当任务需要资源时,会向RM申请,分配的Container用于启动任务,然后AM和这些Container进行通信,AM和具体的执行任务都是在Container中执行的。Yarn不同于第一代的hadoop部署(namenode、jobtracker、tasktracker)再看hdfs的架构:hdfs部分由NameNode、SecondaryNameNode和DataNode组成。DataNode是每个存储节点上实际管理数据的模块,NameNode是管理全局数据名称信息的模块,SecondaryNameNode是它的从节点,防止挂掉。最后说一下map-reduce:Map-reduce依赖yarn和hdfs,还有一个JobHistoryServer可以查看任务运行历史。Hadoop虽然有多个模块分别部署,但是需要的程序都在同一个tar包里,所以是不一样的。模块使用的配置文件都放在一起了,我们来看最重要的配置文件:各种默认配置:core-default.xml,hdfs-default.xml,yarn-default.xml,mapred-default.xml各种网页配置:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml从这些配置文件也可以看出,hadoop的几个部分是分开配置的。除了上面这些,还有一些重要的配置:hadoop-env.sh、mapred-env.sh、yarn-env.sh,它们是用来配置java虚拟机参数和一些binary、configuration、log等的。当程序运行时,在目录configuration下面,我们实际上修改了必须修改的配置文件。修改etc/hadoop/core-site.xml,修改配置为:这里是hdfs文件系统地址:本机9001端口修改etc/hadoop/hdfs-site.xml,修改配置为:这里的配置是本地存放hdfs文件的地方,也是secondarynamenode的地址。修改etc/hadoop/yarn-site.xml,将配置更改为:这里是yarn的日志地址和通过cpetc/hadoop/mapred-site.xml.templateetc/hadoop/mapred-site.xml配置的一些参数创建etc/hadoop/mapred-site.xml,内容修改如下:这里是mapred任务历史相关的配置如果你的hadoop部署在多台机器上,那么需要修改etc/hadoop/slaves,并添加其他从机ip到它。如果只部署在这台上,那就留个localhost吧。让我们开始hadoop。在开始之前,我们配置必要的环境变量。:先启动hdfs。在此之前,格式化分布式文件系统。执行:如果格式正常,可以看到在/data/apache/dfs下生成了name目录,然后启动namenode。执行:如果正常启动,可以看到startup启动了相应的进程,并在logs目录下生成相应的日志,然后启动datanode,执行:如果考虑启动secondarynamenode,可以用同样的方法启动下面我们启动yarn,首先启动resourcemanager,执行:如果正常启动,可以看到启动相应的进程,并在logs目录下生成相应的日志,然后启动nodemanager,执行:如果正常启动,则在logs目录下可以看到启动了相应的进程,并生成了相应的日志,然后启动MapReduceJobHistoryServer,执行:如果正常启动,可以看到启动了相应的进程,并在logs目录下生成了相应的日志日志目录。我们看web界面,打开http://127.0.0.1:8088/cluster可以看到yarn管理的集群资源(因为在yarn-site.xml中我们配置yarn.resourcemanager.webapp.address是127.0.0.1:8088)打开http://127.0.0.1:19888/jObhistory查看map-reduce任务的执行历史(因为在mapred-site.xml中我们配置了mapreduce.jobhistory.webapp.address为127.0.0.1:19888)打开http://127.0.0.1:50070/dfshealth。html查看namenode的存储系统(因为在hdfs-site.xml中我们配置了dfs.namenode.http-address为127.0.0.1:50070)至此我们就完成了hadoop的部署我们先测试一下hadoop的功能,验证一下hdfs分布式文件系统,执行下面的命令看看有没有输出:这时可以通过http://127.0.0.1看到存储系统的一些变化:50070/dfshealth.html启动一个mapreduce任务进行输入后,查看/output的输出是否产生:此时可以通过http://127.0.0.1:19888/jobhistory查看mapreduce任务历史:也可以通过http://127.0.0.1:8088为什么/cluster两处都看到taskhistory?它们之间有什么区别?我们看到cluster其实是展示了各个应用的历史信息,也就是yarn(ResourceManager)的管理页面,也就是说无论是Mapreduce还是其他类似mapreduce的任务都会在这里展示。mapreduce任务的ApplicationType是MAPREDUCE,其他任务的类型是other,但是jobhistory是专门用来展示hbase对mapreduce任务的部署情况的。首先,从http://www.apache.org/dyn/closer.cgi/hbase/下载稳定版安装包,我下载的是https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/hbase-1.2.2-bin.tar解压.gz后,修改conf/hbase-site.xml,改成:其中hbase.rootdir配置的是hdfs地址,ip:port要和hadoop/中的fs.defaultFS保持一致core-site.xml其中hbase.zookeeper。quorum是zookeeper的地址,可以配置多个。我们先配置一个启动hbase进行测试,执行:这个时候可能会要求你输入本机的密码。启动成功后,可以看到几个进程,包括zookeeper的HQuorumPeer下面我们用hbase的HMaster和HRegionServer来测试一下hbase的使用。执行:创建表、获取表、添加行、读取全部。我们还看到hdfs中多了hbase的存储目录:这说明hbase是基于hdfs的存储介质,所以具备分布式存储hbase架构的所有优点如下:HMaster负责管理HRegionServer实现负载均衡,管理分配HRegion(数据分片),管理命名空间和表元数据,权限控制。HRegionServer负责管理本地的HRegion,管理数据,与hdfs交互Zookeeper负责集群的协调(如HMaster主从故障切换)和集群状态信息的存储。客户端传输数据,直接与HRegionServer通信。hive的部署从http://mirrors.hust.edu.cn/apache/hive下载安装包,我下载的是http://mirrors.hust.edu.cn/apache/hive/stable-2/apache-hive-2.1.0-bin.tar.gz解压后,我们首先准备hdfs,执行:usehivemust提前设置好HADOOP_HOME环境变量,让它自动找到我们的hdfs作为存储,我们不妨配置各种HOME和各种PATH,如:复制创建hive-site.xml、hive-log4j2.properties、hive-Exec-log4j2.properties,执行修改hive-site.xml,更改${system:java.io.tmpdir}在其中到/data/apache/tmp。也可以设置为自己的tmp目录,将${system:user.name}替换为用户名,用于初始化元数据数据库(默认保存在本地derby数据库,也可以配置为mysql)。注意,不要先执行hive命令,否则这一步会报错。详见http://stackoverflow.com/questions/35655306/hive-installation-issues-hive-metastore-database-is-not-initialized,执行如下:成功后,我们可以直接以客户端启动hive,如:尝试创建一个数据库是否可以:这样,我们还是一个单机的hive,无法登录到其他机器,所以我们需要将其作为服务器启动:默认情况下,它会监听到10000端口。这时候我们可以通过jdbc客户端连接到这个服务来访问hivehive。spark的具体使用这里就不赘述了。部署首先在http://spark.apache.org/downloads.html下载指定hadoop版本的安装包,我下载的是http://d3kbcqa49mib13.cloudfront.net/spark-2.0.0-bin-hadoop2.7。tgzspark有多种部署方式。首先,它支持直接在单机上运行,??比如执行一个示例程序:可以直接运行得到结果。下面说一下spark集群的部署方法:解压安装包直接执行:此时打开http://127.0.0.1:8080/可以看到web界面如下:根据上面的url:spark://MYAY:7077,我们再启动slave:刷新web界面如下:出现一个worker,我们可以根据需要启动多个worker接下来,我们将上面执行的任务部署到spark集群中执行:web界面为如下:sparkprogram也可以部署到yarn集群中执行,即我们在部署hadoop启动yarn时需要提前配置HADOOP_CONF_DIR,如下:接下来我们将任务部署到yarn集群中:综上所述,hdfs是所有hadoop生态的底层存储架构,它主要完成分布式存储系统的逻辑。所有需要存储的东西都建立在它之上。Yarn是负责集群资源管理的部分。这个资源主要是指计算资源,所以支持各种计算模块。map-reduce组件主要完成map-reduce任务的调度逻辑依赖hdfs作为输入输出和中间过程的存储。所以在hdfs之上,还依赖yarn为其分配资源。所以hbase也是基于yarn之上的hdfs存储,通过一个独立的Service管理,所以hive是基于hdfs存储只在hdfs之上,通过独立的service来管理,所以spark是基于hdfs存储只在上面hdfs,即可以依赖yarn进行资源分配,计算资源也可以通过独立的服务进行管理,所以它在hdfs之上,也在yarn之上。从结构上看,它更类似于mapreduce层。总之,每个系统都负责自己的一部分专长,同时又相互依赖,形成了整个Hadoop生态系统。