【发布时间】:2015-07-17 15:07:30
【问题描述】:
最初的问题是 trying to deploy spark 1.4 on Google Cloud。下载并设置后
SPARK_HADOOP2_TARBALL_URI='gs://my_bucket/my-images/spark-1.4.1-bin-hadoop2.6.tgz'
使用 bdutil 部署很好;但是,当尝试调用 SqlContext.parquetFile("gs://my_bucket/some_data.parquet") 时,会遇到以下异常:
java.lang.ClassCastException: com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem cannot be cast to org.apache.hadoop.fs.FileSystem
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2595)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:91)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2630)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2612)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:370)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:169)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:354)
at org.apache.hadoop.fs.Path.getFileSystem(Path.java:296)
at org.apache.hadoop.hive.metastore.Warehouse.getFs(Warehouse.java:112)
at org.apache.hadoop.hive.metastore.Warehouse.getDnsPath(Warehouse.java:144)
at org.apache.hadoop.hive.metastore.Warehouse.getWhRoot(Warehouse.java:159)
让我困惑的是,GoogleHadoopFileSystem 应该是 org.apache.hadoop.fs.FileSystem 的子类,我什至在同一个 spark-shell 实例中验证:
scala> var gfs = new com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem()
gfs: com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem = com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem@46f105c
scala> gfs.isInstanceOf[org.apache.hadoop.fs.FileSystem]
res3: Boolean = true
scala> gfs.asInstanceOf[org.apache.hadoop.fs.FileSystem]
res4: org.apache.hadoop.fs.FileSystem = com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem@46f105c
我错过了什么,有什么解决方法吗?提前致谢!
更新:这是我的 bdutil(1.3.1 版)部署设置:
import_env hadoop2_env.sh
import_env extensions/spark/spark_env.sh
CONFIGBUCKET="my_conf_bucket"
PROJECT="my_proj"
GCE_IMAGE='debian-7-backports'
GCE_MACHINE_TYPE='n1-highmem-4'
GCE_ZONE='us-central1-f'
GCE_NETWORK='my-network'
GCE_MASTER_MACHINE_TYPE='n1-standard-2'
PREEMPTIBLE_FRACTION=1.0
PREFIX='my-hadoop'
NUM_WORKERS=8
USE_ATTACHED_PDS=true
WORKER_ATTACHED_PDS_SIZE_GB=200
MASTER_ATTACHED_PD_SIZE_GB=200
HADOOP_TARBALL_URI="gs://hadoop-dist/hadoop-2.6.0.tar.gz"
SPARK_MODE="yarn-client"
SPARK_HADOOP2_TARBALL_URI='gs://my_conf_bucket/my-images/spark-1.4.1-bin-hadoop2.6.tgz'
【问题讨论】:
-
在我的测试中,我似乎至少可以很好地加载 Parquet 文件,甚至可以在结果数据帧上调用“take(10)”。你真的在调用 sqlContext.parquetFile("...") 时立即看到异常吗?还是在数据帧上的某些特定转换操作期间?
-
感谢丹尼斯的回复。我做的唯一一件事是 sqlContext.parquetFile("...") 并因错误而失败;我也重新部署了同样的错误。任何建议如何调查可能导致这种情况的原因?我已经为 bdutil 添加了我的详细设置。再次感谢!
-
您使用的是哪个 bdutil 版本?
-
bdutil 版本为 1.3.1
-
我尝试了几个不同的 bdutil 版本和不同的 Spark 版本,到目前为止,我一直能够加载我的 parquet 文件。您是否有机会分享正在运行的 scala 命令、调用标志等的可重现样本?您还可以与 gcp-hadoop-contact@google.com 分享详细信息,以便更直接地与 Google 工程师讨论
标签: apache-spark google-hadoop