关键字: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
mapreduce方式入库hbase hive hdfs,速度很快,里面详细讲述了代码的编写过程,值得下载
标题中的“hadoop实现网站流量数据分析(MapReduce+hive)程序+说明.rar”指的是一个使用Hadoop框架,结合MapReduce和Hive技术进行网站流量数据分析的项目。这个项目可能包含了程序代码、配置文件以及详细的使用说明...
"大数据Hadoop、MapReduce、Hive项目实践" 大数据Hadoop、MapReduce、Hive项目实践是当前大数据处理领域中最流行的技术组合。本文将对大数据的概念、特性、应用场景,以及Hadoop、MapReduce、Hive等技术的架构、...
在大数据处理领域,Hadoop生态系统中的HDFS(Hadoop Distributed File System)、MapReduce、Hive和HBase是四个至关重要的组件。本资料“HDFS+MapReduce+Hive+HBase十分钟快速入门”旨在帮助初学者迅速理解这些技术...
标题中的“用户推荐Slope One算法与mapreduce&hive实现”揭示了我们即将探讨的核心内容:一种名为Slope One的推荐系统算法,以及如何利用大数据处理工具MapReduce和Hive来实现这一算法。Slope One是一种简单而有效的...
- **背景**:Hive不支持标准SQL中的`IN`和`EXISTS`关键字,但可以通过`LEFT SEMI JOIN`来模拟这些功能。 - **示例**:标准SQL中的`IN`关键字查询如下: ```sql SELECT a.key, a.value FROM a WHERE a.key IN ...
HDFS+MapReduce+Hive+HBase十分钟快速入门.pdf
HDFS+MapReduce+Hive+HBase十分钟快速入门,包括这几个部分的简单使用
数据工程基础课设报告以MapReduce和Hive为核心技术,主要目标是对汽车销售数据进行深入分析,揭示出其中的业务洞察。在这个过程中,学生需要掌握分布式计算的基本原理以及数据工程的相关工具。 首先,课设的开发...
Hadoop学习整理的基础知识(思维导图) 1、初始Hadoop 2、Hadoop分布式文件系统 3、Hadoop分布式计算框架 4、Hadoop资源管理器Yarn 5、基于Hadoop的数据仓库Hive
《hadoop-HDFS+MapReduce+Hive+Hbase快速入门》,一门入门hadoop的经典书籍,相信能够给学习云计算的大家带来帮助。
【标题】"hadoop+ha+hive+mapreduce"涵盖了大数据处理领域中的核心组件,包括Hadoop的高可用性(HA)、Hive的数据仓库服务、MapReduce的分布式计算框架。这些技术是构建大规模数据处理系统的基础,对于理解大数据...
课程设计要求分析每位学生的平均成绩(MapReduce实现和hive实现)分析每位学生的总分(MapReduce实现和hive实现)分析每门课程的平均成绩(hive实现)显示每位学生详细信息(学号、姓名、系和各门课成绩)(hive实现...
### 大数据技术 Hadoop开发者第二期 MapReduce HDFS Hive Mahout HBase 相关知识点解析 #### 一、Hadoop 业界资讯 - **InfoWorld 授予 Apache Hadoop 年度技术创新奖章** - **背景**:2010年1月,InfoWorld 授予 ...