2016-02-26 25 views
1

该帖子看起来可能有点长,但我提供了所有具体的细节以帮助读者实现我想要达到的目标以及我已经拥有的所有内容完成但仍然遇到问题。Spark从本地机器重定向到Remore群集无法看到远程服务器上的数据

我试图从eclipse在Windows 7计算机上本地运行的远程集群提交spark工作,但遇到关于在集群节点上查找数据输入路径的问题。我遵循在这个论坛中提出的建议来配置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 

我也不得不HADOOP_HOME设置为C:\ winutils在Eclipse中,要能在Windows上运行此代码。 后来我设置哪些火花集群中的所有节点上都存在如下

  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计算机上本地存在的数据路径的代码。通过这种修改,该程序进一步发展并在集群的所有节点上启动任务,但后来由于其他错误而导致路径问题失败。

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) 

回答

0

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

数据直接从驱动程序中发货的唯一情况是当您使用ParallelCollectionRDDparallelize/makeRDD

+0

为什么司机需要访问数据?工作人员会对数据进行实际处理,所以我有点不清楚为什么需要这样做? – Deeps

+0

那么,有人必须告诉工人该做什么,并能做到这一点,必须知道工作是什么。 – zero323

+0

可否请您详细说明。通过驱动程序代码,他们不知道工作人员需要做什么?为什么驱动程序节点需要访问用于RDD的输入? – Deeps

相关问题