linux - 伪分布式运行Hadoop时,hadoop.tmp.dir应该放在什么目录下?

标签 linux ubuntu configuration hadoop hbase

默认情况下,Hadoop 将 hadoop.tmp.dir 设置为您的/tmp 文件夹。这是一个问题,因为当您重新启动时/tmp 会被 Linux 清除,从而导致 JobTracker 出现这个可爱的错误:

2012-10-05 07:41:13,618 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: localhost/127.0.0.1:8020. Already tried 0 time(s).    
...    
2012-10-05 07:41:22,636 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: localhost/127.0.0.1:8020. Already tried 9 time(s).
2012-10-05 07:41:22,643 INFO org.apache.hadoop.mapred.JobTracker: problem cleaning system directory: null
java.net.ConnectException: Call to localhost/127.0.0.1:8020 failed on connection exception: java.net.ConnectException: Connection refused
    at org.apache.hadoop.ipc.Client.wrapException(Client.java:767)    

我发现解决此问题的唯一方法是重新格式化您的名称节点,这会重建/tmp/hadoop-root 文件夹,当您重新启动时,该文件夹当然会再次被清除。

所以我继续创建了一个名为/hadoop_temp 的文件夹,并为所有用户提供了读/写权限。然后我在我的 core-site.xml 中设置这个属性:

 <property>
          <name>hadoop.tmp.dir</name>
          <value>file:///hadoop_temp</value>
 </property>

当我重新格式化我的 namenode 时,Hadoop 似乎很高兴,给我这个消息:

12/10/05 07:58:54 INFO common.Storage: Storage directory file:/hadoop_temp/dfs/name has been successfully formatted.

但是,当我查看/hadoop_temp 时,我注意到该文件夹​​是空的。然后当我重新启动 Hadoop 并检查我的 JobTracker 日志时,我看到了这个:

2012-10-05 08:02:41,988 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: localhost/127.0.0.1:8020. Already tried 0 time(s).
...
2012-10-05 08:02:51,010 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: localhost/127.0.0.1:8020. Already tried 9 time(s).
2012-10-05 08:02:51,011 INFO org.apache.hadoop.mapred.JobTracker: problem cleaning system directory: null
java.net.ConnectException: Call to localhost/127.0.0.1:8020 failed on connection exception: java.net.ConnectException: Connection refused

当我检查我的 namenode 日志时,我看到了这个:

2012-10-05 08:00:31,206 INFO org.apache.hadoop.hdfs.server.common.Storage: Storage directory /opt/hadoop/hadoop-0.20.2/file:/hadoop_temp/dfs/name does not exist.
2012-10-05 08:00:31,212 ERROR org.apache.hadoop.hdfs.server.namenode.FSNamesystem: FSNamesystem initialization failed.
org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /opt/hadoop/hadoop-0.20.2/file:/hadoop_temp/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.

所以,很明显我没有配置正确的东西。即使我在 core-site.xml 中将 hadoop.tmp.dir 设置为/hadoop_temp,Hadoop 仍然希望在/tmp 文件夹中看到它的文件。我做错了什么? hadoop.tmp.dir 可接受的“正确”值是多少?

额外的问题:我应该为 hbase.tmp.dir 使用什么?

系统信息:

Ubuntu 12.04, Apache Hadoop .20.2, Apache HBase .92.1

感谢您的关注!

最佳答案

感谢 Hadoop 邮件列表上的 Harsh 帮助我解决这个问题。引用他的话:

“在基于 0.20.x 或 1.x 的版本上,不要为 hadoop.tmp.dir 使用 file:///前缀。”

我去掉了 file://前缀,它起作用了。

关于linux - 伪分布式运行Hadoop时,hadoop.tmp.dir应该放在什么目录下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12749163/

相关文章:

c - 构建步骤时的 Eclipse 工件名称变量

PHP DomDocument 类不存在

linux - 使用 perl 将文本文件中的字符替换为其他字符

c - 段错误,while 循环中的 fgets

ubuntu - Upstart ubuntu apt-get install 配置失败

unix - 在 unix 中退出 vi 编辑器

postgresql - PostgreSQL 安装的配置建议

c++ - 使用 apt 安装在 Ubuntu 20.04 LTS 上找不到 c++ boost 头文件

makefile - VSCode 任务将 $Parameter 传递给命令?

mysql - 函数在不同的服务器上变得区分大小写