目录

  • 数据仓库Hive
    • 安装
      • **下载**
      • **设置Hive环境**
      • **配置Hive环境变量**
      • 配置元数据仓库
      • 启动
      • **验证Hive安装**
      • 问题
    • 使用
      • 创建数据库
      • 创建表
      • 导入数据
      • 导出数据

数据仓库Hive

Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。

Hadoop生态系统包含了用于协助Hadoop的不同的子项目(工具)模块,如Sqoop, Pig 和 Hive。

  • Sqoop: 它是用来在HDFS和RDBMS之间来回导入和导出数据。
  • Pig: 它是用于开发MapReduce操作的脚本程序语言的平台。
  • Hive: 它是用来开发SQL类型脚本用于做MapReduce操作的平台。

安装

环境:安装jdk1.8、hadoop3.3.2

Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能,将类 SQL 语句转换为 MapReduce 任务执行。因为只是映射和转换工具,并不需要考虑多集群模式,所以Hive只需在一个节点(最好是master)上安装即可。

软件:

apache-hive-3.1.2-bin.tar.gz (可直接从国内的清华大学等镜像网站下载,地址:https://mirrors.tuna.tsinghua.edu.cn/)

mysql-connector-java-8.0.22.jar (可从maven中央仓库https://mvnrepository.com/或阿里仓库https://maven.aliyun.com/mvn/search下载,最好是8.x版本)

下载

$ wget https://archive.apache.org/dist/hive/stable-2/apache-hive-2.3.9-bin.tar.gz
$ tar -zxvf apache-hive-2.3.9-bin.tar.gz
$ mv apache-hive-2.3.9-bin hive-2.3.9

设置Hive环境

可以设置Hive环境,通过附加以下行到~/.bashrc文件中:

# hive
export HIVE_HOME=/opt/hive-2.3.9
export PATH=$PATH:$HIVE_HOME/bin
#export CLASSPATH=$CLASSPATH:/opt/hadoop-3.3.2/lib/*:.
#export CLASSPATH=$CLASSPATH:/opt/hive-2.3.9/lib/*:.

下面的命令是用来执行〜/.bashrc文件。

$ source ~/.bashrc
$ hive --version

配置Hive环境变量

配置Hive用于Hadoop环境中,需要编辑hive-env.sh文件,该文件放置在 $HIVE_HOME/conf目录。

$ cd $HIVE_HOME/conf
$ cp hive-env.sh.template hive-env.sh

通过编辑hive-env.sh文件添加以下行:

export HADOOP_HOME=/opt/hadoop-3.3.2

​ Hive安装成功完成。现在,需要一个外部数据库服务器配置Metastore。我们使用mysql数据库。

配置元数据仓库

关于Metastore的三种配置:内嵌配置,本地配置,远程配置。

  1. 默认情况下,metastore服务和Hive的服务运行在同一个JVM中,包含了一个内嵌的以本地磁盘作为存储的Derby(Hive自带的数据库)数据库实例。同时,这种配置也被称为内嵌配置。但是这种方式的不好之处就在于每次只有一个内嵌的Derby数据库可以访问某个磁盘上的数据文件,也就是说一次只能为每个metastore打开一个hive会话。如果尝试连接多个,会报错。这样效率很低。

​ 2、如果要支持多会话,或者多用户的话,需要使用一个独立的数据库(比如mysql,比较常用),这种配置方式称为本地metastore配置。虽然这种方式Hvie服务和Metastore服务仍然在一个JVM进程中,但连接的却是另外一个进程中运行的数据库,在同一台机器上或者远程机器上。任何JDBC兼容的数据库都可以通过javax.jdo.option.*配置属性来供metastore使用。

配置Metastore意味着,指定要Hive的数据库存储。可以通过编辑hive-site.xml 文件,在$HIVE_HOME/conf目录.

$ vi $HIVE_HOME/conf/hive-site.xml

编辑hive-site.xml,主要是mysql的连接信息(在文本的最开始位置):

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl" ?>
<configuration><!-- 记录Hive中的元数据信息  记录在mysql中 --><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://10.4.247.120:3307/hive?createDatabaseIfNotExist=true&amp;useSSL=false&amp;serverTimezone=GMT&amp;allowPublicKeyRetrieval=true</value></property><!-- mysql的驱动 --><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><!-- 设置hive仓库的HDFS上的位置 --><property><name>hive.metastore.warehouse.dir</name><value>/hive/warehouse</value></property><!-- 添加元数据服务配置 --><property><name>hive.metastore.local</name><value>false</value></property><!-- 属性为空,则默认为本地模式,否则为远程模式 --><property><name>hive.metastore.uris</name><value>thrift://cluster-master:9083</value><description>IP address (or fully-qualified domain name) and port of the metastore host</description></property><!-- 元数据 schema 检查 --><property><name>hive.metastore.schema.verification</name><value>false</value></property><!-- 显示当前数据库的信息 --><property><name>hive.cli.print.header</name><value>true</value></property><!-- 显示查询表的行头信息 --><property><name>hive.cli.print.current.db</name><value>true</value></property><!--设置资源临时文件存放位置 --><property><name>hive.exec.scratchdir</name><value>/hive/tmp</value></property><!--设置查询日志在HDFS上的位置 --><property><name>hive.querylog.location</name><value>/hive/log</value></property><!-- 客户端远程连接的host --><property><name>hive.server2.thrift.bind.host</name><value>0.0.0.0</value></property><!-- 客户端远程连接的端口 --><property><name>hive.server2.thrift.port</name><value>10000</value></property><!-- hive远程服务的页面的host --><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><!-- hive远程服务的连接超时设置 --><property><name>hive.server2.long.polling.timeout</name><value>5000</value></property><!-- hive远程服务模拟连接的用户,默认为true,HiveServer2以提交查询的用户身份执行查询处理;为false,查询将以运行hiveserver2进程的用户身份运行,即yarn作业获取到的hiveserver2用户都为hive用户 --><property><name>hive.server2.enable.doAs</name><value>true</value></property><!-- 设置 权限 --><property><name>hive.scratch.dir.permission</name><value>777</value></property><!-- 在不存在时是否自动创建必要的schema(数据库和表) --><property><name>datanucleus.autoCreateSchema</name><value>false</value></property><!-- 开启数据核固定数据存储模式 --><property><name>datanucleus.fixedDatastore</name><value>true</value></property><!-- 根据输入文件的大小决定是否将普通join转换为mapjoin的一种优化,默认不开启false --><property><name>hive.auto.convert.join</name><value>false</value></property><!-- Hive计算引擎:mr=>mapreduce(默认);spark=>spark --><property><name>hive.execution.engine</name><value>mapreduce</value></property>
</configuration>

复制mysql的驱动程序到hive/lib下面

在mysql中hive的schema(在此之前需要创建mysql下的hive数据库)

$ ./bin/schematool -dbType mysql -initSchema --verbose
$ hive

启动

# 服务端启动
# 前台启动, 默认监听端口是:9083
$ hive --service  metastore  [-p 9083]
# 后台启动
$ hive --service  metastore  &  [-p 9083]
$ netstat -nltp  | grep  9083
# 关闭: pid为上述查询的进程id
$ kill -9 pid
注意客户端中的端口配置需要和启动监听的端口一致。服务端启动正常后,客户端就可以执行hive操作了。
客户端本地连接
$ hive

验证Hive安装

下面的命令来验证配置单元安装:

$ cd $HIVE_HOME
$ hive

在成功安装Hive后,能看到以下回应:

hive> show databases;
hive> show tables;
hive> create table employee (id bigint,name string) row format delimited fields terminated by '\t';
hive> select * from employee;

问题

1、org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !

**原因:**其实之前你已经初始化过了,后来你更改了hive或者MySQL的配置文件后,导致他们之间无法通信。再进行初始化时就会发生这样的错误。

Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database /opt/hive-2.3.9/metastore_db.

解决办法

转到hive目录下,ls后,如果发现有derby.log和metastore_db文件,就说明这时hive的数据库仍是derby,把它俩删除后,hive就又能正常工作了

2、FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeExcepti

原因:服务端没有启动

$ hive --service  metastore  &

使用

创建数据库

create database db_school;
# 使用数据库
use db_school;

库建好后,在hdfs中会生成一个库目录:hdfs://cluster-master:9000/user/hive/warehouse/db_school.db

创建表

create table teacher(id string,name string,gender string)
row format delimited
fields terminated by ',';

导入数据

1、直接上传到hdfs

$ vi teacher.dat
1,zhangsan,male
2,lisi,female
3,xiewu,male
# 上传hdfs
$ hadoop fs -put teacher.dat /hive/warehouse/db_school.db/teacher

2、在hive的交互式shell中用hive命令来导入本地数据到表目录

$ vi teacher1.dat
4,zhangsan1,male
5,lisi1,female
6,xiewu1,male
# OVERWRITE覆盖插入数据
hive> LOAD DATA LOCAL INPATH '/opt/teacher1.dat' OVERWRITE INTO TABLE teacher;

3、用hive命令导入hdfs中的数据文件到表目录

$ hadoop fs -put teacher.dat /tmp
$ hadoop fs -ls /tmp
hive>load data inpath '/tmp/teacher.dat' into table teacher;

注意:导本地文件和导HDFS文件的区别:
本地文件导入表:复制 hdfs文件导入表:移动

导出数据

overwrite会把之前文件夹内所有文件都删除

将hive表中的数据导出本地磁盘文件

hive>insert overwrite local directory '/opt/export'
row format delimited fields terminated by ','
select * from teacher limit 100000;

hive shell命令导出

$ hive  -e  'select  *  from db_school.teacher;' >/opt/export/teacher.txt;

大数据hive快速开始相关推荐

  1. 2021年大数据Hive(一):​​​​​​​Hive基本概念

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 历史文章 前言 Hive基本概念 一.Hive介绍 1.什么是Hive 2.为什么使 ...

  2. 周末去哪儿架构师跟你聊:大数据平台快速解决方案

    内容来源:2017年5月13日,周末去哪儿架构师李锡铭在"Java开发者大会 | Java之美[上海站]"进行<大数据平台快速解决方案中>演讲分享.IT大咖说作为独家视 ...

  3. 2021年大数据Hive(十二):Hive综合案例!!!

    全网最详细的大数据Hive文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Hive综合案例 一.需求描述 二.项目表的字段 三.进 ...

  4. 2021年大数据Hive(十一):Hive调优

    全网最详细的大数据Hive文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Hive调优 一.本地模式 1.空key处理 二.SQL ...

  5. 2021年大数据Hive(九):Hive的数据压缩

    全网最详细的大数据Hive文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Hive的数据压缩 一.MR支持的压缩编码 二.压缩配置 ...

  6. 2021年大数据Hive(八):Hive自定义函数

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive自定义函数 一.概述 1.UDF(User-Define ...

  7. 2021年大数据Hive(七):Hive的开窗函数

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive的开窗函数 一.窗口函数 ROW_NUMBER,RANK ...

  8. 2021年大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转换、行转列)

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive的内置函数 一.数学函数 1. 取整函数: round ...

  9. 2021年大数据Hive(四):Hive查询语法

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 hive查询语法 一.SELECT语句 1.语句结构 2.全表查 ...

最新文章

  1. POJ 1321 棋盘问题【DFS】
  2. 计算机制作印章,制作印章软件【处理办法】
  3. mysql的Table is readonly解决方案
  4. python学习之subprocess模块
  5. 青年报告_了解青年的情绪
  6. 闲谈神经网络--写给初学者(三)
  7. 要么出色,要么出局!威马公布三大核心技术矩阵背后的大野心
  8. DB2 SQLCODE 异常大全编辑(二)
  9. python实例练习(9)图像的手绘效果
  10. kali火狐浏览器设置中文
  11. thread ‘<unnamed>‘ panicked at ‘assertion failed: `(left == right)`
  12. 特斯拉召回43万辆国产车/ 苹果头显最早明年发布/ 网易将在暴雪游戏停运后退款… 今日更多新鲜事在此...
  13. JAVA将上传的PPT/PPTX转为图片
  14. 24点游戏 计算机编程,关于24点游戏的编程思路与基本算法
  15. 软件逆向工程学习(一)
  16. 卖肾也真心伤不起! 史上最贵音响TOP10
  17. java自动化测试语言高级之Java 8 新特性
  18. 刷Trailhead笔记- 用aura component创建app
  19. 有源滤波器和无源滤波器的区别?(硬件每日一题)
  20. 鼠标触摸屏不能用, 键盘部分使用正常,利用向日葵解决问题

热门文章

  1. Proe Creo 二次开发之模型装配--缺省与坐标系
  2. python吃显卡还是内存条_加内存条还是加显卡??
  3. 计算机动画与应用领域,计算机动画的特点是什么
  4. 理财领域各种“潜规则”
  5. SWIFT PLM 介绍|基于微服务架构的Swift PLM云平台
  6. 自定义element中的table表格动态获取表头
  7. 魔百盒九联UNT401H,通刷刷机固件
  8. linux 压缩根目录文件,Linux操作系统下如何压缩文件? zip压缩命令使用
  9. 取数字的个位数十位数百位数等
  10. Java 北大青鸟 第一学期 第三章 选择结构(一) 上级练习+课后作业