全方位揭秘!大数据从0到1的完美落地之Hadoop部署完全分布式

Hadoop的安装部署

完全分布式模式
完全分布式介绍

​ 在真实的企业环境中,服务器集群会使用到多台机器,共同配合,来构建一个完整的分布式文件系统。而在这样的分布式文件系统中,HDFS相关的守护进程也会分布在不同的机器上,例如:

  • NameNode守护进程,尽可能的单独部署在一台硬件性能较好的机器中。
  • 其他的每台机器上都会部署一个DataNode守护进程,一般的硬件环境即可。
  • SecondaryNameNode守护进程最好不要和NameNode在同一台机器上。
平台软件说明
平台&软件说明
宿主机操作系统Windows / MacOS
虚拟机操作系统CentOS 7
虚拟机软件Windows: VMWare
MacOS: Parallels Desktop
虚拟机主机名: qianfeng01, IP地址: 192.168.10.101
主机名: qianfeng02, IP地址: 192.168.10.102
主机名: qianfeng03, IP地址: 192.168.10.103
SSH工具Windows: MobaXterm / FinalShell
MacOS: FinalShell / iTerm2
软件包上传路径/root/softwares
软件安装路径/usr/local
JDKX64: jdk-8u321-linux-x64.tar.gz
ARM: jdk-8u321-linux-aarch64.tar.gz
HadoopX64: hadoop-3.3.1.tar.gz
ARM: hadoop-3.3.1-aarch64.tar.gz
用户root
守护进程布局
NameNodeDataNodeSecondaryNameNode
qianfeng01
qianfeng02
qianfeng03
集群搭建准备
  1. 总纲

    1. 三台机器的防火墙必须是关闭的.
    2. 确保三台机器的网络配置畅通(NAT模式,静态IP,主机名的配置)
    3. 确保/etc/hosts文件配置了ip和hostname的映射关系
    4. 确保配置了三台机器的免密登陆认证(克隆会更加方便)
    5. 确保所有机器时间同步
    6. jdk和hadoop的环境变量配置
    
  2. 防火墙关闭

    [root@qianfeng01 ~]# systemctl stop firewalld
    [root@qianfeng01 ~]# systemctl disable firewalld
    [root@qianfeng01 ~]# systemctl stop NetworkManager
    [root@qianfeng01 ~]# systemctl disable NetworkManager
    
    #最好也把selinux关闭掉,这是linux系统的一个安全机制,进入文件中将SELINUX设置为disabled
    [root@qianfeng01 ~]# vi /etc/selinux/config
    .........
    SELINUX=disabled			
    .........
    
  3. 主机映射

    [root@qianfeng01 ~]#  vi /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
    192.168.10.101 qianfeng01  #添加本机的静态IP和本机的主机名之间的映射关系 
    192.168.10.102 qianfeng02
    192.168.10.103 qianfeng03
    
  4. 免密登录

    # 1. 使用rsa加密技术,生成公钥和私钥。一路回车即可
    [root@qianfeng01 ~]# ssh-keygen -t rsa	
    
    # 2. 使用ssh-copy-id命令
    [root@qianfeng01 .ssh]# ssh-copy-id  root@qianfeng01
    [root@qianfeng01 .ssh]# ssh-copy-id  root@qianfeng02
    [root@qianfeng01 .ssh]# ssh-copy-id  root@qianfeng03
    
    # 3. 进行验证	
    [hadoop@qianfeng01 .ssh]# ssh qianfeng01
    [hadoop@qianfeng01 .ssh]# ssh qianfeng02
    [hadoop@qianfeng01 .ssh]# ssh qianfeng03
    
    # 4. 继续在qianfeng02和qianfeng03生成公钥和私钥,给三台节点拷贝。
    
  5. 时间同步

    # 三台节点都要执行的命令
    ntpdate ntp.aliyun.com
    
  6. 安装JDK和配置环境变量

    https://blog.csdn.net/weixin_42044506/article/details/130113633

4.3.3.5. 配置文件
  1. core-site.xml

    <configuration>
        <!-- 设置namenode节点 -->
        <!-- 注意: hadoop1.x时代默认端口9000 hadoop2.x时代默认端口8020 hadoop3.x时代默认端口 9820 -->
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://qianfeng01:9820</value>
        </property>
        
        <!-- hdfs的基础路径,被其他属性所依赖的一个基础路径 -->
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/usr/local/hadoop-3.3.1/tmp</value>
        </property>
    </configuration>
    
  2. hdfs-site.xml

    <configuration>
        <!-- 块的副本数量 -->
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
        <!-- secondarynamenode守护进程的http地址:主机名和端口号。参考守护进程布局 -->
        <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>qianfeng02:9868</value>
        </property>
        <!-- namenode守护进程的http地址:主机名和端口号。参考守护进程布局 -->
        <property>
            <name>dfs.namenode.http-address</name>
            <value>qianfeng01:9870</value>
        </property>
    </configuration>
    
  3. hadoop-env.sh

    export JAVA_HOME=/usr/local/jdk1.8.0_321
    
    # Hadoop3中,需要添加如下配置,设置启动集群角色的用户是谁
    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
    
  4. works

    qianfeng01
    qianfeng02
    qianfeng03
    
  5. 分发

    # 我们已经完成了一个节点的环境配置,其他的节点也需要保持完全相同的配置。我们只需要将qianfeng01节点的配置拷贝到其他的节点即可。
    # 分发之前,先检查自己的节点数据文件是否存在
    # 如果之间格式化过集群,那么会在core-site.xml中配置的hadoop.tmp.dir路径下生成文件,先将其删除
    [root@qianfeng01 ~]# stop-dfs.sh
    [root@qianfeng01 ~]# rm -rf $HADOOP_HOME/tmp
    
    [root@qianfeng01 ~]# cd /usr/local
    [root@qianfeng01 local]# scp -r jdk1.8.0_321/ qianfeng02:$PWD
    [root@qianfeng01 local]# scp -r jdk1.8.0_321/ qianfeng03:$PWD
    
    [root@qianfeng01 local]# scp -r hadoop-3.3.1/ qianfeng02:$PWD
    [root@qianfeng01 local]# scp -r hadoop-3.3.1/ qianfeng03:$PWD
    
    [root@qianfeng01 local]# scp file/profile qianfeng02:/etc/
    [root@qianfeng01 local]# scp file/profile qianfeng02:/etc/
    
4.3.3.6. 格式化集群
hdfs namenode -format
4.3.3.7. 启动集群
start-dfs.sh			# 启动HDFS所有进程(NameNode、SecondaryNameNode、DataNode)
stop-dfs.sh				# 停止HDFS所有进程(NameNode、SecondaryNameNode、DataNode)

hadoop-daemon.sh start namenode				# 只开启NameNode
hadoop-daemon.sh start secondarynamenode	# 只开启SecondaryNameNode
hadoop-daemon.sh start datanode				# 只开启DataNode

hadoop-daemon.sh stop namenode				# 只关闭NameNode
hadoop-daemon.sh stop secondarynamenode		# 只关闭SecondaryNameNode
hadoop-daemon.sh stop datanode				# 只关闭DataNode
4.3.3.8. 进程查看
# qianfeng01节点
[root@qianfeng01 hadoop]# jps
13442 NameNode
13618 DataNode
13868 Jps

# qianfeng02节点
[root@qianfeng02 ~]# jps
10514 SecondaryNameNode
10548 Jps
10405 DataNode

# qianfeng03节点
[root@qianfeng03 ~]# jps
10931 DataNode
11001 Jps
启动日志查看

​ HDFS的角色有三个: NameNode、SecondaryNameNode、DataNode,启动的时候也会有对应的日志文件生成。如果在启动脚本执行之后,发现对应的角色没有启动起来,那就可以去查看日志文件,检查错误的详情,解决问题。

  • 日志的位置: $HADOOP_HOME/logs

  • 日志的命名: hadoop-username-daemon-host.log

    例如:

    • hadoop-root-namenode-qianfeng01.log => qianfeng01节点上的namenode的日志
    • hadoop-root-datanode-qianfeng02.log => qianfeng02节点上的datanode的日志
集群常见问题
  • 格式化集群时,报错原因

    • 当前用户使用不当
    • /etc/hosts里的映射关系填写错误
    • 免密登录认证异常
    • jdk环境变量配置错误
    • 防火墙没有关闭
  • namenode进程没有启动的原因:

    • 当前用户使用不当
    • 重新格式化时,忘记删除${hadoop.tmp.dir}目录下的内容
    • 网络震荡,造成edit日志文件的事务ID序号不连续
  • datanode出现问题的原因

    • /etc/hosts里的映射关系填写错误
    • 免密登录异常
    • 重新格式化时,忘记删除${hadoop.tmp.dir}目录下的内容,造成datanode的唯一标识符不在新集群中。
  • 上述问题暴力解决: 重新格式化

    如果想重新格式化,那么需要先删除每台机器上的${hadoop.tmp.dir}指定路径下的所有内容,然后再格式化:最好也把logs目录下的内容也清空,因为日志内容已经是前一个废弃集群的日志信息了,留着也无用。

案例演示: wordcount
  1. 数据准备

    [root@qianfeng01 ~]# mkdir input && cd input
    [root@qianfeng01 input]# echo "hello world hadoop linux hadoop" >> file1
    [root@qianfeng01 input]# echo "hadoop linux hadoop linux hello" >> file1
    [root@qianfeng01 input]# echo "hadoop linux mysql linux hadop" >> file1
    [root@qianfeng01 input]# echo "hadoop linux hadoop linux hello" >> file1
    [root@qianfeng01 input]# echo "linux hadoop good programmer" >> file2
    [root@qianfeng01 input]# echo "good programmer qianfeng good" >> file2
    
  2. 上传到集群

    # 将数据上传到HDFS
    [root@qianfeng01 input]# hdfs dfs -put ~/input/ /
    # 检查是否已经上传成功
    [root@qianfeng01 input]# hdfs dfs -ls -R /
    drwxr-xr-x   - root supergroup          0 2022-01-28 13:11 /input
    -rw-r--r--   1 root supergroup         31 2022-01-28 13:11 /input/file
    -rw-r--r--   1 root supergroup        127 2022-01-28 13:11 /input/file1
    -rw-r--r--   1 root supergroup         59 2022-01-28 13:11 /input/file2
    
  3. 执行任务

    [root@qianfeng01 input]# hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input /output
    
  4. 查看结果

    [root@qianfeng01 input]# hdfs dfs -cat /output/*
    good	3
    hadoop	9
    hadop	2
    hello	3
    linux	10
    mysql	2
    programmer	2
    qianfeng	1
    world	1
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值