hiveserver2服务
前面都是使用Hive的命令行客户端,此处记录一下hiveserver2服务启动使用的方法。
Hadoop的配置文件
首先要修改Hadoop的配置文件:
# vim /usr/hadoop-2.7.7/etc/hadoop/core-site.xml
添加如下配置内容:
hadoop.proxyuser.root.hosts
*
hadoop.proxyuser.root.groups
*
并将该文件拷贝到Hadoop集群的所有节点的对应目录下:
Hive的配置文件
由于配置Hive时,配置文件hive-site.xml是复制的hive-default.xml.template,所以其中的内容有默认配置,主要是以下两项:
hive.server2.thrift.port
10000
Port number of HiveServer2 Thrift interface when hive.server2.transport.mode is 'binary'.
hive.server2.thrift.bind.host
Bind host on which to run the HiveServer2 Thrift service.
hive.server2.thrift.bind.host的value值,可以配置本机IP地址,也可以默认。
hiveserver2启动
在终端中数据如下命令,即可启动hiveserver2服务:
# hiveserver2
此处使用beeline进行连接服务,另开一个终端上执行如下命令:
# beeline
然后输入如下信息进行连接:
beeline> !connect jdbc:hive2://192.168.44.128:10000
用户名:root,密码:默认无,直接回车即可。
连接成功后,即可进行数据库操作:
0: jdbc:hive2://192.168.44.128:10000>show databases;
DML操作
DML(Data Manipulation Language:数据操纵语言)主要是实现对数据库的基本操作。
数据导入
装载数据(Load)
Load在前文的《Hive安装、配置和测试》中已经使用过,前文连接:https://www.jianshu.com/p/5c5d57dc2084。
语法:
hive> load data [local] inpath '/home/test.txt' into | overwrite table testhive.testtable [partition(partcol1=val1...)];
- load data:加载数据。
- local:表示从本地目录加载数据到hive表;不加local表示从HDFS加载数据到hive表。
- inpath:加载数据的目录。
- overwrite:覆盖表中已有数据,不加overwrite表示追加数据到表中。
- into table:表示数据加载到哪张表。
- testhive.testtable:表示数据加载到testhive库中的testtable表。
- partition:表示加载数据到指定的分区中。
实际操作
此处还是使用Hive客户端进行操作。
- 创建表:
hive (default)> create table test(id int,name string,age int) row format delimited fields terminated by ' ' lines terminated by '\n';
- 创建数据文件:
另打开一个终端,在home目录下创建test.txt文件:
# vim /home/test.txt
写入如下内容并保存:
1 Dcl_Snow 18
2 Dcl 19
3 Snow 20
- 从本地文件加载数据:
hive (default)> load data local inpath '/home/test.txt' into table default.test;
- 从HDFS中加载数据:
上传本地文件到HDFS:
hive (default)> dfs -put /home/test.txt /tmp;
加载HDFS中的数据:
hive (default)> load data inpath '/tmp/test.txt' into table default.test;
- 覆盖数据加载:
在HDFS中创建/test目录:
# hdfs dfs -mkdir /test
# hdfs dfs -ls /
上传本地文件到HDFS,上传前先在test.txt文件中增加一行内容:
4 DclSnow 21
hive (default)> dfs -put /home/test.txt /test;
加载HDFS中的数据覆盖表中原数据:
hive (default)> load data inpath '/test/test' overwrite into table default.test;
- 创建新表存储查询结果:
hive (default)> create table if not exists test1 as select id, name, age from test;
可以看到,是执行了MapReduce操作。
- export导出:
hive (default)> export table default.test to '/test/test';
- import导入:
hive (default)> import table test2 from '/test/test';
- insert导出:
将查询结果导出到本地:
hive (default)> insert overwrite local directory '/home/test' select * from test;
- Hadoop命令导出到本地:
hive (default)> dfs -get /test/test /home/testha;
- Hive Shell命令导出到本地:
在安装Hive的虚拟机终端下执行:
# hive -e 'select * from default.test;' >/home/testhi
- 清除表中数据:
hive (default)> truncate table test;
只能清除内部表(管理表)中的数据,不能清除外部表中的数据。