我在运行spark中的以下代码。
scala>import com.databricks.spark.xml.XmlInputFormat
scala>import org.apache.hadoop.io._
scala>sc.hadoopConfiguration.set(XmlInputFormat.START_TAG_KEY,"<mytag>")
scala>sc.hadoopConfiguration.set(XmlInputFormat.END_TAG_KEY,"</mytag>")
scala>sc.hadoopConfiguration.set(XmlInputFormat.ENCODING_KEY,"utf-8")
scala>val record1 = sc.newAPIHadoopFile("file:///home/myuser/myfile.xml", classOf[XmlInputFormat], classOf[LongWritable],classOf[Text])
通过将master设置为local来运行它时,效果很好。
spark2-shell --jars spark-xml_2.10-0.4.1.jar --master local[*]
但是,当我尝试在yarn
中运行它时,它返回java.io.FileNotFoundException: File file:/home/myuser/myfile.xml does not exist
。
spark2-shell --jars spark-xml_2.10-0.4.1.jar --master yarn
我尝试将--deply-mode
添加为client
和cluster
,但是没有用。
答案 0 :(得分:0)
文件file:///home/myuser/myfile.xml"
似乎只能在驱动程序上访问,而不能在执行程序上访问。你应该
A)手动将文件放在HDFS上并从那里读取
或B)使用spark2-shell的--files
选项可以为您上传文件到HDFS:
spark2-shell --files /home/myuser/myfile.xml --jars spark-xml_2.10-0.4.1.jar --master yar
然后
val record1 = sc.newAPIHadoopFile(org.apache.spark.SparkFiles.get("myfile.xml"), classOf[XmlInputFormat], classOf[LongWritable],classOf[Text])