我是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.为了建立"自制"套餐,我做了以下事情:
设置环境:
设置JAVA_HOME = {path_to_JDK_root}
似乎JAVA_HOME 绝不能包含空间!
set …Run Code Online (Sandbox Code Playgroud) 我将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变量中.
我无法解决这个异常,我已经阅读了 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 …
我正在尝试使用 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