一. 自己搭建开发环境
今天自己搭建了一套Centos5.3 + Hadoop2.2 + Hbase0.96.1.1的开发环境,Win7 Eclipse调试MapReduce成功。可能是版本比较高的原因,出了问题,网上找不到完整解决方案,只能靠自己。
二. Hadoop安装
这个就不啰嗦了,网上大把文章。我下载的是hadoop-2.2.0.tar.gz。
- http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html 很详细的介绍了Hadoop Hdfs的安装。它这个不是Hadoop2.2的,但配置都大同小异。
- MapReduce的配置可以参考http://blog.sina.com.cn/s/blog_546abd9f0101i8b8.html。
安装成功后,能顺利查看以下几个页面,就OK了。我的集群环境是200master,201-203slave。
- dfs.http.address 192.168.1.200:50070
- dfs.secondary.http.address 192.168.1.200:50090
- dfs.datanode.http.address 192.168.1.201:50075
- yarn.resourcemanager.webapp.address 192.168.1.200:50030
- mapreduce.jobhistory.webapp.address 192.168.1.200:19888。这个好像访问不了。需要启动hadoop/sbin/mr-jobhistory-daemon.sh start historyserver才可以访问。
三. Hadoop2.x eclispe-plugin
https://github.com/winghc/hadoop2x-eclipse-plugin
目前这个插件还在开发中,你可以自己下载源码编译,网上也有人发布编译好的jar。
http://blog.csdn.net/zythy/article/details/17397153 这个同学写的很详细了。
需要注意一点的是,Hadoop installation directory里填写Win下的hadoop home地址,其目的在于创建MapReduce Project能从这个地方自动引入MapReduce需要的jar。解压hadoop-2.2.0.tar.gz到本地即可。
四. 各种问题
上面一步完成后,创建一个MapReduce Project,运行时发现出问题了。
-
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
跟代码就去发现是HADOOP_HOME的问题。如果HADOOP_HOME为空,必然fullExeName为null\bin\winutils.exe。解决方法很简单啦,乖乖的配置环境变量吧,不想重启电脑可以在MapReduce程序里加上System.setProperty("hadoop.home.dir", "...");暂时缓缓。org.apache.hadoop.util.Shell.javapublic static final String getQualifiedBinPath(String executable) throws IOException { // construct hadoop bin path to the specified executable String fullExeName = HADOOP_HOME_DIR + File.separator + "bin" + File.separator + executable; File exeFile = new File(fullExeName); if (!exeFile.exists()) { throw new IOException("Could not locate executable " + fullExeName + " in the Hadoop binaries."); } return exeFile.getCanonicalPath(); } private static String HADOOP_HOME_DIR = checkHadoopHome(); private static String checkHadoopHome() { // first check the Dflag hadoop.home.dir with JVM scope String home = System.getProperty("hadoop.home.dir"); // fall back to the system/user-global env variable if (home == null) { home = System.getenv("HADOOP_HOME"); } ... }
- 这个时候得到完整的地址fullExeName,我机器上是D:\Hadoop\tar\hadoop-2.2.0\hadoop-2.2.0\bin\winutils.exe。继续执行代码又发现了错误
Could not locate executable D:\Hadoop\tar\hadoop-2.2.0\hadoop-2.2.0\bin\winutils.exe in the Hadoop binaries.
就去一看,没有winutils.exe这个东西。去https://github.com/srccodes/hadoop-common-2.2.0-bin下载一个,放就去即可。 - 继续出问题
at org.apache.hadoop.util.Shell.execCommand(Shell.java:661) at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:639) at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:435)
继续跟代码org.apache.hadoop.util.Shell.javapublic static String[] getSetPermissionCommand(String perm, boolean recursive, String file) { String[] baseCmd = getSetPermissionCommand(perm, recursive); String[] cmdWithFile = Arrays.copyOf(baseCmd, baseCmd.length + 1); cmdWithFile[cmdWithFile.length - 1] = file; return cmdWithFile; } /** Return a command to set permission */ public static String[] getSetPermissionCommand(String perm, boolean recursive) { if (recursive) { return (WINDOWS) ? new String[] { WINUTILS, "chmod", "-R", perm } : new String[] { "chmod", "-R", perm }; } else { return (WINDOWS) ? new String[] { WINUTILS, "chmod", perm } : new String[] { "chmod", perm }; } }
cmdWithFile数组的内容为{"D:\Hadoop\tar\hadoop-2.2.0\hadoop-2.2.0\bin\winutils.exe", "chmod", "755", "xxxfile"},我把这个单独在cmd里执行了一下,发现无法启动此程序,因为计算机中丢失 MSVCR100.dll
那就下载一个呗http://files.cnblogs.com/sirkevin/msvcr100.rar,丢到C:\Windows\System32里面。再次cmd执行,又来了问题应用程序无法正常启动(0xc000007b)
下载http://blog.csdn.net/vbcom/article/details/7245186 DirectX_Repair来解决这个问题吧。记得修复完后要重启电脑。搞定后cmd试一下,很棒。 - 到了这里,已经看到曙光了,但问题又来了
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
代码就去/** Windows only method used to check if the current process has requested * access rights on the given path. */ private static native boolean access0(String path, int requestedAccess);
显然缺少dll文件,还记得https://github.com/srccodes/hadoop-common-2.2.0-bin下载的东西吧,里面就有hadoop.dll,最好的方法就是用hadoop-common-2.2.0-bin-master/bin目录替换本地hadoop的bin目录,并在环境变量里配置PATH=HADOOP_HOME/bin,重启电脑。 - 终于看到了MapReduce的正确输出output99。
五. 总结
- hadoop eclipse插件不是必须的,其作用在我看来就是如下三点(这个是一个错误的认识,具体请参考http://zy19982004.iteye.com/blog/2031172)。study-hadoop是一个普通project,直接运行(不通过Run on Hadoop这只大象),一样可以调试到MapReduce。
- 对hadoop中的文件可视化。
- 创建MapReduce Project时帮你引入依赖的jar。
- Configuration conf = new Configuration();时就已经包含了所有的配置信息。
- 还是自己下载hadoop2.2的源码编译好,应该是不会有任何问题的(没有亲测)。
六. 其它问题
- 还是
Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
代码跟到org.apache.hadoop.util.NativeCodeLoader.java去看static { // Try to load native hadoop library and set fallback flag appropriately if(LOG.isDebugEnabled()) { LOG.debug("Trying to load the custom-built native-hadoop library..."); } try { System.loadLibrary("hadoop"); LOG.debug("Loaded the native-hadoop library"); nativeCodeLoaded = true; } catch (Throwable t) { // Ignore failure to load if(LOG.isDebugEnabled()) { LOG.debug("Failed to load native-hadoop with error: " + t); LOG.debug("java.library.path=" + System.getProperty("java.library.path")); } } if (!nativeCodeLoaded) { LOG.warn("Unable to load native-hadoop library for your platform... " + "using builtin-java classes where applicable"); } }
这里报错如下DEBUG org.apache.hadoop.util.NativeCodeLoader - Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: HADOOP_HOME\bin\hadoop.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform
怀疑是32位jdk的问题,替换成64位后,没问题了2014-03-11 19:43:08,805 DEBUG org.apache.hadoop.util.NativeCodeLoader - Trying to load the custom-built native-hadoop library... 2014-03-11 19:43:08,812 DEBUG org.apache.hadoop.util.NativeCodeLoader - Loaded the native-hadoop library
这里也解决了一个常见的警告WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
相关推荐
通过以上步骤,你就可以在Windows 10的Eclipse环境中编写、测试和调试MapReduce程序,然后部署到远程的CentOS Hadoop集群上进行运行。记得在开发过程中,保持Hadoop版本的一致性,以及及时更新Hadoop的配置文件,以...
- **安装Hadoop Eclipse Plugin**: 使用插件可以更方便地进行MapReduce程序的开发和调试。 - **配置Eclipse Plugin**: 设置Eclipse IDE中的Hadoop插件,以连接到Hadoop集群。 **3.2 Eclipse Plugin配置** - **配置...
这个特定的压缩包文件 "centos6.5-hadoop-2.6.4.tar.gz" 是为在CentOS 6.5操作系统上安装Hadoop 2.6.4版本准备的。本文将详细讲解如何在CentOS 6.5系统中安装和配置Hadoop,以及Hadoop的基本工作原理。 首先,我们...
这个名为“hadoop-3.3.0-Centos7-64-with-snappy.tar.gz”的压缩包文件,是专为CentOS 7 64位系统优化的Hadoop 3.3.0版本,内含Snappy压缩算法支持。 Hadoop 3.3.0是Hadoop发展中的一个重要里程碑,它引入了许多...
本文将详细讲解如何在CentOS 6.5操作系统上配置Hadoop-eclipse插件,以便在Eclipse环境中进行Hadoop项目的开发和调试。 首先,我们需要在Eclipse中安装Hadoop-eclipse插件。这个插件使得开发者可以直接在Eclipse中...
sudo systemctl start hadoop-mapreduce-jobhistory ``` 至此,Hadoop已在CentOS7上成功安装。为了便于开发,我们可以使用Eclipse集成Hadoop。文件列表中的`hadoop-eclipse-plugin-2.6.0.jar`是Eclipse的Hadoop插件...
### Hadoop集群配置及MapReduce开发手册知识点梳理 #### 一、Hadoop集群配置说明 ##### 1.1 环境说明 本手册适用于基于CentOS 5系统的Hadoop集群配置,具体环境配置如下: - **操作系统**:CentOS 5 - **JDK版本...
### Hadoop-2.7.5在CentOS-6.7上的编译指南 #### 一、概述 本文档旨在详细介绍如何在CentOS-6.7操作系统上从源代码编译安装Hadoop-2.7.5。Hadoop是一款开源的大数据处理框架,主要由HDFS(分布式文件系统)和...
标题“centos6.5-hadoop-2.6.0-cdh5.9.0-nativelib”提及的是一个专为64位CentOS 6.5操作系统编译的Hadoop 2.6.0 CDH 5.9.0的本地库(nativelib)打包文件。这个压缩包包含了运行Hadoop在CentOS环境下所需的本机库,...
7. **安全性增强**:Hadoop的安全性得到了加强,包括Kerberos认证的改进和更严格的权限检查,以防止未授权访问。 8. **多语言支持**:Hadoop 3.3.0继续支持多语言API,如Java、Python和Scala,同时提供了更多的文档...
这个压缩包表明,它已经过实际测试,可以在CentOS 6.7上顺利运行,对于学习和搭建Hadoop环境的人来说非常方便。 Hadoop的安装和配置过程通常涉及多个步骤,包括环境变量设置、JDK安装、Hadoop配置文件修改、启动...
1. 学习如何在Ubuntu/CentOS系统上使用Eclipse开发MapReduce程序。 2. 掌握在Hadoop 2.6.0环境下,利用Eclipse进行MapReduce项目的创建和运行。 3. 了解Eclipse与Hadoop的集成,提高开发效率。 ### 实验环境 - 操作...
7. **测试Hadoop**:可以使用`hadoop fs -ls`命令检查HDFS是否正常工作,或者编写一个简单的MapReduce程序进行验证。 在实际使用中,Hadoop不仅限于批处理,还可以与其他组件如YARN(Yet Another Resource ...
"Hadoop环境搭建 - Linux(CentOS7) - 安装配置Hadoop2.7.7" 本文将详细介绍如何在Linux(CentOS7)环境中搭建Hadoop环境,包括安装和配置Hadoop2.7.7的步骤。 Hadoop概述 Hadoop是Apache基金会下的一个开放源...
开发者可以使用Eclipse集成的Hadoop工具来编写MapReduce程序,管理HDFS文件,或者进行集群配置和调试,这极大地提高了Hadoop开发的效率和便利性。 至于压缩包内的文件“eclipse”,通常这是Eclipse IDE的可执行文件...
【标题】"hadoop2.4.1_centos7_64位本包" 提供的是针对64位 CentOS 7 操作系统编译的 Hadoop 2.4.1 版本。Hadoop 是一个开源框架,主要用于分布式存储和处理大数据。在32位系统上,Hadoop 的二进制包可以直接使用,...
CentOS7 Hadoop 2.7.X 安装部署 本文档将指导您如何在 CentOS 7 上安装和部署 Hadoop 2.7.X。Hadoop 是一个开源的大数据处理框架,由 Apache 开发,旨在提供高效、可靠、可扩展的数据处理能力。 准备软件包 在...