Heim > Datenbank > MySQL-Tutorial > 基于Hadoop数据仓库Hive1.2部署及使用

基于Hadoop数据仓库Hive1.2部署及使用

WBOY
Freigeben: 2016-06-07 14:56:03
Original
1632 Leute haben es durchsucht

以下基于上篇Hadoop2.6集群部署: http://lizhenliang.blog.51cto.com/7876557/1661354 接下来安装Hadoop数据仓库Hive,上节了解HBase简单使用,听起来HBase与Hive有些类似,概念也有点模糊,那我们先了解下他们之间有什么区别: HBase是一种分布式、面向列

以下基于上篇Hadoop2.6集群部署:http://lizhenliang.blog.51cto.com/7876557/1661354

接下来安装Hadoop数据仓库Hive,上节了解HBase简单使用,听起来HBase与Hive有些类似,概念也有点模糊,那我们先了解下他们之间有什么区别:

  HBase是一种分布式、面向列的NoSQL数据库,基于HDFS存储,以表的形式存储数据,表由行和列组成,列划分到列族中。HBase不提供类SQL查询语言,要想像SQL这样查询数据,可以使用Phonix,让SQL查询转换成hbase的扫描和对应的操作,也可以使用现在说讲Hive仓库工具,让HBase作为Hive存储

  Hive是运行在Hadoop之上的数据仓库,将结构化的数据文件映射为一张数据库表,提供简单类SQL查询语言,称为HQL,并将SQL语句转换成MapReduce任务运算。有利于利用SQL语言查询、分析数据,适于处理不频繁变动的数据。Hive底层可以是HBase或者HDFS存储的文件。

  两者都是基于Hadoop上不同的技术,相互结合使用,可处理企业中不同类型的业务,利用Hive处理非结构化离线分析统计,利用HBase处理在线查询。

Hive三种元数据存储方式:

1>.本地derby存储,只允许一个用户连接Hive,适用于测试环境

2>.本地/远程MySQL存储,支持多用户连接Hive,适用于生产环境

三、Hive安装与配置(以下将元数据存储到远程MySQL配置)

1.在MySQL创建Hive元数据存放库和连接用户

mysql> create database hive;
mysql> grant all on *.* to'hive'@'%' identified by 'hive';
mysql> flush privileges;
Nach dem Login kopieren

2.安装与配置Hive(在HMaster0安装)

# tar zxvf apache-hive-1.2.0-bin.tar.gz
# mv apache-hive-1.2.0-bin /opt
Nach dem Login kopieren
Nach dem Login kopieren
# vi hive-site.xml
<configuration>
    <!--以下是MySQL连接信息-->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://192.168.18.210: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>hive_user</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>hive_pass</value>
    </property>
</configuration>
Nach dem Login kopieren

3.配置系统变量

# vi /etc/profile
HIVE_HOME=/opt/apache-hive-1.2.0-bin
PATH=$PATH:$HIVE_HOME/bin
export HIVE_HOME PATH
# source /etc/profile
Nach dem Login kopieren

4.启动Hive

# hive --service metastore &   #启动远程模式,否则你只能在本地登录
Nach dem Login kopieren

5.检查是否正常启动

查看进程是否启动:

[root@HMaster0 ~]# jps
2615 DFSZKFailoverController
30027 ResourceManager
29656 NameNode
25451 Jps
10270 HMaster
14975 RunJar     #会启动一个RunJar进程
Nach dem Login kopieren

执行hive命令会进入命令界面:

[root@HMaster0 ~]# hive
Logging initialized usingconfiguration in file:/opt/apache-hive-1.2.0-bin/conf/hive-log4j.properties
hive> show databases;
OK
default
Time taken: 0.986 seconds,Fetched: 1 row(s)
Nach dem Login kopieren

查看数据库,默认有一个default库,现在就可以用你熟悉的SQL语言了。

6.客户端连接Hive(必须有Hadoop环境)

# tar zxvf apache-hive-1.2.0-bin.tar.gz
# mv apache-hive-1.2.0-bin /opt
Nach dem Login kopieren
Nach dem Login kopieren
# vi hive-site.xml
<configuration>
<!--通过thrift方式连接hive-->
   <property>
       <name>hive.metastore.uris</name>
        <value>thrift://192.168.18.215:9083</value>
   </property>
</configuration>
Nach dem Login kopieren

配置好连接信息,连接命令行:

# /opt/apache-hive-1.2.0-bin/bin/hive
Nach dem Login kopieren

7.Hive常用SQL命令

7.1 先创建一个测试库

 hive> create database test;
Nach dem Login kopieren

7.2 创建tb1表,并指定字段分隔符为tab键(否则会插入NULL)

 hive> create table tb1(id int,name string)row format delimited fields terminated by '\t'
Nach dem Login kopieren

如果想再创建一个表,而且表结构和tb1一样,可以这样:

 hive> create table tb3 like tb1;
Nach dem Login kopieren

查看下表结构:

 hive> describe tb3;
 OK
 id                     int            
 name                   string                  
 Time taken: 0.091 seconds, Fetched: 2 row(s)
Nach dem Login kopieren

7.3 从本地文件中导入数据到Hive表

先创建数据文件,键值要以tab键空格:

 # cat kv.txt 
 1       zhangsan
 2       lisi
 3       wangwu
Nach dem Login kopieren

再导入数据:

 hive> load data local inpath'/root/kv.txt' overwrite into table tb1;
Nach dem Login kopieren

7.4 从HDFS中导入数据到Hive表

 # hadoop fs -cat /kv.txt   #查看hdfs中要导入的数据
 1       zhangsan
 2       lisi
 3       wangwu
 hive> load data inpath '/kv.txt'overwrite into table tb1;
Nach dem Login kopieren

7.5 查询是否导入成功

 hive> select * from tb1;
 OK
 1       zhangsan
 2       lisi
 3       wangwu
 Time taken: 0.209 seconds,Fetched: 3 row(s)
Nach dem Login kopieren

博客地址:http://lizhenliang.blog.51cto.com

上面是基本表的简单操作,为了提高处理性能,Hive引入了分区机制,那我们就了解分区表概念:

1>.分区表是在创建表时指定的分区空间

2>.一个表可以有一个或多个分区,意思把数据划分成块

3>.分区以字段的形式在表结构中,不存放实际数据内容

分区表优点:将表中数据根据条件分配到不同的分区中,缩小查询范围,提高检索速度和处理性能。

单分区表:

7.6 创建单分区表tb2(HDFS表目录下只有一级目录):

hive> create table tb2(idint,name string) partitioned by (dt string) row format delimited fieldsterminated by '\t';
Nach dem Login kopieren

注:dt可以理解为分区名称。

7.7 从文件中把数据导入到Hive分区表,并定义分区信息

 hive> load data local inpath '/root/kv.txt' into table tb2 partition (dt='2015-06-26');
 hive> load data local inpath '/root/kv.txt' into table tb2 partition (dt='2015-06-27');
Nach dem Login kopieren

7.8 查看表数据

 hive> select * from tb2;
 OK
 1       zhangsan  2015-06-26
 2       lisi     2015-06-26
 3       wangwu   2015-06-26
 1       zhangsan  2015-06-27
 2       lisi   2015-06-27
 3       wangwu   2015-06-27
 Time taken: 0.223 seconds,Fetched: 6 row(s)
Nach dem Login kopieren

7.9 查看HDFS仓库中表目录变化

 # hadoop fs -ls -R /user/hive/warehouse/test.db/tb2
 drwxr-xr-x   - root supergroup          0 2015-06-26 04:12/user/hive/warehouse/test.db/tb2/dt=2015-06-26
 -rwxr-xr-x   3 root supergroup         27 2015-06-26 04:12 /user/hive/warehouse/test.db/tb2/dt=2015-06-26/kv.txt
 drwxr-xr-x   - root supergroup          0 2015-06-26 04:15/user/hive/warehouse/test.db/tb2/dt=2015-06-27
 -rwxr-xr-x   3 root supergroup         27 2015-06-26 04:15/user/hive/warehouse/test.db/tb2/dt=2015-06-27/kv.txt
Nach dem Login kopieren

可以看到tb2表导入的数据根据日期将数据划分到不同目录下。

多分区表:

7.10 创建多分区表tb3(HDFS表目录下有一级目录,一级目录下再有子级目录)

 hive> create table tb3(idint,name string) partitioned by (dt string,location string) row formatdelimited fields terminated by '\t';
Nach dem Login kopieren

7.11 从文件中把数据导入到Hive分区表,并定义分区信息

 hive> load data local inpath '/root/kv.txt' into table tb3 partition (dt='2015-06- 26',location='beijing');
 hive> load data local inpath '/root/kv.txt' into table tb3 partition (dt='2015-06-27',location='shanghai');
Nach dem Login kopieren

7.12 查看表数据

 hive> select * from tb3;
 OK
 1       zhangsan  2015-06-26      beijing
 2       lisi     2015-06-26      beijing
 3       wangwu    2015-06-26      beijing
 1       zhangsan  2015-06-26      shanghai
 2       lisi     2015-06-26      shanghai
 3       wangwu    2015-06-26      shanghai
 Time taken: 0.208 seconds,Fetched: 6 row(s)
Nach dem Login kopieren

7.13 查看HDFS仓库中表目录变化

<span style="color:rgb(0,0,0);"> # hadoop fs -ls -R /user/hive/warehouse/test.db/tb3<br /> drwxr-xr-x   - root supergroup          0 2015-06-26 04:35/user/hive/warehouse/test.db/tb3/dt=2015-06-26<br /> drwxr-xr-x   - root supergroup          0 2015-06-26 04:35 /user/hive/warehouse/test.db/tb3/dt=2015-06-26/location=beijing<br /> -rwxr-xr-x   3 root supergroup         27 2015-06-26 04:35/user/hive/warehouse/test.db/tb3/dt=2015-06-26/location=beijing/kv.txt<br /> drwxr-xr-x   - root supergroup          0 2015-06-26 04:45 /user/hive/warehouse/test.db/tb3/dt=2015-06-27<br /> drwxr-xr-x   - root supergroup          0 2015-06-26 04:45/user/hive/warehouse/test.db/tb3/dt=2015-06-27/location=shanghai<br /> -rwxr-xr-x   3 root supergroup         27 2015-06-26 04:45/user/hive/warehouse/test.db/tb3/dt=2015-06-27/location=shanghai/kv.txt<br /></span>
Nach dem Login kopieren

可以看到表中一级dt分区目录下又分成了location分区。

7.14 查看表分区信息

 hive> show partitions tb2;
Nach dem Login kopieren

7.15 根据分区查询数据

 hive> select name from tb3 where dt='2015-06-27';
Nach dem Login kopieren

7.16 重命名分区

 hive> alter table tb3 partition (dt='2015-06-27',location='shanghai') rename to partition(dt='20150627',location='shanghai');
Nach dem Login kopieren

7.17 删除分区

 hive> alter table tb3 droppartition (dt='2015-06-26',location='shanghai');
Nach dem Login kopieren

7.18 模糊搜索表

 hive> show tables 'tb*';
Nach dem Login kopieren

7.19 给表新添加一列

 hive> alter table tb1 addcolumns (commnet string);
Nach dem Login kopieren

7.20 重命名表

 hive> alter table tb1 rename to new_tb1;
Nach dem Login kopieren

7.21 删除表

 hive> drop table new_tb1;
Nach dem Login kopieren

8.启动过程中遇到错误

报错1:

[ERROR]Terminal initialization failed; falling back to unsupported

java.lang.IncompatibleClassChangeError:Found class jline.Terminal, but interface was expected

解决方法,将hive/lib下jline包拷贝到hadoop/yarn/lib下:

# cp /opt/apache-hive-1.2.0-bin/lib/jline-2.12.jar /opt/hadoop-2.6.0/share/hadoop/yarn/lib/
# rm /opt/hadoop-2.6.0/share/hadoop/yarn/lib/jline-0.9.94.jar
Nach dem Login kopieren

报错2:

javax.jdo.JDOFatalInternalException:Error creating transactional connection factory

解决方法,在百度下载java连接MySQL包放到hive/lib下:

# cp mysql-connector-java-5.1.10-bin.jar /opt/apache-hive-1.2.0-bin/lib
Nach dem Login kopieren


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage