网站首页 > 技术文章 正文
Hadoop可以说是现在最流行,最普遍的分布式系统框架。许多公司都使用Hadoop处理和分析公司内大量的业务和日志数据。同时大数据本身亦是一个很火并且在可预见范围内也会很火的技术。
本文主要是通过实践搭建Hadoop集群,让大家从实际操作中加深对Hadoop原理,框架和配置的理解。
环境准备:
JAVA:版本 jdk1.8.0_121
下载地址:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html
Hadoop:版本 hadoop-2.7.4
下载地址:http://hadoop.apache.org/releases.html
Zookeeper:版本 zookeeper-3.4.10
下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
操作系统:CentOS release 6.7
https://www.centos.org/download/
注:这里的环境是本人这次实践的环境,java建议使用1.8以上,Hadoop和zookeeper版本和这里的版本差别不是太大应该是没有问题,操作系统是linux,其他Linux版本应该也没有问题。
Hadoop 组织框架
Hadoop主要包括两部分,一部分是HDFS(Hadoop Distributed File System),主要负责分布式存储和计算;另一部分是YARN(Yet Another Resource Negotiator, 从Hadoop2.0开始引入),主要负责集群的资源管理和调度。
HDFS架构
1. Active Name Node
主Master,整个Hadoop集群只能有一个
管理HDFS文件系统的命名空间
维护元数据信息
管理副本的配置和信息(默认三个副本)
处理客户端读写请求
2. Standby Name Node
Active Name Node的热备节点
Active Name Node故障时可快速切换成新的Active Name Node
周期性同步edits编辑日志,定期合并fsimage与edits到本地磁盘
3. Journal Node
可以被Active Name Node和StandBy Name Node同时访问,用以支持Active Name Node高可用
Active Name Node在文件系统被修改时,会向Journal Node写入操作日志(edits)
Standby Name Node同步Journal Node edits日志,使集群中的更新操作可以被共享和同步。
3. Data Node
Slave 工作节点,集群一般会启动多个
负责存储数据块和数据块校验
执行客户端的读写请求
通过心跳机制定期向NameNode汇报运行状态和本地所有块的列表信息
在集群启动时DataNode项NameNode提供存储Block块的列表信息
4. Block数据块
HDSF固定的最小的存储单元(默认128M,可配置修改)
写入到HDFS的文件会被切分成Block数据块(若文件大小小于数据块大小,则不会占用整个数据块)
默认配置下,每个block有三个副本
5. Client
与Name Node交互获取文件的元数据信息
与Data Node,读取或者写入数据
通过客户端可以管理HDFS
YARN架构
1. Resource Manager
整个集群只有一个Master。Slave可以有多个,支持高可用
处理客户端Client请求
启动/管理/监控ApplicationMaster
监控NodeManager
资源的分配和调度
2. Node Manager
每个节点只有一个,一般与Data Node部署在同一台机器上且一一对应
定时向Resource Manager汇报本机资源的使用状况
处理来自Resource Manager的作业请求,为作业分配Container
处理来自Application Master的请求,启动和停止Container
3. Application Master
每个任务只有一个,负责任务的管理,资源的申请和任务调度
与Resource Manager协商,为任务申请资源
与Node Manager通信,启动/停止任务
监控任务的运行状态和失败处理
4. Container
任务运行环境的抽象,只有在分配任务时才会抽象生成一个Container
负责任务运行资源和环境的维护(节点,内存,CPU)
负责任务的启动
虽然在架构图中没有画出,但Hadoop高可用都是基于Zookeeper来实现的。如NameNode高可用,Block高可用,ResourceManager高可用等。
集群配置
Hadoop集群部署概图
1. 修改各个机器的hostname
为了方便,重命名各机器为图中各个hostname,后面配置就可以使用hostname而不是IP地址。
使用root用户在各个机器上执行(各个机器序号需要改变)
hostname node01 #修改完所有机器的hostname后,将IP和hostname的对应关系写到所有机器的/etc/hosts文件中
2. 在各个机器上添加hadoop用户,并修改密码
后面集群的配置和启动都用hadoop来操作
useradd hadoop #添加hadoop用户 passwd hadoop #修改hadoop用户密码
3. 配置各个机器间相互免密登陆
su hadoop #切换到hadoop用户,后面的命令,没有特殊说明,都是使用hadoop用户操作 ssh-keygen -t -rsa #生成密钥,一直按回车即可 ssh-copy-id -i node01 #将生成的公钥copy到所有集群上01-05,包括生成密钥的本机。即node01 拷贝到node01-05, node02 拷贝到node01-node05 以此类推
4. 创建目录用于保存搭建集群相关的代码和工具
cd ~ #到hadoop home目录 mkdir apps # 创建apps目录,用于存放于搭建集群相关的代码和工具。集群所有机器都需要创建该目录
5. 安装JDK
#将下载好的JDK copy到刚创建的apps目录下 tar -zxvf jdk-8u121-linux-x64.tar.gz #解压jdk su root #下面几步的操作需要root权限 ln -s /home/hadoop/app/jdk1.8.0_121 /usr/local/jdk #创建jdk的软连接,所有机器都是相同的目录,为了操作和配置方便 vim /etc/profile # 打开该文件并在文末添加:export JAVA_HOME=/usr/local/jdk ,然后保存文件 source /etc/profile #重新加载环境配置文件
su hadoop #切换回hadoop scp -r /home/hadoop/app/jdk1.8.0_121 hadoop@node02:/home/hadoop/app #将jdk拷贝到集群中其他机器上,然后重复上面的安装JDK步骤 java -version #在集群中任一台机器上执行,有如下信息,说明JDK安装成功
6. 配置zookeeper
#将下载好的zookeeper拷贝到node01的/home/hadoop/apps目录下 tar -zxvf zookeeper-3.4.10.tar.gz #解压压缩包 su root #创建软连接需要root权限 ln -s /home/hadoop/apps/zookeeper-3.4.10 /usr/local/zookeeper chown -R hadoop:hadoop /usr/local/zookeeper #修改属组 #修改配置文件 su hadoop cd /usr/local/zookeeper cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg # 修改下图中红框的内容
zoo.cfg
scp -r /usr/local/zookeeper hadoop@node02:/home/hadoop/app #将zookeeper拷贝到node02和node03机器上,并创建软连接和修改属组
#在node01,node02,node03上运行下面命令 /usr/local/zookeeper/bin/zkServer.sh start #启动zookeeper /usr/local/zookeeper/bin/zkServer.sh status #查看zookeeper运行状态 # 有如下图输出,说明zookeeper配置和运行成功。其中Mode可以为leader(只会有一个),follower(有两个)
7. 配置Hadoop
#将hadoop安装包拷贝到node01的/home/hadoop/apps目录下 tar -zxvf hadoop-2.7.4.tar.gz #解压下载copy过来的hadoop压缩包 su root ln -s /home/hadoop/apps/hadoop-2.7.4 /usr/local/hadoop #创建软连接 chown -R hadoop:hadoop /usr/local/hadoop #修改软连接属组为hadoop su hadoop cd /usr/local/hadoop/etc/hadoop
#修改hadoop-env.sh export JAVA_HOME=/usr/local/jdk #找到export JAVA_HOME并修改
#修改core-site.xml #找到configuration,并按下图修改
core-site.xml配置
#修改hdfs-site.xml #找到configuration,并按下图修改
hdfs-site.xml
#修改yarn-site.xml #找到configuration,并按下图修改
yarn-site.xml
#在/usr/local/hadoop目录下创建hdpdata文件夹 cd /usr/local/hadoop mkdir hdpdata
#修改slave文件,设置datanode和nodemanager的启动节点 vim /usr/local/hadoop/etc/hadoop/slaves #添加以下内容 node03 node04 node05
#修改/etc/profile,配置环境变量 su root vim /etc/profile #添加hadoop相关环境变量,配置完后/etc/profile文件应该包含以下信息 source /etc/profile
#拷贝hadoop目录到其他(node02 - node05)机器上 scp -r /usr/local/hadoop hadoop@node02:/home/hadoop/apps#在各个机器上创建hadoop的软连接并修改属组#修改各个机器上的/etc/profile
至此,hadoop集群的配置完成,下一步我们来启动Hadoop集群
集群启动
以下操作都使用hadoop用户。
1. 启动Journal Node
参照部署图,Journal Node部署在node03,node04,node05上
分别去这几台机器上执行:
/usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode jps #运行该命令后,如果输出中有JournalNode则表明启动成功
2. 格式化HDFS
我们的namenode avtive部署在node01上,去node01上格式化HDFS
hdfs namenode -format
格式化成功后会在/usr/local/hadoop/hdpdata(在core-site.xml中配置,并在前面已经提前创建)中新增一个dfs目录。将该目录copy到node02上,因为我们的namenode standby部署在node02上
scp -r /usr/local/hadoop/hdpdata/dfs hadoop@node02:/usr/local/hadoop/hdpdata
3. 启动ZKFC
ZKFC(ZK Failover Controller)主要是确保namenode的高可用,在active namenode不可用时及时切换到standby namenode。我们在node01上执行:
hdfs zkfc -formatZK
有如下输出表明ZKFC启动成功:
INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns in ZK
4. 启动HDFS(node01)
/usr/local/hadoop/sbin/start-dfs.sh
5. 启动YARN(node02)
/usr/local/hadoop/sbin/start-yarn.sh
并且在node01上也启动一个ResourceManager作为备份节点
/usr/local/hadoop/sbin/yarn-daemon.sh start resourcemanager
6. 启动JobHistoryServer(node2)
/usr/local/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver
通过jps命令可以查看到一个JobHistoryServer进程
至此,hadoop集群的启动完成了,下一步我们通过网页查看集群状态。
Hadoop状态界面
在我们需要访问集群的机器上配置下面hosts项(主要是为了访问方便)
1. NameNode Active (http://node01:50070/)
2. NameNode StandBy (http://node02:50070/)
3. Resource Manager (http://node02:8088/)
注:这里我自己添加了一台Data Node。大家也可以自行找些资料来练习如何动态的添加和删除DataNode。
4. Job History (http://node02:19888/)
注:这里我提前运行了一个JOB,所以有一条记录
总结
Hadoop集群的搭建流程比较长,配置和安装需要注意的细节也比较多。但从头走一次下来,会对Hadoop有更深的理解。网上也有一些自动话脚本,但自己操作一遍后,也才能理解里面的操作流程。搭建完成后,就可以写些任务来测试。或者在 Hadoop集群上结合更多的东西,如kafka,hive等。
Hadoop是很成熟的技术,如果你遇到了问题,其他人可能也遇到过相同问题,大家可以自行百度或其他技术网站,或者在下面留言,大家一起讨论。
如果本文有理解或者操作有问题,也希望大家不吝指教。
猜你喜欢
- 2025-07-17 Linux搭建Weblogic集群(linux weblogic部署项目步骤)
- 2025-07-17 「DM专栏」DMDSC共享集群之部署(一)——共享存储配置
- 2024-10-23 oracle 三种高可用方案 oracle高性能解决方案
- 2024-10-23 看架构专家大话OracleRAG:集群+高可用性+备份与恢复
- 2024-10-23 Oracle 19c集群心跳网络全部配错该如何抢救
- 2024-10-23 快速了解Canal 快速了解汉字知的读音写法等知识点
- 2024-10-23 ES架构分析 es分布式架构原理
- 2024-10-23 详解RAC并发逻辑、硬件架构、软件架构拓扑与原理解析
- 2024-10-23 基于mycat+haproxy+keepalived搭建mysql集群(Haproxy篇)
- 2024-10-23 Oracle基础知识之asm磁盘组 oracleasm磁盘管理
你 发表评论:
欢迎- 612℃几个Oracle空值处理函数 oracle处理null值的函数
- 603℃Oracle分析函数之Lag和Lead()使用
- 592℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 589℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 583℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 576℃【数据统计分析】详解Oracle分组函数之CUBE
- 566℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 558℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- PageHelper - 最方便的 MyBatis 分页插件
- 面试二:pagehelper是怎么实现分页的,
- MyBatis如何实现分页查询?(mybatis-plus分页查询)
- SpringBoot 各种分页查询方式详解(全网最全)
- 如何在Linux上运行exe文件,怎么用linux运行windows软件
- 快速了解hive(快速了解美国50个州)
- Python 中的 pyodbc 库(pydbclib)
- Linux搭建Weblogic集群(linux weblogic部署项目步骤)
- 「DM专栏」DMDSC共享集群之部署(一)——共享存储配置
- 故障分析 | MySQL 派生表优化(mysql pipe)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)