hive遇到的问题:The ownership on the staging directory /tmp/hadoop-yarnis not as expectedThe directory mus

本文记录了一次在使用Hive过程中遇到的权限问题及其解决过程。主要问题是当使用root用户执行Hive查询时,因目录所有者为hadoop而导致权限不足。通过调整目录所有者和权限,最终成功执行了查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搭建好了hive,由于切换到hadoop无法进入hive,权限不足,于是切换到root,执行:

hive history file=/tmp/hadoop/hive_job_log_hadoop_201407010908_503942368.txt
hive>
hive>select count(*) from test;
后出现:

java.io.IOException: The ownership on the staging directory /tmp/hadoop-yarn/staging/root/.staging is not as expected. It is owned by hive. The directory must be owned by the submitter root or by root
	at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:120)
	at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:146)
	at org.apache.hadoop.mapreduce.Job$11.run(Job.java:1341)
	at org.apache.hadoop.mapreduce.Job$11.run(Job.java:1338)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:421)
如上省略了一些,这问题提示是需要root权限,退出hive,执行:

hadoop fs -chown -R root:root /tmp
然而并未修改成功:

chmod: changing permissions of '/tmp/hadoop-yarn': Permission denied: user=root, access=EXECUTE, inode="/tmp":hive:hive:drwxrwx--

切换成hadoop用户,执行上面的修改权限指令,成功!原因。。。。是因为root没有权限修改hadoop?因为我的所有权是hadoop的,这问题待解答。。

上面命令修改后:结果如下:

hive> SELECT COUNT(*) FROM test;
Query ID = root_20180128162626_f875d94a-9ada-47c0-8af8-b9b37271c64a
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapreduce.job.reduces=<number>
Starting Job = job_1517036563281_0005, Tracking URL = http://master:8088/proxy/application_1517036563281_0005/
Kill Command = /usr/local/hadoop/bin/hadoop job  -kill job_1517036563281_0005
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
2018-01-28 16:26:58,698 Stage-1 map = 0%,  reduce = 0%
2018-01-28 16:27:06,402 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 1.32 sec
2018-01-28 16:27:13,780 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 2.05 sec
MapReduce Total cumulative CPU time: 2 seconds 50 msec
Ended Job = job_1517036563281_0005
MapReduce Jobs Launched: 
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 2.05 sec   HDFS Read: 6436 HDFS Write: 2 SUCCESS
Total MapReduce CPU Time Spent: 2 seconds 50 msec
OK
0
Time taken: 33.905 seconds, Fetched: 1 row(s)






<think>首先,用户的问题是关于Hive启动错误:有两个具体错误:1. "Permission denied on /tmp/niit/stderr";2. "Unable to determine Hadoop version information"。我需要基于系统指令和参考引用来回答。 系统指令: - 所有行内数学表达式用$...$,但我在这里可能不需要数学表达式,因为主题是Hive错误。 - 独立公式用$$...$$,但同样,可能不适用。 - LaTeX语法正确:确保任何公式正确。 - 使用中文回答:整个回答必须是中文。 - 生成相关问题:在回答后添加相关问题- 引用段落末尾添加引用标识:如[^1]。 - 回答结构清晰,逐步解决问题- 参考站内引用:用户提供了两个引用,但它们是关于Hadoop和Linux权限问题的,不是直接关于Hive的。我需要基于这些来推断解决方案。 用户的问题Hive启动时出现权限错误和无法获取Hadoop版本信息。参考引用是关于权限问题的解决,比如使用chown或使用root用户。 关键点: 1. 权限错误:Permission denied on /tmp/niit/stderr。这类似于引用[1]中的Hadoop权限问题。 2. 无法获取Hadoop版本信息:这可能与Hadoop配置或权限相关。 可能的解决方案: - 对于权限错误:检查/tmp/niit/stderr文件的权限。确保运行Hive的用户(如hivehadoop)有读写权限。使用chmod或chown命令更改权限。 - 参考引用[1]:使用sudo chown -R hadoop:hadoop /path/to/directory来授权。 - 对于无法获取Hadoop版本信息:这可能是因为Hadoop没有正确安装或配置,或者权限问题导致无法访问Hadoop的版本文件。检查HADOOP_HOME环境变量,确保Hadoop命令可以执行。 步骤化回答: 1. **确认用户环境**:假设用户使用Linux系统,Hive依赖于Hadoop。 2. **解决权限错误**: - 检查/tmp/niit/stderr文件的权限:使用ls -l /tmp/niit/stderr查看权限。 - 如果权限不足,使用chmod或chown更改。例如:sudo chown hive:hive /tmp/niit/stderr或sudo chmod 777 /tmp/niit/stderr(但777不安全,最好指定用户)。 - 参考引用[1],建议使用root用户启动以避免权限问题,但这可能不是最佳实践。 3. **解决无法获取Hadoop版本信息**: - 确保Hadoop已正确安装和配置。检查HADOOP_HOME环境变量是否设置正确。 - 运行hadoop version命令,看是否能输出版本信息。如果不能,可能是Hadoop安装问题- 如果权限问题,检查Hadoop安装目录的权限。 4. **一般建议**:确保所有相关目录(如/tmp, Hive日志目录)有适当权限。 引用应用:在回答中,当提到权限解决方案时,引用参考[1],因为它处理了类似的权限问题。 生成相关问题:在回答后添加相关问题,如示例所示。 回答结构: - 开头:简述问题- 逐步解决方案。 - 结尾:相关问题。</think>### Hive 启动错误:Permission denied on /tmp/niit/stderr and Unable to determine Hadoop version information 的解决方法 Hive 启动时出现权限错误和无法获取 Hadoop 版本信息的问题,通常是由文件系统权限不足或 Hadoop 配置问题引起的。以下我将逐步解释原因并提供解决方案,确保操作安全可靠。整个过程基于 Linux 系统环境(如 Ubuntu 或 CentOS),并假设您已安装 HadoopHive。 #### 步骤 1: 解决 "Permission denied on /tmp/niit/stderr" 错误 此错误表示运行 Hive 的用户(如 `hive` 或 `hadoop`)没有足够的权限访问 `/tmp/niit/stderr` 文件或目录。这类似于 Hadoop 集群启动时的常见权限问题[^1]。请按顺序操作: 1. **检查文件权限**: - 运行命令查看权限:`ls -l /tmp/niit/stderr`。 - 如果输出显示用户或组不是 Hive 的运行用户(例如 `hive:hive`),则需修改权限。 2. **修改文件所有权**: - 使用 `chown` 命令将所有权授予 Hive 用户。例如,如果您的 Hive 用户是 `hive`: ```bash sudo chown -R hive:hive /tmp/niit ``` `-R` 参数递归修改整个目录的权限。 - 参考引用[1],权限问题通常通过授权命令解决,例如 `sudo chown -R user:group /path` 能有效处理类似错误[^1]。 3. **调整文件权限**: - 如果所有权已正确,但权限不足,运行: ```bash sudo chmod 755 /tmp/niit/stderr # 755 表示所有者有读写执行权限,其他用户有读执行权限 ``` - 避免使用 `chmod 777`(全局读写),因为它会降低系统安全性。 4. **验证结果**: - 重新启动 Hive 服务:`hive --service metastore` 或 `hive`。 - 如果错误依旧,检查 Hive 日志(通常在 `/var/log/hive`)确认具体路径。 **原因分析**:Hive 在运行时需要写入临时文件(如 stderr),如果 `/tmp/niit` 目录权限不足,会导致操作失败。这与 Hadoop 启动时的 "Permission denied" 错误本质相同[^1]。 #### 步骤 2: 解决 "Unable to determine Hadoop version information" 错误 此错误表示 Hive 无法检测 Hadoop 版本,通常由 Hadoop 配置错误、环境变量未设置或权限问题引起。Hive 依赖 Hadoop 的库和命令,如果 Hadoop 本身有问题Hive 将无法获取版本信息。 1. **检查 Hadoop 安装和权限**: - 运行 `hadoop version` 命令。如果输出 "Permission denied",参考步骤 1 的方法检查 Hadoop 安装目录权限(如 `/usr/local/hadoop`): ```bash sudo chown -R hadoop:hadoop /usr/local/hadoop # 将 hadoop 替换为您的实际用户 ``` - 引用[1] 表明,权限不足时授权是核心解决方案[^1]。 - 确保 Hadoop 进程已启动:运行 `jps` 查看是否有 `NameNode`、`DataNode` 等进程。 2. **设置环境变量**: - 确认 `HADOOP_HOME` 环境变量已正确设置。编辑 `~/.bashrc` 或 `/etc/profile` 文件: ```bash export HADOOP_HOME=/usr/local/hadoop # 替换为您的 Hadoop 安装路径 export PATH=$PATH:$HADOOP_HOME/bin ``` - 应用更改:`source ~/.bashrc`。 3. **验证 Hadoop 功能**: - 运行简单 Hadoop 命令测试:`hadoop fs -ls /`。如果失败,修复 Hadoop 本身的问题(如重新安装或检查配置文件)。 4. **检查 Hive 配置**: - 编辑 Hive 配置文件 `hive-site.xml`,确保 `hive.exec.scratchdir` 指向有写权限的目录(如 `/tmp/hive`),而非默认的 `/tmp/niit`: ```xml <property> <name>hive.exec.scratchdir</name> <value>/tmp/hive</value> </property> ``` - 创建并授权该目录: ```bash sudo mkdir /tmp/hive sudo chown -R hive:hive /tmp/hive ``` #### 步骤 3: 综合验证和预防措施 - **重启服务**: - 先重启 Hadoop:`stop-all.sh` 然后 `start-all.sh`。 - 再启动 Hive:`hive --service metastore`。 - **使用 root 用户(可选)**: - 如果问题持续,临时使用 root 用户启动集群可避免权限问题[^1],但不推荐生产环境使用(有安全风险)。 - **日志分析**: - 检查 Hive 错误日志:`tail -f /var/log/hive/hive.log`,定位具体失败点。 - **预防建议**: - 始终以专用用户(如 `hive`)运行 Hive,并确保所有相关目录(如 `/tmp`, Hadoop bin 目录)有统一权限。 - 定期运行 `hadoop checknative` 验证 Hadoop 原生库兼容性。 通过以上步骤,大多数权限和配置问题都能解决。如果问题依旧,请提供更多错误日志或系统详情以便进一步分析。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值