IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> hive入门 -> 正文阅读

[大数据]hive入门

一、简介

hive是基于Hadoop的一个数据仓库工具。
hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。
Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单。
hive十分适合对数据仓库进行统计分析。
延迟较高(MapReduce本身延迟,Hive SQL向MapReduce转化优化提交),适合做大数据的离线处理(TB PB级别的数据,统计结果延迟1天产出)。不擅长小量的数据,和实施计算。
数据库和数据仓库的区别:数据库处理的数据量小、数据价值高。数据 仓库体量大,数据价值 较低。

二、执行流程

在hive架构中,各个节点的作用:
HDFS:用来存储hive仓库的数据文件
yarn:用来完成hive的HQL转化的MR程序的执行
MetaStore:保存管理hive维护的元数据
Hive:用来通过HQL的执行,转化为MapReduce程序的执行,从而对HDFS集群中的数据文件进行统计。
在这里插入图片描述

三、hive安装过程

基于hdfs、yarn、mysql已安装 完成 的机器部署。在安装前应可以正常启动如下进程
NameNode
NodeManager
DataNode
SecondaryNameNode
ResourceManager

1.上传apache-hive安装包到Linux服务器上,解压后改名字

[root@hadoop ~]# tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/installs
[root@hadoop ~]# mv apache-hive-1.2.1-bin hive1.2.1

2.添加到环境变量。vim /etc/profile

export HIVE_HOME=/opt/installs/hive1.2.1
export PATH=$PATH:$HIVE_HOME/bin

3.重新加载环境变量 使刚才的 配置生效

[root@hadoop ~]# source /etc/profile

4.配置hive的配置文件

1.hive-env.sh
先复制一个配置文件,并更改(在安装目录的conf目录下)
	cp hive-env.sh.template hive-env.sh
	vim hive-env.sh
	# 配置hadoop目录
	HADOOP_HOME=/opt/installs/hadoop2.9.2/
	# 指定hive的配置文件目录
	export HIVE_CONF_DIR=/opt/installs/hive1.2.1/conf/
2.hive-site.xml
	先复制一个配置文件,并更改(在安装目录的conf目录下)
	cp hive-default.xml.template hive-site.xml
	删除configuration里面的所有内容,并添加下列内容(删除中文注释)
	<configuration>
	    <!--hive的元数据保存在mysql中,需要连接mysql,这里配置访问mysql的信息-->
	    <!--url:这里必须用ip-->
	    <property>
	        <name>javax.jdo.option.ConnectionURL</name>
	        <value>jdbc:mysql://hadoop10:3306/hive</value>
	    </property>
	    <!--drivername-->
	    <property>
	        <name>javax.jdo.option.ConnectionDriverName</name>
	        <value>com.mysql.jdbc.Driver</value>
	    </property>
	    <!--username-->
	    <property>
	        <name>javax.jdo.option.ConnectionUserName</name>
	        <value>root</value>
	    </property>
	    <!--password-->
	    <property>
	        <name>javax.jdo.option.ConnectionPassword</name>
	        <value>root</value>
	    </property>
	</configuration>

5.登录mysql数据库创建一个数据库

	create database hive

6.由于连接需要一个jar包,所以需要提前 将jar包放到安装目录的lib目录下
在这里插入图片描述

四、启动使用hive

1.在启动之前需要先启动hdfs和yarn
2.初次使用需要初始化元数据

schematool -dbType mysql -initSchema

3.1第一种启动方式

输入hive启动
[root@hadoop10 ~]# hive
Logging initialized using configuration in jar:file:/opt/installs/hive1.2.1/lib/hive-common-1.2.1.jar!/hive-log4j.properties
hive>

3.2第二种启动方式

启动hive的服务器,可以允许远程连接方式访问。
// 前台启动
[root@hadoop10 ~]# hiveserver2 
// 后台启动
[root@hadoop10 ~]# hiveserver2 &

使用这种方式启动可以使用其他客户端 操作,或者使用可视化工具进行连接

beeline客户端
[root@hadoop10 ~]# beeline
beeline> !connect jdbc:hive2://hadoop10:10000
回车输入mysql用户名
回车输入mysql密码

4.客户端操作命令

1.查看数据库
	hive> show databases;
2. 创建一个数据库
	hive> create database test;
3. 查看database 
	hive> show databases;
4. 切换进入数据库
	hive> use test;
5.查看所有表
	hive> show tables;
6.创建一个表
	hive> create table t_user(id int,name string,age int);
7. 添加一条数据(转化为MR执行--不让用,仅供测试)
	hive> insert into t_user values('1001','zhangsan',20);
8.查看表结构
	hive> desc t_user;
9.查看表的schema描述信息。(表元数据,描述信息)
	hive> show create table t_user;
	# 明确看到,该表的数据存放在hdfs中。
10 .查看数据库结构
	hive> desc database baizhi;
11.查看当前库
	hive> select current_database();
12 其他sql
    select * from t_user;
    select count(*) from t_user; (Hive会启动MapReduce)
    select * from t_user order by id;

五、Java操作hive

1.导入maven依赖

<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-jdbc</artifactId>
    <version>1.2.1</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.9.2</version>
</dependency>

2.编写代码进行测试

public static void main(String[] args) throws Exception {
    BasicConfigurator.configure();//开启日志
    //加载hive驱动
    Class.forName("org.apache.hive.jdbc.HiveDriver");
    //连接hive数据库
    Connection conn = DriverManager.getConnection("jdbc:hive2://hadoop10:10000/baizhi","root","admins");
    String sql = "select * from t_user1";
    PreparedStatement pstm = conn.prepareStatement(sql);
    ResultSet rs = pstm.executeQuery();
    while(rs.next()){
        String id = rs.getString("id");
        String name = rs.getString("name");
        int age = rs.getInt("age");
        System.out.println(id+":"+name+":"+age);
    }
    rs.close();
    pstm.close();
    conn.close();
}

六、hive中的数据类型

primitive,array,map,struct
在这里插入图片描述

# array建表
create table t_tab(
	score array<float>,
    字段名 array<泛型>
);
# map建表
create table t_tab(
	score map<string,float>
);
# struct建表
create table t_tab(
	info struct<name:string,age:int,sex:char(1)>,
    列名 struct<属性名:类型,属性名:类型>
);

七、Hive数据导入

1.建表

create table t_person(
    id string,
    name string,
    salary double,
    birthday date,
    sex char(1),
    hobbies array<string>,
    cards map<string,string>,
    addr struct<city:string,zipCode:string>
) row format delimited
fields terminated by ','--列的分割
collection items terminated by '-'--数组 struct的属性 map的kv和kv之间
map keys terminated by '|'-- map的k与v的分割
lines terminated by '\n';--行数据之间的分割

在这里插入图片描述
2.导入数据
例:
2,李四,9000.0,2019-8-9,0,抽烟-喝酒-烫头,123456|中国银行-22334455|建设银行,郑州-45000

# 在hive命令行中执行
-- local 代表本地路径,如果不写,代表读取文件来自于HDFS
-- overwrite 是覆盖的意思,可以省略。
load data [local] inpath ‘/opt/datas/person1.txt’ [overwrite] into table t_person;
# 本质上就是将数据上传到hdfs中(数据是受hive的管理)

3.系统自带分隔符
首先需要导入两个jia包
在这里插入图片描述

json分隔符:
例:{"id":1,"name":"zhangsan","sex":0,"birth":"1991-02-08"}
1.建表
	create table t_person2(
	    id string,
	    name string,
	    sex char(1),
	    birth date
	)row format serde 'org.apache.hive.hcatalog.data.JsonSerDe';
2.加载文件数据
	load data local inpath '/opt/person.json' into table t_person2;
正则分隔符:
例:WARN 192.168.1.2 2019-10-19 QQ com.baizhi.service.IUserService#login
1.建表
	create table t_access(
	    level string,
	    ip string,
	    log_time date,
	    app string,
	    service string,
	    method string
	)row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe'--正则表达式的格式转化类
	with serdeproperties("input.regex"="(.*)\\s(.*)\\s(.*)\\s(.*)\\s(.*)#(.*)");--(.*) 表示任意字符 \\s表示空格
2.加载文件数据
	load data local inpath '/opt/access.log' into table t_access;
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-11 16:42:24  更:2021-07-11 16:42:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 0:45:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码