Hive功能介绍
hive是Apache的顶级项目,
hive是干什么
将SQL语句转换成MapReduce程序,并且提交到Yarn上运行,读取HDFS上的数据进行处理。
SQL语句:和MySQL数据库中SQL语句非常非常类似。
概念:SQL on Hadoop
建立在Hadoop之上提供SQL方式分析的框架
- 最早的框架就是 Hive
facebook开源
- impala
- presto
- sparkSQL/shark
-kylin
要学好hive,需要什么
Hadoop基础:HDFS、MapReduce、Yarn
MySQL数据库
DML(数据操作语言)、DDL(数据定义语言)
https://cwiki.apache.org/confluence/display/Hive/Home#Home-UserDocumentation
案例:统计单词出现频率。
使用mysql完成:
sql语句:
SELECT
word,count(word) count
FROM
tb_word
GROUP BY
word
与此相比,使用mapreduce就需要写很长的代码。
安装Hive
上传、解压、重命名
tar -zxvf apache-hive-1.2.1-bin.tar.gz -C ../modules/
mv apache-hive-1.2.1-bin/ hive-1.2.1-bin/
hive目录结构
修改配置
hive-env.sh,将名称修改。
mv hive-env.sh.template hive-env.sh
绑定Hadoop的路径和hive conf的路径。
创建数据仓库
hive 的数据需要保存到HDFS,那么保存HDFS那个目录,是不是需要配置
不配置,因为它会去读默认路径,但是这些目录是空,我需要去创建
bin/hdfs dfs -mkdir -p /user/hive/warehouse
bin/hdfs dfs -mkdir -p /tmp
bin/hdfs dfs -chmod g+w /tmp
bin/hdfs dfs -chmod g+w /user/hive/warehouse
bin/hdfs dfs -ls /user/
创建完成之后可以在hdfs的外部端口50070上看到:
https://cwiki.apache.org/confluence/display/Hive/GettingStarted在apache官网上可以看到。
hive的基本使用
启动hive:
bin/hive
hive和mysql语法差不多
案例:
准备数据
直接将Mysql表中的数据复制出来
将它上传到Linux datas
创建数据库&表
直接使用default数据表
官网语句:
创建表
--Hive创建表
CREATE TABLE tb_word(
word STRING,
count INT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n';
加载数据到数据库
官网语法:
--加载数据
LOAD DATA LOCAL INPATH '/opt/datas/tb_word.txt' INTO TABLE tb_word;
测试:统计单词频率。
--测试
SELECT
word,count(word) count
FROM
tb_word
GROUP BY
word
和MySQL的对比
database:数据库
将同一类表放在此空间下,以便进行管理操作。
table:表
字段:数据类型和字段名称
映射 表对应的数据文件
对应的文件数据在HDFS上
使用MySQL存储元数据
10.1交互式命令问题
现象:
bin/hive这个交互性命令行不能同时开多个,开第二个就报错了
原因
hive中无论是创建的 数据库还是表 ,这些元数据metaStore需要存储
默认情况下存储在Derby数据库里面的,属于嵌入式数据,每次仅仅支持一个会话,
解决:
使用支持多个会话的数据,推荐MySQL存储元素(官方推荐)
配置使用MYSQL存储元素
文档:
https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administration
(1)创建配置文件
touch 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://bigdata-hpsk01.huadian.com/metaStore?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>
(3)添加mysql驱动
放到hive的conf文件夹中。
测试
(1)将metastore_db和derby.log删除
(2)启动bin/hive
(3)效果:
a):可以启动多个bin/hive交互性命令行
b):mysql 数据库中可以看到 那个 数据库