我是hadoop新手,在windows7机器上运行hadoop时遇到了问题。我对运行hadoop2.1.0特别感兴趣,因为它的发行说明提到支持在windows上运行。我知道我可以尝试用cygwin在windows上运行1.x版本,甚至可以使用cloudera等准备好的vm,但是这些选项在某些方面对我来说不太方便。
检查了一个来自http://apache-mirror.rbc.ru/pub/apache/hadoop/common/hadoop-2.1.0-beta/ 我发现确实有一些*.cmd脚本可以在没有cygwin的情况下运行。当我格式化hdfs分区时,一切都很正常,但是当我尝试运行hdfs namenode守护程序时,我遇到了两个错误:第一个是非致命的错误,就是找不到winutils.exe(下载的tarball中确实没有它)。我在apachehadoop源代码树中找到了这个组件的源代码,并用microsoftsdk和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。为了构建“自制”软件包,我做了以下工作:
找到了消息来源,把它们拆开。
仔细阅读building.txt。
已安装的依赖项:
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)放到一些路径文件夹中就足够了。
3e)一组unix命令行工具(我安装了cygwin)
已启动windows sdk的命令行。启动|所有程序| microsoft windows sdk v7.1 |。。。命令提示符(我修改了这个快捷方式,在命令行中添加option/release来生成本机代码的版本)。接下来的所有步骤都是在sdk命令行窗口中完成的)
设置环境:
设置java\u home={path\u to\u jdk\u root}
看来javau家里一定没有空间!
set PATH={path_to_maven_bin};%PATH%
set Platform=x64
set PATH={path_to_cygwin_bin};%PATH%
set PATH={path_to_protoc.exe};%PATH%
将dir改为sources root文件夹(building.txt警告路径长度有一些限制,因此sources root应该有短名称-我使用了d:\hds)
ran构建过程:
mvn包-pdist-dskiptests
您可以尝试不使用“skiptests”,但在我的计算机上,某些测试失败,生成被终止。它可能与building.txt中提到的sybolic链接问题有关。8在hadoop dist\target\hadoop-2.1.0-beta中选取结果(windows可执行文件和DLL位于“bin”文件夹中)
11条答案
按热度按时间y3bcpkx11#
请将hadoop.dll(版本敏感)添加到windows目录下的system32目录。
您可以从winutils获取hadoop.dll
t3irkdon2#
我也有同样的问题,但是最近的hadoopv。2.2.0. 以下是我解决这个问题的步骤:
我已经建立了
winutils.exe
来源。项目目录:hadoop-2.2.0-src\hadoop-common-project\hadoop-common\src\main\winutils
我的操作系统:Windows7。用于构建的工具:ms visual studio express 2013 for windows桌面(它是免费的,可以从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的垃圾箱里,快乐地运行namenode!希望我的脚步能帮助别人。
vcirk6k63#
在windows8.1上,hadoop2.4.1也遇到了同样的问题;与最终的解决方案有一些不同,主要是由较新的操作系统引起的。
我首先安装了hadoop2.4.1二进制文件,将其解压到%hadoop\u home%中。
前面的答案描述了如何设置java、protobuf、cygwin和maven,以及所需的环境变量。我不得不从hp的奇数“bcd”值更改平台环境变量。
我从apache镜像下载了源代码,并将其解压到一个短目录(hadoop\u src=c:\hsrc)中。maven在该目录下的标准windows命令提示符下运行良好:mvn package-dskiptests。
我没有使用Windows7SDK(无法加载)或Windows8.1SDK(没有命令行生成工具),而是使用了免费的MicrosoftVisualStudioExpress 2013 for WindowsDesktop。hadoop的构建需要路径中的msbuild位置(c:\program files(x86)\msbuild\12.0),并且需要将各种hadoop本机源项目升级到较新的(ms vs 2013)格式。maven构建失败很好地指出了每个项目失败时的绝对路径,使得将项目加载到visualstudio(visualstudio在发出请求后自动转换)变得很容易。
构建之后,我将本机可执行文件和库复制到hadoop bin目录中。它们是在%hadoop\u src%\hadoop common project\hadoop common\target\bin中生成的,需要复制到%hadoop\u home%\bin中。
disbfnqx4#
我建议不要使用官方的分支,而应该优化windows
http://svn.apache.org/repos/asf/hadoop/common/branches/branch-trunk-win/
您需要编译它,在windows下构建winutils.exe,并将其放在hadoop/bin目录中
kknvjkwl5#
将hadoop.dll和hdfs.dll添加到%hadoop\u home%\bin文件夹对我起了作用。
yqlxgs2m6#
下载并安装java
ncecgwcz7#
我按照以下步骤安装了hadoop2.2.0
为windows构建hadoop bin分发的步骤
下载并安装microsoft windows sdk v7.1。
下载并安装unix命令行工具cygwin。
下载并安装maven 3.1.1。
下载ProtocolBuffers2.5.0并解压缩到一个文件夹(比如c:\protobuf)。
添加环境变量java\u home、m2\u home和platform(如果尚未添加)。注意:变量名平台区分大小写。对于在64位或32位系统上构建,值将为x64或win32。编辑path变量以添加cygwin的bin目录(例如c:\cygwin64\bin)、maven的bin目录(例如c:\maven\bin)和协议缓冲区的安装路径(例如c:\protobuf)。
下载hadoop-2.2.0-src.tar.gz并解压缩到具有短路径的文件夹(例如c:\hdfs),以避免由于windows中的最大路径长度限制而导致的运行时问题。
选择开始-->所有程序-->microsoft windows sdk v7.1并打开windows sdk 7.1命令提示符。将目录更改为hadoop源代码文件夹(c:\hdfs)。使用选项-pdist、native win-dskiptests-dtar执行mvn包以创建windows二进制tar分发。
如果上一步一切顺利,那么本机发行版hadoop-2.2.0.tar.gz将在c:\hdfs\hadoop dist\target\hadoop-2.2.0目录中创建。
安装hadoop
将hadoop-2.2.0.tar.gz解压缩到一个文件夹(比如c:\hadoop)。
添加环境变量hadoop\u home并编辑path变量以添加hadoop\u home的bin目录(例如c:\hadoop\bin)。
配置hadoop
c:\hadoop\etc\hadoop\core-site.xml
c:\hadoop\etc\hadoop\hdfs-site.xml
c:\hadoop\etc\hadoop\mapred-site.xml
c:\hadoop\etc\hadoop\yarn-site.xml
设置名称节点格式
namenode第一次需要格式化。
启动hdfs(namenode和datanode)
启动mapreduce(资源管理器和节点管理器)
总共四个单独的命令提示符窗口将自动打开以运行namenode、datanode、resource manager、node manager
参考:在microsoft windows操作系统中构建、安装、配置和运行apache hadoop 2.2.0
xj3cbfub8#
韩寒准备了hadoop2.2windowsx64二进制文件(参见他的博客)并将它们上传到github。
把两个二进制文件
winutils.exe
以及hadoop.dll
进入%hadoop_prefix%\bin
文件夹,我也有UnsatisfiedLinkError
.问题是
hadoop.dll
他失踪了。我使用dependency walker检查了二进制文件的依赖关系,并且microsoft visual c++2010可再发行文件丢失了。所以除了自己构建所有组件之外,问题的答案是
确保对java和本机代码使用相同的体系结构。
java -version
告诉您是否使用32或x64。然后使用dependency walker确保所有本机二进制文件都是纯的并且具有相同的体系结构。有时缺少x64依赖项,而windows会退回到x86,这不起作用。看另一个问题的答案。
还要检查是否满足本机二进制文件的所有依赖项。
slsn1g299#
刚刚在我的环境win7x64中安装了hadoop2.2.0。
下面的build.txt让我这么做了that:the dir 在hdfs-site.xml和mapred-site.xml中,以/开头,如下所示
例如
我可以帮助你!
qmelpv7a10#
可能需要将hadoop.dll和winutils.exe文件从hadoop common bin复制到%hadoop\u home%\bin将%hadoop\u home%/bin添加到%path%变量。
您可以从https://github.com/amihalik/hadoop-common-2.6.0-bin
f5emj3cl11#
除了其他解决方案之外,这里还有一个winutil.exe的预构建副本。不要加载它并添加到$hadoop\u home/bin。这对我很有用。
(来源:点击此处)