Hive环境搭建

Hive入门

初识hive

  • 由FackBook开源用于解决海量结构化日志的数据统计;
  • Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据映射为一张表,并提供类SQL查询功能
  • 构建在Hadoop之上的数据仓库:
    使用HQL作为查询接口;
    使用HDFS存储;
    使用MapRedece计算;
  • Hive的本质是将 SQL 语句转换为 MapReduce 程序;
  • 灵活性和扩展性比较好:支持UDF,自定义存储格式等;
  • 适合离线数据处理;

仓库对比

Hive环境搭建
Hive环境搭建

三种安装模式

内嵌模式

元数据保存在内嵌的derby中,允许一个会话连接,尝试多个会话链接时会报错;
hive服务、metastore以及derby服务运行在同一个进程中;
该模式无需特殊配置(在不修改任何配置的情况下,在本机通过默认的元数据数据库管理);

hive中有一个自带的数据库derby;
首次启动需要进行初始化操作(因为有一些默认的表结构和默认的数据库);
初始化成功之后,会在当前执行的目录下,生成:metastore_db;
在初始化时所在目录下,运行hive,将进入hive shell窗口;
derby是将所有的数据,存储在当前metestore_db这个目录中的;
如果在不同的目录下,多次初始化的话,将无法做到数据共享;
所以内嵌模式,只适用于学习使用;

注意事项:
执行hive之前,启动hdfs;
在哪一个目录下运行hive,都必须进行初始化;
如果在同一个目录下,多次初始化时,需要将我们生成的metastore_db删除,再进行初始化;

对只能单用户操作的理解:
初始化操作成功后,运行hive,可以进入hive shell窗口;
新打开一个终端,进入相同目录,运行hive,会报错,报错信息如下:
Another instance of Derby may have already booted the database /home/yk/apache-hive-2db.
如果在不同目录下执行初始化操作,运行hive,也能够进入hive shell窗口,但与另一个运行实例数据不共享(因为他们连接的是不同的数据库)

配置环境变量

[/etc/profile]
export HIVE_HOME=/home/yk/hive
export PATH=$PATH:$HIVE_HOME/bin

初始化操作

[root@master106 bin]# schematool -initSchema -dbType derby
which: no hbase in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/ibutils/bin:%JAVA_HOME/bin:/soft/maven/bin:/home/yk/hadoop-2.7.3/bin:/home/yk/hadoop-2.7.3/sbin:/home/yk/crail/assembly/target/crail-1.0-bin:/home/yk/spark/bin:/home/yk/spark/sbin:/home/yk/zookeeper/bin:/bin:/home/yk/hive/bin:/home/yk/kafka-eagle-bin-1.2.8/kafka-eagle-web-1.2.8/bin:/root/bin:/home/yk/hadoop-2.7.3/bin:/home/yk/hadoop-2.7.3/sbin)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/yk/apache-hive-2.1.0-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/yk/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL:	 jdbc:derby:;databaseName=metastore_db;create=true
Metastore Connection Driver :	 org.apache.derby.jdbc.EmbeddedDriver
Metastore connection User:	 APP
Starting metastore schema initialization to 2.1.0
Initialization script hive-schema-2.1.0.derby.sql
Initialization script completed
schemaTool completed

// 此时会生成一个metastore_db文件

运行hive

// 注:要启动hdfs,否者报错
[root@master106 bin]# hive
which: no hbase in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/ibutils/bin:%JAVA_HOME/bin:/soft/maven/bin:/home/yk/hadoop-2.7.3/bin:/home/yk/hadoop-2.7.3/sbin:/home/yk/crail/assembly/target/crail-1.0-bin:/home/yk/spark/bin:/home/yk/spark/sbin:/home/yk/zookeeper/bin:/bin:/home/yk/hive/bin:/home/yk/kafka-eagle-bin-1.2.8/kafka-eagle-web-1.2.8/bin:/root/bin:/home/yk/hadoop-2.7.3/bin:/home/yk/hadoop-2.7.3/sbin)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/yk/apache-hive-2.1.0-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/yk/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

Logging initialized using configuration in jar:file:/home/yk/apache-hive-2.1.0-bin/lib/hive-common-2.1.0.jar!/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive>

基本操作

https://www.yiibai.com/hive/hive_create_table.html

  • 缺点: 只能单用户操作(另一终端下执行hive报错)
Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database /home/yk/apache-hive-2db.

本地模式

hive服务与metastore服务运行在同一个进程中,mysql是单独的进程,可以在同一台机器上,也可以在远程机器上。该模式只需将hive-site.xml中的ConnectionURL指向mysql,并配置好驱动名、数据库连接账号即可。

本地模式:改变元数据的存放位置(实现数据共享与多用户操作)
安装mysql: linux环境下,通常与hive安装在同一台主机上。
将元数据写入mysql中,同时可以在任意目录下,执行hive,进入到hive shell窗口。
让hive与mysql互连,让hive连接mysql。

1、修改hive中的配置文件

[root@master106 conf]# mv hive-default.xml.template hive-site.xml
[root@master106 conf]# vim 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://172.16.2.106:3306/hive?createDatabaseIfNotExist=true</value>
    </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>1234</value>
    </property>
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
    <property>
        <name>hive.exec.local.scratchdir</name>
        <value>/home/yk/hive</value>
        <description>Local scratch space for Hive jobs</description>
    </property>
    <property>
        <name>hive.querylog.location</name>
        <value>/home/yk/hive/querylog</value>
        <description>Location of Hive run time structured log file</description>
    </property>
    <property>
        <name>hive.server2.logging.operation.log.location</name>
        <value>/home/yk/hive/server2_logs</value>
        <description>Top level directory where operation logs are stored if logging functionality is enabled
        </description>
    </property>
    <property>
        <name>hive.server2.enable.doAs</name>
        <value>false</value>
        <description>
            Setting this property to true will have HiveServer2 execute
            Hive operations as the user making the calls to it.
        </description>
    </property>
<configuration>

2、将mysql的驱动包mysql-connector-java-5.1.17.jar 放在$HIVE_HOME/lib/目录下
3、初始化操作

schematool -initSchema -dbType mysql

4、 可以在任意目录下执行hive,也可以同时启动多个hive shell窗口

远程模式

hive服务和metastore在不同的进程中,可能是不同的机器。

上一篇:P2802 回家 (DFS+剪枝)


下一篇:论文阅读:Making Deep Neural Networks Robust to Label Noise: a Loss Correction Approach(2017CVPR,前后向校正)