热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

idea远程调试MapReduce

作为习惯了用idea开发的小伙伴,不太想用eclipse开发Hadoop,于是研究了一下idea如何远程调试mr,现分享一下。一开发环境本地win10系统Intellijidea1

作为习惯了用idea开发的小伙伴,不太想用eclipse开发Hadoop,于是研究了一下idea如何远程调试mr,现分享一下。

一 开发环境

本地win10系统

Intellij idea14工具

虚拟机中hadoop2.6.0伪分布模式

二配置步骤(这里笨小葱参考的这篇文章:http://www.cnblogs.com/yjmyzz/p/how-to-remote-debug-hadoop-with-eclipse-and-intellij-idea.html,下面列出idea中的配置)

2.1 下载hadoop-2.6.0二进制文件(hadoop-2.6.0.tar.gz),解压。

官网地址:https://archive.apache.org/dist/hadoop/common/hadoop2.6.0/.

2.2 在win10中添加几个环境变量

HADOOP_HOME=D:\yangjm\Code\study\hadoop\hadoop-2.6.0

HADOOP_BIN_PATH=%HADOOP_HOME%\bin

HADOOP_PREFIX=D:\yangjm\Code\study\hadoop\hadoop-2.6.0

另外,PATH变量在最后追加;%HADOOP_HOME%\bin

2.3 创建一个maven的WordCount项目

pom文件如下:

idea远程调试MapReduce
idea远程调试MapReduce
 1 xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0modelVersion>
 6 
 7     <groupId>yjmyzzgroupId>
 8     <artifactId>mapreduce-helloworldartifactId>
 9     <version>1.0-SNAPSHOTversion>
10 
11     <dependencies>
12         <dependency>
13             <groupId>org.apache.hadoopgroupId>
14             <artifactId>hadoop-commonartifactId>
15             <version>2.6.0version>
16         dependency>
17         <dependency>
18             <groupId>org.apache.hadoopgroupId>
19             <artifactId>hadoop-mapreduce-client-jobclientartifactId>
20             <version>2.6.0version>
21         dependency>
22         <dependency>
23             <groupId>commons-cligroupId>
24             <artifactId>commons-cliartifactId>
25             <version>1.2version>
26         dependency>
27     dependencies>
28 
29     <build>
30         <finalName>${project.artifactId}finalName>
31     build>
32 
33 project>
idea远程调试MapReduce

项目结构如下:

idea远程调试MapReduce

项目上右击-》Open Module Settings 或按F12,打开模块属性

idea远程调试MapReduce

添加依赖的Libary引用

idea远程调试MapReduce

然后把$HADOOP_HOME下的对应包全导进来

idea远程调试MapReduce

导入的libary可以起个名称,比如hadoop2.6

idea远程调试MapReduce

3.2 设置运行参数

idea远程调试MapReduce

注意二个地方:

1是Program aguments,这里跟eclipes类似的做法,指定输入文件和输出文件夹

2是Working Directory,即工作目录,指定为$HADOOP_HOME所在目录

然后就可以调试了

idea远程调试MapReduce

intellij下唯一不爽的,由于没有类似eclipse的hadoop插件,每次运行完wordcount,下次再要运行时,只能手动命令行删除output目录,再行调试。

 在IDE环境中运行时,IDE需要知道去连哪一个hdfs实例(就好象在db开发中,需要在配置xml中指定DataSource一样的道理),将$HADOOP_HOME\etc\hadoop下的core-site.xml,复制到resouces目录下,类似下面这样:
idea远程调试MapReduce

里面的内容如下:

idea远程调试MapReduce
xml version="1.0" encoding="UTF-8"?>
xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>fs.defaultFSname>
        <value>hdfs://172.28.20.***:9000value>
    property>
configuration>
idea远程调试MapReduce

上面的IP换成虚拟机里的IP即可


三 bug解决

问题0:如果启动最初报错一个winutils.exe 找不到,那么下载一下放到HADOOP_HOME的bin目录下.(这里还需要添加一个下载hadoop.dll放到HADOOP_HOME的bin目录下和windows系统的c:/window/system32/,不然的话会出现问题三错误。)

这里分享一下winutils.exe和hadoop.dll的2.6.0版本

网盘地址:http://pan.baidu.com/s/1i5HKJIH

问题一 

抛异常:java.io.IOException: Failed on local exception: com.google.protobuf.InvalidProtocolBufferException: Protocol messageend-group tag did not match expected tag.;

可能是端口问题 
cdh的环境下,hdfs是8020端口,conf.set(“fs.defaultFS”, “hdfs://192.168.0.4:8020”); 
普通hadoop环境,hdfs是9000端口,conf.set(“fs.defaultFS”, “hdfs://192.168.0.121:9000”);


问题二:
抛异常:Exception in thread "main" 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:557)
at org.apache.hadoop.fs.FileUtil.canRead(FileUtil.java:977)
at org.apache.hadoop.util.DiskChecker.checkAccessByFileMethods(DiskChecker.java:187)
        ........

修改org.apache.hadoop.io.nativeio.NativeIO源码:

idea远程调试MapReduceidea远程调试MapReduce

为:

idea远程调试MapReduceidea远程调试MapReduce

重新编译


问题三:

Exception in thread "main" java.lang.UnsatisfiedLinkError:org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray(II[BI[BIILjava/lang/String;JZ)V

at org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray(Native Method)

at org.apache.hadoop.util.NativeCrc32.calculateChunkedSumsByteArray(NativeCrc32.java:86)

at org.apache.hadoop.util.DataChecksum.calculateChunkedSums(DataChecksum.java:430)

at org.apache.hadoop.fs.FSOutputSummer.writeChecksumChunks(FSOutputSummer.java:202)

     。。。。。。。。

下载hadoop.dll放到HADOOP_HOME的bin目录下和windows系统的c:/window/system32/

注意如果这个hadoop.dll的版本要和hadoop的一致,可以稍微高一点,低了可能就会报这个异常


问题四:

异常信息: 

Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied:user=Administrator, access=WRITE, inode="/spark/global":root:supergroup:drwxr-xr-x

at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:271)

at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:257)

这是因为当前用户Administrator没有对hdfs的写入权限. 有几种方式解决:

1、在系统的环境变量或java JVM变量里面添加HADOOP_USER_NAME,这个值具体等于多少看自己的情况,以后会运行HADOOP上的Linux的用户名。(修改完重启eclipse,不然可能不生效)

2、将当前系统的帐号修改为hdfs用户(CDH默认为用户名hdfs)

3、使用HDFS的命令行接口修改相应目录的权限,hadoop fs -chmod 777 /user,后面的/user是要上传文件的路径,不同的情况可能不一样,比如要上传的文件路径为hdfs://namenode/user/xxx.doc,则这样的修改可以,如果要上传的文件路径为hdfs://namenode/java/xxx.doc,则要修改的为hadoop fs -chmod 777 /java或者hadoop fs -chmod 777 /,java的那个需要先在HDFS里面建立Java目录,后面的这个是为根目录调整权限。


bug全部改完后打个断点就可以远程调试mr啦。idea远程调试MapReduce


推荐阅读
  • Hudi是一种数据湖的存储格式,在Hadoop文件系统之上提供了更新数据和删除数据的能力以及流式消费变化数据的能力。应用场景近实时数据摄取Hudi支持插入、更新和删除数据的能力。您 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 如何使用 `org.eclipse.rdf4j.query.impl.MapBindingSet.getValue()` 方法及其代码示例详解 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 动态壁纸 LiveWallPaper:让您的桌面栩栩如生(第二篇)
    在本文中,我们将继续探讨如何开发动态壁纸 LiveWallPaper,使您的桌面更加生动有趣。作为 2010 年 Google 暑期大学生博客分享大赛 Android 篇的一部分,我们将详细介绍 Ed Burnette 的《Hello, Android》第三版中的相关内容,并分享一些实用的开发技巧和经验。通过本篇文章,您将了解到如何利用 Android SDK 创建引人入胜的动态壁纸,提升用户体验。 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • 本文详细介绍了在Windows操作系统上使用Python 3.8.5编译支持CUDA 11和cuDNN 8.0.2的TensorFlow 2.3的步骤。文章不仅提供了详细的编译指南,还分享了编译后的文件下载链接,方便用户快速获取所需资源。此外,文中还涵盖了常见的编译问题及其解决方案,确保用户能够顺利进行编译和安装。 ... [详细]
  • 熟悉IDEA快捷键的正确姿势
    一、背景俗话说:“工欲善其事必先利其器”,现在IDEA作为主流的Java开发工具,已经广泛使用。但是很多人熟悉的快捷键是有限的 ... [详细]
  • JDK IDEA的安装卸载基本使用
    一、JDK下载地址官网https:www.oracle.comjavatechnologiesjavase-downloads.html没有账号可以使用:https:blog ... [详细]
  • 我尝试从maven-archetype-webapp(Idea附带的maven)在IntellijIdea社区(IntelliJIDEA2019.2.4Build# ... [详细]
  • ImusingthelatestJDKandeverywherefromprojectcreationtonoweverythingissettoJava8orS ... [详细]
author-avatar
亮我mc踢弯的
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有