1. Hive起源于Facebook,它使得针对Hadoop进行SQL查询成为可能,从而非程序员也可以方便地使用。Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务运行。
2. Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。
3.1.下载hive-1.1.0-cdh5.7.0.tar.gz
wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz
3.2. 配置hive的环境变量
vim ~/.bash_profile
3.3. conf/hive-env.sh配置
HADOOP_HOME=/root/app/hadoop-2.6.0-cdh5.7.0
3.4. 配置hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://127.0.0.1:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>xbm123456</value>
</property>
</configuration>
3.5. 关键的一步 拷贝mysql-connector的jar包到hive_dir/lib中
wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.27/mysql-connector-java-5.1.27.jar
hive基本操作
4.1. 创建表
create table hive_wordcount(context string);
4.2. 加载数据到hive表
LOAD DATA LOCAL INPATH 'filepath' INTO TABLE tablename;
load data local inpath '/root/data/hehe.txt' into table hive_wordcount;
select word ,count(1) from hive_wordcount lateral view explode(split(context,'\t')) wc as word group by word;
4.3. 练习
create table emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
create table dept(
deptno int,
dname string,
loc string
)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
load data local inpath '/root/data/emp.txt' into table emp;
load data local inpath '/root/data/dept.txt' into table dept;
//求每个部门的人数
select deptno,count(1) from emp group by deptno;