【问题标题】:Doubts in HDFS and Hadoop 1.0.3HDFS 和 Hadoop 1.0.3 中的疑点
【发布时间】:2012-10-02 19:47:23
【问题描述】:

我对 Hadoop 还很陌生,我一直在尝试设置我的本地机器并运行一些示例来了解该过程的工作原理。我已经在我的 MAC 上设置了 hadoop 1.0.3。我有一系列问题,我会在描述我到目前为止所做的事情时问他们。我遵循了here 的指示。

虽然我设置了独立操作,但最终使用了伪分发。 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.) 文档 here 要求我使用 bin/hdfs dfs 所以它会是 $HADOOP_HOME/bin/hdfs dfs -mkdir WordCount_input 但这给了我 hdfs: command not found 错误?

我使用 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/ 输出

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

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

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

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

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

【问题讨论】:

    标签: macos hadoop hdfs


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

    2. 您不应多次运行 format。它初始化namenode的元数据。

    3. 我不知道为什么会这样说。 hadoop fs -mkdir WordCount_input 是你应该使用的。

    4. 它们是一样的。

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

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

    【讨论】:

      【解决方案2】:

      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 配置的分区上有多少可用空间?如果您的磁盘上没有剩余空间,那么您就没有太多可以做的其他释放空间或移动到新分区了。

      【讨论】:

      • 所以如果我想运行一个新的 map reduce 程序,我可以删除 HDFS 中的输入和输出文件吗?我没有在我的 hdfs-site.xml 中配置 dfs.data.dir。如果我不指定这个,它会假定默认位置吗?如果我停止我的 hadoop 实例,HDFS 中的文件会被删除吗?
      • 是的,您可以删除输出目录,或者为每个作业命名一个新的输出目录。除非不再需要,否则无需删除输入数据。如果您没有配置位置,请在数据节点日志文件中查看默认位置的指示。如果您停止 HDFS,文件将持续存在并且在 HDFS 重新启动时可用
      • 在运行工作时,我看到类似这张地图的东西 30% 减少 5%。我虽然减速器在开始之前等待映射器完成。这是什么意思?
      • 有一个 slowstart 配置属性可以控制这一点,但是如果你有已经完成的映射器,那么可以将输出复制到运行你的减速器的节点以加快工作速度(而不是等待你所有的映射器完成然后复制输出)
      • 我无法从回收站中删除 jar,因为它仍在使用中。我相信 jar 作为job.jar 存在于datanode 或namenode 中。如果我想从事新工作,我该如何清理?你说格式化namenode应该做一次!!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 2013-03-22
      • 2018-05-21
      • 2016-03-31
      • 2013-01-08
      • 1970-01-01
      • 2013-08-14
      相关资源
      最近更新 更多