从本地计算机到迁移群集的Spark作业无法查看远程服务器上的数据

时间:2016-02-26 15:07:23

标签: apache-spark

该帖子可能看起来有点长,但我提供了所有具体细节,以帮助读者我想要实现的目标,以及我已经完成但仍然遇到问题的所有内容。

我正在尝试将火花作业从Windows 7机器上本地运行的eclipse提交到远程集群,但是在查找集群节点上数据的输入路径方面遇到了问题。我按照本论坛中的建议配置了sparkContext,如下所示我将spark.driver.host设置为Windows机器的IP地址。

            SparkConf sparkConf = new SparkConf().setAppName("Count Lines")
                                    .set("spark.driver.host", "9.1.194.199")  //IP address of Windows 7
                    .set("spark.driver.port", "51910")
                    .set("spark.fileserver.port", "51811")
                    .set("spark.broadcast.port", "51812")
                    .set("spark.replClassServer.port", "51813")
                    .set("spark.blockManager.port", "51814")
                            .setMaster("spark://master.aa.bb.com:7077"); //mater hostname

我还必须在eclipse中将HADOOP_HOME设置为c:\ winutils,以便能够在Windows上运行此代码。 然后我设置存在于spark集群的所有节点上的数据的路径,如下所示

            String topDir = "/data07/html/test";
                    JavaRDD<String> lines = sc.textFile(topDir+"/*");

然而,我收到以下错误。

5319 [main] INFO  org.apache.spark.SparkContext  - Created broadcast 0 from textFile at CountLines2.java:65
Exception in thread "main" org.apache.hadoop.mapred.InvalidInputException: Input Pattern file:/data07/html/test/* matches 0 files
        at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:251)
        at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:270)
        at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:201)
        at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:205)

现在考虑到在eclipse中运行代码需要本地hadoop安装(即,将HADOOP_HOME设置为c:\ winutils),我修改了代码以使用Windows机器上本地存在的数据路径。通过该修改,progam更进一步,并在集群的所有节点上启动了任务,但稍后因路径问题而导致其他错误失败。

105926 [task-result-getter-2] INFO  org.apache.spark.scheduler.TaskSetManager  - Lost task 15.2 in stage 0.0 (TID 162) on executor master.aa.bb.com: java.lang.IllegalArgumentException (java.net.URISyntaxException: Relative path in absolute URI: C:%5Cdata%5CMedicalSieve%5Crepositories%5Craw%5CMedscape%5Cclinical/*) [duplicate 162]
Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 44 in stage 0.0 failed 4 times, most recent failure: Lost task 44.3 in stage 0.0 (TID 148, aalim03.almaden.ibm.com): java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: C:%5Cdata%5Chtml%5Ctest/*
        at org.apache.hadoop.fs.Path.initialize(Path.java:206)
        at org.apache.hadoop.fs.Path.<init>(Path.java:172)
        at org.apache.hadoop.util.StringUtils.stringToPath(StringUtils.java:241)

1 个答案:

答案 0 :(得分:0)

根据经验,您使用的每个输入都应该可以在每个节点(工作人员和驱动程序)上访问。这些可能是本地文件系统,某些DFS上的文件或外部资源。

直接从驱动程序发送数据的唯一情况是ParallelCollectionRDDparallelize / makeRDD一起使用。