IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Hive数据仓库 -> 正文阅读

[大数据]Hive数据仓库

目录

1、Hive入门

1.1 Hive概述

1.2 Hive优缺点

1.3 Hive架构原理

1.4 Hive和数据库比较

2、Hive安装

2.1?Hive安装地址

2.2 Hive安装部署

2.3 Hive启动与使用?

3、MySQL安装

3.1 MySQL安装及配置

3.2 MySQL启动与使用

4、Hive元数据配置到MySQL

5、使用元数据服务访问Hive?

6、使用JDBC方式访问Hive

7、编写?hive?服务启动脚本

7、Hive?常用交互命令

8、Hive?其他命令操作

9、Hive?常见属性配置

9.1?Hive?运行日志信息配置

9.2?打印当前库名和表头

9.3?参数配置方式


1、Hive入门

1.1 Hive概述

????????Hive是由Facebook开源,用来对海量的数据进行提取、转化、加载。

????????Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能,本质是将HQL(Hibernate 查询语言)转化成MapReduce程序。

?注:(1)Hive处理的数据存储在HDFS。

? ? ? ? (2)Hive分析数据底层的实现是MapReduce。

? ? ? ? (3)执行程序运行在Yarn上。

1.2 Hive优缺点

? 优点:(1)避免了去写MapReduce,减少开发人员的学习成本。

(2)操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)。?

(3)Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合。

(4)Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高。

(5)Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

? 缺点:(1)Hive效率比较低,延迟较高,对于小数据量分析无优势。

(1)Hive的HQL表达能力有限,迭代式算法无法表达,数据挖掘方面不擅长。

(3)Hive在调优方面力度比较粗糙,只能根据底层的mr去调优。

(4)Hive自动生成的MapReduce作业,通常情况下不够智能化。

1.3 Hive架构原理

??

(1)用户接口:Client

CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)。

(2)元数据:Metastore

元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等。

默认存储在自带的derby数据库中,推荐使用MySQL存储Meta store。

(3)Hadoop

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

(4)驱动器:Driver

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

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

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

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

1.4 Hive和数据库比较

????????由于?Hive?采用了类似SQL?的查询语言?HQL(Hive Query Language),因此很容易将?Hive?理解为数据库。其实从结构上来看,Hive?和数据库除了拥有类似的查询语言,再无类似之处。数据库可以用在?Online?的应用中,但是Hive?是为数据仓库而设计的,清楚这一点,有助于从应用角度理解?Hive?的特性。

(1)查询语言

????????由于SQL被广泛的应用在数据仓库中,因此,专门针对Hive的特性设计了类SQL的查询语言HQL。熟悉SQL开发的开发者可以很方便的使用Hive进行开发。

(2)存储位置

????????Hive?是建立在?Hadoop?之上的,所有?Hive?的数据都是存储在?HDFS?中的。而数据库则可以将数据保存在块设备或者本地文件系统中。

(3)数据更新

????????由于Hive是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive中不建议对数据的改写,所有的数据都是在加载的时候确定好的。而数据库中的数据通常是需要经常进行修改的,因此可以使用?INSERT?INTO?…??VALUES?添加数据,使用?UPDATE?…?SET修改数据。

(4)索引

????????Hive在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,因此也没有对数据中的某些Key建立索引。Hive要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。由于?MapReduce?的引入,?Hive?可以并行访问数据,因此即使没有索引,对于大数据量的访问,Hive?仍然可以体现出优势。数据库中,通常会针对一个或者几个列建立索引,因此对于少量的特定条件的数据的访问,数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较高,决定了?Hive?不适合在线数据查询。

(5)执行延迟

????????Hive中大多数查询的执行是通过?Hadoop?提供的?MapReduce?来实现的。而数据库通常有自己的执行引擎。?Hive?在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致?Hive?执行延迟高的因素是?MapReduce框架。由于MapReduce?本身具有较高的延迟,因此在利用MapReduce?执行Hive查询时,也会有较高的延迟。相对的,数据库的执行延迟较低。当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive的并行计算显然能体现出优势。

(6)可扩展性

????????由于Hive是建立在Hadoop之上的,因此Hive的可扩展性是和Hadoop的可扩展性是一致的(世界上最大的Hadoop?集群在?Yahoo!,2009年的规模在4000?台节点左右)。而数据库由于?ACID?语义的严格限制,扩展行非常有限。目前最先进的并行数据库?Oracle?在理论上的扩展能力也只有100台左右。

(7)数据规模

????????由于Hive建立在集群上并可以利用MapReduce进行并行计算,因此可以支持很大规模的数据;对应的,数据库可以支持的数据规模较小。

2、Hive安装

2.1?Hive安装地址

(1)Hive官网地址:http://hive.apache.org/

(2)文档查看地址:https://cwiki.apache.org/confluence/display/Hive/GettingStarted

(3)下载地址:http://archive.apache.org/dist/hive/

(4)github地址:https://github.com/apache/hive

2.2 Hive安装部署

(1)把apache-hive-3.1.2-bin.tar.gz上传到linux的/opt/software目录下

(2)解压apache-hive-3.1.2-bin.tar.gz到/opt/module/目录下面

[sjk@master software]$ tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module/

(3)修改apache-hive-3.1.2-bin.tar.gz的名称为hive-3.1.2

[sjk@master module]$ mv apache-hive-3.1.2-bin hive-3.1.2

(4)修改/etc/profile.d/my_env.sh,添加环境变量

[sjk@master module]$ sudo vim /etc/profile.d/my_env.sh 

添加内容:
#HIVE_HOME 
export HIVE_HOME=/opt/module/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin

(5)重启源文件

[sjk@master module]$ source /etc/profile.d/my_env.sh

(6)解决日志jar包冲突

[sjk@master module]$ mv $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.bak

(7)初始化源数据库

[sjk@master hive-3.1.2]$ bin/schematool -dbType derby -initSchema

(8)初始化源数据库报错

原因:hadoop和hive的两个guava.jar版本不一致
两个位置分别位于下面两个目录:
/opt/module/hive/lib/
/opt/module/hadoop-3.1.3/share/hadoop/common/lib
解决方法:删除低版本的那个,将高版本的复制到低版本目录下??

[sjk@master hive-3.1.2]$ bin/schematool -dbType derby -initSchema
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
	at org.apache.hadoop.conf.Configuration.set(Configuration.java:1357)
	at org.apache.hadoop.conf.Configuration.set(Configuration.java:1338)

[sjk@master hive-3.1.2]$ ls -l /opt/module/hadoop-3.1.3/share/hadoop/common/lib | grep guava*
-rw-r--r--. 1 sjk sjk 2747878 9月  12 2019 guava-27.0-jre.jar
-rw-r--r--. 1 sjk sjk    2199 9月  12 2019 listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar

[sjk@master hive-3.1.2]$ ls -l /opt/module/hive-3.1.2/lib/ | grep guava*
-rw-r--r--. 1 root root  2308517 9月  27 2018 guava-19.0.jar
-rw-r--r--. 1 root root   971309 5月  21 2019 jersey-guava-2.25.1.jar

[root@master hive-3.1.2]$  mv /opt/module/hive-3.1.2/lib/guava-19.0.jar /opt/module/hive-3.1.2/lib/guava-19.0.bak
[root@master hive-3.1.2]$ cp /opt/module/hadoop-3.1.3/share/hadoop/common/lib/guava-27.0-jre.jar /opt/module/hive-3.1.2/lib/guava-27.0-jre.jar

2.3 Hive启动与使用?

(1)准备工作

启动hadoop:
[sjk@master ~]$ cd /opt/module/hadoop-3.1.3/
[sjk@master hadoop-3.1.3]$ ./sbin/start-dfs.sh

启动yarn:
[sjk@master hadoop-3.1.3]$ ./sbin/yarn-dfs.sh

启动zookeeper:
[sjk@master ~]$ cd /opt/module/zookeeper-3.5.7/
[sjk@master zookeeper-3.5.7]$ bin/zkServer.sh start

?(2)启动?Hive?

[sjk@master hive-3.1.2]$ bin/hive

(3)使用Hive?

hive> show databases; 
hive> show tables;
hive> create table test(id int); 
hive> insert into test values(1); 
hive> select * from test;


插入数据报错可以将hive改成本地模式: 
set hive.exec.mode.local.auto=true;


防止出错还可以在另一个窗口监控日志:
[sjk@master ~]$ cd /tmp/sjk/
[sjk@master sjk]$ ll
-rw-r--r--. 1 root sjk 517958 7月  25 11:05 hive.log
-rw-r--r--. 1 root sjk   9199 7月  24 23:08 hive.log.2021-07-24
[sjk@master sjk]$ tail -f hive.log

(4)网页查询

(5)在另一个窗口开启?Hive,在/tmp/atguigu?目录下监控?hive.log?文件

Caused by: ERROR XSDB6: Another instance of Derby may have already booted the database /opt/module/hive/metastore_db.
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)

报错原因在于?Hive?默认使用的元数据库为?derby,开启?Hive?之后就会占用元数据库,且不与 其他客户端共享数据,所以我们需要将?Hive?的元数据地址改为?MySQL。

3、MySQL安装

3.1 MySQL安装及配置

(1)检查当前系统是否安装过?MySQL,有的话需删除

[sjk@master ~]$ rpm -qa|grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64
[sjk@master ~]$ sudo rpm -e --nodeps mariadb-libs

(2)将?MySQL 安装包拷贝到/opt/software?目录下

(3)解压?MySQL 安装包

[sjk@master software]$ tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
mysql-community-embedded-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-5.7.28-1.el7.x86_64.rpm
mysql-community-test-5.7.28-1.el7.x86_64.rpm
mysql-community-common-5.7.28-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.28-1.el7.x86_64.rpm
mysql-community-client-5.7.28-1.el7.x86_64.rpm
mysql-community-server-5.7.28-1.el7.x86_64.rpm

?(4)在安装目录下执行?rpm?安装,按照顺序依次执行

[sjk@master software]$ 
sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm 
sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm 
sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm

如果?Linux?是最小化安装的,在安装?mysql-community-server-5.7.28-1.el7.x86_64.rpm?时?可能会出现如下错误,通过?yum?安装缺少的依赖,然后重新安装?mysql-community-server-5.7.28-1.el7.x86_64?即可。(yum install -y libaic)

(5)删除/etc/my.cnf?文件中?datadir?指向的目录下的所有内容

如果没有/etc/my.cnf目录 ,需再次执行sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm

如果有内容的情况下,查看?datadir?的值:

[mysqld]
# 
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

删除/var/lib/mysql?目录下的所有内容(初次安装为空目录)

[sjk@master software]$ cd /var/lib/mysql
[sjk@master software]$ sudo rm -rf ./*

(6)初始化数据库

[sjk@master mysql]$ sudo mysqld --initialize --user=mysql 

(7)查看临时生成的?root?用户的密码

[sjk@master mysql]$ sudo cat /var/log/mysqld.log

... ...

2021-07-25T05:19:12.687394Z 1 [Note] A temporary password 
is generated for root@localhost: k?.KZvoE>6_#

3.2 MySQL启动与使用

(1)启动?MySQL 服务

[sjk@master mysql]$ sudo systemctl start mysqld

(2)登录?MySQL?数据库

[sjk@master mysql]$ sudo systemctl start mysqld
[sjk@master mysql]$ mysql -uroot -p 
Enter password: 临时密码

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

(3)必须先修改?root?用户的密码,否则执行其他的操作会报错

mysql>  set password = password("123456");

(4)修改?mysql?库下的?user?表中的?root?用户允许任意?ip?连接

mysql> update mysql.user set host='%' where user='root'; 
mysql> flush privileges;

4、Hive元数据配置到MySQL

(1)将?MySQL?的?JDBC?驱动拷贝到?Hive?的?lib?目录下

[sjk@master ~]$ cp /opt/software/mysql-connector-java-5.1.27-bin.jar /opt/module/hive-3.1.2/lib

(2)配置Metastore到MySQL

[sjk@master ~]$ vim $HIVE_HOME/conf/hive-site.xml

添加以下内容:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- jdbc 连接的 URL -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/metastore?useSSL=false</value>
</property>

<?xmil version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
   <!-- jdbc 连接的 URL -->
   <property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://master:3306/metastore?useSSL=false</value>
   </property>

   <!-- jdbc 连接的 Driver-->
   <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.jdbc.Driver</value>
   </property>

   <!-- jdbc 连接的 username-->
   <property>
      <name>javax.jdo.option.ConnectionUserName</name>
      <value>root</value>
   </property>

   <!-- jdbc 连接的 password -->
   <property>
      <name>javax.jdo.option.ConnectionPassword</name>
      <value>123456</value>
   </property>

   <!-- Hive 元数据存储版本的验证 -->
   <property>
      <name>hive.metastore.schema.verification</name>
      <value>false</value>
   </property>

   <!--元数据存储授权-->
   <property>
      <name>hive.metastore.event.db.notification.api.auth</name>
      <value>false</value>
   </property>

   <!-- Hive 默认在 HDFS 的工作目录 -->
   <property>
       <name>hive.metastore.warehouse.dir</name>
       <value>/user/hive/warehouse</value>
   </property>
</configuration>

(3)登陆?MySQL

[sjk@master ~]$ mysql -uroot -p123456

(4)新建?Hive?元数据库

mysql> create database metastore; 
mysql> quit;

(5)初始化?Hive?元数据库

[sjk@master ~]$ schematool -initSchema -dbType mysql -verbose

(6)再次启动?Hive

[sjk@master hive-3.1.2]$ bin/hive

把元数据库由derby更换为MySQL后,之前的test表已经查不到了。

hive> show databases;
OK
default
Time taken: 0.815 seconds, Fetched: 1 row(s)
hive> show tables;
OK
Time taken: 0.086 seconds

当再次创建表test (此时元数据库为MySQL) ,相当于创建了到HDFS的映射,又能查到之前test的数据。

hive> create table test (id int); 
OK
Time taken: 8.067 seconds
hive> select * from test;
OK
1
Time taken: 8.092 seconds, Fetched: 1 row(s)

metastore数据库中,通过 TBLS 的 TBL_NAME=test 得到 TBL_ID=1,进而得到数据的存储路径DB_LOCATION_URL=hdfs://master:8020/user/hive/warehouse,最后查询到数据。

5、使用元数据服务访问Hive?

(1)在?hive-site.xml?文件中添加如下配置信息

<!-- 指定存储元数据要连接的地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
</property>

(2)启动?metastore(前台进程)

[root@master hive-3.1.2]# hive --service metastore
2021-07-25 18:06:50: Starting Hive Metastore Server

(3)启动?hive

[sjk@master hive-3.1.2]$ bin/hive

6、使用JDBC方式访问Hive

(1)在?hive-site.xml?文件中添加如下配置信息

    <!-- 指定 hiveserver2 连接的 host -->
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>master</value>
    </property>

    <!-- 指定 hiveserver2 连接的端口号 -->
    <property>
        <name>hive.server2.thrift.port</name>
        <value>10000</value>
    </property>

(2)启动?hiveserver2(前台进程,启动?metastore的前提下,启动?hiveserver2)

[sjk@master hive-3.1.2]$ bin/hive --service hiveserver2 
which: no hbase in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/module/jdk1.8.0_212/bin:/opt/module/hado
2021-07-26 22:39:54: Starting HiveServer2
Hive Session ID = abc767b6-2609-47c5-9d93-bc8b9a1182fe
Hive Session ID = f2f1271f-01c1-447d-9e09-62f41d10f486
Hive Session ID = 93db5e8b-9f7c-4d54-85d7-dfd81d32a530
Hive Session ID = 6b5cc521-0cf3-43ea-be9d-e12d63556f69

(3)启动?beeline?客户端(多等一会,可监控日志查看过程)

[sjk@master hive-3.1.2]$ bin/beeline -u jdbc:hive2://master:10000 -n root
Connecting to jdbc:hive2://master:10000
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 3.1.2 by Apache Hive
0: jdbc:hive2://master:10000> 
0: jdbc:hive2://master:10000> show databases;
INFO  : Compiling command(queryId=root_20210726225411_0bc5550c-3d7d-4561-83b0-cb8914a8bb94): show databases
INFO  : Concurrency mode is disabled, not creating a lock manager
INFO  : Semantic Analysis Completed (retrial = false)
INFO  : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:database_name, type:string, comment:from deserializer)], properties:null)
INFO  : Completed compiling command(queryId=root_20210726225411_0bc5550c-3d7d-4561-83b0-cb8914a8bb94); Time taken: 0.013 seconds
INFO  : Concurrency mode is disabled, not creating a lock manager
INFO  : Executing command(queryId=root_20210726225411_0bc5550c-3d7d-4561-83b0-cb8914a8bb94): show databases
INFO  : Starting task [Stage-0:DDL] in serial mode
INFO  : Completed executing command(queryId=root_20210726225411_0bc5550c-3d7d-4561-83b0-cb8914a8bb94); Time taken: 0.26 seconds
INFO  : OK
INFO  : Concurrency mode is disabled, not creating a lock manager
+----------------+
| database_name  |
+----------------+
| default        |
+----------------+
1 row selected (1.051 seconds)

此时已经可以用外部工具如IDEA等访问Hive。

7、编写?hive?服务启动脚本

(1)前台启动的方式导致需要打开多个?shell?窗口,可以使用如下方式后台方式启动

nohup:??放在命令开头,表示不挂起,也就是关闭终端进程也继续保持运行状态

/dev/null:是?Linux?文件系统中的一个文件,被称为黑洞,所有写入改文件的内容?都会被自动丢弃

2>&1?: ?表示将错误重定向到标准输出上

&:??放在命令结尾,表示后台运行

一般会组合使用:?nohup [xxx?命令操作]>?file 2>&1?&,表示将?xxx?命令运行的结?果输出到?file?中,并保持命令启动的进程在后台运行。

[sjk@master hive-3.1.2]$ nohup hive --service metastore 2>&1 &
[sjk@master hive-3.1.2]$ nohup hive --service hiveserver2 2>&1 &

(2)为了方便使用,可以直接编写脚本来管理服务的启动和关闭

[sjk@master hive-3.1.2]$ vim $HIVE_HOME/bin/hiveservices.sh

hiveservices.sh内容如下:?

#!/bin/bash 
HIVE_LOG_DIR=$HIVE_HOME/logs 
    [[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
    [ -z "$metapid" ] && eval $cmd || echo "Metastroe 服务已启动" 
    server2pid=$(check_process HiveServer2 10000)
    cmd="nohup hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
}

function hive_start()
{
    metapid=$(check_process HiveMetastore 9083)
    cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1&"
    [ -z "$metapid" ] && eval $cmd || echo "Metastroe 服务已启动" 
    server2pid=$(check_process HiveServer2 10000)
    cmd="nohup hive --service  hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
    [ -z "$server2pid" ] && eval $cmd || echo "HiveServer2 服务已启动"
}

function hive_stop()
{
    metapid=$(check_process HiveMetastore 9083)
    [ "$metapid" ] && kill $metapid || echo "Metastore 服务未启动" 
    server2pid=$(check_process HiveServer2 10000)
    [ "$server2pid" ] && kill $server2pid || echo "HiveServer2 服务未启动"
}

case $1 in 
"start")
    hive_start
    ;;
"stop")
    hive_stop
    ;;
"restart")
    hive_stop 
    sleep 2 
    hive_start
    ;;
"status")
    check_process HiveMetastore 9083 >/dev/null && echo "Metastore 服务运行 正常" || echo "Metastore 服务运行异常"
    check_process HiveServer2 10000 >/dev/null && echo "HiveServer2 服务运 行正常" || echo "HiveServer2 服务运行异常"
    ;;
*)
    echo Invalid Args!
    echo 'Usage: '$(basename $0)' start|stop|restart|status'
    ;;
esac

(3)添加执行权限

[sjk@master hive-3.1.2]$ chmod +x $HIVE_HOME/bin/hiveservices.sh

(4)启动Hive后台服务

[sjk@master hive-3.1.2]$ bin/hiveservices.sh start
[sjk@master hive-3.1.2]$ bin/hiveservices.sh status
[sjk@master hive-3.1.2]$ ll logs/
总用量 8
-rw-r--r--. 1 sjk sjk 3577 7月  27 09:49 hiveServer2.log
-rw-r--r--. 1 sjk sjk   52 7月  27 08:48 metastore.log


[sjk@master hive-3.1.2]# bin/beeline -u jdbc:hive2://master:10000 -n root
... ...
0: jdbc:hive2://master:10000> 

为以后的方便使用,这里先把vim $HIVE_HOME/conf/hive-site.xml中的以下三条注释掉。

    <!-- 指定存储元数据要连接的地址 -->
<!--    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://master:9083</value>
        </property>
-->

    <!-- 指定 hiveserver2 连接的 host -->
<!--    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>master</value>
    </property>
-->

    <!-- 指定 hiveserver2 连接的端口号 -->
<!--    <property>
        <name>hive.server2.thrift.port</name>
        <value>10000</value>
        </property>
-->

7、Hive?常用交互命令

[sjk@master hive-3.1.2]$ bin/hive -help usage: hive
-d,--define <key=value>	Variable subsitution to apply to hive
commands. e.g. -d A=B or --define A=B
--database <databasename>	Specify the database to use
-e <quoted-query-string>	SQL from command line
-f <filename>	SQL from files
-H,--help	Print help information
--hiveconf <property=value>	Use value for given property
--hivevar <key=value>	Variable subsitution to apply to hive
commands. e.g. --hivevar A=B
-i <filename>	Initialization SQL file
-S,--silent	Silent mode in interactive shell
-v,--verbose	Verbose mode (echo executed SQL to the console)

(1)“-e”不进入?hive?的交互窗口执行?sql?语句

[sjk@master hive-3.1.2]$ bin/hive -e "select * from test;"

(2)“-f”执行脚本中?sql?语句

在/opt/module/hive-3.1.2/创建?hivef.sql?文件,文件中写入正确的?sql?语句。

[sjk@hadoop102 datas]$ vim hivef.sql 

内容如下:
show databases;
select *from text; 

执行文件中的?sql?语句并将结果写入文件中

[sjk@master hive-3.1.2]$ bin/hive -f hivef.sql 


Logging initialized using configuration in jar:file:/opt/module/hive-3.1.2/lib/hive-common-3.1.2.jar!/hive-log4j2.properties Async: true
Hive Session ID = a06c8865-9049-4d76-ba8f-e0c1337e99ab
OK
default
Time taken: 1.251 seconds, Fetched: 1 row(s)
OK
1
Time taken: 5.356 seconds, Fetched: 1 row(s)

8、Hive?其他命令操作

(1)退出?hive?窗口(ctrl+c)

hive(default)>exit; 
hive(default)>quit;

(2)在命令窗口中如何查看?hdfs?文件系统

hive> dfs -ls /;
Found 2 items
drwx-wx-wx   - sjk supergroup          0 2021-07-25 10:11 /tmp
drwxr-xr-x   - sjk supergroup          0 2021-07-25 09:05 /user

(3)查看在?hive?中输入的所有历史命令

进入到当前用户的根目录?/root?或/home/sjk,查看 .hivehistory?文件

[sjk@master ~]$ cat .hivehistory 

9、Hive?常见属性配置

9.1?Hive?运行日志信息配置

(1)Hive?的?log?默认存放在/tmp/sjk/hive.log?目录下(当前用户名下)

(2)修改?hive??log?存放日志到/opt/module/hive/logs,首先修改

hive-log4j2.properties.template?文件名称为hive-log4j2.properties,然后在?

hive-log4j2.properties?文件中修改?log?存放位置

[sjk@master ~]$ cd /opt/module/hive-3.1.2/conf/
[sjk@master conf]$ mv hive-log4j2.properties.template hive-log4j2.properties
[sjk@master conf]$ vim hive-log4j2.properties

日志存放位置:
property.hive.log.dir = /opt/module/hive-3.1.2/logs

9.2?打印当前库名表头

在?hive-site.xml?中加入如下两个配置:

    <property>
        <name>hive.cli.print.header</name>
        <value>true</value>
    </property>

    <property>
        <name>hive.cli.print.current.db</name>
        <value>true</value>
    </property>

?查看test内容:

hive (default)> select*from test;
OK
test.id
1
Time taken: 13.021 seconds, Fetched: 1 row(s)

9.3?参数配置方式

查看当前所有的配置信息

hive>set; 

参数的配置三种方式:

(1)配置文件方式?默认配置文件:

hive-default.xml?用户自定义配置文件:hive-site.xml

注意:用户自定义配置会覆盖默认配置。另外,Hive?也会读入?Hadoop?的配置,因为?Hive 是作为?Hadoop?的客户端启动的,Hive?的配置会覆盖?Hadoop?的配置。配置文件的设定对本?机启动的所有?Hive?进程都有效。

(2)命令行参数方式:

启动?Hive?时,可以在命令行添加 -hiveconf?param=value?来设定参,仅对本次?hive?启动有效。

(3)参数声明方式

可以在?HQL?中使用?SET?关键字设定参数,对本次?hive?启动有效。

hive (default)> quit;
[sjk@master hive-3.1.2]$ bin/hive -hiveconf hive.cli.print.current.db=false;
hive> select * from test;
OK
test.id
1
Time taken: 5.87 seconds, Fetched: 1 row(s)
hive> set hive.cli.print.header=false;
hive> select * from test;
OK
1
Time taken: 0.175 seconds, Fetched: 1 row(s)
hive> [root@master hive-3.1.2]# 

????????上述三种设定方式的优先级依次递增。即配置文件<命令行参数<参数声明。注意某些系 统级的参数,例如?log4j?相关的设定,必须用前两种方式设定,因为那些参数的读取在会话?建立以前已经完成了。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 07:53:02  更:2021-07-28 07:55:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 19:50:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码