【问题标题】:How to load files in sparksql through remote hive storage ( s3 orc) using spark/scala + code + configuration如何使用 spark/scala + 代码 + 配置通过远程配置单元存储(s3 orc)在 sparksql 中加载文件
【发布时间】:2018-09-23 11:46:15
【问题描述】:

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

能够读取表架构但无法读取表。

错误 - 线程“主”java.lang.IllegalArgumentException 中的异常: AWS 访问密钥 ID 和秘密访问密钥必须指定为 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() 
}
}`

【问题讨论】:

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


    【解决方案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()
    

    【讨论】:

    • 线程“main”java.lang.IllegalArgumentException 中的异常:必须将 AWS 访问密钥 ID 和秘密访问密钥指定为 s3 URL 的用户名或密码(分别),或者通过设置 fs. s3.awsAccessKeyId 或 fs.s3.awsSecretAccessKey 属性(分别)。
    • 我提供了s3n,它是用于本机s3文件系统的。还有其他版本s3a和纯s3,它是块文件系统。不知道这是否是原因,但值得一试,我想。
    • @SivaprasannaSethuraman,我正在尝试连接到远程机器(不是 s3),所以我删除了两个 accesskey 属性但得到 Hive:无法访问元存储。不应在运行时访问此类。错误
    • Rahul:永远不要将 AWS 密钥、私有或(此处的)公共密钥放入:堆栈溢出、源代码等。这就是您获得大额账单的方式。
    • 史蒂夫,这只是示例键,不是真实的。
    【解决方案2】:

    如果您在 spark 配置中设置它们,则需要在所有 fs. 选项前面加上 spark.hadoop。如前所述:如果可以,请使用 s3a 而不是 s3n。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 2019-12-03
      • 2018-10-26
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      相关资源
      最近更新 更多