在Windows上运行Apache Hadoop 2.1.0

时间:2013-09-05 07:14:57

标签: windows hadoop

我是Hadoop的新手,并且在尝试在我的Windows 7计算机上运行它时遇到了问题。特别是我对运行Hadoop 2.1.0感兴趣,因为release notes提到支持在Windows上运行。我知道我可以尝试在Windows上使用Cygwin运行1.x版本,或者甚至使用已准备好的VM,例如Cloudera,但这些选项在某些方面对我来说不太方便。

检查了来自http://apache-mirror.rbc.ru/pub/apache/hadoop/common/hadoop-2.1.0-beta/的tarball后,我发现确实有一些* .cmd脚本可以在没有Cygwin的情况下运行。当我编写HDFS分区时,一切正常,但是当我尝试运行hdfs namenode守护进程时,我遇到了两个错误:首先,非致命,是找不到winutils.exe(它确实没有在下载的tarball中出现) 。我在Apache Hadoop源代码树中找到了该组件的源代码,并使用Microsoft SDK和MSbuild对其进行了编译。由于详细的错误消息,很明显在哪里放置可执行文件来满足Hadoop。但是第二个致命的错误并没有包含足够的信息供我解决:

13/09/05 10:20:09 FATAL namenode.NameNode: Exception in namenode join
java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
    at org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Native Method)
    at org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:423)
    at org.apache.hadoop.fs.FileUtil.canWrite(FileUtil.java:952)
    at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.analyzeStorage(Storage.java:451)
    at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverStorageDirs(FSImage.java:282)
    at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:200)
...
13/09/05 10:20:09 INFO util.ExitUtil: Exiting with status 1

看起来应该编译其他东西。我将尝试使用Maven从源代码构建Hadoop但是不是更简单的方法吗?是不是有一些选项 - 我知道不是可以禁用本机代码并使该tarball在Windows上可用?

谢谢。

更新。确实是的。 "自制"包中包含一些额外的文件,最重要的是winutils.exe和hadoop.dll。使用此文件,namenode和datanode成功启动。我认为问题可以结束。如果有人遇到同样的困难,我没有删除它。

更新2.建立自制"自制"包我做了以下:

  1. 有消息来源,并打开包装。
  2. 仔细阅读BUILDING.txt。
  3. 已安装的依赖项:
    3a)Windows SDK 7.1
    3b)Maven(我使用3.0.5) 3c)JDK(我使用1.7.25)
    3d)ProtocolBuffer(我使用2.5.0 - http://protobuf.googlecode.com/files/protoc-2.5.0-win32.zip)。仅将编译器(protoc.exe)放入某些PATH文件夹就足够了 3e)一组UNIX命令行工具(我安装了Cygwin)
  4. 启动Windows SDK的命令行。开始|所有节目| Microsoft Windows SDK v7.1 | ...命令提示符(我修改了此快捷方式,在命令行中添加选项/发行版以构建本机代码的发行版本)。所有后续步骤均来自SDK命令行窗口内部)
  5. 设置环境:

    设置JAVA_HOME = {path_to_JDK_root}

  6. 似乎JAVA_HOME 绝不能包含空格!

    set PATH={path_to_maven_bin};%PATH%  
    set Platform=x64  
    set PATH={path_to_cygwin_bin};%PATH%  
    set PATH={path_to_protoc.exe};%PATH%  
    
    1. 将dir更改为源根文件夹(BUILDING.txt警告路径长度有一些限制,因此源根目录应该有短名称 - 我使用D:\ hds)
    2. 建设过程:

      mvn package -Pdist -DskipTests

    3. 你可以试试没有' skipTests'但在我的机器上,一些测试失败了,建筑物终止了。它可能与BUILDING .txt中提到的sybolic链接问题有关。 8.在hadoop-dist \ target \ hadoop-2.1.0-beta中选择结果(Windows可执行文件和dll位于' bin'文件夹中)

13 个答案:

答案 0 :(得分:17)

我已按照以下步骤安装Hadoop 2.2.0

为Windows构建Hadoop bin分发的步骤

  1. 下载并安装Microsoft Windows SDK v7.1。

  2. 下载并安装Unix命令行工具Cygwin。

  3. 下载并安装Maven 3.1.1。

  4. 下载Protocol Buffers 2.5.0并解压缩到一个文件夹(比如c:\ protobuf)。

  5. 添加环境变量JAVA_HOME,M2_HOME和平台(如果尚未添加)。 注意:变量名称平台区分大小写。并且值可以是x64或Win32,用于在64位或32位系统上构建。 编辑路径变量以添加Cygwin的bin目录(比如C:\ cygwin64 \ bin),Maven的bin目录(比如C:\ maven \ bin)和Protocol Buffers的安装路径(比如c:\ protobuf)。

  6. 下载hadoop-2.2.0-src.tar.gz并解压缩到具有短路径的文件夹(例如c:\ hdfs),以避免因Windows中的最大路径长度限制而导致运行时问题。

  7. 选择开始 - >所有程序 - > Microsoft Windows SDK v7.1并打开Windows SDK 7.1命令提示符。将目录更改为Hadoop源代码文件夹(c:\ hdfs)。使用选项-Pdist,native-win -DskipTests -Dtar执行mvn包以创建Windows二进制tar分发。

  8. 如果在上一步中一切顺利,那么将在C:\ hdfs \ hadoop-dist \ target \ hadoop-2.2.0目录中创建本机发行版hadoop-2.2.0.tar.gz。 / p>

  9. 安装Hadoop

    1. 将hadoop-2.2.0.tar.gz解压缩到一个文件夹(比如c:\ hadoop)。

    2. 添加环境变量HADOOP_HOME并编辑路径变量以添加HADOOP_HOME的bin目录(例如C:\ hadoop \ bin)。

    3. 配置Hadoop

      <强> C:\的hadoop \等\的hadoop \芯-site.xml中

      <configuration>
              <property>
                      <name>fs.defaultFS</name>
                      <value>hdfs://localhost:9000</value>
              </property>
      </configuration>
      

      <强> C:\的hadoop \等\的hadoop \ HDFS-site.xml中

      <configuration>
              <property>
                      <name>dfs.replication</name>
                      <value>1</value>
              </property>
              <property>
                      <name>dfs.namenode.name.dir</name>
                      <value>file:/hadoop/data/dfs/namenode</value>
              </property>
              <property>
                      <name>dfs.datanode.data.dir</name>
                      <value>file:/hadoop/data/dfs/datanode</value>
              </property>
      </configuration>
      

      <强> C:\的hadoop \等\的hadoop \ mapred-site.xml中

      <configuration>
              <property>
                 <name>mapreduce.framework.name</name>
                 <value>yarn</value>
              </property>
      </configuration>
      

      C:\ hadoop \ etc \ hadoop \ yarn-site.xml

      <configuration>
              <property>
                 <name>yarn.nodemanager.aux-services</name>
                 <value>mapreduce_shuffle</value>
              </property>
              <property>
                 <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
                 <value>org.apache.hadoop.mapred.ShuffleHandler</value>
              </property>
      </configuration>
      

      格式名称节点

      仅限第一次,namenode需要格式化。

      C:\Users\abhijitg>cd c:\hadoop\bin 
      c:\hadoop\bin>hdfs namenode –format
      

      启动HDFS(Namenode和Datanode)

      C:\Users\abhijitg>cd c:\hadoop\sbin
      c:\hadoop\sbin>start-dfs
      

      启动MapReduce又名YARN(资源管理器和节点管理器)

      C:\Users\abhijitg>cd c:\hadoop\sbin
      c:\hadoop\sbin>start-yarn
      starting yarn daemons
      

      将自动打开四个单独的命令提示符窗口以运行 Namenode,Datanode,资源管理器,节点管理器

      参考:Build, Install, Configure and Run Apache Hadoop 2.2.0 in Microsoft Windows OS

答案 1 :(得分:14)

我遇到了同样的问题但最近的hadoop v.2.2.0。以下是解决该问题的步骤:

  1. 我从源代码构建了winutils.exe。项目目录:

    hadoop-2.2.0-src\hadoop-common-project\hadoop-common\src\main\winutils

    我的操作系统:Windows 7.用于构建的工具:用于Windows桌面的MS Visual Studio Express 2013(它是免费的,可以从http://www.microsoft.com/visualstudio/加载)。 打开Studio,File -> Open -> winutils.sln。右键单击右侧的解决方案 - &gt; Build。 在我的情况下有几个错误(您可能需要修复项目属性,指定输出文件夹)。 中提琴!你得到winutils.exe - 把它放进hadoop的垃圾箱里。

  2. 接下来我们需要构建hadoop.dll。 这里有一些木头魔法:开放

    hadoop-2.2.0-src\hadoop-common-project\hadoop-common\src\main\native\native.sln

    在MS VS中;右键点击解决方案 - &gt;建立。 我收到了一堆错误。我手动创建了几个丢失的头文件(不要问我为什么在源tarball中错过了它们!):

    https://github.com/jerishsd/hadoop-experiments/tree/master/sources

    (并且不要问我git上的这个项目是什么用的!我不知道 - 谷歌通过搜索头文件名来指出它) 我已经复制了

    hadoop-2.2.0-src\hadoop-common-project\hadoop-common\target\winutils\Debug\libwinutils.lib

    (步骤#1的结果)进入

    hadoop-2.2.0-src\hadoop-common-project\hadoop-common\target\bin

    最后构建操作产生hadoop.dll! 把它再次放入hadoop的bin中,愉快地运行namenode!

  3. 希望我的步骤可以帮助某人。

答案 2 :(得分:14)

Han准备了Hadoop 2.2 Windows x64二进制文件(请参阅他的blog)和uploaded them to Github

将两个二进制文件winutils.exehadoop.dll放入%hadoop_prefix%\bin文件夹后,我得到了相同的UnsatisfiedLinkError

问题是缺少hadoop.dll的某些依赖关系。我使用Dependency Walker来检查二进制文件的依赖关系,但Microsoft Visual C++ 2010 Redistributables丢失了。

因此除了自己构建所有组件之外,问题的答案是

  • 确保为Java和本机代码使用相同的体系结构。 java -version会告诉您是否使用32或x64。
  • 然后使用Dependency Walker确保所有本机二进制文件都是纯粹的并且具有相同的体系结构。有时缺少x64依赖项,Windows会回退到x86,这不起作用。见answer of another question
  • 还要检查是否满足本机二进制文件的所有依赖项。

答案 3 :(得分:6)

除了其他解决方案,here是winutil.exe的预构建副本。将其加载并添加到$ HADOOP_HOME / bin。它对我有用。

(资料来源:Click here

答案 4 :(得分:6)

请将hadoop.dll(版本敏感)添加到Windows目录下的system32目录。

您可以在winutils

获取hadoop.dll

答案 5 :(得分:4)

我建议Windows优化

,而不是使用官方分支

http://svn.apache.org/repos/asf/hadoop/common/branches/branch-trunk-win/

你需要编译它,在windows下构建winutils.exe并将它放在hadoop / bin目录中

答案 6 :(得分:4)

您可能需要将hadoop-common-bin中的 hadoop.dll winutils.exe 文件复制到%HADOOP_HOME%\ bin 将%HADOOP_HOME%/ bin添加到%PATH%变量。

您可以从https://github.com/amihalik/hadoop-common-2.6.0-bin

下载hadoop-common

答案 7 :(得分:3)

我在Windows 8.1上遇到了与Hadoop 2.4.1相同的问题;主要由较新的操作系统引起的最终解决方案存在一些差异。

我首先安装了Hadoop 2.4.1二进制文件,将其解压缩到% HADOOP_HOME %。

之前的答案描述了如何设置Java,protobuf,cygwin和maven以及所需的环境变量。我不得不从HP奇怪的'BCD'值改变我的平台环境变量。

我从Apache镜像下载了源代码,并将其解压缩到一个简短的目录中( HADOOP_SRC = C:\ hsrc)。 Maven从该目录中的标准Windows命令提示符运行良好: mvn package -DskipTests

我没有使用Windows 7 SDK(我无法加载)或Windows 8.1 SDK(没有命令行构建工具),而是使用了免费的 Microsoft Visual Studio Express 2013 Windows桌面。 Hadoop的构建需要PATH中的MSBuild位置(C:\ Program Files(x86)\ MSBuild \ 12.0),并要求将各种Hadoop本机源项目升级到较新的(MS VS 2013)格式。 maven构建失败足以指出每个项目失败时的绝对路径,从而可以轻松地将项目加载到Visual Studio中(在询问后自动转换)。

构建完成后,我将本机可执行文件和库复制到Hadoop bin目录中。它们是在% HADOOP_SRC %\ hadoop-common-project \ hadoop-common \ target \ bin中构建的,需要复制到% HADOOP_HOME %\ bin。

答案 8 :(得分:2)

将hadoop.dll和hdfs.dll添加到%HADOOP_HOME%\ bin文件夹为我做了诀窍。

答案 9 :(得分:1)

刚刚在我的环境win7 X64中安装了Hadoop 2.2.0。

在BUILD.txt之后让我做到了。注意:hdfs-site.xml和mapred-site.xml中的dir以/ like开头

E.G

  <property>
<name>dfs.namenode.name.dir</name>
<value>file:/hadoop-2.2.0_1/dfs/name</value>
<description></description>
<final>true</final>

可以帮助你!

答案 10 :(得分:0)

Download&amp;在c:/java/

中安装Java
  

如果在程序中安装了java,请确保路径是这样的   文件&#39;,然后hadoop-env.cmd将无法识别java路径

Download Hadoop二进制分发。

  

我正在使用二进制分发Hadoop-2.8.1。另外我建议尽可能缩短提取路径

设置环境变量:

JAVA_HOME = "c:/Java"
HADOOP_HOME="<your hadoop home>"
Path= "JAVA_HOME/bin"
Path = "HADOOP_HOME/bin" 
  

如果使用maven构建Hadoop-src,Hadoop将在Windows上运行   你的Windows机器。构建Hadoop-src(发布)将   创建一个Hadoop二进制发行版,它将作为Windows本机   版本

但如果您不想这样做,请下载预先构建的winutils of Hadoop distribution. 这是一个GitHub link,它有一些Hadoop版本的winutils。

  

如果您使用的版本不在列表中,请按照   在Windows上设置Hadoop的传统方法 - link

如果找到了您的版本,请将文件夹的所有内容复制粘贴到路径:/ bin /

  

设置所有.xml配置文件 - Link&amp;在hadoop-env.cmd文件中设置JAVA_HOME路径

从cmd转到:

<HADOOP_HOME>/bin/> hdfs namenode -format
<HADOOP_HOME>/sbin> start-all.cmd

希望这有帮助。

答案 11 :(得分:0)

  1. Get Hadoop二进制文件(包括winutils.exehadoop.dll
  2. 确保hadoop \ bin可通过 PATH (如果作为服务运行,则为系统PATH)可用

    请注意,设置java.library.path 会覆盖 PATH。如果您设置了java.library.path,请确保它正确无误并指向hadoop库。

答案 12 :(得分:0)

经过多次尝试和错误,我可以使用以下解决方案。

Windows更改:

  1. https://github.com/steveloughran/winutils下载winutils的zip
  2. 将邮政编码提取到C:\winutils
  3. 打开Windows Environment Variables屏幕并添加以下System Variable

HADOOP_HOME = C:\ winutils \ hadoop-3.0.0

  1. Path系统变量下添加

%HADOOP_HOME%\ bin 5.重新启动系统。

重要更改:

  <properties>

    <java.version>1.8</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

    <scala.version>2.12</scala.version>
    <spark.version>3.0.1</spark.version>
    <hadoop.version>3.0.0</hadoop.version>  <!-- Note: HADOOP Version used is the one available for winutils -->

  </properties>

  <dependencies>

    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_${scala.version}</artifactId>
      <version>${spark.version}</version>
<!--  <scope>provided</scope> -->
    </dependency>

    <!-- Hadoop-->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-common</artifactId>
      <version>${hadoop.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>${hadoop.version}</version>
    </dependency>

    <!-- For S3 Read (optional) -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-aws</artifactId>
      <version>${hadoop.version}</version>
    </dependency>