电子病历:如何整合星火与Hive?

fcg9iug3  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(255)

使用emr集群,我创建了一个Map到dynamodb表的外部配置单元表(超过8亿行)。它工作得很好,我可以通过配置单元进行查询和插入。
如果我在hive中尝试一个带有hash\u键的条件的查询,我会在几秒钟内得到结果。但是,使用sparksql和enablehivesupport(accesing hive)通过spark submit执行相同的查询并没有完成,似乎从spark开始,它正在对表进行完全扫描。
我尝试了几种配置(例如不同的hive-site.xml),但在spark上似乎效果不佳。我应该如何通过spark来完成它?有什么建议吗?
谢谢

58wvjzkj

58wvjzkj1#

只需确保使用由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工作,您需要具备以下条件:

$ 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

相关问题