使用Unix命名管道进行Vertica数据导出

时间:2014-11-18 04:44:46

标签: hadoop export hive vertica

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

目前我通过unix Namedpipe导出相同的内容 但表现并不好。

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

有人可以帮助我改善这种表现吗?如果我们可以优化这种出口吗?

由于 ABHI

1 个答案:

答案 0 :(得分:4)

我们这样做,不使用命名管道(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'。这是必须的,以使其正常工作。很难用这个给你很好的数字,因为我们的Hive select语句实际上并不简单,我不知道花费的时间在哪里(hive处理或数据加载)。

但是tbh,正如你所做的那样使用命名管道或者像我们一样使用未命名的管道是一种很好的方法,并且你可以在系统级别进行优化。但是,有几件事需要考虑:

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