我是Hadoop的新手,并且在尝试在我的Windows 7机器上运行它时遇到了问题。特别是我有兴趣运行Hadoop 2.1.0作为其release notes提到支持在Windows上运行。我知道我可以尝试在Windows上使用Cygwin运行1.x版本,或者甚至使用例如Cloudera准备好的VM,但这些选项在某些方面对我来说不太方便。
在检查了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上可用?
谢谢。
更新。确实是的。 “Homebrew”包中包含一些额外的文件,最重要的是winutils.exe和hadoop.dll。使用此文件,namenode和datanode成功启动。我认为问题可以结束。如果有人面临同样的困难,我没有删除它。
更新2.为了建立“自制”套餐,我做了以下事情:
似乎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%
您可以在没有'skipTests'的情况下尝试,但在我的机器上,某些测试失败并且建筑已终止。它可能与BUILDING .txt中提到的sybolic链接问题有关。 8.在hadoop-dist \ target \ hadoop-2.1.0-beta中选择结果(Windows可执行文件和dll位于'bin'文件夹中)
我已按照以下步骤安装Hadoop 2.2.0
为Windows构建Hadoop bin分发的步骤
安装Hadoop
配置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,Resource Manager,Node Manager
参考:Build, Install, Configure and Run Apache Hadoop 2.2.0 in Microsoft Windows OS
刚刚在我的环境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>
可以帮到你!
Download并在c:/java/
中安装Java
确保路径是这样的,如果java安装在'program files'中,那么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"
如果在Windows机器上使用maven构建Hadoop-src,Hadoop将在Windows上运行。构建Hadoop-src(发行版)将创建一个Hadoop二进制发行版,它将作为Windows本机版本。
但是如果你不想这样做,那么下载预先构建的winutils of Hadoop distribution.
这是一个GitHub link,它有一些版本的Hadoop的winutils。
如果您使用的版本不在列表中,请按照常规方法在Windows上设置Hadoop - link
如果找到了您的版本,则将所有文件夹内容复制粘贴到路径中:/ bin /
设置所有.xml配置文件 - Link并在hadoop-env.cmd文件中设置JAVA_HOME路径
从cmd转到:
<HADOOP_HOME>/bin/> hdfs namenode -format
<HADOOP_HOME>/sbin> start-all.cmd
希望这可以帮助。
winutils.exe
和hadoop.dll
)java.library.path
会覆盖PATH
。如果你设置java.library.path
,请确保它是正确的并指向hadoop库。我有同样的问题,但最近hadoop v.2.2.0。以下是解决该问题的步骤:
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/加载)。打开工作室,File -> Open -> winutils.sln
。右键单击右侧的解决方案 - > Build
。在我的情况下有几个错误(您可能需要修复项目属性,指定输出文件夹)。中提琴!你得到winutils.exe
- 把它放入hadoop的垃圾箱。hadoop.dll
。这里有一些木头魔法:开放
hadoop-2.2.0-src\hadoop-common-project\hadoop-common\src\main\native\native.sln
在MS VS中;右键单击解决方案 - >构建。我收到了一堆错误。我手动创建了几个错过的头文件(不要问我为什么在源代码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!希望我的步骤能帮到别人。
Han准备了Hadoop 2.2 Windows x64二进制文件(参见他的blog)和uploaded them to Github。
将两个二进制文件winutils.exe
和hadoop.dll
放入%hadoop_prefix%\bin
文件夹后,我得到了相同的UnsatisfiedLinkError
。
问题是缺少hadoop.dll
的某些依赖性。我使用Dependency Walker来检查二进制文件的依赖关系,并且缺少Microsoft Visual C++ 2010 Redistributables。
所以除了自己构建所有组件之外,问题的答案是
java -version
告诉您是否使用32或x64。除了其他解决方案,here是winutil.exe的预构建副本。将其加载并添加到$ HADOOP_HOME / bin。这个对我有用。
(来源:Click here)
请将hadoop.dll(版本敏感)添加到Windows目录下的system32目录中。
你可以在winutils上获得hadoop.dll
我建议Windows优化,而不是使用官方分支
http://svn.apache.org/repos/asf/hadoop/common/branches/branch-trunk-win/
你需要编译它,在windows下构建winutils.exe并将它放在hadoop / bin目录中
您可能需要将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
我在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。
我使用免费的Microsoft Visual Studio Express 2013 for Windows Desktop,而不是使用Windows 7 SDK(我无法加载)或Windows 8.1 SDK(没有命令行构建工具)。 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中。
将hadoop.dll和hdfs.dll添加到%HADOOP_HOME%\ bin文件夹为我做了诀窍。