hadoop实践(五)win10+eclipse+hadoop2.6.4 开发环境

2023-11-04

本人环境为win10(才从win7升级)

        eclipse是  Kepler Service Release 1

        在win10下,安装了vm workstation,其上安装了centos6.5 ,并在上面部署了hadoop2.6.4的伪分布式安装

一、 目标

        设置win10下的eclipse开发环境,并且可以在此环境上开发hadoop应用,并在伪分布式hadoop环境下测试。  

二、准备

       1、eclipse  (  Kepler Service Release 1)

       2、 hadoop2.6.4

       3、 hadoop.dll 和  winutils

       4、 wordcount 代码

      5、 wordcount 所需要的统计单词的文本源

      6、 hadoop for eclipse的插件,本人使用的插件为 hadoop-eclipse-plugin-2.6.4.jar

       

三、环境搭建步骤

      1、 将hadoop2.6.4解压 在win10系统的任意目录下。 (就是为了配置eclipse用,实际联调的时候,是连接linux 虚机上的伪分布式hadoop)

      2、 设置win10的环境变量,通过控制面板-》系统-》高级设置-》环境变量  需要设置如下几个环境变量,已本人机器为例:

           

                JAVA_HOME=C:\Program Files (x86)\Java\jre6\bin               

                HADOOP_HOME=E:\cwqwork\develop\hadoop-2.6.4

                path 增加最后 E:\cwqwork\develop\hadoop-2.6.4\bin

       3、拷贝插件到  eclipse安装目录下的plugsin目录

       4、 启动eclipse,  windows-》hadoop Map/Reduce

               在 hadoop installation directory 里面,填入 前面第1步解压的目录,点击OK

        5、 界面最右边新出先的 Map/Reduce标签点中, 在最左边Project Explorer 会出现  DFS Locations。

              界面最右下角有个蓝色小象,点击后,设置  hadoop location

         6、上面设置好后,就可以 一层一层浏览   DFS Locations。 这里显示的是 linux下hadoop的dfs系统

四、  测试工程代码

          1、 新建工程,选other -》map reduce project, 然后输入工程名称等等,建立新的工程

          2、 创建 WordCount 类

                 代码如下:

import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;

public class WordCount {

  public static class TokenizerMapper 
       extends Mapper<Object, Text, Text, IntWritable>{

    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    public void map(Object key, Text value, Context context
                    ) throws IOException, InterruptedException {
      StringTokenizer itr = new StringTokenizer(value.toString());
      while (itr.hasMoreTokens()) {
        word.set(itr.nextToken());
        context.write(word, one);
      }
    }
  }

  public static class IntSumReducer 
       extends Reducer<Text,IntWritable,Text,IntWritable> {
    private IntWritable result = new IntWritable();

    public void reduce(Text key, Iterable<IntWritable> values, 
                       Context context
                       ) throws IOException, InterruptedException {
      int sum = 0;
      for (IntWritable val : values) {
        sum += val.get();
      }
      result.set(sum);
      context.write(key, result);
    }
  }

  public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    //conf.set("mapred.job.tracker","192.168.136.155:9001" );
    //conf.set("fs.default.name","192.168.136.155:9000" );
    
    String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
   
    if (otherArgs.length != 2) {
      System.err.println("Usage: wordcount <in> <out>");
      System.exit(2);
    }
    System.out.println ("Usage: wordcount <in> <out>" + otherArgs[0] +"  "+ otherArgs[1] );
    
    Job job = new Job(conf, "wordcount");
    job.setJarByClass(WordCount.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
    FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
    
    System.out.println ("add input path:" + otherArgs[0]);    
    System.out.println ("set output path:" + otherArgs[1]); 
    System.out.println ("begin wait job completion");
    
    job.waitForCompletion(true);  
  }
}


                 创建完成后, 在linux 虚机上导入需要统计的文本

                 文本1:Hello world Hello me! cwq solo

                 文本2: Hello world Hello you! solo

                 在linux 目录 /opt/hadoop/input/wordcount  下:

                      echo "Hello world Hello me! cwq solo"  >test1.txt

                      echo " Hello world Hello you! solo"  >test2.txt

             hadoop fs -put  /opt/hadoop/input/wordcount input

       3、 完成后,在类上右键-》run configuration-》 输入参数

                 hdfs://192.168.136.155:9000/user/hadoop/input/wordcount  hdfs://192.168.136.155:9000/user/hadoop/output/wordcount

                 输入后,不要执行。

                然后,用run on hadoop 方式执行。


          4、 正常情况下,会报异常:

Exception in thread "main" java.lang.NullPointerException
at java.lang.ProcessBuilder.start(ProcessBuilder.java:441)
at org.apache.hadoop.util.Shell.runCommand(Shell.java:445)
at org.apache.hadoop.util.Shell.run(Shell.java:418)

             原因是,没有安装补丁。  将 hadoop.dll 和  winutils 拷贝到  win10上hadoop目录下bin目录。

             


          5、 再次运行,没有异常,但是运行结束,查看dfs 没有output结果, console没有输出异常。 这里纠结很久。

                 解决办法:在src 目录下,建立log.properities文件,使得log4j 可以打印

            

                 log4j.rootLogger=debug,stdout,R
                 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
                 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
                 log4j.appender.stdout.layout.ConversionPattern=%5p - %m%n
                 log4j.appender.R=org.apache.log4j.RollingFileAppender
                 log4j.appender.R.File=mapreduce_test.log
                 log4j.appender.R.MaxFileSize=1MB
                 log4j.appender.R.MaxBackupIndex=1
                 log4j.appender.R.layout=org.apache.log4j.PatternLayout
                 log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%
                 log4j.logger.com.codefutures=DEBUG

              6、再次运行,console打印会有error

 WARN - job_local194089354_0001
org.apache.hadoop.security.AccessControlException: Permission denied: user=Administrator, access=WRITE, inode="/user/hadoop/output":hadoop:supergroup:drwxr-xr-x
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:271)


                说明是权限问题, eclipse是用Administrator启动的,连接linux下的hadoop是用此用户,所以权限禁止。

解决办法:

1)、如果是测试环境,可以取消hadoop hdfs的用户权限检查。打开conf/hdfs-site.xml,找到dfs.permissions属性修改为false(默认为true)OK了。
2)、修改hadoop location参数,在advanced parameter选项卡中,找到hadoop.job.ugi项,将此项改为启动hadoop的用户名即可
3)、 修改window 机器的用户名为 hadoop 用户名。

 

          7、执行,这次正确执行完成,console 不报告错误, dfs location 右键 -》reconnect -》一层一层点开,最后output 目录下看到统计单词结果。

Hello 4
cwq 1
me! 1
solo 2
world 2
you! 1





                

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hadoop实践(五)win10+eclipse+hadoop2.6.4 开发环境 的相关文章

随机推荐

  • 人脸年龄识别

    人脸年龄识别 人脸识别背景 人脸识别研究概况 人脸识别算法分类 人脸识别的意义 一张有趣的人脸年龄识别结果图 本文目的 数据集 dataloader py generate train val file py img aug py net
  • stm32矩阵键盘c语言程序,stm32矩阵键盘原理图及程序介绍

    STM32F0 系列产品基于超低功耗的 ARM Cortex M0 处理器内核 整合增强的技术和功能 瞄准超低成本预算的应用 该系列微控制器缩短了采用 8 位和 16 位微控制器的设备与采用 32 位微控制器的设备之间的性能差距 能够在经济
  • 大话数据结构1 - 概念、线性表

    程序设计 数据结构 算法 数据 数据元素 数据项 数据对象 数据结构 逻辑结构 集合结构 线性结构 树形结构 图形结构 物理结构 顺序存储结构 链式存储结构 空间优势 数据类型 抽象数据类型 ADT abstract data type 算
  • Python工业项目实战01:项目介绍及环境构建

    知识点01 课程目标 项目目标 项目1 在线教育 学习如何做项目 项目中大数据工程师要负责实现的内容和流程 学习数仓基础理论 建模 分层 项目2 一站制造 企业中项目开发的落地 代码开发 代码开发 SQL DSL SQL SparkCore
  • 免费的插画素材网站有哪些?

    面对紧急设计项目 设计师会选择使用外力来完成项目 免费插图网站可以帮助我们在这个时候解决问题 但大多数插图网站都是收费的 需要版权或特别丑陋的 基本上很少有免费的没有版权的好插图 但今天我想推荐一个免费的插图网站 即时设计资源社区 即时设计
  • 程序员是否可以在家办公——在家办公的利与弊

    对软件技术工作者来说 办公的场所对工作效率似乎并没有大的影响 毕竟 大部分软件工程师给人的印象是埋头于电脑前 似乎只要给他们一 台能够连上Internet或是公司VPN的电脑 他们就能产出我们期望的代码 在理想情况下 公司还能通过这样的方式
  • 马尔可夫链模型的信贷风险分析与预测

    今天为大家介绍马尔科夫链模型 信贷中计算风险分析与预测的一个重要模型 马尔科夫链模型是啥 数学模型中的一个重要的模型 是属于一类重要的随机过程 马尔可夫链模型 由俄国数学家 马尔可夫于1907年提出 人们在实际中常遇到具有下述特性的随机过程
  • 条件分支if和else的使用详解

    顺序结构没什么好讲的 就是从上到下的写代码 所以接下来 壹哥就直接带各位来学习分支结构里的条件分支 我们在前面说过 分支结构 或者叫做条件分支 其实有两种情况 一种是if else 类型的条件分支 一种是switch case 类型的条件分
  • 链表反转全家桶(一):动画详解单链表反转

    单链表的反转是一个easy级别的题目 这个题目在力扣上的提交次数达到47万次 而且在面试中也频频出现 可谓是大受欢迎 它的兄弟们也跟着风光了 这道题本身是比较简单的 而它的 难兄难弟 就不是那么简单了 今天这篇文章先从简单开始 分析单链表的
  • Navicat运行sql文件导入数据不全或导入失败

    前言 我们平时想把数据从一个数据库中导入另外一个数据库中的时候 一般都是把所需的数据表进行转储sql文件 然后再运行sql文件 导入新的数据库中 这么做 数据少的时候一般不会出现什么错 但是如果数据量比较大 表比较多 就会出现缺少数据表 或
  • Android自定义控件-----放大镜

    public class ShaderView extends View private final Bitmap bitmap private final ShapeDrawable drawable 放大镜的半径 private sta
  • 转载:原文http://www.cnblogs.com/gao241/p/3522143.html

    shell实例手册 0说明 手册制作 雪松 更新日期 2013 12 06 欢迎系统运维加入Q群 198173206 请使用 notepad 打开此文档 alt 0 将函数折叠后方便查阅 请勿删除信息 转载请说明出处 抵制不道德行为 错误在
  • 常见的图像滤波算法

    本文介绍五种常见的图像滤波方式 线性滤波 方框滤波 均值滤波 高斯滤波 非线性滤波 中值滤波 双边滤波 提醒 本文主要是算法公式 没有具体完整的代码 一 线性滤波 总的来说 这三种线性滤波原理 每个像素的输出值是输入像素的加权和 其处理方式
  • mysql通过二进制日志回复数据_详解如何通过Mysql的二进制日志恢复数据库数据...

    经常有网站管理员因为各种原因和操作 导致网站数据误删 而且又没有做网站备份 结果不知所措 甚至给网站运营和盈利带来负面影响 所以本文我们将和大家一起分享学习下如何通过Mysql的二机制日志 binlog 来恢复数据 系统环境 操作系统 Ce
  • Apache HTTPD 换行解析漏洞(CVE-2017-15715)

    简介 HTTPD就是平常大家说的apache服务器 HTTPD才是他的真实名字 环境搭建 使用vulhub里现成的环境部署即可 进入vulhub下的httpd CVE 2017 15715 docker compose build dock
  • 【python办公自动化】使用PysimpleGUI实现AHP指标的添加和删除及编号重新排序

    使用PysimpleGUI实现AHP指标的添加和删除 1 运行界面 2 添加指标 3 删除指标 4 编码重新排序 5 全部代码 1 运行界面 2 添加指标 输入框中输入内容 点击 添加指标 按钮 然后就会自动添加到上方列表中 3 删除指标
  • 浩鲸科技2020届c++

    1 C 是类型安全的 Java c 语言是类型安全的 除非强制类型转换 C语言不是类型安全的 因为同一段内存可以用不同的数据类型来解释 比如1用int来解释就是1 用boolean来解释就是true 2 float a b c 那么可以如下
  • 记一次SpringBoot打包Jar引入第三方jar包,部署出现ClassNotFound的现象

    心有猛虎 细嗅蔷薇 最近公司和第三方项目进行 于是需要引入第三方的SDK来调用一些东西 引入进来什么都是很好的 但是发布出去就出现各种ClassNotFuoundException等问题 然后看下测试环境的log发现了第三方的SDK中的类不
  • 关于hive的启动和连接

    目录 一 前言 二 hive的启动与连接 2 1 启动hadoop 2 2 启动hive 2 3 一些注意事项 一 前言 太久没用hive了 今天想重新熟悉一下 结果发现自己甚至忘记了怎么启动 于是特此记录篇笔记 便于以后忘记时查阅 不会写
  • hadoop实践(五)win10+eclipse+hadoop2.6.4 开发环境

    本人环境为win10 才从win7升级 eclipse是 Kepler Service Release 1 在win10下 安装了vm workstation 其上安装了centos6 5 并在上面部署了hadoop2 6 4的伪分布式安装