Hive

  Hive 是建立在 Hadoop 基础上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL  查询语言,称为 QL ,它允许熟悉 SQL  的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper  和 reducer 来处理内建的 mapper 和 reducer  无法完成的复杂的分析工作。
  Hive 是SQL解析引擎,它将SQL语句转译成Map/Reduce Job然后在Hadoop执行。Hive的表其实就是HDFS的目录,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在Map/Reduce Job里使用这些数据。

HIve安装

(1)解压: tar -zvxf hive-0.9.0.tar.gz ,重命名:mv hive-0.9.0 hive

(2)加入环境变量配置文件中:vim /etc/profile

export HIVE_HOME=/usr/local/hive

export PATH=.: H A D O O P H O M E / b i n : HADOOP_HOME/bin: HADOOPHOME/bin:HIVE_HOME/bin: P I G H O M E / b i n : PIG_HOME/bin: PIGHOME/bin:HBASE_HOME/bin: Z O O K E E P E R H O M E / b i n : ZOOKEEPER_HOME/bin: ZOOKEEPERHOME/bin:JAVA_HOME/bin:$PATH

环境变量生效:source /etc/profile

(3)简单配置Hive:进入$HIVE_HOME/conf目录下,修改默认模板
Step 2.3.1:

在目录 H I V E H O M E / c o n f / 下 , 执 行 命 令 m v h i v e − d e f a u l t . x m l . t e m p l a t e h i v e − s i t e . x m l 进 行 重 命 名 在 目 录 HIVE_HOME/conf/下,执行命令mv hive-default.xml.template hive-site.xml进行重命名 在目录 HIVEHOME/conf/mvhivedefault.xml.templatehivesite.xmlHIVE_HOME/conf/下,执行命令mv hive-env.sh.template hive-env.sh进行重命名

Step 2.3.2:

修改hadoop的配置文件hadoop-env.sh,修改内容如下:
  export HADOOP_CLASSPATH=.: C L A S S P A T H : CLASSPATH: CLASSPATH:HADOOP_CLASSPATH:$HADOOP_HOME/bin

在目录$HIVE_HOME/bin下面,修改文件hive-config.sh,增加以下内容:
  export JAVA_HOME=/usr/local/jdk
  export HIVE_HOME=/usr/local/hive
  export HADOOP_HOME=/usr/local/hadoop

(4)简单安装MySQL

Step 2.4.1:

删除Linux上已经安装的mysql相关库信息: rpm -e xxxxxxx --nodeps

执行命令 rpm -qa |grep mysql 检查是否删除干净

Step 2.4.2:

执行命令 rpm -i MySQL-server-5.5.31-2.el6.i686.rpm 安装mysql服务端

启动 mysql 服务端,执行命令 mysqld_safe &

Step 2.4.3:

执行命令 rpm -i MySQL-client-5.5.31-2.el6.i686.rpm 安装mysql客户端

执行命令 mysql_secure_installation 设置root用户密码

(5)使用 MySQL 作为 Hive 的 metastore:

Step 2.5.1:

把mysql的jdbc驱动放置到hive的lib目录下:cp mysql-connector-java-5.1.10.jar /usr/local/hive/lib

Step 2.5.2:

修改hive-site.xml文件,修改内容如下:

  javax.jdo.option.ConnectionURL   jdbc:mysql://hadoop-master:3306/hive?createDatabaseIfNotExist=true   javax.jdo.option.ConnectionDriverName   com.mysql.jdbc.Driver   javax.jdo.option.ConnectionUserName   root   javax.jdo.option.ConnectionPassword   admin

启动Hadoop

HDFS和Mapreduce是Hive架构的根基。因此,我们得先启动Hadoop,才能正确使用Hive。 在这里插入图片描述

Hive的CLI命令行接口

(1)内部表:与数据库中的 Table 在概念上是类似,每一个 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个表 test,它在 HDFS 中的路径为:/ warehouse/test。 warehouse是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的数据仓库的目录;

创建表

hive>CREATE TABLE t1(id int); // 创建内部表t1,只有一个int类型的id字段

hive>CREATE TABLE t2(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’; // 创建内部表t2,有两个字段,它们之间通过tab分隔

加载数据
hive>LOAD DATA LOCAL INPATH ‘/root/id’ INTO TABLE t1; // 从本地文件加载
hive>LOAD DATA INPATH ‘/root/id’ INTO TABLE t1; // 从HDFS中加载

查看数据

hive>select * from t1; // 跟SQL语法类似

hive>select count(*) from t1; // hive也提供了聚合函数供使用

删除表

hive>drop table t1;

(2)分区表:所谓分区(Partition) 对应于数据库的 Partition 列的密集索引。在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。例如:test表中包含 date 和 city 两个 Partition,则对应于date=20130201, city = bj 的 HDFS 子目录为:/warehouse/test/date=20130201/city=bj。而对应于date=20130202, city=sh 的HDFS 子目录为:/warehouse/test/date=20130202/city=sh。

创建表

hive>CREATE TABLE t3(id int) PARTITIONED BY (day int);

加载表
hive>LOAD DATA LOCAL INPATH ‘/root/id’ INTO TABLE t1 PARTITION (day=22);

(3)桶表(Hash 表):桶表是对数据进行哈希取值,然后放到不同文件中存储。数据加载到桶表时,会对字段取hash值,然后与桶的数量取模。把数据放到对应的文件中。

(4)外部表:它和 内部表 在元数据的组织上是相同的,而实际数据的存储则有较大的差异。外部表主要指向已经在 HDFS 中存在的数据,可以创建 Partition。

(5)视图操作:和关系数据库中的视图一个概念,可以向用户集中展现一些数据,屏蔽一些数据,提高数据库的安全性。

创建视图

hive> create view v1 as select * from t1;

查询视图

hive> select * from v1;

(6)查询操作:在Hive中,查询分为三种:基于Partition的查询、LIMIT Clause查询、Top N查询。

①基于Partition的查询:一般 SELECT 查询是全表扫描。但如果是分区表,查询就可以利用分区剪枝(input pruning)的特性,类似“分区索引“”,只扫描一个表中它关心的那一部分。Hive 当前的实现是,只有分区断言(Partitioned by)出现在离 FROM 子句最近的那个WHERE 子句中,才会启用分区剪枝。例如,如果 page_views 表(按天分区)使用 date 列分区,以下语句只会读取分区为‘2008-03-01’的数据。

SELECT page_views.* FROM page_views WHERE page_views.date >= ‘2013-03-01’ AND page_views.date <= ‘2013-03-01’

②LIMIT Clause查询:Limit 可以限制查询的记录数。查询的结果是随机选择的。下面的查询语句从 t1 表中随机查询5条记录:

SELECT * FROM t1 LIMIT 5

③Top N查询:和关系型数据中的Top N一样,排序后取前N个显示。下面的查询语句查询销售记录最大的 5 个销售代表:

SET mapred.reduce.tasks = 1
SELECT * FROM sales SORT BY amount DESC LIMIT 5

(7)连接操作:和关系型数据库中的各种表连接操作一样,在Hive中也可以进行表的内连接、外连接一类的操作:

导入ac信息表
hive> create table acinfo (name string,acip string) row format delimited fields terminated by ‘\t’ stored as TEXTFILE;

hive> load data local inpath ‘/home/acinfo/ac.dat’ into table acinfo;

内连接
select b.name,a.* from dim_ac a join acinfo b on (a.ac=b.acip) limit 10;

左外连接
select b.name,a.* from dim_ac a left outer join acinfo b on a.ac=b.acip limit 10;

Hive的Java API接口

(1)准备工作

①在服务器端启动Hive外部访问服务(不是在hive命令行模式下,而是普通模式下):hive --service hiveserver >/dev/null 2>/dev/null &
  在这里插入图片描述
  ②导入Hive的相关jar包集合
  
(2)第一个Hive程序:读取我们刚刚创建的内部表t1

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值