(大数据开发随笔9)Hadoop 3.3.x分布式环境部署——全分布式模式

news/2023/11/28 17:36:46

索引

    • 完全分布式模式
      • 守护进程布局
      • 集群搭建准备
        • 总纲
        • 配置文件
        • 格式化集群
        • 启动集群
      • 集群控制命令
        • 集群启停
        • 进程查看
        • 启动日志查看
        • 集群常见问题
      • 案例演示:WordCount

完全分布式模式

  • 分布式文件系统中,HDFS相关的守护进程也分布在不同的机器上,如:
    • NameNode守护进程,尽可能单独部署在一台硬件性能较好的机器中
    • 其他的每台机器上都会部署一个DataNode进程,一般的硬件环境即可
    • SecondaryNameNode守护进程最好不要和NameNode在同一台机器上

守护进程布局

NameNodeDataNodeSecondaryNameNode
主机名1
主机名2
主机名3

集群搭建准备

总纲

  • 三台机器的防火墙关闭
    • 最好把selinux也关掉,vi /etc/selinux/config——SELINUX=disabled
  • 三台机器网络配置通畅(NAT模式,静态IP,主机名的配置)
  • /etc/host文件配置了ip和hostname的映射关系
  • 配置了三台机器的免密登录认证
  • 时间同步
  • jdk和hadoop环境变量配置

配置文件

  • `cd $HADOOP_HOME/etc/hadoop``

    • ``vi core-site.xml`

      <configuration><!-- 设置namenode节点 --><property><name>fs.defaultFS</name><value>hdfs://lanr:9820</value></property><!-- hdfs的基础路径,被其他属性所依赖的一个基础路径 --><property><name>hadoop.tmp.dir</name><value>/usr/local/hadoop-3.3.1/tmp</value></property>
      </configuration>
    • vi hdfs-site.xml

      <configuration><!-- 块的副本数量 --><property><name>dfs.replication</name><value>3</value></property><!-- secondarynamenode守护进程的http地址;主机名:端口号 --><property><name>dfs.namenode.secondary.http-address</name><value>lanr2:9868</value></property><!-- namenode守护进程的http地址;主机名:端口号 --><property><name>dfs.namenode.http-address</name><value>lanr:9870</value></property>
      </configuration>
    • vi hadoop-env.sh

      export JAVA_HOME=/usr/local/jdk1.8.0_321export HDFS_NAMENODE_USER=root
      export HDFS_DATANODE_USER=root
      export HDFS_SECONDARYNAMENODE_USER=root
      # export YARN_RESOURCEMANAGER_USER=root
      # export YARN_NODEMANAGER_USER=root
      
    • vi workers(删除已有的localhost)

      主机名1
      主机名2
      主机名3
      
    • 分发:其他节点也需要保持相同的配置

      rm -rf $HADOOP_HOME/tmpcd /usr/local/
      scp -r jdk1.8.0_321/ hadoop-3.3.1/ lanr2:$PWD
      scp -r jdk1.8.0_321/ hadoop-3.3.1/ lanr3:$PWDscp /etc/profile lanr2:/etc/
      scp /etc/profile lanr3:/etc/
      

格式化集群

  • hdfs namenode -format(仅在主机名1上运行)

启动集群

  • start-dfs.sh(仅在主机名1上运行)

  • jps分别查看三个机器的节点:

    image-20230315113746763

    image-20230315113756979

    image-20230315113804920

  • 访问:192.168.{你的网段}.101 查看节点运行状态

    image-20230315114117539

集群控制命令

集群启停

start-dfs.sh  # 启动HDFS所有进程(NameNode、SecondaryNameNode、DataNode)
stop-dfs.sh  # 停止HDFS所有进程(NameNode、SecondaryNameNode、DataNode)# hdfs --daemon start 单独启动一个进程
# 补充:daemon译为,守护进程
# 该命令只会启动当前机器上的进程,若当前机器上没有部署特定节点,则无法启动
hdfs --daemon start namenode
hdfs --daemon start secondarynamenode
hdfs --daemon start datanode# hdfs --daemon stop 单独停止一个进程
hdfs --daemon stop namenode
hdfs --daemon stop secondarynamenode
hdfs --daemon stop datanodehdfs --workers --daemon start datanode # 启动所有机器上的datanode
hdfs --workers --daemon stop datanode # 停止所有机器上的datanode
# 在哪台机器上运行都可以

进程查看

jps # 查看当前机器上的进程# 查看所有机器上的进程情况
cd /opt/
mkdir bin
cd bin
vi jps-cluster.sh # 创建脚本# 添加如下程序:
# -----------------复制以下内容----------------------
#!/bin/bashHOSTS=( lanr lanr2 lanr3 )for HOST in ${HOSTS[*]}
doecho "---------- $HOST ----------"ssh -T $HOST << DELIMITERjps | grep -iv jpsexit
DELIMITERdone
# -----------------复制以上内容----------------------sudo chmod a+x jps-cluster.sh # 赋予执行权限
ln -s /opt/bin/jps-cluster.sh /usr/bin/ # 软链接
  • 启动集群:start-dfs.sh;查看进程:jps-cluster.sh

    image-20230315121018354

启动日志查看

  • 启动节点进程时若出现问题,可以查看日志文件
  • 日志的位置:$HADOOP_HOME/logs/
  • 日志的命名:hadoop-username-daemon-hostname.log
  • 补充:shift g跳转到文件最后;gg跳转到文件开头
  • 查找error、warn日志:esc——/error——enter——n查找下一个,shift n查找上一个

集群常见问题

  • 格式化集群时报错:
    • 当前用户使用不当
      • 普通用户可能没有在hadoop安装路径下的权限
    • /etc/hosts 里映射关系错误
    • 免密登录认证异常
    • jdk环境变量配置错误
    • 防火墙没有关闭
  • namenode进程没有启动:
    • 当前用户使用不当
    • 重新格式化时,忘记删除${hadoop.tmp.dir}目录下的内容
    • 网络震荡,造成edit日志文件的事务ID序号不连续
  • datanode出现问题:
    • /etc/host 里映射关系错误
    • 免密登录异常
    • 重新格式化时,忘记删除${hadoop.tmp.dir}目录下的内容,造成datanode的唯一标识符不在集群中
  • 上述问题的暴力解决方法:重新格式化
    • 若想重新格式化,先需要删除每台机器上的${hadoop.tmp.dir}指定路径下的所有内容,然后再进行格式化;最好把logs目录下的内容也清空
      • cd $HADOOP_HOME/——rm -rf logs/ tmp/ (三个节点都要进行删除)
      • rm -rf dfs/data/* dfs/name/* (三个节点都要进行删除)
      • 格式化集群:hdfs namenode -format (仅在主机名1上运行)

案例演示:WordCount

  • 数据准备

    cd ~
    mkdir input && cd input
    echo "hello world hadoop linux hadoop" >> file1
    echo "hadoop linux world hadoop linux hadoop" >> file1
    echo "hello world hadoop linux hadoop" >> file1
    echo "hello world hadoop linux hadoop" >> file1
    echo "hello good programmer hadoop linux hadoop" >> file2
    echo "hello world hadoop linux hadoop ok nice" >> file2
    
  • 上传到集群

    cd ~
    hdfs dfs -put input/ /
    hdfs dfs -ls -R /  # 递归查看hdfs上的文件夹与文件
    hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input /output  # 该input、output文件夹是在hdfs上的,不是linux本地的 且输出路径不能已存在
    hdfs dfs -cat /output/*  # 查看结果
    

http://www.ppmy.cn/news/42690.html

相关文章

什么是数组?数组常用API方法

什么是数组&#xff1f; 索引从0开始,并且存放相同结构元素的集合叫数组&#xff0c;数组&#xff08;Array&#xff09;是有序的元素序列&#xff0c;数据的组合&#xff0c;也是一种最简单的复合数据类型&#xff0c;它是有序数据的集合&#xff0c;数组中的每个元素具有相同…

C++内存管理详解

大家好&#xff0c;这里是bang_bang&#xff0c;今天来分享下内存管理的知识。 目录 1.C/C内存分布 2.C内存管理方式 2.1new/delete操作内置类型 2.2new/delete操作自定义类型 3.operator new与operator delete函数 3.1operator new 3.2operator delete 4.new和delete的实现…

Spring之寻找注入点详解

Spring在属性填充过程中&#xff0c;需要判断属性和方法是否为一个注入点&#xff0c;然后根据注入点找到对象赋值或者创建Bean进行赋值。 1、最外层属性赋值 public PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName) {// 寻找注入点…

【ROS2指南-2】入门 turtlesim 和 rqt

目标&#xff1a;安装并使用 turtlesim 包和 rqt 工具为即将到来的教程做准备。 教程级别&#xff1a;初学者 时间&#xff1a; 15分钟 内容 背景 先决条件 任务 1 安装turtlesim 2 启动turtlesim 3 使用turtlesim 4 安装rqt 5 使用 rqt 6 重新映射 7 关闭turtlesim …

第一次习题总结

目录 求第K个数 求逆序对的数量 数的三次方根 一维前缀和 二维前缀和&#xff08;子矩阵的和&#xff09; 求第K个数 思路&#xff1a;用快速选择&#xff0c;时间复杂度为O(N) sl和sr是左边和右边数的个数&#xff0c;当k<sl&#xff0c;即倒数第K个数在左边范围内&#x…

96年阿里P7晒出工资单:狠补了这个,真香...

最近一哥们跟我聊天装逼&#xff0c;说他最近从阿里跳槽了&#xff0c;我问他跳出来拿了多少&#xff1f;哥们表示很得意&#xff0c;说跳槽到新公司一个月后发了工资&#xff0c;月入5万多&#xff0c;表示很满足&#xff01;这样的高薪资着实让人羡慕&#xff0c;我猜这是税后…

Debian 10配置apt源常见问题

目录 一&#xff1a;配置本地apt源没有发现文件 解决方案 二&#xff1a;apt下载bind9报错E: Package bind9 has no installation candidate 方法一&#xff1a; 方法二&#xff1a;更新不报错但是安装依旧报错E: Package bind9 has no installation candidate 一&#xff…

( “树” 之 DFS) 101. 对称二叉树 ——【Leetcode每日一题】

101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 提示&#xff1a…

Leetcode.858 镜面反射

题目链接 Leetcode.858 镜面反射 Rating &#xff1a; 1881 题目描述 有一个特殊的正方形房间&#xff0c;每面墙上都有一面镜子。除西南角以外&#xff0c;每个角落都放有一个接受器&#xff0c;编号为 0&#xff0c; 1&#xff0c;以及 2。 正方形房间的墙壁长度为 p&#…

IO流基础

目录 1.FileOutPutStream字节输入流 1.1FileOutPutStream使用 1.1.1创建对象 FileOutPutStream fos new FileOutPutStream("路径或者File对象")&#xff1b; 1.1.2.写数据 调用write方法&#xff0c;参数是int类型&#xff0c;但传入文件中是asci…

C++ 23 实用工具(二)绑定工具

C 23 实用工具&#xff08;二&#xff09;绑定工具 Adaptors for Functions std::bind、std::bind_front、std::bind_back和std::function这四个函数非常适合一起使用。 其中&#xff0c;std::bind、std::bind_front和std::bind_back可以让您即时创建新的函数对象&#xff0c…

计及调度经济性的光热电站储热容量配置方法

目录 1 主要内容 目标函数 光热电站能量传递过程 2 部分程序 3 程序结果 4 程序链接 1 主要内容 该程序复现《计及调度经济性的光热电站储热容量配置方法》模型&#xff0c;综合考虑火电机组发电成本、光热发电并网消纳的环境效益和运行维护成本、系统旋转备用成本等调度…

JAVA数据结构之顺序表、单向链表及双向链表的设计和API实现

一、顺序表 顺序表在内存中是数组的形式存储 类名SequenceList构造方法SequenceList(int capacity)&#xff1a;创建容量为capacity的SequenceList对象成员方法1. public void clear()&#xff1a;空置线性表 2. public boolean isEmpty()&#xff1a;判断线性表是否为空&…

IO多路复用机制详解

高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型&#xff0c;常见的IO模型有四种&#xff1a; &#xff08;1&#xff09;同步阻塞IO&#xff08;Blocking IO&#xff09;&#xff1a;即传统的IO模型。 &#xff08;2&#xff09;同步非阻塞IO&#xff08;Non-blo…

uniapp中canvas绘制图片内容空白报错原因总结

uniapp中canvas绘制图片内容空白报错原因总结&#xff0c;看完需要10分钟 问题图: 效果图&#xff1a; 目录 &#x1f9e8;&#x1f9e8;&#x1f9e8;首先定义画布canvas canvas画布初始值没有&#xff0c;导致没有绘制成功 &#x1f9e8;&#x1f9e8;&#x1f9e8;2.绘制图…

【程序员面试】最全指南,如何准备,如何投递,以及面试攻略大全分享!

今天我们继续来分享秋招 大家对怎么找到心仪的offer心里没底 于是我这一节来说说这一块 这一节的话主要有7个小点 第一个就是秋招为什么重要 第二个是应该去哪里找信息 第三个是你该怎么去投递信息 第四个是你应该做什么准备 第五个就是面试技巧 第六个就是资料大全第七个就是总…

【简陋Web应用3】实现人脸比对

文章目录&#x1f349; 前情提要&#x1f337; 效果演示&#x1f95d; 实现过程1. utils.py2. compare.html3. forms.py4. insightface_api.py5. app.py&#x1f345; 记录1. Bugs1.1 cv2.imshow()报错1.2 insightface人脸检测标注框错乱(&#x1f4a2;)2. 杂记&#x1f33e; 小…

处理用户输入

shell脚本编程系列 传递参数 向shell脚本传递数据的最简单方法是使用命令行参数 比如 ./add 10 30读取参数 bash shell会将所有的命令行参数都指派给位置参数的特殊变量。其中$0对应脚本名、$1是第一个参数、$2是第二个参数&#xff0c;依次类推&#xff0c;直到$9 #!/bin/b…

华为OD机试真题目录汇总 C++ 代码解答版

&#x1f680;前言 本文是华为OD机试真题(C)专栏的目录贴&#xff08;持续更新中…&#xff09; 专栏介绍&#xff1a;收集各个阶段的华为OD机试真题&#xff0c;每日更新&#xff0c; 最全、最新的华为OD实际机考的真题&#xff0c;本专栏将会使用C语言进行讲解&#xff0c;帮…

Redis -List

Redis List 本章介绍redis 的List的数据结构 Redis列表是字符串值的链表。Redis列表经常用于&#xff1a; 1、实现堆栈和队列 2、为后台工作系统提供队列管理 例如&#xff1a; 第一种情况&#xff0c;将List视为一种先进先出的队列 Treat a list like a queue (first in, fi…
最新文章