当前位置: 首页 > news >正文

菜鸟先飞之初识Hive、安装教程及常见问题

一、初识Hive

1、什么是Hive

Hive是基于Haddop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表并提供SQL查询功能,可以将SQL语句转换

MapReduce任务运行。

Hive提供了一系列的工具,可以给用来数据提取转换加载(ETL)是一种存储、查询和分析存储在Hadoop中的大规模数据的机制

2、Hive发展历史及版本

2007年8月 – 始于Facebook

2013年5月 – 0.11 Stinger Phase 1 ORC HiveServer2

2013年10月 – 0.12.0 Stinger Phase 2 - ORC improvement

2014年4月 – Hive 0.13.0 as Stinger Phase 3

2014年11月 – Hive 0.14.0

2015年2月 – Hive 1.0.0

2015年5月 – Hive 1.2.0 (1.2.1 本系列课实验重点版本 )

2016年2月 – Hive 2.0.0 (添加 HPLSQL, LLAP)

2016年6月 – Hive 2.1.0 (2.1.0 本系列课实验补充版本 )

3、为什么要使用Hive

提供了一个简单的优化模型

HQL类SQL语法,简化MR开发

支持在不同的计算框架上运行

支持在HDFS和HBase上临时查询数据

支持用户自定义函数、格式

成熟的JDBC和ODBC驱动程序,用于ETL和BI

稳定可靠(真实生产环境)的批处理

有庞大活跃的社区

4、Hive体系架构

Hive的体系结构分以下几个部分

1)用户接口主要是3个:CLI,Client,HWI(Hive Web Interface)

2)Hive将元数据存储在数据库中,如MySQL、Derby。

3)解释器、编译器、优化器完成HQL查询语句从词法分析、语句分析、编译、优化到查询计划的生成。生成的查询计划存储在HDFS中,随后由MapReduce调用执行。
4)Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(注意 含*的查询,例如:select * from tbl 不会生成 MapReduce任务)

5、Hive与传统数据库

6、交互模式

7、Hive数据类型

1)原始数据类型(类似于SQL数据类型)

2)复杂数据类型

* ARRAY:存储的数据为相同类型
* MAP:具有相同类型的键值对
* STRUCT:封装了一组字段

8、Hive元数据结构

9、Hive数据表

分为内部表和外部表

1) 内部表(管理表)

HDFS中为所属数据库目录下的子文件夹

数据完全由Hive管理,删除表(元数据)会删除数据

2)外部表(External Tables)

数据保存在指定位置的HDFS路径中

Hive不完全管理数据,删除表(元数据)不会删除数据

10、Hive建表语句

create table student if not exists (

id int,

name string)

row format delimited fields terminated by ‘,’

location ‘/file’;

11、建表语句分析

二、配置Hive

1、安装准备

jdk-8u221-linux-x64.tar.gz

hadoop-2.6.0-cdh5.14.2.tar.gz

hive-1.1.0-cdh5.14.2.tar.gz

zookeeper-3.4.6.tar.gz

MySQL-client-5.6.46-1.el7.x86_64.rpm

MySQL-server-5.6.46-1.el7.x86_64.rpm

mysql-connector-java-5.1.48-bin.jar

更改主机名:hostnamectl set-hostname hadoop01

更改主机列表:vi /etc/hosts 新增:192.168.48.104 hadoop01保存退出

在opt目录下创建soft文件夹:mkdir /opt/soft

切换至soft文件夹 cd /opt/soft

将文件拖入此目录中

解压hadoop: tar -zxfhadoop-2.6.0-cdh5.14.2.tar.gz

解压hive:tar -zxfhive-1.1.0-cdh5.14.2.tar.gz

解压zookeeper:tar -zxfzookeeper-3.4.6.tar.gz

解压jdk: tar -zxf jdk-8u221-linux-x64.tar.gz

给文件夹改名:

mvhadoop-2.6.0-cdh5.14.2 hadoop

mvhive-1.1.0-cdh5.14.2 hive hive

mvzookeeper-3.4.6 zookpr

mvjdk-8u221-linux-x64 java8

配置免密登录:

ssh-keygen -t rsa -P ‘’

ssh-copy-id hadoop01

ps:需要稍等片刻

2、配置jdk及环境变量

vi /etc/profile

shift + g 最后一行添加

export JAVA_HOME=/opt/soft/java8

export JRE_HOME=/opt/soft/java8/jre

export CLASSPATH=.: J A V A _ H O M E / l i b / d t . j a r : JAVA\_HOME/lib/dt.jar: JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

export HADOOP_HOME=/opt/soft/hadoop

export HIVE_HOME=/opt/soft/hive

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export HADOOP_OPTS=“-Djava.library.path=$HADOOP_HOME/lib”

export PATH= P A T H : PATH: PATH:JAVA_HOME/bin: J R E _ H O M E / b i n : JRE\_HOME/bin: JRE_HOME/bin:HADOOP_HOME/sbin: H A D O O P _ H O M E / b i n : HADOOP\_HOME/bin: HADOOP_HOME/bin:HIVE_HOME/bin

保存退出

使配置即时生效:source /etc/profile

3、配置hadoop

切换至:cd /opt/soft/hadoop/etc/hadoop 目录

vi core-site.xml

新增

fs.defaultFS

hdfs://192.168.48.104:9000

hadoop.tmp.dir

/opt/soft/hadoop/tmp

hadoop.proxyuser.root.hosts

*

hadoop.proxyuser.root.groups

*

vi hdfs-site.xml

dfs.replication

1

dfs.permissions.enable

false

vi mapred-site.xml

mapreduce.framework.name

yarn

vi yarn-site.xml

yarn.nodemanager.aux-services

mapreduce_shuffle

yarn.resourcemanager.localhost

localhost

修改jdk环境变量

vi hadoop-env.sh

export JAVA_HOME=/opt/soft/java8

4、配置zookeeper

切换目录至:cd /opt/soft/zookpr

将zoo_sample.cfg改名:mv zoo_sample.cfg/ zoo.cfg

修改zoo.cfg :vi zoo.cfg

修改:将路径改到zookpr目录下

dataDir=/opt/soft/zookpr/zookprdata

新增

server.1=hadoop01:2888:3888

mkdir /opt/soft/zookprzookprdata 使core-site.xml配置中的文件夹存在

格式化:hadoop namenode -format

运行zookper:start-all.sh

ps:首次需要输入四次yes

jps:查看进程如下图 配置无误

5、配置mysql

查看冲突软件:rpm -qa | grep mariadb

卸载冲突文件:rpm -emariadb-libs-5.5.64-1.el7.x86_64 --nodeps

切换至:cd /opt/soft 目录下

下载MySQL组件:

yum install -y nettools

yum install -y perl

yum install -y autoconf

解压客户端:rpm -ivh MySQL-client-5.6.46-1.el7.x86_64.rpm

解压服务端:rpm -ivh MySQL-server-5.6.46-1.el7.x86_64.rpm

启动数据库:service mysql start

修改配置文件: vi /usr/my.conf‘

[client]

default-character-set = utf8

[mysql]

skip-grant-tables

character-set-server = utf8

collation_server = utf8_general_ci

lower_case_table_names

保存退出

重启MySQL:service mysql restart

进入MySQL:mysql

使用数据库:use mysql

设置登陆密码:update user set password = password(‘ok’);

/q 退出数据库

6、配置Hive

切换至:cd /opt/soft/zookpr/conf 目录

新建hive-site.xml文件:vi hive-site.xml

hive.metastore.warehouse.dir

/usr/hive/warehouse

管理表存储的位置,可以是linux中的目录,也可以是相对于fs.default.name有关的目录

hive.metastore.local

true

javax.jdo.option.ConnectionURL

jdbc:mysql://127.0.0.1:3306/hivecreateDatabaseIfNotExist=true

javax.jdo.option.ConnectionDriverName

com.mysql.jdbc.Driver

javax.jdo.option.ConnectionUserName

root

javax.jdo.option.ConnectionPassword

ok

hive.server2.authentication

NONE

hive.server2.thrift.client.user

root

hive.server2.thrift.client.password

ok

更改hive-env.sh.template文件名:mv hive-env.sh.template hive-env.sh

修改hive-env.sh文件:vi hive-env.sh

export HADOOP_HOME=/opt/soft/hadoop

export HIVE_CONF_DIR=/opt/soft/hive/conf

export HIVE_AUX_JARS_PATH=/opt/soft/hive/lib

export JAVA_HOME=/opt/soft/java8

将mysql-connector-java-5.1.48-bin.jar移动到移动到/opt/soft/hive/lib目录下:

mv /opt/soft/mysql-connector-java-5.1.48-bin.jar /opt/soft/hive/lib

hadoop fs -ls / 查看hdfs目录文件

hadoop fs -mkdir -p /usr/hive/warehouse 创建管理表存储位置

hadoop fs-chmod -R 777 /usr/hive 给文件夹赋权

初始化 MySQL:schematool -dbType mysql -initSchema

关闭黑界面后台运行提示功能,节省一个后台窗口:

hive后台执行:nohup hive --service hiveserver2 &

beeline -u jdbc:hive2://localhost:10000 命令行模式

ps:最好在hive/bin目录下运行

要退出beeline :!q

hive 进入hive 交互模式

退出 quit; 或者 exit;

此时 jps

7、常见错误

1)未能成功连接数据库(命令行模式启动失败)

可能的原因:1、未启动Hive后台运行 2、数据库hive已经存在 3、配置文件更改后未重新启动

2)无法创建数据库

解决方案:查看hive-site.xml配置文件中的管理表存储的位置 文件夹是否存在 以及 有无赋权

3)无法删除数据库中的表

连接数据库的jar包版本较低,需要升级

4)未在hive/bin目录下运行beeline模式,导致的冲突问题

5)其他,欢迎补充

相关文章:

  • 获取dubbo源码编译并导入idea以及启动入门项目dubbo-demo
  • Yii2 创建定时任务
  • 【中间件】MQ(作用、组成、复制和刷盘策略、幂等、堆积与延迟、死信队列)面试题
  • 【线性表,队列和栈,栈溢出,链表和顺序表的特点】
  • 获取JVM 进程 PID
  • 实现Callable接口实现线程创建及线程注意事项包括线程状态,一些API
  • 2023年湖北安全员ABC报名条件、报名流程、报名需要什么资料呢?甘建二
  • 液位检测仪在线监测系统解决方案
  • Argo rollouts + istio服务网格实现金丝雀灰度发布
  • 摸鱼三天,我写了一个通用的组建树TreeUtil工具
  • 【Telegraf 介绍】
  • 【React】类excel表格的开源项目handsontable
  • 2022前端面试—js+vue篇(持续更新)
  • MySQL数据库管理(二)
  • 【我的世界Minecraft-MC】常见及各种指令大杂烩【2022.8版】
  • 【391天】每日项目总结系列128(2018.03.03)
  • CSS魔法堂:Absolute Positioning就这个样
  • CSS中外联样式表代表的含义
  • exports和module.exports
  • java 多线程基础, 我觉得还是有必要看看的
  • 爱情 北京女病人
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 记录一下第一次使用npm
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 栈实现走出迷宫(C++)
  • 最简单的无缝轮播
  • 进程与线程(三)——进程/线程间通信
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • $.ajax()参数及用法
  • (12)Linux 常见的三种进程状态
  • (C语言)fgets与fputs函数详解
  • (二)PySpark3:SparkSQL编程
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (规划)24届春招和25届暑假实习路线准备规划
  • (简单) HDU 2612 Find a way,BFS。
  • (十) 初识 Docker file
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转) ns2/nam与nam实现相关的文件
  • (转)母版页和相对路径
  • .libPaths()设置包加载目录
  • .Net Core与存储过程(一)
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • []error LNK2001: unresolved external symbol _m
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [Android] Android ActivityManager
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [BSGS算法]纯水斐波那契数列
  • [BZOJ] 2427: [HAOI2010]软件安装
  • [c++] 自写 MyString 类