`

大数据学习之--win7下搭建hadoop MapReduce开发环境

 
阅读更多

前言

上一篇《大数据学习之--hadoop2.7.3环境搭建》已经在一台笔记本上完成了模拟hadoop集群的搭建,这次准备在win7操作系统中采用idea开发工具 搭建hadoop MapReduce的开发环境。直接在idea中执行MapReduce程序,即可直连vmware中的hadoop集群进行模拟大数据运算。

 

准备工作

1、安装idea(或者eclips),jdk1.8,安装步骤这里不讲了。

2、下载hadoop2.7.3,解压到本地目录(我的D:\myself\hadoop-2.7.3)。

3、下载hadoop.ll和winutils.exe放到D:\myself\hadoop-2.7.3\bin,否则执行MapReduce程序会报错:

2017-01-24 11:17:25,757 ERROR [main] util.Shell (Shell.java:getWinUtilsPath(397)) - Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
	at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:379)
	at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:394)
	at org.apache.hadoop.util.Shell.<clinit>(Shell.java:387)
	at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:80)
	at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2823)
	at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2818)
	at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2684)
	at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373)
	at com.sky.hadoop.dfs.HadoopFileTest.main(HadoopFileTest.java:24)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

 

3、配置hadoop环境变量HADOOP_HOME为D:\myself\hadoop-2.7.3

4、添加path:%HADOOP_HOME%\bin

 

Idea开发环境搭建

搭建过程可以参考:http://blog.csdn.net/u011672579/article/details/54599056 

我这里主要讲讲,在执行MapReduce程序过程中遇到的问题:

首先我写了一段程序,作用是查看和获取hadoop集群中的文件,代码如下:

package com.sky.hadoop.dfs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

import java.io.InputStream;
import java.net.URI;

import java.net.URI;


/**
 * Created by gantianxing on 2017/1/24.
 */
public class HadoopFileTest {

    public static void main(String args[]) throws Exception{
        String uri = "hdfs://192.168.26.128:9000/";
        Configuration config = new Configuration();
        FileSystem fs = FileSystem.get(URI.create(uri), config);

        // step1:列出hdfs上/test目录下的所有文件和目录
        FileStatus[] statuses = fs.listStatus(new Path("/test"));
        for (FileStatus status : statuses) {
            System.out.println("xxxx:"+status);
        }

        // step2:在hdfs的/test目录下创建一个文件,并写入一行文本
        FSDataOutputStream os = fs.create(new Path("/test/flie1.log"));
        os.write("Hello World!".getBytes());
        os.flush();
        os.close();

        // step3:显示在hdfs的/input下指定文件的内容
        InputStream is = fs.open(new Path("/test/flie1.log"));
        IOUtils.copyBytes(is, System.out, 1024, true);

    }
}

程序很简单,分三步:step1 查看hdfs的/test目录下的内容,step2写入一个文件到hdfs的/test目录下,step3查看hdfs下某个文件的内容。由于hadoop集群的MapReduce计算结果也是放到hdfs中,这个程序可以用来查看MapReduce执行的结果。

 

异常1:权限问题

但在我本地执行时报如下错误:

Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=gantianxing, access=WRITE, inode="/input/test.log":root:supergroup:drwxr-xr-x
	at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:319)
	at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:292)
	at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:213)
	at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:190)
	at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1728)
	at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1712)
	at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkAncestorAccess(FSDirectory.java:1695)
	at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInternal(FSNamesystem.java:2515)

 

这里是说用户:gantianxing没有权限,gantianxing是我win7的用户名。我linux虚拟机 hadoop的用户名是hadoop。这里有两种解决方案:

方案一:在idea启动参数中添加参数:-DHADOOP_USER_NAME=hadoop



 

方案二:在hadoop集群中执行./hadoop-2.7.3/bin/hadoop fs -chmod 777 /

具体可以参考http://www.huqiwen.com/2013/07/18/hdfs-permission-denied/ 讲的比较透彻。

 

异常二:程序执行卡死

日志显示如下,程序卡死不执行了

[main] INFO org.apache.hadoop.mapreduce.JobSubmitter - number of splits:1
[main] INFO org.apache.hadoop.conf.Configuration.deprecation - mapred.job.tracker is deprecated. Instead, use mapreduce.jobtracker.address
[main] INFO org.apache.hadoop.conf.Configuration.deprecation - mapred.jar is deprecated. Instead, use mapreduce.job.jar
[main] INFO org.apache.hadoop.mapreduce.JobSubmitter - Submitting tokens for job: job_1485352260073_0004
[main] INFO org.apache.hadoop.yarn.client.api.impl.YarnClientImpl - Submitted application application_1485352260073_0004
[main] INFO org.apache.hadoop.mapreduce.Job - The url to track the job: http://hadoop1:8088/proxy/application_1485352260073_0004/
[main] INFO org.apache.hadoop.mapreduce.Job - Running job: job_1485352260073_0004

 通过观察日志发现是内存设置不够,修改yarn-site.xml中的yarn.nodemanager.resource.memory-mb 为2048即可,我之前是526

    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>2048</value>
    </property>

 

 异常三:

Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class com.sky.hadoop.mapreduce.WordCount$WcMapper not found
	at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2195)
	at org.apache.hadoop.mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:186)
	at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:745)
	at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
	at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:422)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698)
	at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.ClassNotFoundException: Class com.sky.hadoop.mapreduce.WordCount$WcMapper not found
	at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2101)
	at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2193)
	... 8 more

这个异常只有在window idea中执行才会有,上传jar包hadoop集群中执行没有问题。修改代码后每次都要上传到hadoop才能调试太麻烦。

 

要在window下的开发环境中直接执行MapReduce程序,需要在Configuration中指定jar路径,如下:

Configuration conf = new Configuration();

//换成你的jar包目录
conf.set("mapred.jar", "D:\\work\\code\\myHadoop\\out\\artifacts\\myHadoop_jar\\myHadoop.jar");

 

添加完成后,就可以在window idea中直接运行你的MapReduce程序啦。运行结果也可以用前面写的HadoopFileTest类进行查看,完全不用登陆到hadoop集群中。

 

 

  • 大小: 25.5 KB
分享到:
评论

相关推荐

    hadoop-2.7.7-win7x64.

    在Windows上搭建Hadoop环境相对复杂,因为Hadoop最初是为Linux设计的。然而,通过一些额外的步骤,我们可以在Windows上成功运行Hadoop。 描述中提到的“编译环境:win7x64专业版,jdk1.7,hadoop-2.7.7”,意味着在...

    【IT十八掌徐培成】Hadoop第04天-05.win7下hadoop运行需要dll和exe文件的支持.zip

    在Windows 7环境下搭建和运行Hadoop分布式文件系统(HDFS)时,确实需要依赖一些特定的DLL和EXE文件来确保系统能够正确地执行Hadoop的组件和服务。Hadoop原本是为Linux环境设计的,但在Windows上运行时,由于操作...

    hadoop-2.6.5-win10x64-1809.tar.gz

    【标题】"hadoop-2.6.5-win10x64-1809.tar.gz" 提供了一个在Windows 10 x64环境下使用的Hadoop版本,特别是针对2018年9月更新的系统进行了优化。Hadoop是大数据处理领域的核心组件,它是一个开源框架,主要用于...

    win10下编译过的hadoop jar包--hadoop-2.7.2.zip

    在Windows 10环境下搭建Hadoop,可以进行大数据的学习和测试,这对于理解分布式存储和处理的概念非常有帮助。 MapReduce是Hadoop的另一个关键组件,它是一个编程模型,用于大规模数据集的并行计算。Map阶段将输入...

    Win10不需要Cygwin搭建大数据测试环境搭建hive的bin文件(包含官方版本中缺少的cmd文件)hive)

    在Windows 10环境下搭建大数据测试环境,Hive是一个常用的数据仓库工具,它通常与Linux系统结合使用。然而,对于Windows用户来说,由于Hive原生不支持Windows,所以传统方法需要借助Cygwin这样的模拟Linux环境来运行...

    Win本地测试hadoop

    标题“Win本地测试hadoop”指的是在Windows操作系统环境下搭建Hadoop环境进行本地测试,以便于进行快速的开发和迭代工作。Hadoop是一个开源的分布式计算框架,由Apache基金会开发,主要用于处理和存储大规模数据。在...

    win7下编译过的hadoop jar包

    描述中提到的“win7配置hadoop环境必备jar包”,意味着这个JAR文件是为在Windows 7上搭建Hadoop环境所必需的。通常,配置Hadoop涉及安装Java运行时环境(JRE)、配置Hadoop的环境变量、修改配置文件如`core-site.xml...

    hadoop2.6,window7 64bit,hadoop.dll、winutils.exe文件下载

    在实践中,你可能需要下载和配置这些文件来建立一个本地Hadoop开发环境,以便于测试、学习或者开发Spark应用。同时,理解这些文件的作用以及如何在Windows环境下正确配置它们,对于任何想要在Windows上从事Hadoop和...

    Hadoop-win依赖资料

    本资料包“Hadoop-win依赖资料”显然是针对在Windows环境下搭建和运行Hadoop环境所需的关键组件和依赖项。 在Windows上安装和运行Hadoop并不像在Linux系统中那样常见,因为Hadoop最初是为Linux设计的,但在某些情况...

    Hadoop 2.7.5 Windows 7 64位 编译bin(包含winutils.exe, hadoop.dll等)

    本资源针对的是Windows 7 64位操作系统用户,帮助他们在本地环境中搭建Hadoop开发和测试平台。 在Windows系统上编译Hadoop通常是一项挑战,因为Hadoop最初设计是运行在Linux环境下的。然而,通过一些额外的步骤,...

    大数据hadoopwin10编译环境下的dll包

    不过,有了这个“大数据hadoop win10编译环境下的dll包”,Windows用户可以避免一些常见的编译错误,更快地搭建起本地的Hadoop开发环境。务必根据你的具体需求和环境,适当地调整上述步骤,确保所有的依赖项都已满足...

    Hadoop完全分布式详细安装图解教程

    在Win7系统中,你需要安装Linux发行版(如Ubuntu或CentOS)作为Hadoop节点的基础。 3. **Linux基础**:熟悉Linux的基本操作是必不可少的,包括文件管理、用户权限、网络配置等。在虚拟环境中,你需要为每个节点分配...

    Windows本地安装Hadoop所需文件.zip

    在Windows环境下搭建Hadoop集群,对于初学者来说可能是一项挑战,但通过本地安装方式,可以大大简化这个过程。本压缩包“Windows本地安装Hadoop所需文件.zip”包含了在Windows系统上运行Hadoop所需的关键组件和配置...

Global site tag (gtag.js) - Google Analytics