hive是Apache的顶级项目,
http://hive.apache.org/
将SQL语句转换成MapReduce程序,并且提交到Yarn上运行,读取HDFS上的数据进行处理。
SQL语句:和MySQL数据库中SQL语句非常非常类似。
建立在Hadoop之上提供SQL方式分析的框架
- 最早的框架就是 Hive
facebook开源
- impala
- presto
- sparkSQL/shark
-kylin
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就需要写很长的代码。
tar -zxvf apache-hive-1.2.1-bin.tar.gz -C ../modules/
mv apache-hive-1.2.1-bin/ hive-1.2.1-bin/
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:
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
database:数据库
将同一类表放在此空间下,以便进行管理操作。
table:表
字段:数据类型和字段名称
映射 表对应的数据文件
对应的文件数据在HDFS上
bin/hive这个交互性命令行不能同时开多个,开第二个就报错了
hive中无论是创建的 数据库还是表 ,这些元数据metaStore需要存储
默认情况下存储在Derby数据库里面的,属于嵌入式数据,每次仅仅支持一个会话,
使用支持多个会话的数据,推荐MySQL存储元素(官方推荐)
文档:
https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administration
(1)创建配置文件
touch hive-site.xml
javax.jdo.option.ConnectionURL
jdbc:mysql://bigdata-hpsk01.huadian.com/metaStore?createDatabaseIfNotExist=true
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
root
javax.jdo.option.ConnectionPassword
123456
(3)添加mysql驱动
放到hive的conf文件夹中。
(1)将metastore_db和derby.log删除
(2)启动bin/hive
(3)效果:
a):可以启动多个bin/hive交互性命令行
b):mysql 数据库中可以看到 那个 数据库