我正在寻求优化或减少以下工作流程中的步骤数。
我有一个名为Logs的Hive表。 我应用一些自定义udfs来获取转换日志。
我创建了转换后的日志,其表格类似于
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。
似乎我不应该写文件系统来实现这一点。
答案 0 :(得分:2)
如果你想将文件连接成一个文件,我认为绕过本地FS的唯一方法就是通过发出以下命令来使用单个reducer:
set mapred.reduce.tasks=1
在发出CREATE TABLE
查询之前。
然后你可以做hadoop fs -mv
。当然,由于单个reducer,您的查询速度会变慢,但如果您需要将数据连接到单个文件,那么它似乎是必要的权衡。