在windows上运行apache hadoop 2.1.0

fcy6dtqo  于 2021-06-03  发布在  Hadoop
关注(0)|答案(11)|浏览(611)

我是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”文件夹中)

y3bcpkx1

y3bcpkx11#

请将hadoop.dll(版本敏感)添加到windows目录下的system32目录。
您可以从winutils获取hadoop.dll

t3irkdon

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!
希望我的脚步能帮助别人。

vcirk6k6

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中。

disbfnqx

disbfnqx4#

我建议不要使用官方的分支,而应该优化windows
http://svn.apache.org/repos/asf/hadoop/common/branches/branch-trunk-win/
您需要编译它,在windows下构建winutils.exe,并将其放在hadoop/bin目录中

kknvjkwl

kknvjkwl5#

将hadoop.dll和hdfs.dll添加到%hadoop\u home%\bin文件夹对我起了作用。

ncecgwcz

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

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

c:\hadoop\etc\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\etc\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(资源管理器和节点管理器)

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

总共四个单独的命令提示符窗口将自动打开以运行namenode、datanode、resource manager、node manager
参考:在microsoft windows操作系统中构建、安装、配置和运行apache hadoop 2.2.0

xj3cbfub

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,这不起作用。看另一个问题的答案。
还要检查是否满足本机二进制文件的所有依赖项。

slsn1g29

slsn1g299#

刚刚在我的环境win7x64中安装了hadoop2.2.0。
下面的build.txt让我这么做了that:the dir 在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>

我可以帮助你!

qmelpv7a

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

f5emj3cl

f5emj3cl11#

除了其他解决方案之外,这里还有一个winutil.exe的预构建副本。不要加载它并添加到$hadoop\u home/bin。这对我很有用。
(来源:点击此处)

相关问题