MapReduce和Hive支持递归子目录作为输入
来源:互联网 发布:观念 知乎 编辑:程序博客网 时间:2024/06/16 23:37
关键字:MapReduce、Hive、子目录、递归、输入、Input、mapreduce.input.fileinputformat.input.dir.recursive、hive.mapred.supports.subdirectories
一般情况下,传递给MapReduce和Hive的input文件夹中不能包含子目录,否则就会报错。但后来增加了递归遍历Input目录的功能,
这个貌似是从0.23开始的,具体不清楚,反正在0.20中是不支持的。
我使用的Hadoop版本为:hadoop-2.3.0-cdh5.0.0
Hive版本为:apache-hive-0.13.1-bin
具体使用示例如下:
数据准备
1.txt在/tmp/lxw1234/下,2.txt在/tmp/lxw1234/subdir/目录下。
MapReduce
默认情况下,mapreduce.input.fileinputformat.input.dir.recursive为flase.
运行wordcount:
hadoop jar hadoop-mapreduce-examples-2.3.0-cdh5.0.0.jar wordcount /tmp/lxw1234/ /tmp/output/
报错 “Error: java.io.FileNotFoundException: Path is not a file: /tmp/lxw1234/subdir”,原因是MapReduce获取/tmp/lxw1234下的列表,把/tmp/lxw1234/subdir也作为一个input file来处理。
设置mapreduce.input.fileinputformat.input.dir.recursive=true,这个参数是客户端参数,可以在MapReduce中设置,也可以在mapred-site.xml中设置,无所谓。
再运行上面的wordcount命令:
hadoop jar hadoop-mapreduce-examples-2.3.0-cdh5.0.0.jar wordcount /tmp/lxw1234/ /tmp/output/
Job成功执行,查看结果:
hadoop fs -cat /tmp/output/*
1 3
2 2
正确。
Hive
仍然使用上面的HDFS路径/tmp/lxw1234/建表:
查询:select * from lxw1234;
同样报错 “Not a file: hdfs://cdh5/tmp/lxw1234/subdir” 。
在hive-cli中设置参数:
set hive.mapred.supports.subdirectories=true;
set mapreduce.input.fileinputformat.input.dir.recursive=true;
再执行:
结果正确。
参数mapreduce.input.fileinputformat.input.dir.recursive表示是否在MapReduce中递归遍历Input目录,
Hadoop1.0中该参数为:mapred.input.dir.recursive
Hive中设置hive.mapred.supports.subdirectories=true之后,即可将包含子目录的文件夹作为表或分区的数据目录,
查询的时候会递归遍历查询,但需要Hadoop的版本支持该功能才可以。
比如:hive0.13+hadoop0.20就不起作用。
Hive相关文章(持续更新):
一起学Hive系列
—-Hive概述,Hive是什么
—-Hive函数大全-完整版
—-Hive中的数据库(Database)和表(Table)
—-Hive的安装配置
—-Hive的视图和分区
—-Hive的动态分区
—-向Hive表中加载数据
—-使用Hive命令行
—-Hive的查询语句SELECT
—-Hive中Join的原理和机制
—-Hive中Join的类型和用法
—-Hive SQL的优化
—-Hive整合HBase,操作HBase表
—-Hive的元数据表结构详解
Hive分析函数系列
Hive索引
hive优化之——控制hive任务中的map数和reduce数
- MapReduce和Hive支持递归子目录作为输入
- hive递归子目录作为输入
- hive job配置和mapreduce数目控制
- hive job配置和mapreduce数目控制
- dir()递归 遍历子目录
- 递归拷贝所有子目录
- sql 递归查询子目录
- 递归方式遍历子目录下的子目录
- mapreduce处理中文输入和输出
- HBase作为MapReduce作业的数据源和数据接收器
- Hadoop MapReduce多路径输入和多个类型输入
- 递归删除目录及子目录
- 两个mapreduce程序实现不同的功能 而mapreduce1的输出将要作为mapreduce2的输入
- HBase - MapReduce - HBase 作为输入源的示例 | 那伊抹微笑
- hbase作为mapreduce输入时speculative推断机制配置如何关闭
- mapreduce作业接受序列化文件(SequenceFile)作为文件输入的WordCount程序
- mapreduce access hive table
- 从 MapReduce 到 Hive
- 彻底解决Make sure other views do not use the same id问题
- 为工厂分配用于公司间开票的销售范围
- 5月16日云栖精选夜读:从0到1构建大数据生态系列1:数据蛮荒中的拓荒之举
- 对象的创建、回收、new和malloc
- 用opencsv文件读写CSV文件
- MapReduce和Hive支持递归子目录作为输入
- Android 监听短信(同时监听广播和数据库)
- csu----超市购物
- RTMP、RTSP、HTTP视频协议直播流地址
- 按钮点击事件和在活动中使用Toast
- Git 远程分支的pull与push
- Linux(三)文件
- 关于kotlin的简单介绍
- ibatis