hive到vertica的数据导出,使用unix命名管道

ar5n3qh5  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(382)

有人能帮助我,如何做大规模和快速的出口到Hive维蒂卡没有任何hadoop连接器?
目前我正在通过unix namedpipe导出相同的东西,但性能不是很好。
几乎5个并行线程将数据加载到vertica,16亿记录集的时间约为230分钟?
有人能帮我提高这个性能吗?如果我们能优化这个出口的话?
谢谢阿比

xjreopfe

xjreopfe1#

我们这样做,不是使用命名管道(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"

这对我们来说非常好。注意hive和vsql之间的'dd'。这是必须让它正常工作。很难给出好的数字,因为我们的hiveselect语句实际上并不琐碎,而且我不知道在哪里花费了时间(hive处理或数据加载)。
但是tbh,像您这样使用一个命名管道或者像我们这样使用一个未命名管道是一个很好的方法,并且在系统级别上没有什么可以优化的。不过,有几件事需要考虑:
计算配置单元查询的时间到了
运行查询的位置。例如,如果您从第三方机器上运行它,那么数据需要从配置单元到您的服务器再到vertica。在配置单元服务器或vertica节点上运行该命令可能会跳过不必要的跃点,从而加快速度。
复制声明:你用直接的吗?
当然,通常的投影(多个投影会减缓负载)、vertica资源等等。

相关问题