2017-10-18 47 views
0

我設置了一個火花紗線集羣環境,並嘗試火花SQL火花殼:saveAsTable兩端

spark-shell --master yarn --deploy-mode client --conf spark.yarn.archive=hdfs://hadoop_273_namenode_ip:namenode_port/spark-archive.zip 

有一點要提的是Spark是在Windows 7.在火花殼成功啓動,我執行的命令如下:

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") 

「顯示」命令返回正確結果集,但在故障「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機器中都沒有。

我該怎麼辦?請指教,謝謝。

+1

您是否嘗試將HDFS的絕對路徑提供給SaveAsTable?像'saveAsTable(「hdfs:// nn1/user/cloudera/address_local」)' – philantrovert

+0

感謝@philantrovert,受到您的建議的啓發。我找出了正確的方法,即在_「save」_操作之前提供_「path」_選項: _scala> df_mysql_address.write..option(「path」,「/ spark-warehouse」) .format( 「實木複合地板」)。saveAsTable( 「address_local」)_ –

回答

0

的方式擺脫這一問題的是提供前「路徑」選項,將「保存」操作,如下圖所示:

scala> df_mysql_address.write.option("path", "/spark-warehouse").format("parquet").saveAsTable("address_l‌​ocal") 

感謝@philantrovert。