关键字: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
具体使用示例如下:
数据准备
cat 1.txt 1 1 1 cat 2.txt 2 2 hadoop fs -mkdir /tmp/lxw1234/ hadoop fs -mkdir /tmp/lxw1234/subdir/ hadoop fs -put 1.txt /tmp/lxw1234/ hadoop fs -put 2.txt /tmp/lxw1234/subdir/ hadoop fs -ls -R /tmp/lxw1234/ -rw-r--r-- 2 lxw1234 supergroup 6 2015-07-08 13:56 /tmp/lxw1234/1.txt drwxr-xr-x - lxw1234 supergroup 0 2015-07-08 13:56 /tmp/lxw1234/subdir -rw-r--r-- 2 lxw1234 supergroup 4 2015-07-08 13:56 /tmp/lxw1234/subdir/2.txt
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/建表:
CREATE EXTERNAL TABLE lxw1234 (d string) stored AS textfile location '/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中的数据库(Database)和表(Table)
hive优化之——控制hive任务中的map数和reduce数
相关推荐
网站流量数据分析 (MapReduce+Hive综合实验)
hive提供了三种用户接口:CLI,JDBC/ODBC和 WebUI CLI,即Shell命令行 JDBC/ODBC 是 Hive 的Java,与使用传统数据库JDBC的方式类似 WebGUI是通过浏览器访问 Hive 本文主要介绍的就是第二种用户接口,直接进入正题。 ...
分布式文件管理系统 Hadoop MapReduce Hive
Hadoop-0.20.0-HDFS+MapReduce+Hive+HBase十分钟快速入门
mapreduce方式入库hbase hive hdfs,速度很快,里面详细讲述了代码的编写过程,值得下载
大数据Hadoop、MapReduce、Hive项目实践
HDFS+MapReduce+Hive+HBase十分钟快速入门
HDFS+MapReduce+Hive+HBase十分钟快速入门.pdf
hadoop实现网站流量数据分析(MapReduce+hive)程序+说明.rar
HDFS+MapReduce+Hive+HBase十分钟快速入门,包括这几个部分的简单使用
hadoop+ha+hive+mapreduce,包括hdfs,mapreduce,hive详细原理以及生产实战,还有hdfs的高可用性等等
Hadoop学习整理的基础知识(思维导图) 1、初始Hadoop 2、Hadoop分布式文件系统 3、Hadoop分布式计算框架 4、Hadoop资源管理器Yarn 5、基于Hadoop的数据仓库Hive
hive+Mapreduce 编程性能调优
《hadoop-HDFS+MapReduce+Hive+Hbase快速入门》,一门入门hadoop的经典书籍,相信能够给学习云计算的大家带来帮助。
大数据技术 Hadoop开发者第二期 Nutch MapReduce HDFS Hive Mahout HBase 共64页.r
kafka 数据丢失问题,及如何保证1. 数据丢失: a.acks=1 的时候(只保证写入 leader 成功),如果刚好 leader 挂了.数据会丢失. b. Acks=0 的时候, 使用异步模式的时候,该模式下 kafka 无法保证消息,有可能会丢。...
NULL 博文链接:https://coderplay.iteye.com/blog/468623
8、短评:HDFS、MapReduce和HBase三者相辅相成、各有长处 ..... - 34 - 9、HDFS在web开发中的应用................................. - 35 - 10、Mapreduce中value集合的二次排序 ....................... - 38 - 11...
乘用车辆和商用车辆的销售数量和比例分析、分析山西省2013年每个月的汽车销售数量比例、分析买车的男女比例和男女对车的品牌的选择、HDFS统计每种车型的购买数量、统计不同类型的汽车用途、统计各种车型各个年龄段的...