1需求
将本地/opt/module/datas/student.txt 这个目录下的数据导入到 hive 的 student(id int, name string)表中。
-
数据准备
-
在/opt/module/datas 这个目录下准备数据
在/opt/module/目录下创建 datas
mkdir datas
-
在/opt/module/datas/目录下创建 student.txt 文件并添加数据
touch student.txt vi student.txt 1001 zhangshan 1002 lishi 1003 zhaoliu
注意以 tab 键间隔
-
-
Hive 实际操作
启动 hive
bin/hive
显示数据库
hive> show databases;
使用 default 数据库
hive> use default;
显示 default 数据库中的表
hive> show tables;
删除已创建的 student 表
hive> drop table student;
创建 student 表, 并声明文件分隔符’\t’
hive> create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
-
加载/opt/module/datas/student.txt 文件到 student 数据库表中。
hive> load data local inpath '/opt/module/datas/student.txt' into table student;
-
Hive 查询结果
hive> select * from student; OK 1001 zhangshan 1002 lishi 1003 zhaoliu Time taken: 0.266 seconds,Fetched: 3 row(s)
-
遇到的问题
再打开一个客户端窗口启动 hive,会产生 java.sql.SQLException 异常。
Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522) at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677) 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) Caused by: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1 523) at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.<init>(RetryingMetaStore Client.java:86) at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaSto reClient.java:132) at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaSto reClient.java:104) at org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java:3005) at org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:3024) at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:503) ... 8 more
原因是,Metastore 默认存储在自带的 derby 数据库中(只允许一个连接),推荐使用 MySQL 存储 Metastore;