一、详解Hive的安装与配置(hive os安装教程)
wxin55 2024-11-10 12:17 8 浏览 0 评论
1.环境准备与规划
2.环境准备
- 安装配置JDK: Spark大数据系列:五、安装配置JDK1.8
- 安装配置Zookeeper: Spark大数据系列:六、安装配置Zookeeper集群
- 安装配置Hadoop集群: Spark大数据系列:十三、Hadoop全分布式HA集群的搭建
- 安装配置MySQL: Spark大数据系列:二十四、CentOS7安装配置MySQL
- 准备Hive的安装包: apache-hive-3.1.2-bin.tar.gz
3.上传解压
- 把Hive的压缩包通过SFTP上传到node01节点
- 解压安装
# 1.解压到/opt目录下
[hadoop@node01 ~]$ sudo tar -zxf apache-hive-3.1.2-bin.tar.gz -C /opt/
# 2.在/opt下重命名为hive
[hadoop@node01 opt]$ sudo mv apache-hive-3.1.2-bin/ hive
# 3.修改hive的用户所属组为hadoop用户组
[hadoop@node01 opt]$ sudo chown -R hadoop:hadoop hive
4.配置Hive
- 配置Hive的环境变量
# 1.在hadoop用户的~/.bash_profile里添加hive的环境变量
[hadoop@node01 ~]$ vim .bash_profile
# set environment variables for hive
export HIVE_HOME=/opt/hive
export HIVE_CONF_DIR=$HIVE_HOME/conf
export PATH=$PATH:$HIVE_HOME/bin
# 2.保存修改使配置生效
[hadoop@node01 ~]$ source .bash_profile
- Hive元数据库配置
在node05安装的MySQL中创建hive用户,用于存储Hive的元数据
# 1.创建hive用户
mysql> CREATE USER 'hive'@'%' IDENTIFIED BY 'Love88me';
# 2.赋权
mysql> grant all privileges on hive.* to 'hive'@'%' identified by 'Love88me' with grant option;
# 3.使权限生效
mysql> flush privileges;
- Hive配置文件
- hive-env.sh
# 1.进行hive的配置文件目录
[hadoop@node01 conf]$ cd /opt/hive/conf/
# 2.复制hive-env.sh.template至同目录下的hive-env.sh
[hadoop@node01 conf]$ cp hive-env.sh.template hive-env.sh
# 3.修改该配置文件(在文件结尾添加以下配置项)
export HADOOP_HOME=/opt/hadoop
export HIVE_HOME=/opt/hive
export HIVE_CONF_DIR=/opt/hive/conf
export HIVE_AUX_JARS_PATH=/opt/hive/lib
- hive-site.xml
# 1.复制hive-default.xml一份并重命名为hive-site.xml
[hadoop@node01 conf]$ cp hive-default.xml.template hive-site.xml
# 2.删除原有configuration及里面的配置,增加以下配置项
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node05:3306/hive?createDatabaseIfNotExist=true&characterEncoding=utf-8&useSSL=false</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>Username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>Love88me</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.server2.thrift.min.worker.threads</name>
<value>5</value>
</property>
<property>
<name>hive.server2.thrift.max.worker.threads</name>
<value>500</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>node01,node02</value>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
<description>
Setting this property to true will have HiveServer2 execute
Hive Operations as the user making the calls to it.
</description>
</property>
<!-- 显示表的列名 -->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<!-- 显示数据库名称 -->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
</configuration>
- MySQL作为Hive元数据库,需要MySQL JDBC驱动包
- 需要下载MySQL的jdbc驱动包mysql-connector-java-5.1.47.jar,上传到$HIVE_HOME/lib下.
- 拷贝到$HIVE_HOME/lib目录下
[hadoop@node01 ~]$ cp mysql-connector-java-5.1.48.jar /opt/hive/lib/
5.Hive安装包分发
- 把node01节点上的Hive的安装包整体分发到其它四台节点上并作相同配置
# 分发node01上的安装包到node02节点
[hadoop@node01 opt]$ sudo scp -r hive/ node02:$PWD
# node02节点上修改/opt/hive的所属用户组为hadoop
[hadoop@node02 opt]$ sudo chown -R hadoop:hadoop hive/
# 分发node01节点上的Hive环境变量文件到node02
[hadoop@node01 ~]$ scp .bash_profile node02:$PWD
# 在node02上运行以下命令使配置生效
[hadoop@node02 ~]$ source ~/.bash_profile
- 由于node3与node4作为Hive的客户端, 需要修改hive-stie.xml为以下配置
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://node01:9083,node02:9083</value>
</property>
</configuration>
6.初始化元数据库
[hadoop@node01 ~]$ schematool -initSchema -dbType mysql
- 成功初始化后会在MySQL数据库中生成元数据库:M
- 如果出现这个错误,『Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V』,说明你的下的/opt/hive/libs下的包『guava-19.0.jar』版本与Hadoop的(/opt/hadoop/share/hadoop/common/lib)版本『guava-27.0-jre.jar』不一致,解决办法是用高版本替换低版本, 并删除低版本:
# 复制高版本的guava
[hadoop@node01 lib]$ cp /opt/hadoop/share/hadoop/common/lib/guava-27.0-jre.jar /opt/hive/lib
# 删除低版本的guava
[hadoop@node01 lib]$ rm -rf /opt/hive/lib/guava-19.0.jar
# 以相同办法操作其它四台机器
7.启动metastore服务
首先要保证Hadoop集群成功启动。
- 启动metastore服务
# 1.在node01上启动metastore服务
[hadoop@node01 ~]$ hive --service metastore&
# 2.在node02上启动metastore服务
- 在客户端通过thrift协议连接metastore(node03或node04)上
[hadoop@node03 conf]$ hive
结束语
在下节中,我将在文章中详细讲解Hive的相关知识,尤其是metastore配置的三种模式。
相关推荐
- ES6中 Promise的使用场景?(es6promise用法例子)
-
一、介绍Promise,译为承诺,是异步编程的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大在以往我们如果处理多层异步操作,我们往往会像下面那样编写我们的代码doSomething(f...
- JavaScript 对 Promise 并发的处理方法
-
Promise对象代表一个未来的值,它有三种状态:pending待定,这是Promise的初始状态,它可能成功,也可能失败,前途未卜fulfilled已完成,这是一种成功的状态,此时可以获取...
- Promise的九大方法(promise的实例方法)
-
1、promise.resolv静态方法Promise.resolve(value)可以认为是newPromise方法的语法糖,比如Promise.resolve(42)可以认为是以下代码的语...
- 360前端一面~面试题解析(360前端开发面试题)
-
1.组件库按需加载怎么做的,具体打包配了什么-按需加载实现:借助打包工具(如Webpack的require.context或ES模块动态导入),在使用组件时才引入对应的代码。例如在V...
- 前端面试-Promise 的 finally 怎么实现的?如何在工作中使用?
-
Promise的finally方法是一个非常有用的工具,它无论Promise是成功(fulfilled)还是失败(rejected)都会执行,且不改变Promise的最终结果。它的实现原...
- 最简单手写Promise,30行代码理解Promise核心原理和发布订阅模式
-
看了全网手写Promise的,大部分对于新手还是比较难理解的,其中几个比较难的点:状态还未改变时通过发布订阅模式去收集事件实例化的时候通过调用构造函数里传出来的方法去修改类里面的状态,这个叫Re...
- 前端分享-Promise可以中途取消啦(promise可以取消吗)
-
传统Promise就像一台需要手动组装的设备,每次使用都要重新接线。而Promise.withResolvers的出现,相当于给开发者发了一个智能遥控器,可以随时随地控制异步操作。它解决了三大...
- 手写 Promise(手写输入法 中文)
-
前言都2020年了,Promise大家肯定都在用了,但是估计很多人对其原理还是一知半解,今天就让我们一起实现一个符合PromiseA+规范的Promise。附PromiseA+规范地址...
- 什么是 Promise.allSettled()!新手老手都要会?
-
Promise.allSettled()方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的pr...
- 前端面试-关于Promise解析与高频面试题示范
-
Promise是啥,直接上图:Promise就是处理异步函数的API,它可以包裹一个异步函数,在异步函数完成时抛出完成状态,让代码结束远古时无限回掉的窘境。配合async/await语法糖,可...
- 宇宙厂:为什么前端离不开 Promise.withResolvers() ?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.为什么需要Promise.with...
- Promise 新增了一个超实用的 API!
-
在JavaScript的世界里,Promise一直是处理异步操作的神器。而现在,随着ES2025的发布,Promise又迎来了一个超实用的新成员——Promise.try()!这个新方法简...
- 一次搞懂 Promise 异步处理(promise 异步顺序执行)
-
PromisePromise就像这个词的表面意识一样,表示一种承诺、许诺,会在后面给出一个结果,成功或者失败。现在已经成为了主流的异步编程的操作方式,写进了标准里面。状态Promise有且仅有...
- Promise 核心机制详解(promise机制的实现原理)
-
一、Promise的核心状态机Promise本质上是一个状态机,其行为由内部状态严格管控。每个Promise实例在创建时处于Pending(等待)状态,此时异步操作尚未完成。当异步操作成功...
- javascript——Promise(js实现promise)
-
1.PromiseES6开始支持,Promise对象用于一个异步操作的最终完成(包括成功和失败)及结果值的表示。简单说就是处理异步请求的。之所以叫Promise,就是我承诺,如果成功则怎么处理,失败怎...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- ES6中 Promise的使用场景?(es6promise用法例子)
- JavaScript 对 Promise 并发的处理方法
- Promise的九大方法(promise的实例方法)
- 360前端一面~面试题解析(360前端开发面试题)
- 前端面试-Promise 的 finally 怎么实现的?如何在工作中使用?
- 最简单手写Promise,30行代码理解Promise核心原理和发布订阅模式
- 前端分享-Promise可以中途取消啦(promise可以取消吗)
- 手写 Promise(手写输入法 中文)
- 什么是 Promise.allSettled()!新手老手都要会?
- 前端面试-关于Promise解析与高频面试题示范
- 标签列表
-
- hive行转列函数 (63)
- sourcemap文件是什么 (54)
- display none 隐藏后怎么显示 (56)
- 共享锁和排他锁的区别 (51)
- httpservletrequest 获取参数 (64)
- jstl包 (64)
- qsharedmemory (50)
- watch computed (53)
- java中switch (68)
- date.now (55)
- git-bash (56)
- 盒子垂直居中 (68)
- npm是什么命令 (62)
- python中+=代表什么 (70)
- fsimage (51)
- nginx break (61)
- mysql分区表的优缺点 (53)
- centos7切换到图形界面 (55)
- 前端深拷贝 (62)
- kmp模式匹配算法 (57)
- jsjson字符串转json对象 (53)
- jdbc connection (61)
- javascript字符串转换为数字 (54)
- mybatis 使用 (73)
- 安装mysql数据库 (55)