【问题标题】:error: path does not exist in spark submit with hadoop错误:使用hadoop提交的火花中不存在路径
【发布时间】:2018-11-16 17:40:24
【问题描述】:

我们正在使用命令/home/ubuntu/spark/bin/spark-submit --master yarn --deploy-mode cluster --class "SimpleApp" /home/ubuntu/spark/examples/src/main/scala/sbt/target/scala-2.11/teste_2.11-1.0.jar 来运行下面的脚本

import org.apache.spark.sql.SQLContext
import org.apache.spark.sql._
import org.apache.spark.sql.types._
import org.apache.spark.sql.SparkSession
import org.apache.spark._
import org.apache.spark
import org.apache.spark.sql
import org.apache.spark.SparkContext._


object SimpleApp {
     def main(args: Array[String]) {

     val spark = SparkSession.builder().appName("query1").master("yarn").getOrCreate
     val header = StructType(Array(
             StructField("medallion", StringType, true),
             StructField("hack_license", StringType, true),
             StructField("vendor_id", StringType, true),
             StructField("rate_code", IntegerType, true),
             StructField("store_and_fwd_flag", StringType, true),
             StructField("pickup_datetime", TimestampType, true),
             StructField("dropoff_datetime", TimestampType, true),
             StructField("passenger_count", IntegerType, true),
             StructField("trip_time_in_secs", IntegerType, true),
             StructField("trip_distance", FloatType, true),
             StructField("pickup_longitude", FloatType, true),
             StructField("pickup_latitude", FloatType, true),
             StructField("dropoff_longitude", FloatType, true),
             StructField("dropoff_latitude", FloatType, true),
             StructField("payment_type", StringType, true),
             StructField("fare_amount", FloatType, true),
             StructField("surcharge", FloatType, true),
             StructField("mta_tax", FloatType, true),
             StructField("trip_amount", FloatType, true),
             StructField("tolls_amount", FloatType, true),
             StructField("total_amount", FloatType, true),
             StructField("zone", StringType, true)))

     val nyct = spark.read.format("csv").option("delimiter", ",").option("header", "true").schema(header).load("/home/ubuntu/trip_data/trip_data_fare_1.csv")
     nyct.createOrReplaceTempView("nyct_temp_table")

     spark.time(spark.sql("""SELECT zone, COUNT(*) AS accesses FROM nyct_temp_table WHERE (HOUR(dropoff_datetime) >= 8 AND HOUR(dropoff_datetime) <= 19) GROUP BY zone ORDER BY accesses DESC""").show())

     }
 }

这个想法是将脚本中的查询运行到带有 spark 和 Hadoop 的集群中。但在执行结束时,这会产生一个错误,从路径/home/ubuntu/trip_data/trip_data_fare_1.csv 读取 csv 文件。 This is the picture of the error

我认为问题是节点从机在主目录中找不到文件。有人知道我该如何解决这个问题并在集群中运行这个脚本吗?

【问题讨论】:

  • /home/ubuntu/trip_data/trip_data_fare_1.csv 是本地文件系统的路径,spark 正在尝试从 hdfs 文件系统路径hdfs://master2:9000/home/ubuntu/trip_data/trip_data_fare_1.csv 读取。因此,如果您正在从本地文件系统读取,请将file: 作为file:/home/ubuntu/trip_data/trip_data_fare_1.csv 包含在您的路径中,否则将文件上传到此目录中的hdfs 中/home/ubuntu/trip_data/trip_data_fare_1.csv

标签: apache-spark hadoop cluster-computing hadoop-yarn spark-submit


【解决方案1】:

由于您在集群中运行,因此您应该在 hdfs 中有此文件。您可以使用以下命令将文件从本地文件系统复制到 HDFS:

hadoop fs -put source_path dest_path

然后在你的代码中使用 dest_path。

对于您,请在具有本地文件的主机上执行此操作:

hadoop fs -put /home/ubuntu/trip_data/trip_data_fare_1.csv <some_hdfs_location>

通过执行以下操作验证副本是否有效:

hdfs dfs -ls <some_hdfs_location>

【讨论】:

    【解决方案2】:

    如果我没有错,那么 Spark 将您的本地文件系统视为其默认文件系统,这就是您面临此错误的原因。配置应传递到 Spark 上下文中,您应该在 spark-env.sh 中提及 HADOOP_CONF_DIR文件中的所有节点。确保在所有节点中指定HADOOP_CONF_DIR

    val spCont = <Spark Context>
    val config = spCont.hadoopConfiguration
    
    config.addResource(new Path(s"${HADOOP_HOME}<path to core-site.xml>"))
    

    【讨论】:

      猜你喜欢
      • 2017-11-24
      • 1970-01-01
      • 2020-07-03
      • 2017-03-21
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 2015-06-21
      • 2015-11-06
      相关资源
      最近更新 更多