【发布时间】:2017-10-18 11:18:32
【问题描述】:
我搭建了一个 spark-yarn 集群环境,用 spark-shell 试试 spark-SQL:
spark-shell --master yarn --deploy-mode client --conf spark.yarn.archive=hdfs://hadoop_273_namenode_ip:namenode_port/spark-archive.zip
值得一提的是Spark是Windows 7,spark-shell启动成功后,我执行如下命令:
scala> val sqlContext = new org.apache.spark.sql.SQLContext(sc)
scala> val df_mysql_address = sqlContext.read.format("jdbc").option("url", "jdbc:mysql://mysql_db_ip/db").option("driver", "com.mysql.jdbc.Driver").option("dbtable", "ADDRESS").option("user", "root").option("password", "root").load()
scala> df_mysql_address.show
scala> df_mysql_address.write.format("parquet").saveAsTable("address_local")
“show”命令正确返回结果集,但“saveAsTable”以失败告终。错误消息说:
java.io.IOException: Mkdirs failed to create file:/C:/jshen.workspace/programs/spark-2.2.0-bin-hadoop2.7/spark-warehouse/address_local/_temporary/0/_temporary/attempt_20171018104423_0001_m_000000_0 (exists=false, cwd=file:/tmp/hadoop/nm-local-dir/usercache/hduser/appcache/application_1508319604173_0005/container_1508319604173_0005_01_000003)
我希望并猜测该表将保存在 hadoop 集群中,但您可以看到目录 (C:/jshen.workspace/programs/spark-2.2.0-bin-hadoop2.7/spark-warehouse ) 是我的 Windows 7 中的文件夹,不在 hdfs 中,甚至在 hadoop ubuntu 机器中也没有。
我该怎么办?请指教,谢谢。
【问题讨论】:
-
您是否尝试将 HDFS 的绝对路径提供给 saveAsTable?喜欢
saveAsTable("hdfs://nn1/user/cloudera/address_local") -
感谢@philantrovert,受到您的建议的启发。我找到了正确的方法,即在 "save" 操作之前提供 "path" 选项: scala> df_mysql_address.write..option ("path", "/spark-warehouse").format("parquet").saveAsTable("address_local")
标签: apache-spark apache-spark-sql