本地文件系统上的Hadoop

5

我正在伪分布式模式下运行Hadoop。我希望通过将HDFS抽象化来从本地文件系统读写任务。我使用file:///参数。

我遵循了这个链接的指示。

这是core-site.xml文件的内容,

<configuration>
 <property>
  <name>hadoop.tmp.dir</name>
  <value> /home/abimanyu/temp</value>   
 </property>

 <property>
  <name>fs.default.name</name>
  <value>hdfs://localhost:54310</value>
 </property>

</configuration>

这是mapred-site.xml文件的内容。
<configuration>

 <property>
  <name>mapred.job.tracker</name>
  <value>localhost:54311</value>
 </property>

 <property>
    <name>fs.default.name</name>
    <value>file:///</value>
 </property>

 <property>
    <name>mapred.tasktracker.map.tasks.maximum</name>
    <value>1</value>
 </property>

 <property>
    <name>mapred.tasktracker.reduce.tasks.maximum</name>
    <value>1</value>
 </property>

</configuration>

这是hdfs-site.xml文件的内容。
<configuration>

 <property>
  <name>dfs.replication</name>
  <value>1</value>
 </property>
</configuration>

当我尝试启动守护进程(使用start-dfs或start-all)时,会出现以下错误:

localhost: Exception in thread "main" java.lang.IllegalArgumentException: Does not contain a valid host:port authority: file:///
localhost:      at org.apache.hadoop.net.NetUtils.createSocketAddr(NetUtils.java:164)
localhost:      at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:212)
localhost:      at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:244)
localhost:      at org.apache.hadoop.hdfs.server.namenode.NameNode.getServiceAddress(NameNode.java:236)
localhost:      at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.initialize(SecondaryNameNode.java:194)
localhost:      at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.<init>(SecondaryNameNode.java:150)
localhost:      at org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode.main(SecondaryNameNode.java:676)

对我来说奇怪的是,这个从本地文件系统读取的操作在hadoop-0.20.2中完全正常,但在hadoop-1.2.1中却不行。从最初版本到后来的版本有什么变化吗?请告诉我如何为Hadoop JAR从本地文件系统读取。


你能详细说明你更新的配置文件具体位于哪里吗?另外,你的HADOOP_HOME变量指向哪里? - Charles Menguy
我已经在/home/abimanyu/binaries安装了Hadoop,因此我认为这是我的HADOOP_HOME。 - Learner
1个回答

6
您可以将 mapred-site.xml 文件中的 fs.default.name 值移除 - 这个值应该只在 core-site.xml 文件中定义。
如果您想在本地文件系统上以伪分布式模式运行,通常需要在 core-site.xml 中将 fs.default.name 值设置为 file:///(当前已配置为 hdfs://localhost:54310)。
您看到的堆栈跟踪是辅助名称节点启动时出现的 - 在运行“本地模式”时不需要这个节点,因为没有 fsimage 或 edits 文件可供 2NN 使用。
请修改 core-site.xml 和 mapred-site.xml 文件。停止所有 hadoop 守护进程,然后只启动 map-reduce 守护进程(作业跟踪器和任务跟踪器)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接