一.简述

上一篇了解了Zookeeper和HDFS的一些概念,今天就带大家从头到尾搭建一下,其中遇到的一些坑也顺便记录下。

1.1 搭建的拓扑图如下:

1.2 部署环境:Centos3.1,java1.8.0 ,Hadoop3.2,Zookeeper3.5.5

Linux环境搭建我这里就不介绍了,请自行百度(PS:需要注意的一点是,最后一步硬盘大小最好改大一些,比如60G)。

1.3 搭建Linux的时候可能会遇到这么几个问题:

首先安装系统的时候不要选择精简版,这样会有很多软件不全,尽量去选择全一些的版本,比如我选择的Infrastucture Server,然后全勾上了,这样虽然占用空间大了些,但是省去了后续安装很多组件的烦恼。

二.正文

小技巧:在搭建之前先说个小技巧,我们搭建的时候可以先在一台虚拟机上部署,然后通过克隆到其它机器,修改部分该修改的参数就行了,这样就方便了环境的频繁部署。

2.1 配置环境

2.1.1 设置固定ip

1.进入到 /etc/sysconfig/network-scripts

2.点击Vmware上面的编辑->虚拟网络编辑器 点开NAT设置,里面可以看到网关IP

3.编辑ifcfg配置文件,修改固定ip,网关地址,DNS映射,子网掩码等

vim  ifcfg-eno16777736

TYPE=Ethernet

#标记显示固定ip

BOOTPROTO=static  
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no

NAME=eno16777736
DEVICE=eno16777736
ONBOOT=yes

#ip地址,这个以tuge1举例,我设定的为100,后面的tuge2,tuge3,tuge4可以分别设置为101,102,103
IPADDR=192.168.40.100

#网关地址,这个根据上面第二步可以获得
GATEWAY=192.168.40.2
NETMASK=255.255.255.0

#DNS地址
DNS1=114.114.114.114
DNS2=8.8.8.8

4.重启服务:service network restart

2.1.2 配置hadoop环境

1.打开tuge1,在/opt/  下面创建一个文件夹hadoop

cd /opt/

mkdir hadoop

2.进入到hadoop,在官网找到对应的hadoop版本进行下载,然后对文件进行解压

cd  hadoop

wget  http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz

tar -xvf  hadoop-3.2.0.tar.gz

2.1.3 配置java环境

3.然后回到/opt/下面创建一个java文件

cd /opt/

mkdir java

4.进入到java,通过ftp将jdk上传到此目录,并进行解压

cd java

tar -xvf jdk-8u221-linux-x64.tar.gz

2.1.4 配置Zookeeper环境

1.进入到 /opt/下面创建zookeeper文件夹

cd /opt/

mkdir zookeeper

2.进入到zookeeper文件夹,下载zookeeper,然后对文件进行解压

cd  zookeeper

wget  http://mirror.bit.edu.cn/apache/zookeeper/stable/apache-zookeeper-3.5.5-bin.tar.gz

tar -xvf apache-zookeeper-3.5.5-bin.tar.gz

2.1.5 将配置写入配置文件

打开/etc/profile 配置Hadoop和Java环境

vim /etc/profile

export JAVA_HOME=/opt/java/jdk1.8.0_221

export HADOOP_HDFS_HOME=/opt/hadoop/hadoop-3.2.0

export HADOOP_CONF_DIR=/opt/hadoop/hadoop-3.2.0/etc/hadoop

export HADOOP_HOME=/opt/hadoop/hadoop-3.2.0

export ZK_HOME=/opt/zookeeper/apache-zookeeper-3.5.5-bin

PATH=$JAVA_HOME/bin:$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$ZK_HOME/bin

CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

export PATH  CLASSPATH

配置好后,使用source /etc/profile 重新加载配置文件。

2.1.6 验证环境配置

java --version

hadoop version

10.将上面配置好的tuge1克隆到tuge2,tuge3,tuge4,并修改对应的ip为101,102,103

有关Linux克隆自行百度

2.1.7 修改主机别名

vim /etc/hostname 修改为tuge1

PS:其它服务器照着配置即可

2.1.8 修改host文件添加映射别名

vim /etc/hosts 添加

192.168.40.100 tuge1

192.168.40.101 tuge2

192.168.40.102 tuge3

192.168.40.103 tuge4

2.2 搭建HDFS-Zookeeper

上面配置好环境后,接下来就是搭建HDFS了。这个可以参照官网一步一步来:

2.2.1 安装SSH

yum install openssh-server

2.2.2 配置免密登陆

cd /.ssh

ssh-keygen -t rsa

ssh-copy-id  localhost

(以上配置四台都执行,然后都能免密访问了)

在tuge1和tuge2服务器之间也设置互相免密,这样方便以后使用journalnode同步

另外把tuge1的密钥分发到tuge2,tuge3,tuge4上面,方便tuge1对所有机器的控制

2.2.3 配置namenode节点为tuge1,tuge2,并设置遇到故障自动切换

编辑hadoop配置文件:

cd /opt/hadoop/hadoop-3.2.0/etc/hadoop

vim hdfs-site.xml

---------------------------------------------

<configuration>
<property>
<!-- DataNode副本数,伪分布模式配置为1 -->
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.http.address</name>
<value>0.0.0.0:50070</value>
</property>
<!-- 启用webhdfs -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>

<!--指定hdfs的nameservice为mycluster,需要和core-site.xml中的保持一致
dfs.ha.namenodes.[nameservice id]为在nameservice中的每一个NameNode设置唯一标示符。
配置一个逗号分隔的NameNode ID列表。这将是被DataNode识别为所有的NameNode。
例如,如果使用"node1"作为nameservice ID,并且使用"nn1"和"nn2"作为NameNodes标示符
-->

<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>

<!-- tuge1下面有一个NameNode,tuge2下面有一个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>

<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>tuge1:9000</value>
</property>

<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>tuge1:50070</value>
</property>

<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>tuge2:9000</value>
</property>

<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>tuge2:50070</value>
</property>

<!-- 指定NameNode的edits元数据的共享存储位置。也就是JournalNode列表
该url的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId
journalId推荐使用nameservice,默认端口号是:8485 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://tuge2:8485;tuge3:8485;tuge4:8485/mycluster</value>
</property>

<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/hadoop/hadoop-3.2.0/ha/jn</value>
</property>

<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>

<!-- 确定处于Active的Node -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id__rsa</value>
</property>
</configuration>

---------------------------------------------

cd /opt/hadoop

vim core.site.xml

-----------------------------------------

<configuration>
<property>
<!-- 元数据文件存放位置,真正使用的时候会被加载到内容中 -->
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/hadoop-3.2.0/ha</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>

<property>
<name>ha.zookeeper.quorum</name>
<value>tuge1:2181,tuge2:2181,tuge3:2181,tuge4:2181</value>
</property>
</configuration>

------------------------------------------

PS:不要忘了,在一台机器上配置即可,然后分发到其它机器就行了

2.2.4 指定DataNode在tuge3和tuge4上

cd /opt/hadoop/hadoop-3.2.0/etc/hadoop

在workers文件里面指定DataNode

vim workers

------------------------

tuge3

tuge4

--------------------------

PS:弄完了分发到其它机器即可

2.2.5 指定zookeeper在tuge1,tuge2,tuge3和tuge4上

cd /opt/zookeeper/apache-zookeeper-3.5.5-bin/conf

将zoo_sample.cfg复制一份重命名为zoo.cfg

cp zoo_sample.cfg zoo.cfg

vim zoo.cfg

-------------------------------------

dataDir=/opt/zookeeper/apache-zookeeper-3.5.5-bin/zkData

server.1=tuge1:2888:3888
server.2=tuge2:2888:3888
server.3=tuge3:2888:3888
server.4=tuge4:2888:3888

------------------------------------

PS:弄完了,进行分发

2.2.6 创建myid文件,指定每台机器的zookeeper ID

cd /opt/zookeeper/apache-zookeeper-3.5.5-bin/

mkdir zkData --其它服务器也相应创建下

touch myid

vim myid  --如果是tuge1就写1,tuge2就写2

---------------------------

1

---------------

PS:分发myid到其它机器,并修改数字

2.2.7 格式化NameNode

在格式化之间,要先开启journalnode

hadoop-daemon.sh start journalnode

并且要关闭防火墙

查看防火墙状态: systemctl status firewalld.service

执行关闭命令: systemctl stop firewalld.service

再次执行查看防火墙命令:systemctl status firewalld.service

执行开机禁用防火墙自启命令  : systemctl disable firewalld.service

做完以上步骤后在以下文件添加点内容:

在start-dfs.sh和stop-dfs.sh文件里面添加

---------------------------------------------

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_JOURNALNODE_USER=root
HDFS_ZKFC_USER=root 在$HADOOP_HOME/etc/hadoop/hadoop-env.sh下面添加
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
export JAVA_HOME=/opt/java/jdk1.8.0_221

-----------------------------------------------

添加完后分发。

然后选择任意一台NameNode开始格式化

hdfs namenode -format

格式化完成后,在另一台同步元数据

hdfs namenode -bootstrapStandby

2.2.8 格式化Zookeeper

首先启动Zookeeper (下面两个命令tuge1,tuge2,tuge3,tuge4都执行一遍)

cd /opt/zookeeper/apache-zookeeper-3.5.5-bin/bin

./zkServer.sh start

查看Zookeeper启动状态

./zkServer.sh status

使用jps查看所有java进程

开始格式化

hdfs zkfc -formatZK

好了,经过无数采坑,按照上面步骤终于搭建完了,最终贴下效果图:

运行命令:

cd /opt/hadoop/hadoop-3.2.0/sbin

./start-dfs.sh

浏览效果:

学习官网: http://hadoop.apache.org/

系列传送门

入门大数据---HDFS-HA搭建的更多相关文章

  1. 入门大数据---HDFS,Zookeeper,ZookeeperFailOverController(简称:ZKFC),JournalNode是什么?

    HDFS介绍: 简述: Hadoop Distributed File System(HDFS)是一种分布式文件系统,设计用于在商用硬件上运行.它与现有的分布式文件系统有许多相似之处.但是,与其他分布 ...

  2. 入门大数据---通过Yarn搭建MapReduce和应用实例

    上一篇中我们了解了MapReduce和Yarn的基本概念,接下来带领大家搭建下Mapreduce-HA的框架. 结构图如下: 开始搭建: 一.配置环境 注:可以现在一台计算机上进行配置,然后分发给其它 ...

  3. 入门大数据---Hive的搭建

    本博客主要介绍Hive和MySql的搭建:  学习视频一天就讲完了,我看完了自己搭建MySql遇到了一堆坑,然后花了快两天才解决完,终于把MySql搭建好了.然后又去搭建Hive,又遇到了很多坑,就这 ...

  4. 入门大数据---Kafka的搭建与应用

    前言 上一章介绍了Kafka是什么,这章就讲讲怎么搭建以及如何使用. 快速开始 Step 1:Download the code Download the 2.4.1 release and un-t ...

  5. 入门大数据---基于Zookeeper搭建Kafka高可用集群

    一.Zookeeper集群搭建 为保证集群高可用,Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里搭建一个三个节点的集群. 1.1 下载 & 解压 下载对应版本 Zooke ...

  6. 入门大数据---基于Zookeeper搭建Spark高可用集群

    一.集群规划 这里搭建一个 3 节点的 Spark 集群,其中三台主机上均部署 Worker 服务.同时为了保证高可用,除了在 hadoop001 上部署主 Master 服务外,还在 hadoop0 ...

  7. 入门大数据---Flume的搭建

    一.下载并解压到指定目录 崇尚授人以渔的思想,我说给大家怎么下载就行了,就不直接放连接了,大家可以直接输入官网地址 http://flume.apache.org ,一般在官网的上方或者左边都会有Do ...

  8. Ambari——大数据平台的搭建利器之进阶篇

    前言 本文适合已经初步了解 Ambari 的读者.对 Ambari 的基础知识,以及 Ambari 的安装步骤还不清楚的读者,可以先阅读基础篇文章<Ambari——大数据平台的搭建利器>. ...

  9. 入门大数据---Flink学习总括

    第一节 初识 Flink 在数据激增的时代,催生出了一批计算框架.最早期比较流行的有MapReduce,然后有Spark,直到现在越来越多的公司采用Flink处理.Flink相对前两个框架真正做到了高 ...

  10. 大数据-hdfs技术

    hadoop 理论基础:GFS----HDFS:MapReduce---MapReduce:BigTable----HBase 项目网址:http://hadoop.apache.org/ 下载路径: ...

随机推荐

  1. [源创] STM32F103ZET6 基于XMODEM 通讯的 BOOTLOADER案列IAP

    网上好多初学者 都想知道如何更好的用IAP,BOOTLOADER 功能 我给大家一个我自己的基于Xmodem的例子, 开发环境  KEIL 5.14 + STD标准库 芯片 STM32F103ZET6 ...

  2. Rocket - diplomacy - DUEB参数模型的设计

    https://mp.weixin.qq.com/s/9PEEpe1pkQDN9RWpOGSUCQ   介绍DUEB参数模型的设计,不包含实现(实现对设计做了简化).     1. DUEB   di ...

  3. 【javascript】京东商品浏览放大镜效果

    1.onclick点击小图可以切换图片 2.onmouseover显示黄色div与放大图片的div 3.onmouseout,2的内容消失 4.onmousemove黄色div跟随鼠标移到,但是不能超 ...

  4. Java实现 蓝桥杯VIP 算法训练 与1连通的点的个数(并查集)

    试题 算法训练 与1连通的点的个数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 没有问题描述. 输入格式 输入的第一行包含两个整数n, m n代表图中的点的个数,m代表边的个数 ...

  5. Java实现 蓝桥杯 算法训练 Number Challenge(暴力)

    试题 算法训练 Number Challenge 资源限制 时间限制:3.0s 内存限制:512.0MB 问题描述 定义d(n)为n的约数个数.现在,你有三个数a,b,c.你的任务是计算下面式子mod ...

  6. C++实现车轮轨迹

    标题:车轮轴迹 栋栋每天骑自行车回家需要经过一条狭长的林荫道.道路由于年久失修,变得非常不平整.虽然栋栋每次都很颠簸,但他仍把骑车经过林荫道当成一种乐趣. 由于颠簸,栋栋骑车回家的路径是一条上下起伏的 ...

  7. Java实现Labeling Balls(拓扑排序的应用)

    1 问题描述 给出一些球,从1N编号,他们的重量都不相同,也用1N标记加以区分(这里真心恶毒啊,估计很多WA都是因为这里),然后给出一些约束条件,< a , b >要求编号为 a 的球必须 ...

  8. Mysql添加索引及索引的优缺点

    一.什么是索引? 索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息. 二.索引的作用? 索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提高 ...

  9. 【asp.net core】7 实战之 数据访问层定义

    0. 前言 在上一篇,我们搭建了一个项目框架,基本上是一个完整的项目.目前而言,大部分的应用基本都是这个结构.好的,不废话了,进入今天的议题:完成并实现数据层的基础实现. 1. 数据实体 通常情况下, ...

  10. 国外程序员整理的Java资源大全(全部是干货)

    原文 译者 唐尤华 翻译自 github akullpp 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Ma ...