大数据开发工程师-第八周 第2章 数据库与数据仓库的区别


第八周 第2章 数据库与数据仓库的区别

Hive VS Mysql

1
2
3
4
5
6
7
8
9
10
11
为了加深对Hive的理解,下面我们拿Hive和我们经常使用的Mysql做一个对比

HIVE MySQL
数据存储位置 HDFS 本地磁盘
数据格式 用户定义 系统决定
数据更新 不支持(不支持修改和删除,新增) 支持(支持增删)
索引 有,但较弱,一般很少用 有,经常使用
执行 MapReduce Executor
执行延迟 高 低
可扩展性 高 低
数据规模 大 小

数据库VS数据仓库

1
2
3
4
5
6
7
8
9
10
前面我们说了Hive是一个数据仓库,咱们平时经常使用的mysql属于数据库,那数据库和数据仓库到底有什么区别呢?

下面我们来分析一下
数据库:传统的关系型数据库主要应用在基本的事务处理,例如银行交易之类的场景
数据库支持增删改查这些常见的操作。
数据仓库:主要做一些复杂的分析操作,侧重决策支持,相对数据库而言,数据仓库分析的数据规模要大得多。但是数据仓库只支持查询操作,不支持修改和删除

这些都是明面上的一些区别

其实数据库与数据仓库的本质区别就是 OLTP与OLAP 的区别
1
hive和关系数据库存储文件的系统不同,hive使用的是hadoop的HDFS(hadoop的分布式文件系统),关系数据库则是服务器本地的文件系统

OLTP VS OLAP

1
2
3
那这里的OLTO和OLAP又是什么意思呢?
OLTP(On-Line Transaction Processing):操作型处理,称为联机事务处理,也可以称为面向交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性等问题
OLAP(On-Line Analytical Processing):分析型处理,称为联机分析处理,一般针对某些主题历史数据进行分析,支持管理决策。
1
2
3
4
5
其实从字面上来对比,OLTP和 OLAP只有一个单词不一样

OLTP侧重于事务,OLAP侧重于分析

所以数据库和数据仓库的特性是不一样的,不过我们平时在使用的时候,可以把Hive作为一个数据库来操作,但是你要知道他们两个是不一样的。数据仓库的概念是比数据库要大的

Hive安装部署

1
现在我们对Hive有了基本的了解,就想使用Hive分析一下HDFS中的数据,在分析数据之前,我们需要先把Hive安装部署起来
1
2
3
4
5
6
7
8
9
10
想要安装Hive,那首先要下载Hive的安装包,进入Hive的官网,找到download下载链接

发现目前hive主要有三大版本,Hive1.x、Hive2.x、Hive3.x
Hive1.x已经2年没有更新了,所以这个版本后续基本不会再维护了,不过这个版本已经迭代了很多年了,也是比较稳定的
Hive2.x最近一直在更新
Hive3.x上次是19年8月份更新的,也算是一直在维护

那我们到底选择哪个版本呢?注意了,在选择Hive版本的时候我们需要注意已有的Hadoop集群的版本。
因为Hive会依赖于Hadoop,所以版本需要兼容才可以。
具体Hive和Hadoop的版本对应关系可以在download页面下的news列表里面看到。

image-20230319151826646

image-20230319152002818

1
2
3
4
5
6
按照这里面说的hive2.x的需要在hadoop2.x版本中运行,hive3.x的需要在hadoop3.x版本中运行。

所以在这里我们最好是使用Hive3.x的版本
那我们就下载hive-3.1.2这个版本,如果想要下载其它历史版本的话这里面还找不到,不过可以使用apache的一个通用archive地址
https://archive.apache.org/dist/hive/
在这里面就可以找到hive的所有历史版本了

hive安装

1
2
3
4
5
6
7
8
下面开始安装Hive
Hive相当于Hadoop的客户端工具,安装时不一定非要放在集群的节点中,可以放在任意一个集群客户端节点上都可以
1.下载,上传,解压(接着把下载好的hive安装包上传到bigdata04机器的/data/soft目录中,并且解压)
2.修改配置文件
需要修改配置文件,进入hive的conf目录中,先对这两个模板文件重命名

[root@bigdata04 conf]# mv hive-env.sh.template hive-env.sh
[root@bigdata04 conf]# mv hive-default.xml.template hive-site.xml
1
2
3
4
5
6
7
8
3:然后再修改这两个文件的内容
注意:在 hive-env.sh 文件的末尾直接增加下面三行内容,【根据实际的路径配置】

[root@bigdata04 conf]# vi hive-env.sh
.....
export JAVA_HOME=/data/soft/jdk1.8
export HIVE_HOME=/data/soft/apache-hive-3.1.2-bin
export HADOOP_HOME=/data/soft/hadoop-3.2.0
1
2
3
4
5
注意:在hive-site.xml文件中根据下面property中的name属性的值修改对应value的值,这些属性默认里面都是有的,所以都是修改对应的value的值即可
由于这里面需要指定Metastore的地址,Metastore我们使用Mysql,所以需要大家提前安装好

Mysql,我这里使用的是Mysql8.0.16版本,Mysql安装包会提供给大家,建议大家直接在自己的windows机器中安装Mysql即可,当然了,你在Linux中安装也可以。
我这里Mysql的用户名是root、密码是admin,在下面的配置中会使用到这些信息,大家可以根据自己实际的用户名和密码修改这里面的value的值

mysql安装

mysql安装

hive配置修改

hive-site.xml

1
2
3
下面这个ip应该错了,应该填自己主机ip;并在mysql中创建hive数据库

因为自己的的hive-site.xml文件是根据hive-default.xml.template修改来的,里面的配置很全很多,只需根据配置的key搜索,然后修改value就可以了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@bigdata04 conf]# vi hive-site.xml
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.0.10:3306/hive?serverTimezone=Asia/Shanghai<
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>admin</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/data/hive_repo/querylog</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/data/hive_repo/scratchdir</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/data/hive_repo/resources</value>
</property>

导入mysql驱动

1
2
3
4
5
注意mysql驱动包的版本,要和我们安装的版本保持一致:mysql-connector-java-8.0.16.jar

[root@bigdata04 lib]# ll (传到hive\lib目录下)
........
-rw-r--r--. 1 root root 2293144 Mar 20 2019 mysql-connector-java-8.0.16.jar

修改core-site.xml

1
2
3
4
修改bigdata01中的core-site.xml,然后同步到集群中的另外两个节点上(客户端节点不用修改)
如果不增加这个配置,使用beeline连接hive的时候会报错

注意:bigdata04这个客户端节点上不需要修改这个配置就可以了
1
2
3
4
5
6
7
8
9
[root@bigdata01 hadoop]# vi core-site.xml
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
1
2
最后建议修改一下bigdata04的hosts文件,否则这个节点上无法识别集群中节点的主机名,使用起来不方便,
顺便也修改一下bigdata01、bigdata02、bigdata03上的hosts,让这几台机器互相认识一下

image-20230319153402361

初始化Hive的Metastore

1
bin/schematool -dbType mysql -initSchema

异常

1
1.Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)
1
2
3
4
5
6
1.hadoop和hive的两个guava.jar版本不一致
两个位置分别位于下面两个目录:
- /usr/local/hive/lib/guava-19.0.jar
- /usr/local/hadoop/share/hadoop/common/lib/guava-27.0-jre.jar

直接把hive里的移走,把hadoop里的复制过来,完美解决
1
2
2.SLF4J: Found binding in [jar:file:/data/soft/apache-hive-3.1.2-bin/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLo  ggerBinder.class]
SLF4J: Found binding in [jar:file:/data/soft/hadoop-3.2.2/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
1
这两个jar不同,但方法有相同的,不用管
1
2
3
4
5
6
7
8
9
10
11
12
13
14
3.
[root@bigdata04 apache-hive-3.1.2-bin]# bin/schematool -dbType mysql -initSch
Exception in thread "main" java.lang.RuntimeException: com.ctc.wstx.exc.WstxP
at [row,col,system-id]: [3215,96,"file:/data/soft/apache-hive-3.1.2-bin/conf

但是执行之后发现报错了,提示hive-site.xml文件中的第3215行内容有问题
其实这个是原始配置文件本身就有的问题,最直接的就是把这一行直接删掉,删除之后的效果如下:其实就是把hive.txn.xlock.iow对应的description标签内容删掉,这样就可以了

<property>
<name>hive.txn.xlock.iow</name>
<value>true</value>
<description>
</description>
</property

image-20230319155219412

1
:3215
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
4.
[root@bigdata04 apache-hive-3.1.2-bin]# bin/schematool -dbType mysql -initSchema
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/data/soft/apache-hive-3.1.2-bin/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/data/soft/hadoop-3.2.2/share/hadoop/common/lib/slf4j-log4j12-1.7.25.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://192.168.206.1:3306/hive?serverTimezone=Asia/Shanghai
Metastore Connection Driver : com.mysql.cj.jdbc.Driver
Metastore connection User: root
org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.
Underlying cause: com.mysql.cj.jdbc.exceptions.CommunicationsException : Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
SQL Error code: 0
Use --verbose for detailed stacktrace.
*** schemaTool failed ***
1
2
3
4
5
6
1.打开/usr/local/hive/conf/hive-site.xml

hive配置文件hive-site.xml中ConnectionURL中加上serverTimezone=GMT就可以了。

2.<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.52.26:3306/hive</value>
1
配置文件刚才设置了,mysql中有一个hive数据库,不手动创建会报错

image-20230319155815309

1
初始化成功以后,查看本地Mysql数据库,发现会自动创建hive数据库和一堆表,看到这些就说明Metastore初始化成功了

image-20230319153813423

1
2
这样Hive就安装好了,注意了,目前针对Hive不需要启动任何进程
接下来我们就可以开始使用了。
1
原数据信息存到mysql中,具体数据存到hdfs

本文标题:大数据开发工程师-第八周 第2章 数据库与数据仓库的区别

文章作者:TTYONG

发布时间:2022年02月20日 - 12:02

最后更新:2023年04月18日 - 17:04

原始链接:http://tianyong.fun/%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88-%E7%AC%AC%E5%85%AB%E5%91%A8-%E7%AC%AC2%E7%AB%A0-%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%8E%E6%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93%E7%9A%84%E5%8C%BA%E5%88%AB.html

许可协议: 转载请保留原文链接及作者。

多少都是爱
0%