暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

本地文件导入hive(beeline)案例(1)

程序猿诗和远方 2022-02-17
1514

本地创建/export/data/student.txt文件,把数据导入到 hive 的 student(id int, name string)表中。

1.数据准备(1)在/export/servers/data 这个目录下准备数据

[root@ambari01 /]# mkdir -p /export/data
[root@ambari01 /]# cd /export/data

(2)在/export/data目录下创建 student.txt 文件并添加数据

[root@ambari01 data]# vim student.txt
[root@ambari01 data]# cat student.txt
101    hadoop
102     hive
103     hbase

2.Hive 实际操作

这里可以在命令行直接输入hive进入,但是我的环境刚开始可以启动,后边出现卡死状态,所以我就放弃了这种方式,采用了beeline方式进行hive连接了。

(1)启动 hive

[root@ambari01 data]# cd /usr/hdp/2.6.5.0-292/hive/bin/
[root@ambari01 bin]# beeline -u jdbc:hive2://localhost:10000
Connecting to jdbc:hive2://localhost:10000
20/09/27 16:36:54 INFO Utils: Supplied authorities: localhost:10000
20/09/27 16:36:54 INFO Utils: Resolved authority: localhost:10000
20/09/27 16:36:54 INFO HiveConnection: Will try to open client transport with JDBC Uri: jdbc:hive2://localhost:10000
Connected to: Apache Hive (version 1.2.1000.2.6.5.0-292)
Driver: Hive JDBC (version 1.21.2.2.6.5.0-292)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 1.21.2.2.6.5.0-292 by Apache Hive
0: jdbc:hive2://localhost:10000>

(2)显示数据库

0: jdbc:hive2://localhost:10000> show databases;

(3)删除数据库

0: jdbc:hive2://localhost:10000> drop database test CASCADE;

(4)创建test数据库

0: jdbc:hive2://localhost:10000> create database IF NOT EXISTS test;

(5)进入test数据库

0: jdbc:hive2://localhost:10000> use test;

(6)设置显示当前数据库(操作久了,容易忘记)

0: jdbc:hive2://localhost:10000> select current_database();

(7)显示 所有表

0: jdbc:hive2://localhost:10000> show tables;

(8)删除已创建的 student 表

0: jdbc:hive2://localhost:10000> drop table student;

(6)创建 student 内部表, 并声明文件分隔符’\t’

0: jdbc:hive2://localhost:10000> create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED  BY '\t';

(7)查看表信息

0: jdbc:hive2://localhost:10000> desc student;

(7)加载/export/data/student.txt 文件到 student 数据库表中。

0: jdbc:hive2://localhost:10000> load data local inpath '/export/data/student.txt' into table student;

注意:这里涉及到一个上传目录跟文件的问题,如果你是本机用以上命令没有问题。

(坑)你本机IP是103,你远程连接的是104的主机
[root@ambari01 bin]# ip addr
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen
  inet 192.168.51.103/24

[root@ambari01 bin]# beeline -u jdbc:hive2://192.168.51.104:10000

0: jdbc:hive2://192.168.51.104:10000> load data local inpath '/export/data/student.txt' into table student;
Error: Error while compiling statement: FAILED: SemanticException Line 1:23 Invalid path ''/export/data/student.txt'': No files matching path file:/export/data/student.txt (state=42000,code=40000)

会报以上错误,其实是为你的104主机没有/export/data/student.txt
解决方法一:
    在104的机子上建立/export/data/student.txt文件就可以解决。
解决方法二:
    直接把文件上传的HDFS上从HDFS文件中获取(这里还有一个坑,注意看命令它是没有local,LOAD DATA:加载数据;LOCAL:本地数据 INPATH:文件的地址 OVERWRITE:覆盖表中的数据 加overwrite是重写表的数据,不加是追加数据)
0: jdbc:hive2://192.168.51.104:10000> load data inpath '/export/data/student.txt' into table student;

(8)结果查询

0: jdbc:hive2://192.168.51.104:10000> select * from student;
+-------------+---------------+--+
| student.id    | student.name |
+-------------+---------------+--+
| 101              |   hadoop        |
| 102              |   hive              |  
| 103              |   hbase           |
+-------------+---------------+--+

参考文档:

https://blog.csdn.net/qq_46548855/article/details/105398405

https://blog.csdn.net/qq_40984307/article/details/105586882?utm_medium=distribute.pc_relevant.none-task-blog-title-1&spm=1001.2101.3001.4242



文章转载自程序猿诗和远方,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论