我正在做一个简单的示例示例,其中引用了Internet中Java的Apache Spark中的单词计数,并且出现了以下错误:
引起原因:java.net.UnknownHostException:my.txt
 您可以看到下面的代码作为参考!

import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

public class MyCount {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    String file = "hdfs://my.txt";
    JavaSparkContext sc = new JavaSparkContext("local", "Simple App");
    JavaRDD<String> lines = sc.textFile(file);
    long nums = lines.count();
    System.out.println(nums);
    }
}

最佳答案

老问题,但是答案从未被接受,在我读这篇文章时,我的错误是将Spark的“本地”概念与“本地主机”混合在一起。

使用以下构造函数:JavaSparkContext(java.lang.String master, java.lang.String appName),您将需要使用:

JavaSparkContext sc = new JavaSparkContext("localhost", "Simple App");


但问题是使用“本地”。此外,HDFS文件名didn't specify a hostname"hdfs://SomeNameNode:9000/foo/bar/"

"hdfs://host:port/absolute-path"


从1.6.2版本开始,JavaSparkContext的Javadoc并未显示任何让您直接指定集群类型的构造函数:


  http://spark.apache.org/docs/latest/api/java/index.html?org/apache/spark/api/java/JavaSparkContext.html


JavaSparkContext的最佳构造函数需要一个SparkConf对象。为了使人们更容易理解,请构建一个SparkConf对象,然后将其传递给JavaSparkContext,以下示例设置了应用名称,指定Kryo序列化程序并设置了主模板:

    SparkConf sparkConf = new SparkConf().setAppName("Threshold")
            //.setMaster("local[4]");
            .setMaster(getMasterString(masterName))
            .set("spark.serializer",   "org.apache.spark.serializer.KryoSerializer")
            .registerKryoClasses(kryoClassArray);

    // create the JavaSparkContext now:
    JavaSparkContext jsc = new JavaSparkContext(sparkConf);


注意:备用.setMaster("local[4]");将使用OP可能正在尝试的本地模式。

我有一个more extended answer here that addresses using hostnames vs. IP addresses以及更多用于设置您的SparkConf的信息

08-24 17:37