使用Unix命名管道从Hive导出数据到Vertica

3

请问如何在没有任何 Hadoop 连接器的情况下快速导出到 Hive 到 Vertica?

目前我通过 Unix 命名管道导出相同的东西,但性能不太好。

几乎需要 5 个并行线程将数据加载到 Vertica,时间大约为 230 分钟,用于 16 亿记录集?

请有人帮助我提高这种性能,并且如果我们可以优化此导出吗?

谢谢, abhi


不太清楚你的问题,请提供一些示例代码或更多细节。 - EternalHour
嗨,实际上我们计划使用Unix命名管道从Hive迁移大表,例如从Hive迁移3亿条记录到Vertica。 首先,从Hive表中选择col1 col2 > mkfifo, 然后进行Vertica连接并开始复制,如下所示: cat mkfifo | copy to vertica 我们在Vertica的5个节点上使用5个并行线程执行此操作。 - abhishek rastogi
@abhishekrastogi 这是一次性的事情还是会经常发生? - Kermit
1个回答

5
我们正在使用标准的匿名shell管道进行操作,而不是使用命名管道(mkfifo):
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"

这对我们来说完全正常运作。请注意在hive和vsql之间的“dd”。这是必需的,以使其正常工作。由于我们的Hive select语句实际上并不简单,我无法给您好的数字,并且我不知道时间花在哪里(hive处理还是数据加载)。
但老实说,像你所做的使用命名管道或像我们一样使用未命名管道是一个很好的方法,而且在系统级别上没有太多可以优化的。但有几个要考虑的事情:
- 计算hive查询所用的时间。 - 运行查询的位置。例如,如果从第三方机器运行它,则需要从hive流向您的服务器再到vertica。在hive服务器或Vertica节点上运行命令可能通过跳过不必要的跳转来加快速度。 - COPY语句:您使用DIRECT吗? - 当然,还有通常的投影(多个投影会减慢负载)、Vertica资源等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接