0

我希望优化或减少以下工作流程中的步骤数。

我有一个名为 Logs 的 Hive 表。我应用了一些自定义 udf 来获取转换后的日志。

我将转换后的日志创建为表格,其中包含类似

CREATE TABLE transform_logs
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
AS
SELECT nonsafehash(visitorid), nonsafehash(url), action  FROM logs

然后我做

./bin/hadoop dfs -cat  /user/hive/warehouse/transform_logs/\* > transform_logs.csv

只有这样做

./bin/hadoop dfs -put  transform_logs.csv /some/other/path

我的最后两个步骤是否等同于简单的 'mv' ?

我的最终目标是在 /some/other/path 下有一个 csv。

似乎我不必写入文件系统来实现这一点。

4

1 回答 1

2

如果要将文件连接成单个文件,我相信绕过本地 FS 的唯一方法是通过发出以下命令使用单个减速器:

set mapred.reduce.tasks=1

在发出您的CREATE TABLE查询之前。

然后你可以做一个hadoop fs -mv. 当然,由于单个 reducer,您的查询会变慢,但如果您需要将数据连接到单个文件,这似乎是一个必要的权衡。

于 2013-09-20T16:18:05.843 回答