【问题标题】:EMR: How to integrate Spark with Hive?EMR:如何将 Spark 与 Hive 集成?
【发布时间】:2018-07-04 20:09:54
【问题描述】:

使用 EMR 集群,我创建了一个映射到 DynamoDB 表的外部 Hive 表(超过 8 亿行)。它运行良好,我可以通过 hive 进行查询和插入。

如果我尝试使用 Hive 中的 hash_key 条件进行查询,我会在几秒钟内得到结果。但是使用 SparkSQL 和 enableHiveSupport(访问 Hive)通过 spark-submit 执行相同的查询并没有完成。似乎从 Spark 它正在对表进行完整扫描。

我尝试了几种配置(例如不同的 hive-site.xml),但在 Spark 上似乎效果不佳。我应该如何通过 Spark 做到这一点?有什么建议吗?

谢谢

【问题讨论】:

  • Spark 不能替代 Hive(或 Hadoop 上的其他数据库)。只是说...
  • 我通过 Spark 使用 Hive,而不是替代品。
  • SparkSessionhiveSupport 不在 Hive 上运行。它只是启用与 Metastore 的集成。仅此而已。
  • 那我应该怎么做才能通过 Spark 运行 Hive?我不明白为什么同一个 Hive 表中的相同查询在 Hive 中可以在几秒钟内工作,而在 Spark 中它不起作用。

标签: apache-spark hive amazon-dynamodb amazon-emr


【解决方案1】:

只要确保使用 AWS 开源的 dynamo 连接器即可。默认情况下,它在 EMR AFAIK 上可用。

使用 DynamoDBStorageHandler 类创建表的语法:

CREATE EXTERNAL TABLE hive_tablename (
    hive_column1_name column1_datatype,
    hive_column2_name column2_datatype
)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES (
    "dynamodb.table.name" = "dynamodb_tablename",
    "dynamodb.column.mapping" =
        "hive_column1_name:dynamodb_attribute1_name,hive_column2_name:dynamodb_attribute2_name"
);

对于任何 Spark Job,您需要有以下配置:

$ spark-shell --jars /usr/share/aws/emr/ddb/lib/emr-ddb-hadoop.jar
...
import org.apache.hadoop.io.Text;
import org.apache.hadoop.dynamodb.DynamoDBItemWritable
import org.apache.hadoop.dynamodb.read.DynamoDBInputFormat
import org.apache.hadoop.dynamodb.write.DynamoDBOutputFormat
import org.apache.hadoop.mapred.JobConf
import org.apache.hadoop.io.LongWritable

var jobConf = new JobConf(sc.hadoopConfiguration)
jobConf.set("dynamodb.input.tableName", "myDynamoDBTable")

jobConf.set("mapred.output.format.class", "org.apache.hadoop.dynamodb.write.DynamoDBOutputFormat")
jobConf.set("mapred.input.format.class", "org.apache.hadoop.dynamodb.read.DynamoDBInputFormat")

var orders = sc.hadoopRDD(jobConf, classOf[DynamoDBInputFormat], classOf[Text], classOf[DynamoDBItemWritable])

orders.count()

参考资料: https://github.com/awslabs/emr-dynamodb-connector

【讨论】:

  • 在尝试连接 hive 之前,我已经尝试了所有这些。我看不到如何从 Spark 访问 Hive 表并使用第二部分进行查询。您正在访问 dynamodb 表(进​​行完整扫描)而不是 Hive 表。
  • 这里的重点是您将使用 AWS dynamodb 驱动程序。我们不能使用 Spark 的 hive 引擎。
  • 如何使用 AWS dynamodb 驱动进行查询?再一次,你总是得到完整的桌子
猜你喜欢
  • 1970-01-01
  • 2018-01-12
  • 2019-09-18
  • 1970-01-01
  • 2016-04-08
  • 2015-05-05
  • 2018-07-07
  • 2017-11-07
  • 2020-01-08
相关资源
最近更新 更多