当前位置: 首页 > web >正文

怎么在非 hadoop 用户下启动 hadoop

今天有同学反馈一个问题,比较有代表性。说下

问题描述 在 root 用户下 无法执行如下代码

1.linux执行计划 :crontab 加入

42 17 7 5 * /root/hadoop_op.sh

2.hadoop_op.sh内语句:

#!/bin/bash
su - hadoop
cd /opt/module/hadoop-3.3.0/sbin
./start-all.sh
jps

crontab 代码 问题解析

42 17 7 5 * /root/hadoop_op.sh 这行代码是一个 cron job(定时任务)表达式,它会在特定的时间执行指定的命令或脚本。具体解析如下:

  1. 42 17 7 5 *:
    这部分是 cron 定时任务的时间和日期设置,表示任务在何时执行。这个时间格式包含 5 个字段,依次是:

分钟 (Minute):42
表示任务将在每小时的第 42 分钟执行。

小时 (Hour):17
表示任务将在下午 5 点(17:00)执行。

日期 (Day of Month):7
表示任务将在每月的 7 号执行。

月份 (Month):5
表示任务将在每年的 5 月执行。

星期几 (Day of Week):*
星号 (*) 表示任务将在任何星期几执行,也就是说不限制具体的星期几。

  1. /root/hadoop_op.sh:
    这是要执行的脚本文件路径,表示在指定的时间点,系统会运行这个脚本。具体来说,它会运行 /root/hadoop_op.sh 这个文件。

从上文看此代码没有问题
也可以改为每天 17点 42分
要设置 cron job 每天的 17:42 执行,你可以使用以下表达式:

42 17 * * * /root/hadoop_op.sh

解释:
42:表示在每小时的第 42 分钟。
17:表示在 17:00,也就是下午 5 点。
*:表示每天都会执行(没有指定具体的日期或月份)。
*:表示每个月都会执行(没有指定具体的月份)。
*:表示每周的任何一天都会执行(没有指定具体的星期几)。

.hadoop_op.sh 代码 问题解析

在Linux中,su - hadoop命令用于切换到hadoop用户,但在sh脚本中直接使用su可能会遇到问题。具体原因如下:

1. 切换用户:

在脚本中使用su命令时,它通常不会像在终端中直接输入一样生效,因为su是一个交互式命令,需要一个终端来启动一个新的用户会话。如果你在脚本中直接调用su - hadoop,它不会成功切换用户并继续执行后续命令。

su会要求输入hadoop用户的密码,如果没有密码交互,su可能会失败。

2. 解决方法

如果你希望以hadoop用户身份执行脚本中的命令,最好的方式是使用sudo。你可以在脚本中加入sudo来提升权限,或者在脚本外部确保该命令有权限执行。

你可以修改脚本如下:

#!/bin/bash
sudo su - hadoop -c "cd /opt/module/hadoop-3.3.0/sbin && ./start-all.sh && jps"

这样可以确保切换到hadoop用户并执行指定的命令。

在这里插入图片描述

可以看到 切换用户 后 已经启动了,

3. 确保sudo配置:

为了让sudo su - hadoop -c工作,你需要确保hadoop用户具有足够的权限,且能够在不输入密码的情况下执行sudo命令。你可以在sudoers文件中配置hadoop用户,允许其无需密码使用sudo命令。

在/etc/sudoers文件中添加如下行:

建议在root 目录下执行 如下 命令

chmod 755 /etc/sudoers
vi /etc/sudoers

在这里插入图片描述
在这里插入图片描述

改为如下

hadoop ALL=(ALL) NOPASSWD: ALL

4. 注意事项:

由于你的命令中包括了jps,它会显示正在运行的Java进程。如果start-all.sh成功启动了Hadoop集群,jps应该能够列出Hadoop相关进程。

结论:

直接在sh脚本中切换用户并执行其他命令是不可行的。你需要使用sudo来解决权限问题,并通过适当的方式切换用户。

http://www.xdnf.cn/news/4379.html

相关文章:

  • PBR材质-Unity/Blender/UE
  • hadoop的运行模式
  • Web前端技术栈:从入门到进阶都需要学什么内容
  • 【Prompt工程—文生图】案例大全
  • c# LINQ-Query01
  • C 语言编码规范
  • Ubuntu也开始锈化了?Ubuntu 计划在 25.10 版本开始引入 Rust Coreutils
  • 鸿蒙开发——1.ArkTS声明式开发(UI范式基本语法)
  • kotlin一个函数返回多个值
  • 线性代数之矩阵运算:驱动深度学习模型进化的数学引擎
  • 数据可视化与数据编辑器:直观呈现数据价值
  • 在 Ubuntu 中配置 Samba 实现「特定用户可写,其他用户只读」的共享目录
  • SAP如何反查增强点的位置呢?怎么判断这个报错是增强,还是标准信息呢?
  • Postman最佳平替, API测试工具Bruno实用教程(一):基础篇
  • (2025,AR,NAR,GAN,Diffusion,模型对比,数据集,评估指标,性能对比)文本到图像的生成和编辑:综述
  • 2025年渗透测试面试题总结-网络安全、Web安全、渗透测试笔试总结(一)(附回答)(题目+回答)
  • 大模型工具与案例:云服务器部署dify(1)
  • 不同OS版本中的同一yum源yum list差异排查思路
  • Unity垃圾回收(GC)
  • 项目模拟实现消息队列第二天
  • Compose Multiplatform iOS 稳定版发布:可用于生产环境,并支持 hotload
  • C++命名空间、内联与捕获
  • linux环境安装docker
  • AI一键替换商品融入场景,5分钟打造专业级商品图
  • 自编码器(Autoencoder)
  • 遥感数据处理、机器学习建模与空间预测的全流程指南——涵盖R语言(随机森林、XGBoost、SVM等)、特征提取、模型优化及生态学案例分析
  • Ubuntu日志文件清空的三种方式
  • 力扣49. 字母异位词分组(哈希表)
  • suna界面实现原理分析(三):Terminal工具调用可视化
  • 强化学习是AI Agent的进化引擎还是技术枷锁呢?