0

我对 Hadoop 相当陌生,我一直在尝试设置我的本地机器并运行一些示例来了解该过程是如何工作的。我已经在我的 MAC 上设置了 hadoop 1.0.3。我有一系列问题,我会在描述我到目前为止所做的事情时问他们。我按照这里的说明进行操作。

我虽然设置了独立操作,但最终使用了伪分发。Q1.) 有什么区别?

编辑了我的 .bash_profile

export HADOOP_HOME=/Library/hadoop-1.0.3
export JAVA_HOME=$(/usr/libexec/java_home)

在 OS X 上创建到 localhost 的无密码 ssh。然后$ ssh localhost

然后$ $HADOOP_HOME/bin/hadoop namenode -formatQ2.) 每次我开始一项新工作时我应该格式化 namenode 吗?什么被格式化了?

然后$HADOOP_HOME/bin/start-all.sh

我想运行 wordcount 示例。所以我不得不把输入放在 HDFS 中。为此我做到了hadoop fs -mkdir WordCount_input

Q3.)这里的文档要求我使用它,但这给了我 hdfs: command not found 错误?bin/hdfs dfs$HADOOP_HOME/bin/hdfs dfs -mkdir WordCount_input

我使用put将文件放在 HDFS 中。

hadoop dfs -put
/Users/yv/Documents/Hadoop-Workspace/file01
/Users/yv/Documents/Hadoop-Workspace/file02
/user/yv/WordCount_input

Q4)使用 copyFromLocal 而不是 put 更好吗?

Q5.) 我创建的这些文件位于 /user/yv/ 中。/user/yv/ 到底在哪里?它们是否在我在 core-site.xml 中指定的 hadoop.tmp.dir 位置内

然后我运行了这个例子

hadoop jar Documents/Hadoop-Workspace/wordcount.jar org.myorg.WordCount /user/yv/WordCount_input/ output

因此,如果我必须再次运行相同的示例,我必须删除输出文件并创建一个新文件。

运行几个示例后,数据节点没有足够的空间?在集群摘要下 NameNode 的 Web 界面中,所有内容都变为 0(例如:DFS Remaining:0GB,Live Node:0)。不知道为什么。

所以我做到了$HADOOP_HOME/bin/stop-all.sh。并重新格式化了namenode。因此namenode和datanode的namespaceID变得不同。这是个问题。

所以我不得不删除我的 hadoop.tmp.dir 并从头开始做所有事情

Q.6)如果数据节点没有足够的空间,有人可以提供一个简单的解决方案吗?如何释放空间?

4

2 回答 2

1
  1. 我相信独立模式在一个进程中运行整个作业,而伪分布式只是将作业跟踪器和任务节点拆分为单独的进程,就像它们在真实集群中一样。伪分布式可能是发展的方式。

  2. 您不应多次运行 format 。它初始化名称节点的元数据。

  3. 我不确定它为什么这么说。hadoop fs -mkdir WordCount_input是你应该使用的。

  4. 他们是一样的。

  5. 数据存储在 中的dfs.data.dir属性指定的位置hdfs-site.xml。但是,它可能无法直接理解,因为 HDFS 使用非用户友好的目录和命名结构。如果你想检查内容,你应该使用hadoop fs命令。

  6. 这完全取决于硬件。没有什么复杂的事情发生 - 如果您的文件比磁盘上的空间多,那么除了购买更大的驱动器或删除文件之外,您无能为力。对于本地开发/测试,您也可以设置dfs.replication为 1,但这对于生产系统来说是一个非常糟糕的主意。

于 2012-10-02T23:33:06.343 回答
1

Q1)请参阅此页面:http ://hadoop.apache.org/docs/r1.0.3/single_node_setup.html ,但通常 Standalone 会将所有文件存储在本地文件系统(无 HDFS)上,并且当您运行 MapReduce 作业时,您将在单个 JVM 中运行该作业。您可以在独立模式下执行的操作有一些限制(例如,仅限于单个 reducer,并且没有分布式缓存)。

伪分布式模式意味着您正在运行一个真实的 Hadoop 实例(NameNode、DataNode、Job Tracker、Task Tracker),但它们都在 localhost 上运行。您可以访问 hadoop 的更多特性/功能(多个减速器、分布式缓存、HDFS 等),但缺少一些只有适当的分布式集群才能提供的东西(数据复制/冗余、任务故障转移)

Q2) 如果您想删除 HDFS(分布式文件系统)中的所有内容,您应该只重新格式化名称节点。您不需要在作业之间对其进行格式化

Q3)这在文档中似乎是错误的(可能是与 Hadoop 2 相关的文档)。bin 文件夹中没有 hdfs 脚本(根据您看到的错误消息)。

要创建一个目录,您应该使用bin/hadoop fs -mkdir WordCount_input

Q4)这两个命令是同义词(hadoop fs -help copyFromLocal实际上在它显示的帮助中注意到了这一点)

Q5)它们存储在HDFS中,你不能直接在本地文件系统上找到文件,但是它们存储在 hdfs-site.xml 属性中配置的位置dfs.data.dir,但是文件存储为块,并且namenode维护了一个映射在文件名和块名之间。

Q6) 您配置的分区上有多少可用空间dfs.data.dir?如果磁盘上没有剩余空间,那么您就没有太多可以做的其他释放空间或移动到新分区了。

于 2012-10-02T23:41:23.977 回答