在Windows上运行Apache Hadoop 2.1.0

我是Hadoop的新手,遇到了试图在Windows 7机器上运行它的问题。 特别是我对运行Hadoop 2.1.0感兴趣,因为它的发行说明提到在Windows上运行是受支持的。 我知道我可以尝试使用Cygwin在Windows上运行1.x版本,甚至可以使用例如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源代码树中find了这个组件的源代码,并用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的源代码构buildHadoop,但不是一个更简单的方法吗? 是不是有一些选项,我不知道,可以禁用本机代码,并使该压缩包在Windows上可用?

谢谢。

更新。 确实是的。 “自制软件”包含一些额外的文件,最重要的是winutils.exe和hadoop.dll。 这个文件的namenode和datanode启动成功。 我想这个问题可以结束。 如果有人遇到同样的困难,我不会删除它。

更新2.build立“自制”包我做了以下几点:

  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 | …命令提示符(我修改了这个快捷方式,在命令行添加选项/释放来构build本地代码的发行版本)。 接下来的所有步骤都是从SDK命令行窗口中进行的)
  5. build立环境:

    set JAVA_HOME = {path_to_JDK_root}

看来,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. 更改目录到源根目录文件夹(BUILDING.txt警告,对path长度有一些限制,所以sources root应该有短名称 – 我用D:\ hds)
  2. 冉build设过程:

    mvn包-Pdist -DskipTests

您可以尝试不使用'skipTests',但在我的机器上,一些testing失败,build筑被终止。 它可能会连接到BUILDING .txt中提到的sybolic链接问题。 8.在hadoop-dist \ target \ hadoop-2.1.0-beta(windows可执行文件和dll在'bin'文件夹中)中选取结果

我有同样的问题,但最近hadoop诉2.2.0。 这是我解决这个问题的步骤:

  1. 我已经从源码build立winutils.exe 。 项目目录:

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

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

  2. 接下来我们需要构buildhadoop.dll 。 这里有一些木偶奇术:开放

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

    在MS VS中; 右键点击解决scheme – >构build。 我有一堆的错误。 我手动创build了几个错过的头文件(不要问我为什么在源码包中错过了):

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

    (不要问我在git上的项目是什么!我不知道 – 谷歌通过search头文件名称指出)我已经复制

    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

    最后build立操作生成hadoop.dll! 再把它放进hadoop的bin,快乐地运行namenode!

希望我的步骤能帮助别人。

我遵循以下步骤来安装Hadoop 2.2.0

为Windows构buildHadoop bin分发的步骤

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

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

  3. 下载并安装Maven 3.1.1。

  4. 下载协议缓冲区2.5.0并解压缩到一个文件夹(如c:\ protobuf)。

  5. 添加环境variablesJAVA_HOME,M2_HOME和Platform(如果尚未添加)。 注意:variables名称平台区分大小写。 在64位或32位系统上构build的值将是x64或Win32。 编辑pathvariables来添加Cygwin的bin目录(比如C:\ cygwin64 \ bin),Maven的bin目录(比如C:\ maven \ bin)以及Protocol Buffers的安装path(比如c:\ protobuf)。

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

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

  8. 如果在前一步一切顺利,那么将在C:\ hdfs \ hadoop-dist \ target \ hadoop-2.2.0目录中创build本地分发hadoop-2.2.0.tar.gz。

安装Hadoop

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

  2. 添加环境variablesHADOOP_HOME并编辑Path Variable来添加HADOOP_HOME的bin目录(比如C:\ hadoop \ bin)。

configurationHadoop

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

只有第一次,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(资源pipe理器和节点pipe理器)

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

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

参考: 在Microsoft Windows操作系统中构build,安装,configuration和运行Apache Hadoop 2.2.0

Han已经准备好了Hadoop 2.2 Windows x64二进制文件(请参阅他的博客 )并将它们上传到Github 。

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

问题是hadoop.dll一些依赖hadoop.dll丢失。 我使用Dependency Walker来检查二进制文件的依赖关系,并且缺lessMicrosoft Visual C ++ 2010 Redistributables 。

所以除了自己构build所有的组件外,问题的答案是

  • 确保为Java和本机代码使用相同的体系结构。 java -version告诉你,如果你使用32或x64。
  • 然后使用Dependency Walker来确保所有本机二进制文件都是纯文本,并且具有相同的体系结构。 有时x64依赖项丢失,Windows回退到x86,这不起作用。 看到另一个问题的答案 。
  • 还检查是否满足本机二进制文件的所有依赖项。

除了其他的解决scheme之外, 这里还有一个winutil.exe的预build版本。 把它加载并添加到$ HADOOP_HOME / bin。 它适用于我。

(来源: 点击这里 )

而不是使用官方分支,我会build议优化的窗口

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

你需要编译它,在windows下创buildwinutils.exe,并把它放在hadoop / bin目录下

我在Windows 8.1上遇到了与Hadoop 2.4.1相同的问题; 主要由较新的操作系统导致的解决scheme有一些差异。

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

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

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

我没有使用Windows 7 SDK(我无法加载)或Windows 8.1 SDK(没有命令行编译工具),而是使用免费的Microsoft Visual Studio Express 2013 for Windows Desktop 。 Hadoop的构build需要PATH中的MSBuild位置(C:\ Program Files(x86)\ MSBuild \ 12.0),并要求各种Hadoop本地源项目升级到更新的(MS VS 2013)格式。 maven构build失败很好,指出每个项目失败的绝对path,使得将项目加载到Visual Studio(在询问后自动转换)变得容易。

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

将hadoop.dll和hdfs.dll添加到%HADOOP_HOME%\ bin文件夹对我来说是个诀窍。

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

你可以在winutils上得到hadoop.dll

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

下面的BUILD.txt使我做到了这一点。注意:hdfs-site.xml和mapred-site.xml中的目录是以/开头的像下面

例如

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

可以帮助你!

您可能需要将hadoop.dllwinutils.exe文件从hadoop-common-bin复制到%HADOOP_HOME%\ bin将%HADOOP_HOME%/ bin添加到您的%PATH%variables。

你可以从https://github.com/amihalik/hadoop-common-2.6.0-bin下载hadoop-common