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

来源:互联网 发布:拍网络电影多少钱 编辑:程序博客网 时间:2024/05/29 16:30
本文主要讲解在一个普通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配置要简单很多



0 0
原创粉丝点击