zoukankan      html  css  js  c++  java
  • IDEA开发Spark的漫漫摸索(二)

    1 新建Maven项目

    image
    特别提醒,Maven项目中有GropId和ArtifactId。GroupId是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。一般GruopId形如ncepu.com.cn。ArtifactId是项目的唯一的标识符,实际对应项目的名字,就是项目根目录的名称。
    image

    2 添加依赖包

    spark-assembly-1.6.3-hadoop2.6.0.jar路径:/home/hadoop/spark-1.6.3-bin-hadoop2.6/lib(虚拟机中)
    先将spark-assembly-1.6.3-hadoop2.6.0.jar从虚拟机中复制到本机。
    File→Project Structure→Libraries→“+”→Java,将spark-assembly-1.6.3-hadoop2.6.0.jar添加进来。
    image

    3 测试IDEA和Spark的连通性

    在src/main/java目录下新建Java类ConnectionUtil。
    image
    Run→Edit Confugurations
    image
    在Main class右侧点击“..."选择想要运行的类。
    image

    点击图示位置进行编译。
    Run→Run"Connection Util“运行Connection Util类。
    image
    出现如图结果说明运行成功。

    4 IDEA打包运行

    准备一个txt文档,上传到HDFS上。
    image
    之前已经上传过,所以在此仅用text命令查看。
    新建java类JavaWordCount。

    import scala.Tuple2;
    import org.apache.spark.SparkConf;
    import org.apache.spark.api.java.JavaPairRDD;
    import org.apache.spark.api.java.JavaRDD;
    import org.apache.spark.api.java.JavaSparkContext;
    import org.apache.spark.api.java.function.FlatMapFunction;
    import org.apache.spark.api.java.function.Function2;
    import org.apache.spark.api.java.function.PairFunction;
    import java.util.Arrays;
    import java.util.List;
    import java.util.regex.Pattern;
    public final class JavaWordCount {
        private static final Pattern SPACE = Pattern.compile(" ");
        public static void main(String[] args) throws Exception {
    //      if (args.length < 1) {
    //        System.err.println("Usage: JavaWordCount <file>");
    //        System.exit(1);
    //      }
            SparkConf sparkConf = new SparkConf().setAppName("JavaWordCount")
                    .setMaster("spark://master:7077")
                    .set("spark.executor.memory", "512M");
            JavaSparkContext ctx = new JavaSparkContext(sparkConf);
            ctx.addJar("D:\Users\NCEPU\IdeaProjects\Test\out\artifacts\Test_jar\JavaWordCount.jar");
            String path = "hdfs://master:9000/user/hadoop/wordcount.txt";
            JavaRDD<String> lines = ctx.textFile(path);
            JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
                @Override
                public Iterable<String> call(String s) {
                    return Arrays.asList(SPACE.split(s));
                }
            });
            JavaPairRDD<String, Integer> ones = words.mapToPair(new PairFunction<String, String, Integer>() {
                @Override
                public Tuple2<String, Integer> call(String s) {
                    return new Tuple2<String, Integer>(s, 1);
                }
            });
            JavaPairRDD<String, Integer> counts = ones.reduceByKey(new Function2<Integer, Integer, Integer>() {
                @Override
                public Integer call(Integer i1, Integer i2) {
                    return i1 + i2;
                }
            });
            List<Tuple2<String, Integer>> output = counts.collect();
            for (Tuple2<?,?> tuple : output) {
                System.out.println(tuple._1() + ": " + tuple._2());
            }
            ctx.stop();
        }
    }
    

    将JavaWordCount类打包。
    File→Project Structure→Artifacts→“+”→JAR→From module with dependencies。
    image
    特别需要注意的是,Output Directory是打包的jar包的输出路径。
    输入main class入口函数名,将Output Layout下所有jar包删掉(因为spark运行环境已经包含了这些包),如果已经存在 META‐INF 要先将这个文件夹删除。
    Build→Build Artifact进行打包。打包生成的jar包如图所示。
    image

    运行程序后,出现以下结果说明程序运行成功。
    image

    5 出现的问题

    问题一:提示WARN TaskSchedulerImpl: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

    ++原因++:这个问题是因为内存不够。

    ++解决++:有如下两种可能的解决方法。
    一是修改设置的内存
    image
    将这里的内存设置得小一点。
    二是重启虚拟机。
    问题二:java无法访问scala.Cloneable 找不到scala.Cloneable的类文件

    ++原因++:原来使用的是 spark‐2.1.0‐bin‐hadoop2.4 没有 spark‐assembly‐1.6.3‐hadoop2.6.0.jar 依赖包所致。

    ++解决++:因为原来是用的hadoop版本为 2.5.2 相应的依赖包官网已经不再支持,所以更新的平台的hadoop环境为 2.6.5 ,spark 2.X相应的文档很少,更改版本为 1.6.3 。

  • 相关阅读:
    一生不可错过的五句话
    分布式缓存系统Memcached简介与实践[转]
    telnet serverip serverport 可以测试服务器端口是否通
    使用c#生成高品质小空间的缩略图
    sql server2005对tsql的增强之在聚合函数的后面使用over关键字
    (转)让你受益终身的10个Word实用技巧
    sql取所有记录中每天的最后一笔交易的记录
    屏蔽服务器端包含在文件不存在时报错的错误信息
    c#农历日历类
    Niubility 英语教程
  • 原文地址:https://www.cnblogs.com/lalabola/p/7390516.html
Copyright © 2011-2022 走看看