hive安装

一、安装配置
1、安装
#安装要求
java 1.7+ ,建议1.8+
Hadoop 2.x 
#hive下载地址
https://hive.apache.org/downloads.htmlhttps://hive.apache.org/downloads.html
#解压文件
>$ tar -xzvf hive-x.y.z.tar.gz
#设置环境变量HIVE_HOME
>$ cd hive-x.y.z
>$ export HIVE_HOME={{pwd}}
>$ export PATH=$HIVE_HOME/bin:$PATH
>$ export HADOOP_HOME=<hadoop-install-dir>
#初始化化数据存储
$ $HADOOP_HOME/bin/hadoop fs -mkdir       /tmp
$ $HADOOP_HOME/bin/hadoop fs -mkdir       /user/hive/warehouse
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /tmp
$ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /user/hive/warehouse
#安装mysql
参考CDH相关.txt
#修改hadoop配置
$HADOOP_HOME/etc/hadoop/core-site.xml
<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
  </property>
  <property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>
#初始化
>schematool -dbType mysql -initSchema

>nohup hive --service metastore  >>  log.out 2>&1 &
>nohup hive --service hiveserver2  >> log.out 2>&1 &

2、运行Hive CLI
>$ $HIVE_HOME/bin/hive

3、运行HiveServer2 and Beeline
#hiveserver2
>$ $HIVE_HOME/bin/hiveserver2
hive --service hiveserver2  --hiveconf hive.root.logger=INFO,console &
#beeline(如:jdbc:hive2://localhost:10000.)
>$ $HIVE_HOME/bin/beeline -u jdbc:hive2://$HS2_HOST:$HS2_PORT
#HCatalog
#启动HCatalog
>$ $HIVE_HOME/hcatalog/sbin/hcat_server.sh
#使用HCatalog
$ $HIVE_HOME/hcatalog/bin/hcat
#WebHCat (Templeton)
>$ $HIVE_HOME/hcatalog/sbin/webhcat_server.sh

4、配置管理
#hive默认读取配置文件hive-default.xml
<install-dir>/conf/hive-default.xml
所有对hive-deault.xml的修改将被忽略,修改参数配置可以通过新增hive-site.xml文件添加配置实现
#hive基于hadoop并默认继承hadoop的参数配置
编辑 hive-site.xml 可以定义任何期望的参数 (包括hadoop的参数)
#使用命令行
#调用hive(不赞成使用)、Beeline 或 HiveServer2
>$ bin/hive --hiveconf x1=y1 --hiveconf x2=y2  //this sets the variables x1 and x2 to y1 and y2 respectively
>$ bin/hiveserver2 --hiveconf x1=y1 --hiveconf x2=y2  //this sets server-side variables x1 and x2 to y1 and y2 respectively
>$ bin/beeline --hiveconf x1=y1 --hiveconf x2=y2  //this sets client-side variables x1 and x2 to y1 and y2 respectively.
#设置HIVE_OPTS值,--hiveconf x1=y1 --hiveconf x2=y2,同上

5、运行时配置
#hive 查询是通过map-reduce实现查询的,因此,这样的查询可以通过hadoop的参数控制
#HiveCLI(不赞成使用)、Beeline的set命令 可以用来设置任何hadoop(或者hive)配置变量,例如:
beeline> SET mapred.job.tracker=myhost.mycompany.com:50030;
beeline> SET -v;

6、Hive, Map-Reduce and Local-Mode
#hive为大部分查询请求生成jobs,这些jobs的提交是通过集群指示参数设置
mapred.job.tracker
#小数据本地模式执行,mapred.local.dir必须指定路径(如:/tmp/<username>/mapred/local). (否则,将会抛出磁盘空间分配异常.)
hive> SET mapreduce.framework.name=local;
#默认本地模式是关闭的
hive> SET hive.exec.mode.local.auto=false;
#本地模式开启的情况下,满足以下条件的任务,将以本地模式执行
The total input size of the job is lower than: hive.exec.mode.local.auto.inputbytes.max (128MB by default)
The total number of map-tasks is less than: hive.exec.mode.local.auto.tasks.max (4 by default)
The total number of reduce tasks required is 1 or 0.
#本地模式下,不同的运行环境有不同的结果,以本地模式运行,会出现意想不到的行为或错误
#可以通过hive.mapred.local.mem设置jvm内存的使用,默认设置为0,hive让hadoop决定内存分配限制

7、hive日志
#日志配置文件
$HIVE_HOME/conf/hive-log4j.properties.
#日志存储路径配置
hive.log.dir=<other_location>
#通过命令行参数配置
bin/hive --hiveconf hive.root.logger=INFO,console  //for HiveCLI (不建议使用)
bin/hiveserver2 --hiveconf hive.root.logger=INFO,console
#命令行修改配置
bin/hive --hiveconf hive.root.logger=INFO,DRFA //for HiveCLI (不建议使用)
bin/hiveserver2 --hiveconf hive.root.logger=INFO,DRFA


二、DDL
1、创建hive表
hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
创建一个名为“邀请”的表格,有两列和一个名为ds的分区列。分区列是一个虚拟列。它不是数据本身的一部分,而是来自于一个特定数据集被加载到的分区。
默认情况下,表被假定为文本输入格式,分隔符被假定为A(ctrl-a)。
2、list所有表
hive> SHOW TABLES;
3、显示表的所有列
hive> DESCRIBE invites;
4、修改或删除表
hive> ALTER TABLE events RENAME TO 3koobecaf;
hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);
hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');
hive> ALTER TABLE invites REPLACE COLUMNS (foo INT, bar STRING, baz INT COMMENT 'baz replaces new_col2');
5、修改列属性
hive> ALTER TABLE invites REPLACE COLUMNS (foo INT COMMENT 'only keep the first column');
6、删除表
hive> DROP TABLE pokes;
7、元数据存储
元数据位于嵌入式Derby数据库中,其磁盘存储位置是由名为javax.jdo.option.ConnectionURL的Hive配置变量决定的。默认情况下,这个位置是./metastore_db (see conf/hive-default.xml).
https://www.cnblogs.com/1130136248wlxk/articles/5517909.html

三、DML
1、从文件加载数据入hive
hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;
LOCAL:本地数据,未指定本参数,则从hadoop中读取
INPATH:源文件路径
OVERWRITE:数据存在则删除后再新增;未指定本参数,表示往表中追加数据


四、SQL
1、查询结果显示在console中
hive> SELECT a.foo FROM invites a WHERE a.ds='2008-08-15';
2、查询结果存入hadoop文件中(分区的表必须总是在语句的WHERE条件中选择一个分区。)
hive> INSERT OVERWRITE DIRECTORY '/tmp/hdfs_out' SELECT a.* FROM invites a WHERE a.ds='2008-08-15';
3、数据查询存入本地文件系统
hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/local_out' SELECT a.* FROM pokes a;
4、查询数据存入另一张表或文件系统中的示例
hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a;
hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a WHERE a.key < 100;
hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/reg_3' SELECT a.* FROM events a;
hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_4' select a.invites, a.pokes FROM profiles a;
hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT COUNT(*) FROM invites a WHERE a.ds='2008-08-15';
hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT a.foo, a.bar FROM invites a;
hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/sum' SELECT SUM(a.pc) FROM pc1 a;
5、分组查询GROUP BY
hive> FROM invites a INSERT OVERWRITE TABLE events SELECT a.bar, count(*) WHERE a.foo > 0 GROUP BY a.bar;
hive> INSERT OVERWRITE TABLE events SELECT a.bar, count(*) FROM invites a WHERE a.foo > 0 GROUP BY a.bar;
6、关联查询JOIN
hive> FROM pokes t1 JOIN invites t2 ON (t1.bar = t2.bar) INSERT OVERWRITE TABLE events SELECT t1.bar, t1.foo, t2.foo;
7、多表插入MULTITABLE INSERT
FROM src
INSERT OVERWRITE TABLE dest1 SELECT src.* WHERE src.key < 100
INSERT OVERWRITE TABLE dest2 SELECT src.key, src.value WHERE src.key >= 100 and src.key < 200
INSERT OVERWRITE TABLE dest3 PARTITION(ds='2008-04-08', hr='12') SELECT src.key WHERE src.key >= 200 and src.key < 300
INSERT OVERWRITE LOCAL DIRECTORY '/tmp/dest4.out' SELECT src.value WHERE src.key >= 300;
8、流STREAMING
hive> FROM invites a INSERT OVERWRITE TABLE events SELECT TRANSFORM(a.foo, a.bar) AS (oof, rab) USING '/bin/cat' WHERE a.ds > '2008-08-09';


五、简单用例
1、创建表
CREATE TABLE u_data (
  userid INT,
  movieid INT,
  rating INT,
  unixtime STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
2、加载数据
LOAD DATA LOCAL INPATH '<path>/u.data'
OVERWRITE INTO TABLE u_data;
3、查询
SELECT COUNT(*) FROM u_data;
4、创建python文件
Create weekday_mapper.py:

import sys
import datetime

for line in sys.stdin:
  line = line.strip()
  userid, movieid, rating, unixtime = line.split('\t')
  weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()
  print '\t'.join([userid, movieid, rating, str(weekday)])
Use the mapper script:

5、使用python添加数据到新创建表
CREATE TABLE u_data_new (
  userid INT,
  movieid INT,
  rating INT,
  weekday INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';

add FILE weekday_mapper.py;

INSERT OVERWRITE TABLE u_data_new
SELECT
  TRANSFORM (userid, movieid, rating, unixtime)
  USING 'python weekday_mapper.py'
  AS (userid, movieid, rating, weekday)
FROM u_data;
6、查询
SELECT weekday, COUNT(*)
FROM u_data_new
GROUP BY weekday;
6、Apache Weblog Data
CREATE TABLE apachelog (
  host STRING,
  identity STRING,
  user STRING,
  time STRING,
  request STRING,
  status STRING,
  size STRING,
  referer STRING,
  agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex" = "([^]*) ([^]*) ([^]*) (-|\\[^\\]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\".*\") ([^ \"]*|\".*\"))?"
)
STORED AS TEXTFILE;


六、集群
Hive中搭建分为三中方式 a)内嵌Derby方式 b)Local方式 c)Remote方式 三种方式归根到底就是元数据的存储位置不一样。
1、内嵌Derby方式
使用derby存储方式时,运行hive会在当前目录生成一个derby文件和一个metastore_db目录。这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库。
2、本地模式
这种存储方式需要在本地运行一个mysql服务器,并作如下配置(下面两种使用mysql的方式,需要将mysql的jar包拷贝到$HIVE_HOME/lib目录下)。
<?xml version="1.0"?>  
<?xml-stylesheet type="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>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>
3)多用户模式
   1.Remote一体:
    这种存储方式需要在远端服务器运行一个mysql服务器,并且需要在Hive服务器启动meta服务。
    这里用mysql的测试服务器,ip位192.168.1.214,新建hive_remote数据库,字符集位latine1
<?xml version="1.0"?>  
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  
<configuration>  
<property>  
  <name>hive.metastore.warehouse.dir</name>  
  <value>/user/hive/warehouse</value>  
</property>  
<property>
  <name>hive.exec.scratchdir</name>
  <value>/tmp</value>
</property>
   
<property>  
  <name>hive.metastore.local</name>  
  <value>false</value>  
</property>  
   
<property>  
  <name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:mysql://172.16.1.181:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</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>Shy!12345</value>  
</property>  
<property>  
  <name>hive.metastore.uris</name>  
  <value>thrift://172.16.1.181:9083</value>  
</property> 
<property>
  <name>hive.server2.authentication</name>
  <value>SASL</value>
</property>
<property>
  <name>hive.server2.thrift.bind.host</name>
  <value>172.16.1.181</value>
  <description>Bind host on which to run the HiveServer2 Thrift interface.
  Can be overridden by setting $HIVE_SERVER2_THRIFT_BIND_HOST</description>
</property>
<property>
    <name>hive.server2.transport.mode</name>
    <value>binary</value>
    <description>
      Expects one of [binary, http].
      Transport mode of HiveServer2.
    </description>
  </property>
   <property>

      <name>hive.metastore.schema.verification</name>

      <value>false</value>

  </property>

  <property>

    <name>datanucleus.schema.autoCreateAll</name>

    <value>true</value>

 </property>
</configuration>

hive安装

hive安装