Hive入门

Hive简介

  • 官网: http://hive.apache.org/
  • 原因: 使用SQL语句, 对非Java开发者对hdfs的数据做mapreduce操作
  • 数据仓库
    • 数据仓库和数据库的区别: 对数据进行分析和交互式访问数据
  • 解释器, 编译器, 优化器
  • 元数据存储在关系型数据库中

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
mv hive-default.xml.template hive-site.xml
mv hive-env.sh.template hive-env.sh
# 配置
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node0/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>123</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://node0:9083</value>
</property>

修改mysql权限:

1
2
3
4
5
6
7
8
9
10
11
select @@validate_password_policy;
SHOW VARIABLES LIKE 'validate_password%';
# 设置密码检查
set global validate_password_policy=0;
set global validate_password_mixed_case_count=0;
set global validate_password_number_count=3;
set global validate_password_special_char_count=0;
set global validate_password_length=3;

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
flush privileges;

启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
> schematool -dbType mysql -initSchema
Metastore connection URL: jdbc:mysql://node0/hive_remote?createDatabaseIfNotExist=true&useSSL=false
Metastore Connection Driver : com.mysql.jdbc.Driver
Metastore connection User: root
Starting metastore schema initialization to 2.3.0
Initialization script hive-schema-2.3.0.mysql.sql
Initialization script completed
schemaTool completed

# 启动元数据
hive –service metastore -hiveconf hive.root.logger=DEBUG,console &
& echo success

> hive

问题:ssl连接在jdbc后加上&\amp;

  • hdfs上新建hive目录
1
2
3
4
5
6
hadoop fs -mkdir -p /user/hive/warehouse
hadoop fs -mkdir -p /user/hive/tmp
hadoop fs -mkdir -p /user/hive/log
hadoop fs -chmod -R 777 /user/hive/warehouse
hadoop fs -chmod -R 777 /user/hive/tmp
hadoop fs -chmod -R 777 /user/hive/log

内部表和外部表的区别:

  • 创建时需要定制目录
  • 删除内部表会将表结构和元数据全部删除
  • 外部表只删除表结构,不删除元数据.

分区

  • 分区字段不能在表的列中

怎么分区?

  • 分区规则
  • 增加分区-实质就是加目录
    • 添加分区的时候必须在现有分区的基础之上
    • 删除分区的时候, 会将所有的存在的分区都删除.

操作

官方教程: https://cwiki.apache.org/confluence/display/Hive/LanguageManual

create

1
2
3
4
5
6
7
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];


CREATE DATABASE IF NOT EXISTS hive;

delete

1
2
3
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];

DROP DATABASE IF EXISTS hive;

加数据

  • insert
  • load data
  • from table_name insert 语法

工具

beeline

连接方式:

  • beeline / !connect jdbc:hive2://node0:10000/default -n root 123

退出

1
> !quit

Hive函数

自定义函数:

  • 继承UDF
Donate comment here