Hive基础

Hive是什么

  • 咱俩知晓传统数码存储都是储存在关系型数据库中,它们采用一种SQL(结构化查询语言)方言来查询数据库中的数据。由于大数额的突发,Hadoop的大规模采纳,当这多少个多少迁移到Hadoop之后,用户如故管理人如何对存储在Hadoop上的数目开展查询?Hive出现的首要原因固然为了提供一种SQL查询的白话,来查询存储在Hadoop集群种的多少,那一个被叫做Hive查询语言(简称HiveQL或HQL)。
  • Hive本身并不是一个完完全全的数据库,这是由于Hadoop和HDFS本身设计所界定的,比如Hive不襄助行级其余立异、插入、删除操作。同时鉴于Hive会将查询转换为MapReduce作业,而MapReduce本身启动需要耗费较长的时光(Hadoop是一个面向批处理的系统),所以Hive查询延时相比较严重,并且Hive不援助工作。
  • Hive更合乎数据仓库应用程序,来珍视海量数据。使用Hive进行静态数据分析,不需要飞速响应结果,并且数据本身不会频繁变更,而且可以对数码举行挖掘。
  • 由于Hive不补助OLTP(联机事务处理)所需的要紧功效,所以假若想要对普遍数据运用OLTP效能的话,可以选择NoSQL数据库,比如HBase或Cassandra(Cassandra)。

专注:Hive和多数SQL方言一样,并不吻合ANSI
SQL标准,不过HiveQL和Mysql的SQL方言相比像样。

怎么运用Hive

在Hive的发行版中有三个模块可供访问Hive:CLI、HWI(Hive网页界面)、JDBC、ODBC、Thrift
Server。

hive结构

所有的一声令下和查询都会进入到Driver模块,通过该模块对输入举行编译、对需要统计举行优化,然后遵照指定步骤执行(平常启动三个MapReduce来施行)。
亟需专注的是,启动MR任务的时候,Hive不会生成Java的MapReduce程序,而是经过一个代表“job执行计划”的XML文件驱动执行放到的、原生的Mapper和Reducer模块。

Hive安装

下载Hive安装包http://www.apache.org/dyn/closer.cgi/hive/
hive现在有1.x版本和2.x版本,其中1.x可支撑Hadoop1和Hadoop2,而2.x本子指匡助Hadoop2。因为hive基于Hadoop,所以需要确保Hadoop安装成功。hive只需要在一个节点安装即可。

  1. 解压包
    tar -zxvf apache-hive-2.1.1-bin.tar.gz

  2. 添加hive安装路径
    vim /etc/profile或者~/.bash_profile
    export HIVE_HOME=/opt/hadoop/apache-hive-2.1.1-bin
    export PATH=$HIVE_HOME/bin:$PATH

  3. 在HDFS创制指定目录,并给用户组写权限
    hadoop fs -mkdir /tmp
    hadoop fs -mkdir /user/hive
    hadoop fs -chmod g+w /tmp
    hadoop fs -chmod g+w /user/hive

  4. mysql创建hive metastore库
    在地方hive结构中,我们有一个MetaStore是用来储存hive的元数据音信,一般metastore信息存储到关系型数据库中的。倘诺不安排,hive会默认使用内嵌的Derby数据库,Derby数据库本身容量小,并且不协理多客户端应用,所以一般采纳mysql来囤积metastore消息。

  5. 文件配置
    配置hive-env.sh:
    添加HADOOP_HOME和HIVE_CONF_DIR配置。
    布置hive-site.xml,那些文件假若不设有,则要好成立。
    <pre>
    <?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://xxx.xxx.xxx.xxx: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>

    <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    <description>location of default database for the
    warehouse</description>
    </property>
    </configuration>
    </pre>

  6. 添加mysql连结器mysql-connector-java-5.1.42-bin.jar
    下载:https://dev.mysql.com/downloads/connector/j/
    解压缩后copy到$尖锐湿疣E_HOME/lib/里面。

  7. hive新闻开端化到mysql 中
    schematool -dbType mysql -initSchema
    <pre>
    which: no hbase in
    (/opt/hadoop/apache-hive-2.1.1-bin/bin:/opt/hadoop/hadoop-2.7.3/bin:/opt/hadoop/hadoop-2.7.3/sbin:/usr/java/jdk1.8.0_131/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in
    [jar:file:/opt/hadoop/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in
    [jar:file:/opt/hadoop/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:mysql://10.5.234.238:3306/hive?createDatabaseIfNotExist=true
    Metastore Connection Driver : com.mysql.jdbc.Driver
    Metastore connection User: root
    Starting metastore schema initialization to 2.1.0
    Initialization script hive-schema-2.1.0.mysql.sql
    Initialization script completed
    schemaTool completed
    </pre>
    这时候候mysql中会自动创造一个hive库。

  8. 进入hive
    直接输入hive命令,测试一下
    <pre>
    hive> show tables;
    OK
    Time taken: 1.012 seconds
    </pre>

hive命令行

输入hive – -help
<pre>
Usage ./hive <parameters> –service serviceName <service
parameters>
Service List: beeline cleardanglingscratchdir cli hbaseimport
hbaseschematool help hiveburninclient hiveserver2 hplsql hwi jar lineage
llapdump llap llapstatus metastore metatool orcfiledump rcfilecat
schemaTool version
Parameters parsed:
–auxpath : Auxillary jars
–config : Hive configuration directory
–service : Starts specific service/component. cli is default
Parameters used:
HADOOP_HOME or HADOOP_PREFIX : Hadoop install directory
HIVE_OPT : Hive options
For help on a particular service:
./hive –service serviceName –help
Debug help: ./hive –debug —help
</pre>

通过hive –service serviceName来启动服务,Service(Service)List包含了有着的服务。
–auxpath:来指定用冒号分隔的jar包,包含用户自定义的恢弘等。
–config:覆盖$HIVE_HOME/conf目录下的安排的
–service:启动指定服务或机件,默认是cli
假设要查看各样服务怎么着运用,可以通过./hive –service serviceName
–help来查阅。

CLI命令行界面

hive –service cli –help
<pre>
usage: hive
-d,–define <key=value> Variable subsitution to apply to hive
commands. e.g. -d A=B or –define A=B. 用来定义变量比如:hive -d a=12
–database <databasename> Specify the database to use.
指定所选拔的数据库,默认是default
-e <quoted-query-string> SQL from command line.
不用进入hive,直接在命令行中输入sql,如 :hive -e “show databases”
-f <filename> SQL from files.
指定一个sql文件执行,就算在CLI中,通过source然后点名文件路径,也可以实施指定文件的sql。
-H,–help Print help information
–hiveconf <property=value> Use value for given property.
配置hive相关的属性
–hivevar <key=value> Variable subsitution to apply to hive
commands. e.g. –hivevar A=B.用户概念变量,和-d一样
-i <filename> Initialization SQL file.
允许用户指定一个文书,当CLI启动前会履行那多少个文件。这一个文件以hiverc结尾,一般这多少个文件用来设置每便用户启动CLI的片段配备,比如刚才的:hiveconf
hive.cli.print.current.db=true;
-S,–silent Silent mode in interactive shell.
静默形式,不打印”ok”和“提姆e take”等信息。
-v,–verbose Verbose mode (echo executed SQL to the
console)
</pre>

在CLI中可以运用set命令显示和修改变量值,在CLI中也得以见到system和env的属性变量,不过env的变量是只读不能够更改的。
<pre>
set env:HOME;
env:HOME=/home/hadoop
set;//打印env所有变量
set a;//显示a的值
set a=13;//修改变量的值
</pre>

在HiveQL中可以间接利用变量,比如:
<pre>
hive -d a = age;
hive>create table user(${hivevar:a} int);
</pre>

hivevar:a中hivevar是足以大概的,hivevar和define使用是同等的。
–hiveconf用来定义hive的配置,比如:
hive –hiveconf hive.cli.print.current.db=true
开启这么些特性,在CLI提醒符前会打印当前应用的数据库:
hive (default)>

历史命令

hive会将如今100条执行命令放到$HOME/.hivehistory中

在CLI中执行shell

在CLI中可以不脱离就能履行shell命令,只需要在命令前加!,并且以分公司(;)结尾即可。比如
hive> ! ls;
在CLI中进行shell不协助需要用户输入的交互式命令、不扶助管道效用、不帮忙文件名自动补齐功用(不帮忙通配符)。

在CLI中使用Hadoop的dfs命令

在CLI中得以操作HDFS,只需要直接输入dfs即可,比如:
hive>dfs -help;
hive脚本
hive脚本是以.hql结尾的,在剧本中利用–举行注明
询问突显字段名称
可以通过安装hive.cli.print.header=true;来打印每回查询呈现表头信息。

网站地图xml地图