相关疑难解决方法(0)

在Windows上运行Apache Hadoop 2.1.0

我是Hadoop的新手,并且在尝试在我的Windows 7机器上运行它时遇到了问题.特别是我对运行Hadoop 2.1.0感兴趣,因为它的发行说明提到支持在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
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

更新.确实是的."Homebrew"包中包含一些额外的文件,最重要的是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}

似乎JAVA_HOME 绝不能包含空间!

set …
Run Code Online (Sandbox Code Playgroud)

windows hadoop

34
推荐指数
6
解决办法
6万
查看次数

从windows到ubuntu提交mapreduce作业到hadoop 2.2时出现UnsatisfiedLinkError(NativeIO $ Windows.access0)

我将mapreduce作业从在windows上运行的java应用程序提交到在ubuntu上运行的hadoop 2.2集群.在hadoop 1.x中,这按预期工作但在hadoop 2.2上我得到一个奇怪的错误:

java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.nativeio.NativeIO $ Windows.access0(Ljava/lang/String; I)Z

我编译了必要的Windows库(hadoop.dll和winutils.exe),可以通过代码访问hdfs并使用hadoop API读取集群信息.只有作业提交不起作用.

任何帮助都是有帮助的.

解决方案:我自己发现了,可以找到windows hadoop二进制文件的路径必须添加到windows的PATH变量中.

java windows ubuntu hadoop

11
推荐指数
1
解决办法
1万
查看次数

java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0

我无法解决这个异常,我已经阅读了 hadoop 文档以及我能找到的所有相关的 stackoverflow 问题。

我的 fileSystem.mkdirs(***) 抛出:

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)V
    at org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Native Method)
    at org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode(NativeIO.java:524)
    at org.apache.hadoop.fs.RawLocalFileSystem.mkOneDirWithMode(RawLocalFileSystem.java:465)
    at org.apache.hadoop.fs.RawLocalFileSystem.mkdirsWithOptionalPermission(RawLocalFileSystem.java:518)
    at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:496)
    at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:316)
...
Run Code Online (Sandbox Code Playgroud)

我在我的应用程序中包含以下依赖项(通过 maven pom.xml),全部采用版本 2.6.0-cdh5.13.0:hadoop-common、hadoop-hdfs、hadoop-client、hadoop-minicluster

我的文件系统变量是一个有效的(hadoop-common)文件系统(org.apache.hadoop.fs.FileSystem)。

我从https://github.com/steveloughran/winutils/tree/master/hadoop-2.6.0/bin下载了 hadoop 文件。我将 winutils.exe 和版本 2.6.0 中的所有其他文件存储到本地文件系统的 C:\Temp\hadoop\bin 下。我用 C:\Temp\hadoop 添加了路径变量 HADOOP_HOME (是的,不是 bin 目录的路径)。

未使用后备(“使用内置 java 类”),我得到:

145 [main] DEBUG org.apache.hadoop.util.NativeCodeLoader  - Trying to load the custom-built native-hadoop library...
147 [main] DEBUG org.apache.hadoop.util.NativeCodeLoader  - Loaded the native-hadoop library
Run Code Online (Sandbox Code Playgroud)

(参见https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-common/NativeLibraries.html

据我了解,此异常可能是由 hadoop 版本不匹配引起的,但我检查了导入的 hadoop …

java hadoop maven cloudera-cdh

6
推荐指数
1
解决办法
2万
查看次数

通过远程 Spark 作业时出错:java.lang.IllegalAccessError: class org.apache.hadoop.hdfs.web.HftpFileSystem

问题

我正在尝试使用 Spark HDInsight 集群 (HDI 4.0) 通过 IntelliJ 运行远程 Spark 作业。在我的 Spark 应用程序中,我尝试使用 Spark 的结构化流内置readStream函数从 Azure blob 存储中的 parquet 文件文件夹中读取输入流。

当我在连接到 HDInsight 群集的 Zeppelin 笔记本上运行该代码时,该代码按预期工作。但是,当我将 Spark 应用程序部署到集群时,遇到以下错误:

java.lang.IllegalAccessError: class org.apache.hadoop.hdfs.web.HftpFileSystem cannot access its superinterface org.apache.hadoop.hdfs.web.TokenAspect$TokenManagementDelegator

随后,我无法从 blob 存储中读取任何数据。

网上查到的一点信息表明,这是由于Spark和Hadoop之间的版本冲突引起的。2.4该应用程序使用为 Hadoop 预构建的Spark 运行2.7

使固定

为了解决这个问题,我通过 ssh 进入集群的每个头节点和工作节点,并手动将 Hadoop 依赖项降级为2.7.3from3.1.x以匹配本地spark/jars文件夹中的版本。完成此操作后,我就可以成功部署我的应用程序。无法将集群从 HDI 4.0 降级,因为它是唯一可以支持 Spark 的集群2.4

概括

总而言之,问题可能是我使用的是为 Hadoop 预构建的 Spark 下载吗2.7?有没有更好的方法来解决此冲突,而不是手动降级集群节点上的 Hadoop 版本或更改我正在使用的 Spark 版本?

hadoop scala apache-spark spark-structured-streaming azure-hdinsight

4
推荐指数
1
解决办法
9494
查看次数