当前位置:   article > 正文

hive知识大全_hive client是启动一个hiveserver么

hive client是启动一个hiveserver么

 

 

     

Hive 的产生 

Hive 产生的原因:方便非java 编程者(熟悉 SQL 语言)对 hdfs 的数据做 mapreduce操作。

Hive 是数据仓库

数据库:用户与数据库交互,提交 SQL 语句后,马上见到执行结果;存放业务数据;数据库提出范式的概念是为了解决数据冗余和耦合的问题;数据库给业务数据提供存储支撑。

数据仓库:不与用户交互;存放历史数据;反范式设计,专门引入冗余数据,保证数据完整。数据仓库面向分析,里面存放的数据用来做分析和挖掘。

Hive 将 SQL 转化为 MapReduce 可以识别的操作,承担解释器、编译器、优化器等角色

Hive 运行时,元数据(表的结构、属性)存储在关系型数据库里面。因为元数据信息需要高效的读取。

 

用户接口主要有三个:Client(命令行),JDBC/ODBC 和 WEBGUI。其中最常用的是 Client,Client 启动的时候,会同时启动一个Hive 副本。Client 是 Hive 的客户端,用户连接至 Hive Server。在启动 Client 模式的时候,需要指出 Hive Server 所在节点,并且在该节点启动 Hive Server。 WEB GUI 是通过浏览器访问 Hive。

        Hive将元数据存储在数据库中,如 mysql、derby。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及

查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce调用执行。编译器将一个 Hive QL 转换操作符,操作符是 Hive 的最小的处理单元每个操作符代表 HDFS 的一个操作或者一道 MapReduce 作业。

Operator 是 hive 定义的一个处理过程,是一个树形结构:

protected List<Operator<?  extends Serializable>> childOperators;  protected List<Operator<?  extends Serializable>> parentOperators;  protectedboolean done; // 初始化值为false

Hive 的数据存储在 HDFS中,大部分的查询、计算由 MapReduce 完成(包含*的查询,比如 select * from tbl 不会生成 MapRedcue任务)。

 

Hive 语法解析

ANTLR词法语法分析工具解析 HQL

 

 

Hive 的三种模式

Local 模式

此模式连接到一个In-memory 的数据库 Derby,一般用于 UnitTest

 

单用户模式通过网络连接到一个数据库中,是最经常使用到的模式。

 多用户模式

远程服务器模式。用于非 Java 客户端访问元数据库,在服务器端启动

MetaStoreServer,客户端利用 Thrift协议通过 MetaStoreServer 访问元数据库。

 

Linux 下安装 MySQL

1.     yum 安装mysql

[root@node01 ~]# yum install mysql-server

2.     启动 mysqld服务

[root@node01 ~]# service mysqld start

3. 修改 mysql修改权限

[root@node01 ~]# mysql mysql> show databases; mysql> use mysql; mysql> show tables; mysql> select host,user from user;

+------------------+------+

| host       | user |

+------------------+------+

| 127.0.0.1   | root |

| localhost   |    |

| localhost   | root |

| node01    |    |

| node01    | root |

+-----------------+-------+

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; mysql> select host,user from user;

+--------------+------+

| host      | user |

+--------------+------+

| %       | root | | 127.0.0.1 | root |

| localhost |     |

| localhost | root | | node01  |    |

| node01  | root |

+---------------+------+

mysql> delete from mysql.user where host != '%'; mysql> flush privileges;

4.重新登录 mysql

[root@node01 ~]# mysql -u root -p

 

Hive 安装

本地模式(derby)

这种方式是最简单的存储方式,只需要在 hive-site.xml 做如下配置便可

<?xml version="1.0"?>  

<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>  

  

<configuration>  

 

<property>  

<name>javax.jdo.option.ConnectionURL</name>  

<value>jdbc:derby:;databaseName=metastore_db;create=true</value>   </property>   

   

<property>  

<name>javax.jdo.option.ConnectionDriverName</name>  

<value>org.apache.derby.jdbc.EmbeddedDriver</value>  

</property>  

   

<property>  

<name>hive.metastore.local</name>  

<value>true</value>  

</property>  

   

<property>  

<name>hive.metastore.warehouse.dir</name>  

<value>/user/hive/warehouse</value>  

</property>  

   

</configuration>  

 

注:使用 derby 存储方式时,运行hive 会在当前目录生成一个 derby 文件和一个 metastore_db 目录。这种存储方式的弊端是在同一个目录下同时只能有一个 hive 客户端能使用数据库,否则会提示如下错误

[html] view plaincopyprint?

hive> show tables;  

FAILED: Error in metadata:javax.jdo.JDOFatalDataStoreException: Failed to start database 'metast ore_db',see the next exception for details.  

NestedThrowables:  

java.sql.SQLException: Failed to startdatabase 'metastore_db', see the next exception for details.

FAILED: Execution Error, return code 1from org.apache.hadoop.hive.ql.exec.DDLTask  


单用户模式(mysql)

这种存储方式需要在本地运行一个 mysql 服务器,并作如下配置(下面两种使用 mysql 的方式,需要将 mysql jar 包拷贝到$HIVE_HOME/lib 目录下)。 

<?xml version="1.0"?>  

<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>  

  

<configuration>  

<!-- hive_remote 是数据库名称,同时安装不同的模式,连接的数据库要不同-->

<property>  

<name>hive.metastore.warehouse.dir</name>  

<value>/user/hive_remote/warehouse</value>  

</property>  

   

<property>  

<name>hive.metastore.local</name>  

<value>true</value>  

</property>  

   

<property>  

<name>javax.jdo.option.ConnectionURL</name>  

<value>jdbc:mysql://localhost/hive_remote?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</value>  

</property>  

   

<property>  

<name>javax.jdo.option.ConnectionPassword</name>  

<value>password</value>  

</property>  

 

</configuration>  

多用户模式

Remot 一体

这种存储方式需要在远端服务器运行一个 mysql 服务器,并且需要在 Hive 服务器启动meta 服务。

这里用 mysql 的测试服务器,ip 位 192.168.1.214,新建 hive_remote 数据库,字符集 latine1

<?xml version="1.0"?>  

<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>  

   

<configuration>  

  

<property>  

<name>hive.metastore.warehouse.dir</name>  

<value>/user/hive/warehouse</value>  

</property>  

   

<property>  

<name>javax.jdo.option.ConnectionURL</name>  

<value>jdbc:mysql://192.168.57.6: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</value>  

</property>  

   

<property>  

<name>javax.jdo.option.ConnectionPassword</name>  

<value>password</value>  

</property>  

  

<property>  

<name>hive.metastore.local</name>  

<value>false</value>  

</property>  

  

<property>  

 <name>hive.metastore.uris</name>  

 <value>thrift://192.168.1.188:9083</value>  

</property>  

  

</configuration>   注:这里把 hive 的服务端和客户端都放在同一台服务器上了。服务端和客户端可以拆开。

 

Remot 分开

将 hive-site.xml 配置文件拆为如下两部分

 

服务端配置文件

<?xml version="1.0"?>  

<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>  

   

<configuration>  

  

<property>  

<name>hive.metastore.warehouse.dir</name>  

<value>/user/hive/warehouse</value>  

</property>  

   

<property>  

<name>javax.jdo.option.ConnectionURL</name>  

<value>jdbc:mysql://192.168.57.6: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>123456</value>  

</property>  

 

</configuration>  

 

客户端配置文件

<?xml version="1.0"?>  

<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>  

   

<configuration>  

  

<property>  

<name>hive.metastore.warehouse.dir</name>  

<value>/user/hive/warehouse</value>  

</property>  

   

<property>  

<name>hive.metastore.local</name>  

<value>false</value>  

</property>  

  

<property>  

<name>hive.metastore.uris</name>  

<value>thrift://192.168.57.5:9083</value>  

</property>  

  

</configuration>  

安装单用户模式具体步骤

1. 解压 hive 包

[root@node02 sxt]# tar xf apache-hive-1.2.1-bin.tar.gz

2.     配置环境变量

[root@node02 sxt]# vi + /etc/profile

export HIVE_PREFIX=/opt/sxt/apache-hive-1.2.1-bin export

PATH=$JAVA_HOME/bin:$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin:$ZOOKEEPER_ PREFIX/bin:$HIVE_PREFIX/bin

[root@node02 apache-hive-1.2.1-bin]# . /etc/profile

3.     修改配置文件

[root@node02 sxt]# cd apache-hive-1.2.1-bin/conf

[root@node02 conf]# cp hive-default.xml.templatehive-site.xml

[root@node02 conf]# vi hive-site.xml

<configuration> 

 

<property>  

   <name>hive.metastore.warehouse.dir</name>    <value>/user/hive_remote/warehouse</value>

</property>  

   

<property>  

   <name>hive.metastore.local</name>

   <value>true</value>

</property>  

   

<property>  

   <name>javax.jdo.option.ConnectionURL</name>

   <value>jdbc:mysql://node01/hive_remote?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>123456</value>

</property>

 

</configuration>

4.JDBC驱动包放到 Hive lib 目录下

5. 让 hadoop 的 jline 包和 hive 的 jline 包版本保持一致(高版本替换低版本)

[root@node02 conf]# cd /opt/sxt/apache-hive-1.2.1-bin/lib

[root@node02 conf]# cp jline-2.12.jar/opt/sxt/hadoop-2.6.5/share/hadoop/yarn/lib/

[root@node02 conf]# cd/opt/sxt/hadoop-2.6.5/share/hadoop/yarn/lib/

[root@node02 lib]# rm -f jline-0.9.94.jar

6. 启动 Hive

[root@node02 lib]# hive hive> 客户端启动的时候要注意:

[ERROR] Terminal initialization failed;falling back to unsupported java.lang.IncompatibleClassChangeError: Found classjline.Terminal, but interface was expected   atjline.TerminalFactory.create(TerminalFactory.java:101)

错误的原因: Hadoop jline 版本和 hive 的 jline 不一致

 

一些简单的操作

hive> create table table01 (id int, name string);hive> show tables; hive> desc table01; hive> insert into table01values(1,'Jed');

 

安装多用户模式具体步骤

角色划分

 

mysql

MetaStoreServer

Hive 客户端

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/396684
推荐阅读
相关标签
  

闽ICP备14008679号