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

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

配置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

创建hive-site.xml

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

vim hive-site.xml

删除多余的配置文件



<configuration>
 
    <property>
        <name>javax.jdo.option.ConnectionURLname>
        <value>jdbc:mysql://node001:3306/hive?createDatabaseIfNotExist=true&useSSL=falsevalue>
    property>
    <property>
        <name>javax.jdo.option.ConnectionDriverNamename>
        <value>com.mysql.jdbc.Drivervalue>
    property>
    <property>
        <name>javax.jdo.option.ConnectionUserNamename>
        <value>rootvalue>
    property>
    <property>
        <name>javax.jdo.option.ConnectionPasswordname>
        <value>123456value>
    property>
    <property>
        <name>datanucleus.schema.autoCreateAllname>
        <value>truevalue>
    property>
    <property>
        <name>hive.metastore.schema.verificationname>
        <value>falsevalue>
    property>
    
    <property>
        <name>hive.cli.print.headername>
        <value>truevalue>
    property>
    <property>
        <name>hive.cli.print.current.dbname>
        <value>truevalue>
    property>
    
    <property>
        <name>hive.server2.webui.hostname>
        <value>node001value>
    property>
    <property>
        <name>hive.server2.webui.portname>
        <value>10002value>
    property>
    
    <property>
        <name>hive.metastore.warehouse.dirname>
        <value>/hive/warehousevalue>
    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的交互方式

使用bin/hive

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

cd /usr/local/hive

bin/hive

使用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集群搭建

节点 metastore hiveserver2 client
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

你可能感兴趣的:(大数据,hive,服务器,linux,hadoop,hdfs)