Google DataProc Hive 和 Presto 查询不起作用



我有一个Google DataProc群集,其中已安装为PRESTO作为可选组件。我在Hive中创建一个外部表,其大小为〜1GB。虽然该表是可查询的(例如,Groupby语句,独特的等(,但我在用Hive和Presto执行简单的select * from tableA问题:

  1. 对于Hive,如果我登录了群集节点的主机,并从Hive Command Line运行查询,那就成功了。但是,当我从本地计算机运行以下命令时:

gcloud dataproc jobs submit hive --cluster $CLUSTER_NAME --region $REGION --execute "SELECT * FROM tableA;"

我有以下错误:

线程中的异常" main" java.lang.outofmemoryerror:java堆空间错误:(gcloud.dataproc.jobs.submit.hive(作业[3E165C0EDCDA4E35AD0D5F62B777725BC]在等待[DOMON]时输入状态[error]。

尽管我已经更新了mapred-site.xml中的配置:

mapreduce.map.memory.mb=9000;
mapreduce.map.java.opts=-Xmx7000m;
mapreduce.reduce.memory.mb=9000;
mapreduce.reduce.java.opts=-Xmx7000m;
  1. 对于Presto,类似地,诸如Groupby和不同工作的陈述。但是,对于select * from tableA,每次它永远挂在60%的时间内,直到超时。无论我是从本地计算机还是群集的主节点奔跑,我都会遇到同样的问题。

我不明白为什么这么小的外表会遇到这样的问题。感谢任何帮助,谢谢!

presto cli二进制/usr/bin/presto指定JVM -Xmx参数内联(它使用一些技巧来引导自己作为Java二进制(;不幸的是,该-XMX通常不像实际presto-server的设置那样从/opt/presto-server/etc/jvm.config获取。

在您的情况下,如果您正在从1G镶木木木表中选择所有内容,则实际上您可能正在处理6G未压缩文本的内容,并且您正在尝试将所有内容流式传输到控制台输出。这也可能无法与数据proc的工作求职一起使用,因为流式输出旨在打印出人类可读量的数据,并且如果处理非人类数量的数量,将大大减慢数据。

如果您仍然想尝试使用CLI执行此操作,则可以运行:

sudo sed -i "s/Xmx1G/Xmx5G/" /usr/bin/presto

在开始备份之前,要修改主上CLI的JVM设置。然后,您可能想将输出输送到本地文件,而不是将其流式传输到您的控制台,因为您将无法通过屏幕读取6G的文本流。

我认为问题是gcloud dataproc jobs submit hive --cluster $CLUSTER_NAME --region $REGION --execute "SELECT * FROM tableA;"的输出通过了oomed的DataProc服务器。为了避免这种情况,您可以直接从群集查询数据而无需浏览服务器。

尝试遵循DataProc Presto教程 - Presto Cli查询,从您的本地计算机运行这些命令:

gcloud compute ssh <master-node> 
    --project=${PROJECT} 
    --zone=${ZONE} 
    -- -D 1080 -N
./presto-cli 
    --server <master-node>:8080 
    --socks-proxy localhost:1080 
    --catalog hive 
    --schema default

相关内容

  • 没有找到相关文章

最新更新