Hive(海量的结构化的运算分析工具)
Hive是基于Hadoop的一个数据仓库工具(服务性的软件),k可以将结构化的数据文件映射为一张表,
并提供类似于SQL查询.
1) Hive处理的数据存储在HDFS(结构化数据)
2) Hive分析数据底层的实现是MapReduce/spark(分布式运算框架)
3) 执行程序运行在Tarn上
注意: hive不支持 delete(删除) update(更新)
Hive的安装详细步骤
1.mysql数据 远程连接权限
1) mysql -uroot -proot
2) set global validate_password_policy=0;
3) set global validate_password_length=1; --这个两个设置以后 密码很简单不会报错
4) grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
5) flush privileges;
2.HDFS start-all.sh
3.hive 解压 配置 mysql的驱动包
4.vi conf/hive-env.sh
export HADOOP_HOME=/opt/apps/hadoop-3.1.1/
export HIVE_CONF_DIR=/opt/apps/hive-3.1.2/conf
5.vi hive-site.xml
<configuration>
<!-- 记录HIve中的元数据信息 记录在mysql中 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://linux01:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- mysql的用户名和密码 -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>/user/hive/tmp</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/user/hive/log</value>
</property>
<!-- 客户端远程连接的端口 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>hive.server2.webui.host</name>
<value>0.0.0.0</value>
</property>
<!-- hive服务的页面的端口 -->
<property>
<name>hive.server2.webui.port</name>
<value>10002</value>
</property>
<property>
<name>hive.server2.long.polling.timeout</name>
<value>5000</value>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoCreateSchema</name>
<value>false</value>
</property>
<property>
<name>datanucleus.fixedDatastore</name>
<value>true</value>
</property>
<property>
<name>hive.execution.engine</name>
<value>mr</value>
</property>
<!-- 添加元数据服务配置 -->
<property>
<name>hive.metastore.local</name>
<value>false</value>
<description>controls whether to connect to remove metastore server or open a new metastore server in Hive Client JVM</description>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://linux01:9083</value>
</property>
</configuration>
6.vi /opt/apps/hadoop-3.1.1/etc/hadoop/core-site.xml
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
7重启hadoop
stop_all.sh 关闭
start_all.sh 开启
8 配置环境变量
vi /etc/profile
9 初始化
bin/schematool -initSchema -dbType mysql
10 开启元数据服务
hive --service metastore & 后台启动
[root@linux01 ~]# netstat -nltp | grep 9083/10000
tcp6 0 0 :::9083
11 启动测试(HDFS正常)
hive
**处理HDFS上的结构化数据**
1.创建一个结构化的文件
1,zss,18,F
2,lss,28,M
3,www,38,F
4,zll,48,M
2.上传到HDFS的目录下
3.根据数据的内容建表
create table tb_log(
id int,
name String,
age int,
gender String
)
row format delimited fields terminated by ',' (格式化,以,切割)
location 'hdfs://linux01:8020/data/log/' ; (数据的位置)
4.查询
select * from tb_log;
**Hive的连接方式**
1.在本地执行 hive 命令
本地模式进入到hive的客户终端
2.通过远程连接方式 开启hiveserver2 服务
1)jdbc连接 jdbc:hive2://linux01:10000
2)beeline 窗口 jdbc:hive2://linux01:10000
!connect jdbc:hive2://linux01:10000 用户:root 密码:没有 直接回车
**idea连接hive**
1.添加依赖
<dependencies>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>
2. hive --> new --> data Source --> apache Hive 更改name和URL
3. 右边database
常用数据类型
int bigint double string timestamp
集合数据类型
struct(结构体)对象 map映射 array数组
**在hive中的表分两种**
1) external 外部表
create external table tb_log2( --外部表
id int ,
name string
)
row format delimited fields terminated by ","
location '/data/log/' ;
2) 默认的 内部表 管理表 managertable
管理表不需要指定位置 使用默认的位置(以表名称为文件夹)
create table tb_log5(
id int ,
name string
)
row format delimited fields terminated by "," ;
location '/data/log/' ; -- 管理表 (管理表不需要location)
drop table tb_log2 ; -- 指定的路径下的数据会被删除
select * from tb_log ; --没有数据
drop table tb_log2 ; -- 指定的路径下的数据不会被删除
select * from tb_log ; --有数据 没有收别的表影响
**问? 什么是内部表 什么是外部表 ? 什么时候使用内部表 什么时候使用外部表**
1 公共/原始数据 使用外部表
2 业务有关的业务报表使用管理表(内部表)
desc tb_log: 字段信息
desc formatted tb_log: 表的信息(表字段 位置 类型(内部 外部表) 输入数据类型 分隔符)
导入数据
hive是使用SQL语句 处理HDFS上的结构化数据
1.建表的时候指定location 结构化数据的位置文件夹 外部表
2.可以将结构化数据直接put到表目录中 mv到指定的目录
3.load data local inpath "data/user.csv" into table tb_user: --底层就是put 本地追加
load data inpath "/iser.csv" into table tb_user: --底层move 追加 hdfs追加
load data inpath "/iser.csv" overwrite into table tb_user: --底层move overwrite覆盖 hdfs覆盖
创建数据库
create database if not exists a_log ; --如果不存在就创建a_log
user a_log; --切换到_a.log
create table a_log(
uid int,
name string
)
row farmat delimited fields terminated by "\t"