我正在从运行在EMR上的吡火花写一个数据到外部的蜂巢表。这项工作包括从外部单元表中删除/截断数据,将数据的内容写入上述表,然后将数据从单元写入DynamoDB。我想写到EMR集群上的一个内部表,但现在我希望以后的集群可以使用蜂箱数据。我可以直接写信到Glue目录,强迫它注册,但这比我需要做的还要远。
所有组件都可以在给定的EMR集群上单独工作:我可以使用脚本或ssh和hive shell在EMR上创建外部单元表。这张桌子可以被雅典娜查询,也可以通过火星雨阅读。我可以创建一个dataframe并将数据插入到上述表中。然后,我可以使用hive将数据从hive表复制到DynamoDB表中。
我想把所有的工作都打包到一个pyspark脚本中,而不是提交多个不同的步骤。我可以使用sqlContext.sql("drop table if exists default.my_table")删除表
当我试图使用sqlContext.sql("create table default.mytable(id string,val string) STORED AS ORC")创建一个表时,我会得到以下错误:
从ip-xx-xxx-xxx/xx.xx.x.xx到ip-xxx-xx-xx:8020的org.apache.hadoop.net.ConnectTimeoutException:调用在套接字超时异常时失败: org.apache.hadoop.net.ConnectTimeoutException: 20000 millis超时,同时等待通道准备好连接。ch : java.nio.channels.SocketChannelconnection-pending remote=ip-xxx-xx-xx:8020;详情见:http://wiki.apache.org/hadoop/SocketTimeout
我不明白为什么我可以使用集群上的hive在Glue中创建一个外部单元格表,使用hive或py火花sqlcontext删除表,但是我不能使用sqlcontext创建一个表。我已经检查过了,所提供的解决方案在这个上下文中没有意义(复制hivesite.xml),因为我可以很清楚地将所需地址写到所需的地址,而不需要麻烦,只是不能使用pyspark。更奇怪的是,当我在雅典娜登记的时候,我会把桌子掉下来,而这些桌子肯定会掉下来。
运行于: emr-5.28.0,Hadoop发行版Amazon2.8.5 Spark2.4.4 Hive 2.3.6 Livy 0.6.0 (用于笔记本,但我的实验是通过ssh和pyspark shell)
发布于 2020-11-16 05:51:26
事实证明,只要我为表提供了一个位置,我就可以通过spark.sql()调用创建表。似乎Hive不需要它,但是spark.sql()需要它。没有预料到,但并不是完全不令人惊讶。
发布于 2021-08-05 16:25:24
补充@Zeathor的回答。在配置了EMR和Glue连接和权限(您可以在这里查看更多内容:https://www.youtube.com/watch?v=w20tapeW1ME)之后,您只需要编写sparkSQL命令:
spark = SparkSession.builder.appName('TestSession').getOrCreate()
spark.sql("create database if not exists test")然后可以从dataframes创建表:
df.createOrReplaceTempView("first_table");
spark.sql("create table test.table_name as select * from first_table");然后,所有数据库和表元数据将存储在AWS Glue目录中。
https://stackoverflow.com/questions/64475544
复制相似问题