三分钟读懂Hadoop、HBase、Hive、Spark分布式系统架构
2020-04-03 15:35:53我们来分别部署一套hadoop、hbase、hive、spark,在讲解部署方法过程中会特殊说明一些重要配置,以及一些架构图以帮我们理解,目的是为后面讲解系统架构和关系打基础。
机器学习、数据挖掘等各种大数据处理都离不开各种开源分布式系统,hadoop用于分布式存储和map-reduce计算,spark用于分布式机器学习,hive是分布式数据库,hbase是分布式kv系统,看似互不相关的他们却都是基于相同的hdfs存储和yarn资源管理,本文通过全套部署方法来让大家深入系统内部以充分理解分布式系统架构和他们之间的关系,本文较长,精华在最后。
本文结构
首先,我们来分别部署一套hadoop、hbase、hive、spark,在讲解部署方法过程中会特殊说明一些重要配置,以及一些架构图以帮我们理解,目的是为后面讲解系统架构和关系打基础。
之后,我们会通过运行一些程序来分析一下这些系统的功能
最后,我们会总结这些系统之间的关系
分布式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包中,所以不同模块用到的配置文件都在一起,让我们来看几个最重要的配置文件:
从这些配置文件也可以看出hadoop的几大部分是分开配置的。
除上面这些之外还有一些重要的配置:hadoop-env.sh、mapred-env.sh、yarn-env.sh,他们用来配置程序运行时的java虚拟机参数以及一些二进制、配置、日志等的目录配置
下面我们真正的来修改必须修改的配置文件。
修改etc/hadoop/core-site.xml,把配置改成:
这里面配置的是hdfs的文件系统地址:本机的9001端口
修改etc/hadoop/hdfs-site.xml,把配置改成:
这里面配置的是hdfs文件存储在本地的哪里以及secondary namenode的地址
修改etc/hadoop/yarn-site.xml,把配置改成:
这里面配置的是yarn的日志地址以及一些参数配置
通过cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml创建etc/hadoop/mapred-site.xml,内容改为如下:
这里面配置的是mapred的任务历史相关配置
如果你的hadoop部署在多台机器,那么需要修改etc/hadoop/slaves,把其他slave机器ip加到里面,如果只部署在这一台,那么就留一个localhost即可
下面我们启动hadoop,启动之前我们配置好必要的环境变量:
先启动hdfs,在此之前要格式化分布式文件系统,执行:
如果格式化正常可以看到/data/apache/dfs下生成了name目录
然后启动namenode,执行:
如果正常启动,可以看到启动了相应的进程,并且logs目录下生成了相应的日志
然后启动datanode,执行:
如果考虑启动secondary namenode,可以用同样的方法启动
下面我们启动yarn,先启动resourcemanager,执行:
如果正常启动,可以看到启动了相应的进程,并且logs目录下生成了相应的日志
然后启动nodemanager,执行:
如果正常启动,可以看到启动了相应的进程,并且logs目录下生成了相应的日志
然后启动MapReduce JobHistory Server,执行:
如果正常启动,可以看到启动了相应的进程,并且logs目录下生成了相应的日志
下面我们看下web界面
打开看下yarn管理的集群资源情况(因为在yarn-site.xml中我们配置了yarn.resourcemanager.webapp.address是127.0.0.1:8088)
打开看下map-reduce任务的执行历史情况(因为在mapred-site.xml中我们配置了mapreduce.jobhistory.webapp.address是127.0.0.1:19888)
打开看下namenode的存储系统情况(因为在hdfs-site.xml中我们配置了dfs.namenode.http-address是127.0.0.1:50070)
到此为止我们对hadoop的部署完成。下面试验一下hadoop的功能
先验证一下hdfs分布式文件系统,执行以下命令看是否有输出:
这时通过可以看到存储系统的一些变化
下面我们以input为输入启动一个mapreduce任务
之后看是否产生了/output的输出:
这时通过可以看到mapreduce任务历史:
也可以通过看到任务历史
为什么两处都有历史呢?他们的区别是什么呢?
我们看到cluster显示的其实是每一个application的历史信息,他是yarn(ResourceManager)的管理页面,也就是不管是mapreduce还是其他类似mapreduce这样的任务,都会在这里显示,mapreduce任务的Application Type是MAPREDUCE,其他任务的类型就是其他了,但是jobhistory是专门显示mapreduce任务的
hbase的部署
首先从下载稳定版安装包,我下的是
解压后修改conf/hbase-site.xml,改成:
其中hbase.rootdir配置的是hdfs地址,ip:port要和hadoop/core-site.xml中的fs.defaultFS保持一致
其中hbase.zookeeper.quorum是zookeeper的地址,可以配多个,我们试验用就先配一个
启动hbase,执行:
这时有可能会让你输入本地机器的密码
启动成功后可以看到几个进程起来,包括zookeeper的HQuorumPeer和hbase的HMaster、HRegionServer
下面我们试验一下hbase的使用,执行:
创建一张表
获取一张表
添加一行
读取全部
我们同时也看到hdfs中多出了hbase存储的目录:
这说明hbase是以hdfs为存储介质的,因此它具有分布式存储拥有的所有优点
hbase的架构如下:
其中HMaster负责管理HRegionServer以实现负载均衡,负责管理和分配HRegion(数据分片),还负责管理命名空间和table元数据,以及权限控制
HRegionServer负责管理本地的HRegion、管理数据以及和hdfs交互。
Zookeeper负责集群的协调(如HMaster主从的failover)以及集群状态信息的存储
客户端传输数据直接和HRegionServer通信
hive的部署
从下载安装包,我下的是
解压后,我们先准备hdfs,执行:
使用hive必须提前设置好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命令,否则这一步会出错,具体见,下面执行:
成功之后我们可以以客户端形式直接启动hive,如:
试着创建个数据库是否可以:
这样我们还是单机的hive,不能在其他机器登陆,所以我们要以server形式启动:
默认会监听10000端口,这时可以通过jdbc客户端连接这个服务访问hive
hive的具体使用在这里不赘述
spark部署
首先在下载指定hadoop版本的安装包,我下载的是
spark有多种部署方式,首先支持单机直接跑,如执行样例程序:
它可以直接运行得出结果
下面我们说下spark集群部署方法:
解压安装包后直接执行:
这时可以打开看到web界面如下:
根据上面的url:spark://MYAY:7077,我们再启动slave:
刷新web界面如下:
出现了一个worker,我们可以根据需要启动多个worker
下面我们把上面执行过的任务部署到spark集群上执行:
web界面如下:
spark程序也可以部署到yarn集群上执行,也就是我们部署hadoop时启动的yarn
我们需要提前配置好HADOOP_CONF_DIR,如下:
下面我们把任务部署到yarn集群上去:
总结一下
总之,每一个系统负责了自己擅长的一部分,同时相互依托,形成了整个hadoop生态。

hadoop和spark是什么关系啊?
Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。优势应该在于分布式架构比较相似能快速上手吧
Hadoop和MapReduce究竟分别是做什么用的
1、hadoop是一种分布式系统的平台,通过它可以很轻松的搭建一个高效、高质量的分布系统,而且它还有许多其它的相关子项目,也就是对它的功能的极大扩充,包括Zookeeper,Hive,Hbase等。 2、MapReduce是hadoop的核心组件之一,hadoop要分布式包括两部分,一是分布式文件系统hdfs,一部是分布式计算框,就是mapreduce,缺一不可,也就是说,可以通过mapreduce很容易在hadoop平台上进行分布式的计算编程。 再详细的话,你得多看些文档。
QQ抢车位买车的币能转到一个Q号里面吗
QQ抢车位转钱是不可以的,不过你可以用钱把车买了再把车转赠给你想转的号。 以下是玩QQ抢车位的技巧:一:起步时期以最快的速度,60小时刷够10辆车条件:一个大号QQ,三个小号QQ 开始0-12小时: 起步是最关键的全速全效运行的话,2天48小时可以弄到6辆车。 开始就是开小号或停在别人的车场里刷钱。 初始状态下系统赠送一辆二手奥托+1000金。 开3个小号,把小号的车放在自己的车场。 自己的二手奥托停在小号那里。 4辆车,每辆每分钟5金。 每部12小时4辆=金,加上系统赠送的1000本金。 12小时后你就有了.然后把4辆车再停几分钟那就够元。 然后立刻再买一两二手奥托。 12-24小时:这时候你有5辆车(大号两辆+小号3辆)。 12小时后就是:5辆×3600元=元。 给大号买第三部车。 还剩2000金。 24-36小时:6辆×3600元=金+余款2000=。 买第四部车还剩6600 36-48小时:7辆×3600元=金+余款6600=。 这时买第5第6辆车。 48-60小时:9辆×3600元=金,买第10辆车。 二:车辆升级(买够10辆二手奥托,以后都是只换不买,换车时原车可以以原价冲抵,交差价就行了) 在买够10辆二手奥拓后。 车辆依次换购顺序为:二手奥拓→吉利自由舰→桑塔纳→标致307→S-MAX→MiniCooper→奥迪A6→玛莎拉蒂→阿斯顿马丁→迈巴赫62→雅致728→布加迪威航(从开始到圆满最科学的方法是换购11次)理由及数据请看《车辆换购顺序表》《车辆换购顺序表》第一轮 二手奥拓→江南奥拓→夏利→奇瑞QQ→spark乐驰→吉利自由舰第二轮 吉利自由舰→富康→雨燕→标志206→雪铁龙C2→名爵3SW→桑塔纳第三轮 桑塔纳→POLO→福田欧马可→别克凯越→标致307第四轮 标致307→宝来→赛拉图→福特福克斯→飞度→卡罗拉→速腾→斯柯达明锐→高尔夫→本田CIVIC→骐达→朗逸→新毕加索→马自达6→帕萨特→现代酷派→迈腾→雅阁→S-MAX第五轮 S-MAX→蒙迪欧致胜→本田CRV→斯巴鲁翼豹→PT漫步者→途胜→甲壳虫→奥迪A4→指南者→哈雷摩托→MiniCooper第六轮 MiniCooper→宝马320→切诺基→牧马人→宝马Z4→奥迪A6第七轮 奥迪A6→奥迪TT→悍马→凯迪拉克→宝马730→沃尔沃XC90→奥迪Q7→路虎→宝马X5→林肯加长→保时捷911→RIMOR奔驰房车→捷豹XK→保时捷卡宴→途锐→雷克萨斯LS600→奥迪R8→玛莎拉蒂第八轮 玛莎拉蒂→奔驰S600→奔驰豪华大巴→法拉利F430→阿斯顿马丁第九轮 阿斯顿马丁→兰博基尼→迈巴赫62第十轮 迈巴赫62→劳斯莱斯→帕加尼→雅致728第十一轮 雅致728→布加迪威龙→终极 布加迪威航
发表评论