Hive
Hive的基本介绍
【概念】
- Hive是构建在Hadoop之上的数据仓库平台
- Hive是一个SQL解析引擎,它将SQL语句转译成MapReduce作业并在Hadoop上执行。
- Hive表是HDFS的一个文件目录,一个表名对应一个目录名,如果有分区表的话,则分区值对应子目录名。
- 其实质将hdfs文件内容变成了表的映射,然后通过mr查询。
- 底层存储是HDFS,中间执行时MR,或可视为中转代理。
【官网】https://hive.apache.org/
【特点】适合处理大数据;速度一般或较慢(处理小数据);
【特性】
- 支持类SQL(HQL[Hiv Query Language] , 但与SQL不同);
- 支持大规模文件处理(MR并行计算);
- 没有和MR绑定,可支持MR,SPARK等框架;
- 存储是基于HDFS,执行基于MR,资源调度是通过yarn完成;
【拓展】 蜜蜂 ; 大象 ;
【环境】基于hadoop ;
【meta元数据库管理器】 Mysql
【版本说明】
- hive-2.x ------- hadoop 2.x;
- hive-3.x ------- hadoop 3.x
Hive 安装与部署
- 下载并解压Hive,并简化hive的文件名
cd /home/hadoop/software #切换到安装包的目录
wget https://dlcdn.apache.org/hive/hive-2.3.9/apache-hive-2.3.9-bin.tar.gz #下载hive
tar -zvxf apache-hive-2.3.9-bin.tar.gz #解压hive
mv apache-hive-2.3.9-bin hive #重命名
- Hive 环境变量设置
修改环境变量
sudo vim /etc/profile
export LANG=zh_CN.UTF8 #编码支持中文
export HIVE_HOME=/home/hadoop/hive
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/lib
让配置生效
source /etc/profile
- 下载mysql驱动 jar
https://dev.mysql.com/downloads/connector/j/
wget https://cdn.mysql.com/archives/mysql-connector-java-5.1/mysql-connector-java-5.1.49.tar.gz
将 mysql-connector.jar放置到hive的lib目录下(驱动加载)
mv mysql-connector*.jar hive/lib
- 修改hive-site.xml
cd hive/conf
在mysql中创建好database:hivemeta2021
CREATE DATABASE IF NOT EXISTS hivemeta2021 # 数据库名
DEFAULT CHARACTER SET utf8; #数据哭字符编码
添加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.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value> <!-- mysql数据库密码 -->
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>mysql
<value>jdbc:mysql://192.168.16.3:3306/hivemeta2021?characterEncoding=utf-8&useSSL=false</value><!-- mysql所在机器ip和数据库名称 -->
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name><!-- mysql驱动程序 -->
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- 到此结束代码 -->
<property>
<name>hive.exec.script.wrapper</name>
<value/>
<description/>
</property>
</configuration>
- Hive启动与测试
格式化
启动hive前,要保证mysql,hadoop启动
start-all.sh #启动 hdfs,yarn管理器;
初始化失败检查要素:hive环境变量;hadoop是否启动;mysql是否能正常连接;
cd hive/bin
schematool -dbType mysql -initSchema #初始化失败检查要素:hive环境变量;hadoop是否启动;mysql是否能正常连接;
成功提示
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/cyj/software/apache-hive-2.3.7-bin/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/cyj/software/hadoop-2.7.7/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://192.168.16.3:3306/hivemeta2021?characterEncoding=utf-8&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,如果遇到非文件夹的报错,删除hdfs根目录中的文件
hive # 启动hive
- 创建hive数据库
hive>create database firsthdb;
hive>use firsthdb;
hive>create table firstable(num int ,name string);
hive>show tables;
hive>select count(*) from firstable;
打开mysql数据库,检查DBS元数据内容;
- 导入数据
hive>create table employee(id int, name string,age int, tel string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;# ,表示分隔符
hive>load data local inpath '/home/hadoop/software/employee.txt' into table employee;
hive>select * from empolyee;
hive>load data inpath '/home/hadoop/software/employee01.txt' into table employee;#从hdfs上传文件
外部表;
内部表;
添加表分区;
复杂字段定义
# 1,Lilei,book-tv-code,beijing:chaoyang-shanghai:pudong
# 2,Hanmeimei,book-Lilei-code,beijing:haidian-shanghai:huangpu
hive>create table psn (id int,name string,hobbies ARRAY <string>,address MAP <string, string>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY '-'MAP KEYS TERMINATED BY ':';
- hive数据库操作——删除
hive>drop database testdb; #删除空数据库
hive>drop database cascade; #级联删除
hive>drop table test; #删除表
- 在hadoop2中查看网页中的/tmp目录出现下面的错误:
Permission denied: user=dr.who, access=READ_EXECUTE inode="/tmp"
修改hdfs的权限就好了。
$HADOOP_HOME/bin/hdfs dfs -chmod -R 755 /tmp #chmode要有-