您的位置:首页 > 其它

hive安装过程全程解析、hive常规操作、说明

2017-06-29 17:58 766 查看

hive安装过程全程解析、hive常规操作、说明

hive相关说明:

1.创建表的操作(create talbe)包含两个步骤:表创建过程和数据加载步骤(这两个过程可以在同一语句中完成)

在数据加载过程中,实际数据会移动到数据仓库目录中。之后的数据访问将会直接在数据仓库目录中完成。删除

表时,表中的数据和元数据将会被同时删除。

2.外部表的创建只有一个步骤,加载数据和创建表同时完成,实际数据存储在创建语句LOCATION指定的HDFS路径中,并

不会移动到数据仓库目录中。如果删除一个外部表,仅会删除元数据,表中的数据不会被删除。

3.Hive的元数据存储

目前,hive将元数据存储在RDBMS中,比如MySQL、Derby中。为了支持多链接,我们使用MySQL存储元数据

使用场景:

1.电影评分

2.网络日志数据(Weblog)

首先下载hive,我个人使用是的apache-hive-0.13.0-bin.tar.gz

一、hive安装步骤

1.上传hive到linux机器itcast03上
2.解压到/itcast/目录下
tar -zxvf apache-hive-0.13.0-bin.tar.gz -C /itcast/
3.执行hive
./hive // 进入
show tables; // 显示表
show databases; // 显示数据库
create table student (id int,name string); // 创建student表
show create table student; // 显示创建student表信息
load data local inpath '/root/student.txt' into table student; // 从本地加载数据
select count(*) from student; // 查询记录数(此过程,hive将查询过程转化为map、reducer)
使用浏览器进行查看http://192.168.8.201:50070/dfshealth.jsp --->  user/hive/warehouse/student.txt

二、hive工作原理

hive工作原理,是将元数据信息存储在数据库中(metastore_db),hive元数据信息包括表的名字、表的列、分区及其
属性,表的属性(是否为外部表等),表的数据所在目录等。真实数据存储在hdfs上。
metastore_db默认使用内嵌的Derby数据库作为存储引擎,Derby引擎的缺点:
一次只能打开一个会话。也就是说,如果你在另外一个目录打开hive,会产生新的metastore_db,并且两个metastore_db
所存储的元数据信息不同,这就造成数据的不同,即只支持单链接


三、使用MySQL存储hive元数据信息

解决方法:
我们采用MySQL作为外置存储引擎,以支持多链接访问!!!
解决步骤:
1.查询以前安装mysql相关包(itcast05机器上进行)
rpm -qa | grep mysql
2.暴力删除这个包
rpm -e mysql-libs-5.1.66-2.el6_3.i686 --nodeps
3.重新安装MySQL
rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rpm
rpm -ivh MySQL-client-5.1.73-1.glibc23.i386.rpm
修改mysql的密码(这里设置为123)
/usr/bin/mysql_secure_installation
(注意:删除匿名用户,允许用户远程连接)
登陆mysql
mysql -uroot -p123

四、hive分布式配置

cp hive-default.xml.template hive-site.xml
修改hive-site.xml(删除所有内容,只留一个<property></property>)
添加如下内容:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://itcast05:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123</value>
<description>password to use against metastore database</description>
</property>
5.安装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下
cp mysql-connector-5.1.8.jar /itcast/apache-hive-0.13.0-bin/lib/
如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
mysql -uroot -p
#(执行下面的语句 *.*:所有库下的所有表 %:任何IP地址或主机都可以连接)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
FLUSH PRIVILEGES;
 测试hive分布式是否成功
在A目录下,进入/hive先创建people表 create table people (id int, name string)
在B目录下,进入/hive查看表信息,show tables; 如果可以看到people表,表明搭建成功!!!
查看MySQL数据信息(ip:192.168.8.205, 用户名: root,密码: 123):
在windows下使用sqlyog工具,远程登录linux平台下的MySQL,并查看相关元数据信息。
6.建表(默认是内部表)
create table trade_detail(id bigint, account string, income double, expenses
double, time string) row format delimited fields terminated by '\t';
建分区表
create table td_part(id bigint, account string, income double, expenses double,
time string) partitioned by (logdate string) row format delimited fields terminated by
'\t';
建外部表
create external table td_ext(id bigint, account string, income double, expenses
double, time string) row format delimited fields terminated by '\t' location '/td_ext';
7.创建分区表
普通表和分区表区别:有大量数据增加的需要建分区表
create table book (id bigint, name string) partitioned by (pubdate string) row
format delimited fields terminated by '\t';
分区表加载数据
load data local inpath './book.txt' overwrite into table book partition
(pubdate='2010-08-22');
load data local inpath '/root/data.am' into table beauty partition (nation="USA");
select nation, avg(size) from beauties group by nation order by avg(size);

五、hive实操

1.创建一个hdfs目录
hadoop fs -mkdir /data
2.在linux本地创建student.txt文件,并添加如下内容
101     xiaoming
102     wangwu
103     zhangli
104     xiaodong
3.向目录中传送数据
hadoop fs -put student.txt /data/a.txt
hadoop fs -put student.txt /data/b.txt
4.创建一张外部表,指向data目录
外部表:外部表是指向已经在HDFS中存在的数据,也可以创建分区。
create external table ext_student (id int,name string) row format delimited fields terminated by '\t' location '/data';
5.查询数据
select * from ext_student;
结果如下:
101     xiaoming
102     wangwu
103     zhangli
104     xiaodong
101     xiaoming
102     wangwu
103     zhangli
104     xiaodong
101     xiaoming
102     wangwu
103     zhangli
104     xiaodong
6.在外部使用hadoop放入数据
hadoop fs -put pep.avi /data
再执行查询,则会将数据查询到(不管是内部表,还是外部表)


    场景:数据量很大的情况下,使用分区表


1.创建一个外部分区表,存储美女信息
create external table beauties (id bigint,name string,size double) partitioned by (nation string) row format delimited fields terminated by '\t' location '/beauty';
2.从本地加载数据
linux下创建文件/root/b.c,添加内容如下
1       cls     30
2       jingtian        45
3       bingbing        50
然后将数据加载到hive中
load data local inpath '/root/b.c' into table beauties partition (nation='China');
3.查询数据
select * from beauties where nation ='China';
4.创建一个分区
alter table beauties add partition(nation='Japan') location "/beauty/natio location "/beauty/nation=Japan";
5.查询刚刚创建的分区信息,查询无结果
select * from beauties where nation="Japan";
6.从linux上传一个数据到/beauty/nation=Japan/目录下
hadoop fs -put b.c /beauty/nation=Japan/
再次查询,有新结果。也就是说只要目录下有数据即可
7.执行复杂一点的查询,如下:
select * from beauties where size>40;
我们会看到此过程hive会将sql查询转化为mapreduce,所以特别适合大数据量的查询计算,其结查如下:
2       jingtian        45.0    China
3       bingbing        50.0    China
2       jingtian        45.0    Japan
3       bingbing        50.0    Japan
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hive 数据仓库 集群