Hive

Hive是基于hadoop的关系型分佈式数据块,提供通用的SQL语句,稳定性好。

1.安装

首先按照CentOS安装好jdk,安装Hadoop install安装好Hadoop,hive安装路径为:

hadoop /usr/local/hadoop
jdk /usr/java/latest
hive /usr/local/hive

然后到Hive下载hive安装包hive-0.9.0.tar.gz

以root身份创建目录:

su - root
mkdir /usr/local/hive
chown hadoop:hadoop /usr/local/hive/

然后以hadoop身份安装hive:

su - hadoop
tar zxvf hive-0.9.0.tar.gz
cd hive-0.9.0
mv * /usr/local/hive/

然后配置bin/hive-config.sh,在文件尾部加入:

export JAVA_HOME=/usr/java/latest
export HIVE_HOME=/usr/local/hive
export HADOOP_HOME=/usr/local/hadoop

然后复制一份hive-site.xml,使用默认配置即可:

mv conf/hive-default.xml.template conf/hive-site.xml

最后将hive的lib下的jar包复制一份到hadoop/lib下:

cp /usr/local/hive/lib/* -R /usr/local/hadoop/lib/

2.运行

输入/usr/local/hive/bin/hive启动hive命令行,简单输入一些命令:

CREATE TABLE student(id INT, name string);
DESC student;

注意hive不支持单条insert数据,hive支持LOAD DATA命令从本地文件或hdfs上文件导入到表中,但这些文件每行必须用换行符分隔,每列必须用ctrl-a符号(‘\001’)隔开,这个符号不太好输入,而且有些数据是自定义分隔符的,可以採用下面这种方式建表:

首先编辑文件stu.txt,并放到hdfs的/user/hadoop/student/目录下:

1    tom
2    john
3    nick
hadoop fs -mkdir /user/hadoop/student/
hadoop fs -copyFromLocal stu.txt /user/hadoop/student/
CREATE external TABLE student2(id INT, name string) 
ROW format delimited
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
stored AS textfile
location '/user/hadoop/student/';

注意创建的location必须是一个目录,hive会把这个目录下的所有文件作爲数据文件看待,对这个目录增删修改文件都可以直接在查询中反映出来,然后就可以查询表的内容:

SELECT * FROM student2; -- 应该可以看到3条表纪录

将一个表複製到另外一个表中:

INSERT INTO TABLE student SELECT id,name FROM student2; -- 注意INSERT TABLE无法选择列

将select出来的结果存放到hdfs中:

INSERT OVERWRITE DIRECTORY '/tmp/student2' SELECT id,name FROM student2;

这样就可以在hdfs的/tmp/student2/中看到输出的文件。

更多SQL用法详见GettingStarted

文档更新时间: 2018-11-10 19:11   作者:nick