Linux服务器搭建单机版Hive与搭建Hive集群

news/2024/5/20 5:09:30 标签: hive, 服务器, linux, hadoop, hdfs

Linux服务器搭建单机版Hive与搭建Hive集群

  • Hive
    • Hive概述
    • Hive架构
    • Hive计算引擎
  • Linux安装Hive
    • 下载Hive
    • 解压及重命名
    • 配置hive-env.sh
    • 创建hive-site.xml
    • 配置日志
    • 添加驱动包
    • 配置环境变量
    • 初始化数据库
    • 启动Hive
  • Hive的交互方式
    • 使用bin/hive
    • 使用hiveServer2
    • 使用sql语句或者sql脚本
  • Hive集群搭建
    • 安装一个单节点Hive
    • 分发Hive到其他节点
    • 修改分发节点配置文件
    • 启动Hive集群

Hive

Hive概述

Hive是一个构建在Hadoop上的数据仓库框架。最初,Hive是由Facebook开发,后来移交由Apache软件基金会开发,并作为一个Apache开源项目。

Hⅳve是基于 Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SαL査询功能。

Hⅳve能够存储很大的数据集,可以直接访问存储在 Apache HDFS或其他数据存储系统(如 Apache HBase)中的文件。

Hive支持 MapReduce、 Spark、Tez这三种分布式计算引擎

Hive本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据存储

Hive架构

Hive是建立在 Hadoop上的数据仓库基础构架。提供了一系列的工具,可以存储、查询和分析存储在分布式存储系统中的大规模数据集。Hive定义了简单的类sql査询语言,通过底层的计算引擎,将SαL转为具体的计算任务进行执行

客户端:Client

Client CLI(hive shell 命令行)

JDBC/ODBC(java访问hive)

WEBUI(浏览器访问hive)

元数据:Metastore

元数据包括表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是
外部表)、表的数据所在目录等。元数据默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore。

驱动器:Driver

(1)解析器(SQL Parser):将SQL字符转换成抽象语法树AST,这一步一般使用都是第三方工具库完成,比如antlr,对AST进行语法分析,比如表是否存在,字段是否存在,SQL语句是否有误

(2)编译器(Physical Plan):将AST编译生成逻辑执行计划

(3)优化器(Query Optimizer):对逻辑执行计划进行优化

(4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划,对于Hive来说,就是MR/Spark

数据处理:存储和执行

Hive使用HDFS进行存储,使用MapReduce进行计算。

解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。

Hive计算引擎

MapReduce

MapReduce将计算分为两个阶段,分别为 Map 和 Reduce。对于应用来说,需要想方设法将应用拆分成多个map、reduce的作业,以完成一个完整的算法。

MapReduce整个计算过程会不断重复地往磁盘里读写中间结果,导致计算速度比较慢,效率比较低

Tez

Tez把Map/Reduce过程拆分成若干个子过程,同时可以把多个Map/Reduce任务组合成一个较大的DAG任务,减少了Map/Reduce之间的文件存储。

Spark

Apache Spark是一个快速的, 多用途的集群计算系统, 相对于 Hadoop MapReduce 将中间结果保存在磁盘中, Spark 使用了内存保存中间结果, 能在数据尚未写入硬盘时在内存中进行运算,同时Spark提供SQL 支持。

Spark 实现了一种叫做 RDDs 的 DAG 执行引擎, 其数据缓存在内存中可以进行迭代处理。

Linux安装Hive

安装Hive,确保已安装Mysql数据库和Hadoop

下载Hive

进入官网: https://archive.apache.org/dist/hive/,选择与Hadoop匹配的版本进行下载

wget https://archive.apache.org/dist/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz

解压及重命名

tar -zxvf apache-hive-3.1.3-bin.tar.gz

mv apache-hive-3.1.2-bin hive

cd hive/conf

hiveenvsh_79">配置hive-env.sh

cp hive-env.sh.template hive-env.sh

vim hive-env.sh

修改Hadoop安装位置及Hive的配置目录、Lib目录

# Set HADOOP_HOME to point to a specific hadoop install directory
 HADOOP_HOME=/usr/local/program/hadoop

# Hive Configuration Directory can be controlled by:
 export HIVE_CONF_DIR=/usr/local/program/hive/conf
 
# Folder containing extra libraries required for hive compilation/execution can be controlled by:
 export HIVE_AUX_JARS_PATH=/usr/local/program/hive/lib

hivesitexml_97">创建hive-site.xml

cp hive-default.xml.template hive-site.xml

vim hive-site.xml

删除多余的配置文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <!-- 数据库相关配置 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://node001:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
    </property>
    <property>
        <name>datanucleus.schema.autoCreateAll</name>
        <value>true</value>
    </property>
    <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>
    <!-- hive server -->
    <property>
        <name>hive.server2.webui.host</name>
        <value>node001</value>
    </property>
    <property>
        <name>hive.server2.webui.port</name>
        <value>10002</value>
    </property>
    <!-- 数据存储位置 -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/hive/warehouse</value>
    </property>
</configuration>    

配置日志

cp hive-log4j2.properties.template hive-log4j2.properties

vim hive-log4j2.properties

	property.hive.log.dir = /usr/local/program/hive/logs

mkdir -p /usr/local/program/hive/logs	

添加驱动包

下载Mysql驱动包,放到到hive的lib目录

wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar

cp  mysql-connector-java-5.1.49.jar /usr/local/program/hive/lib

查看Hadoop与Hive分别的guava本版

ls hadoop/share/hadoop/common/lib/guava-*.jar
ls hadoop/share/hadoop/hdfs/lib/guava-*.jar

ls hive/lib/guava-*.jar

若版本差异过大或运行中出现异常:
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V

删除低版本的那个,将高版本的复制到低版本目录下

cp /usr/local/program/hadoop/share/hadoop/common/lib/guava-*.jar  hive/lib/

配置环境变量

vim /etc/profile

export HIVE_HOME=/usr/local/program/hive
export PATH=$HIVE_HOME/bin:$PATH

source /etc/profile:使配置生效

初始化数据库

初始化数据库:schematool -dbType mysql -initSchema

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/program/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/program/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL:        jdbc:mysql://172.29.234.1:3306/hive?createDatabaseIfNotExist=true&useSSL=false
Metastore Connection Driver :    com.mysql.jdbc.Driver
Metastore connection User:       root
Starting metastore schema initialization to 3.1.0
Initialization script hive-schema-3.1.0.mysql.sql



Initialization script completed
schemaTool completed

启动Hive

[root@administrator bin]# hive
which: no hbase in (:/usr/local/program/hadoop/bin:/usr/local/program/hadoop/sbin:/usr/local/jdk1.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/program/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/program/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Hive Session ID = 83605e87-918d-455d-81cf-c8d9ba2348cc

Logging initialized using configuration in file:/usr/local/program/hive/conf/hive-log4j2.properties Async: true
Hive Session ID = 92dccb9f-0514-4949-9e03-38b634bb33c0
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive (default)> show databases;
OK
database_name
dbazkaban
dbsqoop
default
myhive
Time taken: 1.057 seconds, Fetched: 4 row(s)
hive (default)>

Hive的交互方式

hive_246">使用bin/hive

shell交互Hive,用命令hive启动一个hive的shell命令行

cd /usr/local/hive

bin/hive

hiveServer2_253">使用hiveServer2

Hive启动为一个服务器,对外提供服务,其他机器通过客户端通过协议连接到服务器,完成访问操作,官方推荐交互方式

启动服务端

cd /usr/local/hive
bin/hive --service hiveserver2

cd /usr/local/hive/bin 
nohup hiveserver2 > /dev/null 2>&1 &

新开窗口,启动客户端进行连接

bin/beeline
!connect jdbc:hive2://IP:10000

输入用户名与密码进行连接

or

beeline -u jdbc:hive2://node001:10000 -n root

使用sql语句或者sql脚本

直接执行hive的hql语句

bin/hive -e "create database if not exists myhive;"

hive -f 执行sql脚本

vim hive.sql

create database if not exists myhive;
use myhive;
create tb_test(id int,name string);
hive -f ./hive.sql

Hive集群搭建

节点metastorehiveserver2client
node001**
node002*
node003*

安装一个单节点Hive

参考上述操作搭建一个单节点Hive

分发Hive到其他节点

[root@node001 program]# scp -r hive node002:/usr/local/program/
[root@node001 program]# scp -r hive node003:/usr/local/program/

[root@node001 program]# scp /etc/profile node002:/etc/
[root@node001 program]# scp /etc/profile node003:/etc/

source /etc/profile

修改分发节点配置文件

vim conf/hive-site.xml

<configuration>
    <!-- 数据存储位置 -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/hive/warehouse</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>
    <!--metastore的schema一致性的校验-->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
    <property>
        <name>datanucleus.schema.autoCreateAll</name>
        <value>true</value>
    </property>
    <!--指定hive.metastore.uris的port-->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://node001:9083</value>
    </property>
</configuration>

启动Hive集群

启动Hadoop集群:start-all.sh

初始化数据库:schematool -dbType mysql -initSchema

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/program/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/program/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL:        jdbc:mysql://172.29.234.1:3306/hive?createDatabaseIfNotExist=true&useSSL=false
Metastore Connection Driver :    com.mysql.jdbc.Driver
Metastore connection User:       root
Starting metastore schema initialization to 3.1.0
Initialization script hive-schema-3.1.0.mysql.sql



Initialization script completed
schemaTool completed

启动Hive

hive --service metastore
hive --service metastore -p 9083

nohup hive --service metastore > /dev/null 2>&1 &

hive

启动HiveServer2

hiveserver2

nohup hiveserver2 > /dev/null 2>&1 &

beeline -u jdbc:hive://node001:10000 -n root

http://www.niftyadmin.cn/n/876139.html

相关文章

分布式数据同步工具之DataX Web的基本使用

分布式数据同步工具之DataX Web的基本使用DataX Web架构环境要求安装方式部署安装1.解压安装包2.执行一键安装脚本3.数据库初始化4.其他配置5.启动服务6.查看服务7.运行项目8.运行日志9.集群部署功能使用1.创建项目2.执行器配置3.创建数据源4.创建任务模版5. 构建JSON脚本6.批量…

阿里云异构数据源离线同步工具之DataX

阿里云异构数据源离线同步工具之DataXDataXDataX概述框架设计插件体系核心架构更多介绍安装DataX系统要求下载与安装DataX基本使用1.官方演示案例2.从stream读取数据并打印到控制台查看配置模板创建作业配置文件启动DataX3.从MySQL抽取数据到HDFS获取配置模板创建作业配置文件启…

Hadoop之Hive基本操作

Hadoop之Hive基本操作Hive数据库操作创建数据库查看数据库查看数据库详细信息切换数据库删除数据库修改数据库属性Hive数据类型基础数据类型复制数据类型Hive数据表操作数据库编码问题语法格式创建数据表查看数据表查询表类型查询表结构插入数据查询数据修改数据表删除数据表内…

Java操作Apache HBase API以及HBase和MapReduce整合

Java操作HBase API 添加依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.apache.hadoop</g…

Windows环境下安装Kafka与Linux环境下安装单机版Kafka以及搭建Kafka集群

Windows环境下安装Kafka与Linux环境下安装单机版Kafka以及搭建Kafka集群Windows安装Kafka下载与安装配置启动Zookeeper启动Kafka测试快速启动脚本Linux安装单机版Kafka下载与安装配置添加环境变量启动内置zookeeper启动Kafka快速启动脚本Kafka常用操作命令创建Topic查看队列分区…

Jenkins的四种安装部署方式以及Jenkins的基本配置与基本使用

Jenkins的四种安装部署方式以及Jenkins的基本配置与基本使用安装Jenkins1.yum安装Jenkins下载与安装修改配置修改默认端口2.基于War包的形式部署Jenkins安装Tomcat开启Tomcat的管理下载jenkins启动Tomcat3.java -jar方式启动Jenkins4.Docker安装Jenkins拉取Jenkins镜像查看Jenk…

Jenkins构建状态邮件通知以及Jenkins结合Gitee、Github、Gitlab、SVN自动构建部署

Jenkins构建状态邮件通知以及Jenkins结合Gitee、Github、Gitlab、SVN自动构建部署Curl命令触发自动构建配置构建触发器获取crumb值生成API TOKEN生成crumb值curl命令触发自动构建curl命令说明执行测试Jenkins构建状态邮件通知邮箱配置配置系统管理员的邮箱地址配置邮件通知邮件…

对称加密算法之DES与AES的使用

对称加密算法之DES与AES的使用对称加密DES的使用AES的使用Base64算法加密模式填充模式测试加密模式与填充模式对称加密 加密和解密时使用相同的密钥&#xff0c;这种加密方法称为对称加密 分类 流加密&#xff1a;按顺序一个一个加密&#xff0c;如文本&#xff1a;123456&…