如何使用spark / scala + code +配置通过远程配置单元存储(s3 orc)在sparksql中加载文件

时间:2018-04-13 07:25:57

标签: scala apache-spark amazon-s3 hive thrift

intellij(spark)---> Hive(远程)---存储在S3(orc格式) 无法通过spark / scala读取远程Hive表。

能够读取表模式但无法读取表。

  

错误 - 线程“main”中的异常java.lang.IllegalArgumentException:   必须将AWS Access Key ID和Secret Access Key指定为   s3 URL的用户名或密码(或分别),或通过设置   fs.s3.awsAccessKeyId或fs.s3.awsSecretAccessKey属性   (分别)。

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.{Encoders, SparkSession}
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.sql.hive.orc._
import org.apache.spark.sql.types.StructType

object mainclas {

  def main(args: Array[String]): Unit = {

     val spark = SparkSession.builder
      .master("local[*]")
      .appName("hivetable")
      .config("hive.metastore.uris", "thrift://10.20.30.40:9083")
       .config("access-key","PQHFFDEGGDDVDVV")
       .config("secret-key","FFGSGHhjhhhdjhJHJHHJGJHGjHH")
       .config("format", "orc")
      .enableHiveSupport()
      .getOrCreate()

   val res = spark.sqlContext.sql("show tables").show()
   val res1 =spark.sql("select *from ace.visit limit 5").show() 
}
}`

2 个答案:

答案 0 :(得分:1)

试试这个:

val spark = SparkSession.builder
  .master("local[*]")
  .appName("hivetable")
  .config("hive.metastore.uris", "thrift://10.20.30.40:9083")
  .config("fs.s3n.awsAccessKeyId","PQHFFDEGGDDVDVV")
  .config("fs.s3n.awsSecretAccessKey","FFGSGHhjhhhdjhJHJHHJGJHGjHH")
  .config("format", "orc")
  .enableHiveSupport()
  .getOrCreate()

答案 1 :(得分:0)

如果要在spark配置中设置fs.选项,则需要在spark.hadoop前加let first = storyboard.instantiateViewController(withIdentifier: "firstID") self.present(first , animated: false, completion: nil) 前缀。如上所述:如果可以,请使用s3a而不是s3n。