使用 Unix 命名管道将 Hive 导出到 vertica

abh*_*ogi 3 hadoop hive export vertica

有人可以帮助我如何在没有任何 hadoop 连接器的情况下将 Hive 大量快速导出到 Vetica 吗?

目前我正在通过 unix Namedpipe 导出相同的东西,但性能不是很好。

几乎 5 个并行线程将数据加载到 vertica,16 亿条记录集的时间约为 230 分钟?

有人可以帮助我提高这一性能吗?我们是否可以优化此导出?

谢谢阿比

Gui*_*ume 5

我们这样做时,不使用命名管道 (mkfifo),而是使用标准匿名 shell 管道:

hive -e "select whatever FROM wherever" | \
dd bs=1M | \
/opt/vertica/bin/vsql -U $V_USERNAME -w $V_PASSWORD -h $HOST $DB -c \
"COPY schema.table FROM LOCAL STDIN DELIMITER E'\t' NULL 'NULL' DIRECT"
Run Code Online (Sandbox Code Playgroud)

这对我们来说非常有效。请注意 hive 和 vsql 之间的“dd”。要使其正常工作,这是必需的。很难给你很好的数字,因为我们的 Hive select 语句实际上并不简单,而且我不知道时间花在哪里(hive 处理或数据加载)。

但是说实话,像您一样使用命名管道或像我们一样使用无名管道是一种很好的方法,并且在系统级别没有太多可以优化的地方。不过,有一些事情需要考虑:

  • 计算 Hive 查询的时间
  • 您运行查询的位置。例如,如果您从第 3 方计算机运行它,数据需要从 hive 流到服务器再到 vertica。在 hive 服务器或 Vertica 节点上运行该命令可能会跳过不必要的跃点来加快速度。
  • COPY声明:你使用DIRECT吗?
  • 当然,还有通常的投影(多个投影会减慢负载)、Vertica 资源等。