hadoop高可用安装与配置
集群的规划
host | 基本的软件 | 运行的进程
data1 | jdk、zk、hadoop | NameNode、zkfc、zk、journalNode、ResourceManager
data2 | jdk、zk、hadoop | NameNode、zkfc、zk、journalNode、ResourceManager、datanode、NodeManager
data3 | jdk、zk、hadoop | zk、journalNode、datanode、NodeManager
一.SSH免密登录
1.data1:
ssh-keygen -t rsa , 然后一直按回车
ssh-copy-id data1
ssh-copy-id data2
ssh-copy-id data3
2.在data2和data3上重复执行1的操作
二.安装jdk
省略
三.安装zookeeper
省略
四.安装hadoop
1.下载到/data/tools: wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.10.0/hadoop-2.10.0.tar.gz
2. 添加环境变量:sudo vi /etc/profile
export HADOOP_HOME=/data/tools/hadoop-2.10.0
export PATH=$HADOOP_HOME/bin:$PATH
3.修改配置文件: hadoop-env.sh、yarn-env.sh、mapred-env.sh、hdfs-site.xml、core-site.xml、mapred-site.xml、yarn-site.xml、slaves
3.1 hadoop-env.sh: export JAVA_HOME=/usr/local/jdk
3.2 yarn-env.sh: export JAVA_HOME=/usr/local/jdk
3.3 mapred-env.sh: export JAVA_HOME=/usr/local/jdk
3.4 slaves
data2 data3
3.5 配置hosts
3.6 配置core-site.xml文件
<configuration> <!-- 指定hdfs的nameservice为ns1 --> <property> <name>fs.defaultFS</name> <value>hdfs://ns1</value> </property> <!-- 指定hadoop临时目录 --> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop-data/tmp</value> </property> <property> <name>hadoop.http.staticuser.user</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.halo_op.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.halo_op.groups</name> <value>*</value> </property> <!-- 指定zookeeper地址 --> <property> <name>ha.zookeeper.quorum</name> <value>data1:2181,data2:2181,data3:2181</value> </property> <property> <name>fs.trash.interval</name> <value>1440</value> </property> </configuration>
3.7 配置hdfs-site.xml文件
<configuration> <!--副本数--> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <value>ns1</value> </property> <!-- ns1下面有两个NameNode,分别是nn1,nn2 --> <property> <name>dfs.ha.namenodes.ns1</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn1</name> <value>data1:9000</value> </property> <!-- nn1的http通信地址 --> <property> <name>dfs.namenode.http-address.ns1.nn1</name> <value>data1:50070</value> </property> <!-- nn2的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn2</name> <value>data2:9000</value> </property> <!-- nn2的http通信地址 --> <property> <name>dfs.namenode.http-address.ns1.nn2</name> <value>data2:50070</value> </property> <!-- 指定NameNode的元数据在JournalNode上的存放位置 (一般和zookeeper部署在一起) --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://data1:8485;data2:8485;data3:8485/ns1</value> </property> <!-- 指定JournalNode在本地磁盘存放数据的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/data/hadoop-data/journal</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/data/hadoop-data/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/data/hadoop-data/data</value> </property> <!-- 开启NameNode失败自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失败自动切换实现方式 --> <property> <name>dfs.client.failover.proxy.provider.ns1</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行--> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property> <!-- 使用sshfence隔离机制时需要ssh免登陆 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/halo_op/.ssh/id_rsa</value> </property> <!-- 配置sshfence隔离机制超时时间 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> </configuration>
3.8 配置mapred-site.xml文件
<configuration> <!-- mr依赖的框架名称 yarn--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- mr转化历史任务的rpc通信地址--> <property> <name>mapreduce.jobhistory.address</name> <value>data1:10020</value> </property> <!-- mr转化历史任务的http通信地址--> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>data1:19888</value> </property> <!-- 会在hdfs的根目录下面创建一个history的文件夹,存放历史任务的相关运行情况--> <property> <name>yarn.app.mapreduce.am.staging-dir</name> <value>/history</value> </property> <!-- map和reduce的日志级别--> <property> <name>mapreduce.map.log.level</name> <value>INFO</value> </property> <property> <name>mapreduce.reduce.log.level</name> <value>INFO</value> </property> </configuration>
3.9 配置yarn-site.xml文件
<configuration> <!-- 开启RM高可靠 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 指定RM的cluster id --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yrc</value> </property> <!-- 指定RM的名字 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 分别指定RM的地址 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>data1</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>data2</value> </property> <!-- 指定zk集群地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>data1:2181,data2:2181,data3:2181</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--启用自动恢复,当任务进行一半,rm坏掉,就要启动自动恢复,默认是false--> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> <property> <!-- 客户端通过该地址向RM提交对应用程序操作 --> <name>yarn.resourcemanager.address.rm1</name> <value>data1:8032</value> </property> <property> <!--ResourceManager 对ApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等。 --> <name>yarn.resourcemanager.scheduler.address.rm1</name> <value>data1:8030</value> </property> <property> <!-- RM HTTP访问地址,查看集群信息--> <name>yarn.resourcemanager.webapp.address.rm1</name> <value>data1:8088</value> </property> <property> <!-- NodeManager通过该地址交换信息 --> <name>yarn.resourcemanager.resource-tracker.address.rm1</name> <value>data1:8031</value> </property> <property> <!--管理员通过该地址向RM发送管理命令 --> <name>yarn.resourcemanager.admin.address.rm1</name> <value>data1:8033</value> </property> <property> <name>yarn.resourcemanager.ha.admin.address.rm1</name> <value>data1:23142</value> </property> <property> <name>yarn.resourcemanager.address.rm2</name> <value>data2:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address.rm2</name> <value>data2:8030</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>data2:8088</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address.rm2</name> <value>data2:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address.rm2</name> <value>data2:8033</value> </property> <property> <name>yarn.resourcemanager.ha.admin.address.rm2</name> <value>data2:23142</value> </property> </configuration>
4.准备hadoop所需要的几个目录
mkdir -p /data/hadoop-data/{name,data,journal,tmp}
5.把hadoop和对应存储目录同步到data2和data3(环境变量需要各自去配)
scp -r /data/hadoop-data data2:/data
scp -r /data/hadoop-data data3:/data
scp -r /data/tools/hadoop-2.10.0 data2:/data/tools
scp -r /data/tools/hadoop-2.10.0 data3:/data/tools
6.启动
1.data1,data2,data3启动journalnode:
sbin/hadoop-daemon.sh start journalnode
2.格式化data1的namenode:
hdfs namenode -format
3.将data1上面产生的namenode的元数据信息,拷贝到data2上面
scp -r /data/hadoop-data/name data2:/data/hadoop-data/
4.data1格式化zkfc
hdfs zkfc -formatZK
实际上是在zookeeper中创建一个目录节点/hadoop-ha/ns1
5.启动hdfs
在data1机器上面或者data2上面启动:sbin/start-dfs.sh
实际上在各机器上启动了:NameNode、journalnode、zkfc,datanode
6.启动yarn
在data1上面启动sbin/start-yarn.sh
实际上时启动了:ResourceManager,NodeManager
在data2上面启动: sbin/yarn-daemon.sh start resourcemanager
7.如果要单独启动hdfs中某一个节点,使用脚本hadoop-daemon.sh start 节点进程名,如:sbin/hadoop-daemon.sh start namenode
五.测试namenode和rm的ha
1 访问web
hdfs
http://data1:50070
http://data2:50070
其中一个是active,一个是standby
yarn
http://data1:8088
http://data2:8088
在浏览的时候standby会重定向跳转之active对应的页面
2、ha的验证
NameNode HA
访问:
http://data1:50070
http://data2:50070
其中一个active的状态,一个是StandBy的状态
主备切换验证:
在data1上kill -9 namenode的进程
这时访问data2:50070发现变成了active的
然后在data1上重新启动namenode,发现启动后状态变成standby的
Yarn HA
web访问:默认端口是8088
data1:8088
data2:8088 -> data1:8088
主备切换验证:
在data1上kill -9 resourcemanager的进程
这时可以访问data2:8088,不会在跳转
然后在data1上重新启动resourcemanager,再访问时就是跳转到data2:8088
主备切换结论:
原来的主再恢复时,为了系统的稳定性,不会再进行主备的切换
3、mr任务测试
1.准备一个文件,上传hdfs: hdfs dfs -put /data/tmp/mrtest.txt /
2.cd /data/tools/hadoop-2.10.0/share/hadoop/mapreduce
3.yarn jar hadoop-mapreduce-examples-2.6.4.jar wordcount /mrtest.txt /output/wc
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一文了解各大图数据库查询语言(Gremlin vs Cypher vs nGQL)| 操作入门篇
文章的开头我们先来看下什么是图数据库,根据维基百科的定义:图数据库是使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。 虽然和关系型数据库存储的结构不同(关系型数据库为表结构,图数据库为图结构),但不计各自的性能问题,关系型数据库可以通过递归查询或者组合其他 SQL 语句(Join)完成图查询语言查询节点关系操作。得益于 1987 年 SQL 成为国际标准化组织(ISO)标准,关系型数据库行业得到了很好的发展。同 60、70 年代的关系型数据库类似,图数据库这个领域的查询语言目前也没有统一标准,虽然 19 年 9 月经过国际 SQL 标准委员会投票表决,决定将图查询语言(Graph Query Language)纳为一种新的数据库查询语言,但 GQL 的制定仍需要一段时间。 介于市面上没有统一的图查询语言标准,在本文中我们选取市面上主流的几款图查询语言来分析一波用法,由于篇幅原因本文旨在简单介绍图查询语言和常规用法,更详细的内容将在进阶篇中讲述。 图查询语言·介绍 图查询语言 Gremlin Gremlin是 Apache ThinkerPop 框架下的图遍历语言。...
- 下一篇
快速上手百度大脑EasyDL专业版·物体检测模型(附代码)
作者:才能我浪费99 1. 简介: 1.1. 什么是EasyDL专业版 EasyDL专业版是EasyDL在2019年10月下旬全新推出的针对AI初学者或者AI专业工程师的企业用户及开发者推出的AI模型训练与服务平台,目前支持视觉及自然语言处理两大技术方向,内置百度海量数据训练的预训练模型,可灵活脚本调参,只需少量数据可达到优模型效果。 适用人群: 专业AI工程师且追求灵活、深度调参的企业或个人开发者 支持定制模型类型。 1.2. 支持视觉及自然语言处理两大技术方向: 视觉:支持图像分类及物体检测两类模型训练。 任务类型: 预置算法 图像分类: Resnet(50,101)、Se_Resnext(50,101)、Mobilenet Nasnet 物体检测: FasterRCNN、YoloV3、mobilenetSSD 自然语言处理:支持文本分类及短文本匹配两类模型训练,内置百度百亿级数据所训练出的预训练模型ENNIE. ERNIE(艾尼)是百度自研持续学习语义理解框架,该框架可持续学习海量数据中的知识。基于该框架的ERNIE2.0预训练模型,已累计学习10亿多知识,中英文效果全面领先,适...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7安装Docker,走上虚拟化容器引擎之路