云服务器内容精选

  • 操作步骤 可对INSERT...SELECT操作做如下的调优操作。 如果建的是Hive表,将存储类型设为Parquet,从而减少执行INSERT...SELECT语句的时间。 建议使用spark-sql或者在beeline/thriftserver模式下使用spark用户来执行INSERT...SELECT操作,避免执行更改文件owner的操作,从而减少执行INSERT...SELECT语句的时间。 在beeline/thriftserver模式下,executor的用户跟driver是一致的,driver是thriftserver服务的一部分,是由spark用户启动的,因此其用户也是spark用户,且当前无法实现在运行时将beeline端的用户透传到executor,因此使用非spark用户时需要对文件进行更改owner为beeline端的用户,即实际用户。
  • 回答 由于Spark存在一个机制,为了提高性能会缓存ORC的元数据信息。当通过Hive或其他方式更新了ORC表时,缓存的元数据信息未更新,导致Spark SQL查询不到新插入的数据。 对于存储类型为ORC的Hive分区表,在执行插入数据操作后,如果分区信息未改变,则缓存的元数据信息未更新,导致Spark SQL查询不到新插入的数据。 解决措施: 在使用Spark SQL查询之前,需执行Refresh操作更新元数据信息: REFRESH TABLE table_name; table_name为刷新的表名,该表必须存在,否则会出错。 执行查询语句时,即可获取到最新插入的数据。 使用sqark时,执行以下命令禁用Spark优化: set spark.sql.hive.convertMetastoreOrc=false;