概述
需求说明:
- 将windows系统下数据存入hive表中
- windows下数据源是压缩格式,即.zip
- 本文中本地环境是指linux环境
实例:
- 逻辑:
- 建表(根据数据源或需求建普通表或分区表)—>加载数据—>将windows中.zip数据复制到本地—>本地解压zip数据—>执行hive命令
建数据库。 hive创建数据库testdb
CREATE DATABASE IF NOT EXISTS testdb;
建表。hive创建外部表test
CREATE EXTERNAL TABLE IF NOT EXISTS test ( id STRING,tit STRING,ts STRING,url STRING ) PARTITIONED BY (datelabel STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY 't' stored as textfile location '/test/data';
复制数据源到本地。将windows数据移动到本地文件夹下(linux环境下)
- 将windows下data.zip复制到linux下。由于安装winscp软件,直接在winscp软件中拖拽即可实现复制,也可使用命令行。
移动到本地/home/myhadoop/下,先解压data.zip到/home/myhadoop/data/testdata目录下。
解压命令:
unzip /home/myhadoop/data.zip //解压zip到当前目录 unzip /home/myhadoop/data.zip -d /home/myhadoop/data/testdata //解压到/home/myhadoop/data/testdata目录
Linux下data目录结构:
/home/myhadoop/data/testdata -datelabel=201701 -part-00000 -part-00001 -part-00000 -datelabel=201702 ... -datelabel=201703 ...
数据内容格式:
1 a 148 http://www.baidu.com.html 2 b 148 http://www.baidu.com.html 3 c 148 http://www.baidu.com.html
执行load命令
a. 数据在hafs中,使用命令LOAD DATA INPATH …
b. 数据在本地(linux)中,使用命令LOAD DATA LOCAL INPATH …使用Hivesql多次加载。
- 在hive环境下执行;
共有三个datelabel=2017XX文件夹,就要执行三次load data命令;
hive>LOAD DATA LOCAL INPATH '/home/myhadoop/data/testdata/201611/datelabel=20161102' OVERWRITE INTO TABLE e_zhizi.bitauto1 PARTITION (datelabel='20161102');
使用hive -f load.sql命令,一次加载。
在Hadoop环境下执行hive -f load.sql命令,如果在hive环境下会报NoViableAltException异常
NoViableAltException(26@[]) at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1071) at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:202) at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:166) at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:396) at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:308) at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1122) at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1170) at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1059) at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1049) at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:213) at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:165) at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:376) at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:736) at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:681) at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:621) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.hadoop.util.RunJar.run(RunJar.java:221) at org.apache.hadoop.util.RunJar.main(RunJar.java:136) FAILED: ParseException line 1:0 cannot recognize input near 'hive' '-' 'f'
load.sql文件:
LOAD DATA LOCAL INPATH '/home/myhadoop/data/testdata/datelabel=201701' OVERWRITE INTO TABLE testdb.test PARTITION (datelabel='201701'); LOAD DATA LOCAL INPATH '/home/myhadoop/data/testdata/datelabel=201702' OVERWRITE INTO TABLE testdb.test PARTITION (datelabel='201702'); LOAD DATA LOCAL INPATH '/home/myhadoop/data/testdata/datelabel=201703' OVERWRITE INTO TABLE testdb.test PARTITION (datelabel='201703');
检验是否成功加载数据。使用select 等命令显示数据,例:
select * from test where datelabel='201703' limit 10;
相关资料:
- hive文件存储格式
- 参考链接http://www.cnblogs.com/zlslch/p/6103760.html
- hive数据的4种导入方式
- 参考链接http://blog.csdn.net/lifuxiangcaohui/article/details/40588929
- 从本地导入到hive表
- 从hdfs导入到hive表
- 从别的表中查询出的数据导入到hive表
- 创建hive表时导入从别的表查询出的数据
hive命令的3种调用方式
在hive下直接执行HiveSQL语句:
hive>select * from table_name;
在hadoop环境下:
hive -e 'select * from table_name'
在hadoop环境下执行sql文件,多用于批量sql语句的情况
hive -f XXX.sql
- hive常用操作:
- http://blog.csdn.net/xiaoshunzi111/article/details/48727831
- http://www.cnblogs.com/HondaHsu/p/4346354.html
- linux压缩、解压命令:
- http://www.cnblogs.com/qq78292959/archive/2011/07/06/2099427.html
踩坑:
- 要求:windows上zip压缩数据—–>linux上解压后数据。
- 移动到linux—>linux上解压(首选)
- windows上解压—>移动到linux(不可行!1.速度慢2.费时3.丢数据)
- 执行hive -f/-e 等命令时不进入hive环境,直接在Hadoop环境下执行
- 分区数据和hive表创建语句必须是一致的。比如本文例子,数据源中有datelabel字段,那么创建hive表时需要设置分区字段。
最后
以上就是健康羊为你收集整理的windows数据导入到hive表的全部内容,希望文章能够帮你解决windows数据导入到hive表所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复