您的位置:首页 > 编程语言 > Java开发

IDEA【spark&mapreduce混合配置】mapreduce spark 本地调试

2017-01-02 17:04 363 查看
本文主要讲解在一个普通java的mevan工程中,添加scala,并实现写spark
同时可以在这一个工程中本地调试mapreduce和spark
而且打的jar分别也能在集群中运行mapreduce和spark

睡到半夜起来。发现1号【过往记忆】有篇博客更新

scala和java可以放到一个mevan工程里面,https://www.iteblog.com/archives/1947
一不做二不休,起来试试吧

pom配置文件里面的插件地方要添加这些
主要是这几个插件
org.apache.maven.plugins
net.alchim31.maven
maven-assembly-plugin 貌似感觉第3个没用,查查中央库,没看明白干嘛,我就引了前面2个
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<scala.version>2.10.4</scala.version>
<java-version>1.7</java-version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.1.6</version>
<configuration>
<scalaCompatVersion>2.10</scalaCompatVersion>
<scalaVersion>${scala.version}</scalaVersion>
</configuration>

<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

添加完pom后

需要在目录中建立一个scala的文件夹





一个jar,既可以跑MR又可以跑spark,有意思





但是这都是上传到集群上跑的呀,多麻烦呀,我试试本地调试呢。
spark是没问题。
hadoop的mapreduce怎么在idea上本地调试呢?

搭建本地mapreduce调试环境,与scala spark工程共存

网上大部分说是
1.下载hadoop的2.6.0 source版
2.配置环境变量
3.在project structure 中添加一个modules,在dependencies添加hadoop share中的common,hdfs,mapreduce,yarn,lib目录 (在project的最顶端按f4可以直接打开)
4.在project structure/artifacts 中添加一个空jar
5.取个名字
6.在下面的加号中选择module output (这一步差不多输出目录的意思吧)
7.在工程中添加输入输出目录



8.最后编辑需要运行的工程edit configurtations,添加输入 输出目录(这一步网上各有说法,我尝试了很多种,最后是使用如下的方式才能成功)
主要是在program arguments中添加输入 输出目录(有些博客这地方也会添加jar包路径和主类名称,我都尝试了,但是不成功,最后只添加输入 输出目录)



添加hadoop2.6.0 source版的这些包



运行的时候出现错误





第一个自己发现的文件,发现 slf4j jar包有冲突,先去掉从hadoop2.6.0 source版引入的
错误消除

继续运行,出现错误

java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO



网上大部分说的是修改源码,这感觉有点不好弄呀,再找找
个人感觉主要问题,好像还是hadoop的环境变量问题或者像是少了这个winutils.exe?

2017-01-02 13:52:07,645 ERROR [main] util.Shell (Shell.java:getWinUtilsPath(378)) - Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable E:\chenxi\开发\hadoop\hadoop-2.6.0\bin\winutils.exe in the Hadoop binaries.

找了到一篇博客
http://www.cnblogs.com/longshiyVip/p/4805418.html

博主提供了如下文件,大致内容可以阅读该博客



把以上内容全部放到hadoop bin目录和windows system32目录后
MR正常运行
但是这里有2个引包的部分
从mevan中引
从hadoop2.6.0 source版目录中引

我从hadoop中引完包,可以运行,也能正常输出运行日志没问题
但是不想这样,我想全部走mevan中引

加了几条pom的信息,去掉从hadoop2.6.0 source版目录的引入
pom信息hadoop方面的如下
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.0-cdh5.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce</artifactId>
<version>2.6.0-cdh5.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-common</artifactId>
<version>2.6.0-cdh5.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-jobclient</artifactId>
<version>2.6.0-cdh5.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>2.6.0-cdh5.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.6.0-cdh5.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-yarn</artifactId>
<version>2.6.0-cdh5.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-yarn-common</artifactId>
<version>2.6.0-cdh5.5.0</version>
</dependency>


最后MR还是能运行,但是不出运行日志,错误如下



自己在另一个spark工程里有个这样的操作,单独搞了个log4j文件(也是运行日志方面的操作),我在这边也试试看能不能行。
把另一个spark工程里的log4j文件复制到这个工程中



引个包
import org.apache.log4j.PropertyConfigurator;



在需要运行的main函数中加入如下代码
PropertyConfigurator.configure(".\\src\\log4j.properties");



好了,可以跑了





当然了,mapreduce能本地调试
spark肯定也没问题啦,而且spark只需要引几个包就行了比mapreduce配置要简单很多

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spark scala java idea
相关文章推荐