Linux - HDFS部署

前言

以下操作环境均在Centos7服务器上面,一共四台服务器,node1、node2、node3、node4

准备&安装

官网下载hadoop,看准自己需要的版本,我自己这里就下载一个旧的版本使用了(3.2.3)

在这里插入图片描述

集群分布

node1node2node3node4
zookeeperzookeeperzookeeper
NameNodeSecondaryNameNode
DataNodeDataNodeDataNode

配置

下载之后上传至其中一台服务器上,先配置好一天在将文件传给其他服务器上面,以下操作在node2上

mkdir /usr/local/hadoop   # 创建hadoop使用的目录
mkdir /usr/local/hadoop/full  # 创建一个目录后面配置使用
tar -zxvf hadoop-3.2.3.tar.gz   # 解压hadoop安装包
mv hadoop-3.2.3 /usr/local/hadoop/   # 移动解压后的安装包到目录
rm -rf /usr/local/hadoop/hadoop-3.2.3/share/doc/  # 删除hadoop文档,方便后面传输速度
vim /etc/profile   # 添加环境变量,在文件的最后添加

编辑profile文件添加

export HADOOP_HOME=/usr/local/hadoop/hadoop-3.2.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

命令行执行

source /etc/profile   # 刷新文件
scp /etc/profile node1:/etc   # 将环境文件传给node1
scp /etc/profile node3:/etc   # 将环境文件传给node3
scp /etc/profile node4:/etc   # 将环境文件传给node4
# 由于node1上面没有zookeeper,传输的环境文件中有,将node1上的zookeeper环境删除
source /etc/profile  # 刷新4台机器上的环境文件

node2命令行

cd /usr/local/hadoop/hadoop-3.2.3/etc/hadoop   # 进入到hadoop需要配置的文件夹中,
vim hadoop-env.sh   # 进入配置,具体查看下面需要添加的配置
vim workers   # 配置datanode节点,hadoop3.0之前的版本是slaves文件,具体查看下面需要添加的配置
vim hdfs-site.xml  # 配置SecondaryNameNode位置,具体查看下面需要添加的配置
vim core-site.xml  # 配置namenode位置,具体查看下面需要添加的配置

编辑hadoop-env.sh文件

/JAVA_HOME  # 使用vim命令搜索Java配置路径,有的话就修改,没有的话就添加
export JAVA_HOME=/usr/local/jdk/jdk  # 添加上我们的jdk路径

编辑workers文件

node2
node3
node4

编辑hdfs-site.xml文件,进入文件查找到<configuration>标签,在标签中进行添加,同时可参考官网的配置文件

<configuration>
     <!-- SecondaryNameNode位置 -->
     <property>
         <name>dfs.namenode.secondary.http-address</name>
         <value>node2:9868</value>
     </property>
     <!-- 副本数 -->
     <property>
          <name>dfs.replication</name>
          <value>2</value>
     </property>
</configuration>

编辑core-site.xml文件,进入文件查找到<configuration>标签,在标签中进行添加,同时可参考官网的配置文件

<configuration>
	 <!-- 指定namenode地址 -->
     <property>
          <name>fs.defaultFS</name>
          <value>hdfs://node1:9000</value>
     </property>
     <!-- 指定hadoop临时目录位置 -->
     <property>
          <name>hadoop.tmp.dir</name>
          <value>file:/usr/local/hadoop/full</value>
     </property>
</configuration>

node2命令行

cd /usr/local   # 进入到此位置,准备传文件
scp -r hadoop/ node1:/usr/local/   # 传给node1
scp -r hadoop/ node3:/usr/local/   # 传给node3
scp -r hadoop/ node4:/usr/local/   # 传给node4

node1命令行

hdfs namenode -format   # 格式化namenode
start-dfs.sh   # 启动
jps   # 可以通过查看进程,看四台机器是否启动

验证

浏览器打开 http://node1:9870
9870为默认端口,想自定义的话可以配置hdfs-site.xml文件,按照官网的文档配置即可
在这里插入图片描述
node2命令行

hdfs dfs -mkdir /usr   # 创建dfs文件夹
hdfs dfs -D dfs.blocksize=1048576 -put xxx.gz /usr  # 指定块大小为1M,查看块的副本,每个块必定在node2上留有副本(从那个datanode上传时每个块都会在那个节点产生副本)

node1命令行

hdfs dfs -D dfs.blocksize=1048576 -put xxxx.gz /usr  # 指定块大小为1M,查看块的副本,由于从namenode上传,所以与上面的不同

NameNode 高可用

集群分布

node1node2node3node4
zookeeperzookeeperzookeeper
NameNodeSecondaryNameNode
DataNodeDataNodeDataNode
ZooKeeperFailoverControllerZooKeeperFailoverController
JournalNodeJournalNodeJournalNode

首先关闭dfs

stop-dfs.sh
vim hdfs-site.xml   # 具体查看下面需要添加的配置,与上面有些配置重复,可以先将上面的配置删除
vim core-site.xml   # 具体查看下面需要添加的配置,与上面有些配置重复,可以先将上面的配置删除

编辑hdfs-site.xml文件

<!-- 指定副本的数量,同上 -->
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
  <!-- 解析参数dfs.nameservices值hdfs://mycluster的地址 -->
  <property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
  </property>
  <!-- mycluster由以下两个namenode支撑 -->
  <property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2</value>
  </property>
  <!-- 指定nn1地址和端口号  -->
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>node1:8020</value>
  </property>
  <!-- 指定nn2地址和端口号  -->
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>node2:8020</value>
  </property>
  <!-- 指定客户端查找active的NameNode的策略:会给所有NameNode发请求,以决定哪个是active的 -->
  <property>
    <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
  <!-- 指定三台JournalNode服务器的地址 -->
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>
  </property>
  <!-- JournalNode日志编辑文件存储的目录 -->
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/usr/local/hadoop/ha/jnn</value>
  </property>
  <!-- 当active NameNode出现故障时,ssh到对应的服务器,将namenode进程kill掉  -->
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
  </property>
  <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 -->
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>
       sshfence
       shell(/bin/true)
    </value>
  </property>
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
  </property>
  <!--启动NN故障自动切换 -->
  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
</configuration>

编辑core-site.xml文件

<configuration>
     <!-- 此处进行了修改,nameservice,名字需要与上面的hdfs-site.xml第二个配置相同-->
     <property>
          <name>fs.defaultFS</name>
          <value>hdfs://mycluster</value>
     </property>
     <!-- 此处进行了修改,文件地址进行修改-->
     <property>
          <name>hadoop.tmp.dir</name>
          <value>/usr/local/hadoop/ha</value>
     </property>
     <!-- 添加此配置,指定每个zookeeper服务器的位置和客户端端口号 -->
     <property>
          <name>ha.zookeeper.quorum</name>
          <value>node2:2181,node3:2181,node4:2181</value>
     </property>
</configuration>

然后将进行修改的两个文件分发到其他三台机子上

scp hdfs-site.xml core-site.xml node2:$PWD/
scp hdfs-site.xml core-site.xml node3:$PWD/
scp hdfs-site.xml core-site.xml node4:$PWD/

node1,node2,node3命令行操作,除了node4

hdfs --daemon start journalnode   # 启动JournalNode

node1命令行

hdfs namenode -format   # 格式化NameNode
hdfs --daemon start namenode   # 启动NameNode

node2命令行

hdfs namenode -bootstrapStandby   # 在node2上同步元数据

node1命令行

hdfs zkfc -formatZK   # 在zookeeper上创建节点
start-dfs.sh   # 启动hdfs
jps   # 查看进程

在这里插入图片描述

可以使用命令将active状态的NameNode的节点关闭,通过http://node1:9870或者http://node2:9870查看会不会自动切换
报错可以去看以下Hadoop日志,出现问题先把Hadoop相关进程都关了,然后修改问题,重新回到配置后的步骤重新格式化(已经格式化十几次了😂)。

异常

在使用start-dfs.sh启动hdfs时报错
异常一:
node2: ssh: connect to host node2 port 22: Connection refused
本人的ssh端口并不是22所以这里会报异常,修改vim hadoop-env.sh文件,修改后传给其他几台机器,添加

export HADOOP_SSH_OPTS="-p 22022"  # 22022为ssh端口

异常二:
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting launch.

cd /usr/local/hadoop/hadoop-3.2.3/sbin   # 进入文件夹
vim start-dfs.sh    
vim stop-dfs.sh

为上面的两个文件添加相同配置,在文件的上面添加

HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_JOURNALNODE_USER=root
HDFS_ZKFC_USER=root

修改后传给其他几台机器

本专栏为大数据学习专栏,如有问题还望指出,共同学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

week@eight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值