Linux安装Hive数据仓库工具

小柒博客
小柒博客
小柒博客
396
文章
123
评论
2020-12-0313:48:46
评论
18K6 8217字阅读27分23秒

1、Hive入门教程

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,并使得查询和分析方便。

在Hive中,Hive是SQL解析引擎,它将SQL语句转译成M/R Job然后在Hadoop执行。Hive的表其实就是HDFS的目录/文件,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/RJob里使用这些数据。

最初,Hive是由Facebook开发,后来由Apache软件基金会开发,并作为进一步将它作为名义下ApacheHive为一个开源项目。它用在好多不同的公司。例如,亚马逊使用它在Amazon Elastic、MapReduce。

1)Hive原理图

Linux安装Hive数据仓库工具

2)Hive系统架构

Hive系统架构图:

  • 用户接口:

CLI,即Shell命令行。

JDBC/ODBC是Hive的Java,与使用传统数据库JDBC的方式类似。

WebGUI是通过浏览器访问Hive。

Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++,Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript,Node.js, Smalltalk, and OCaml这些编程语言间无缝结合的、高效的服务。

解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。

Hive的数据存储在HDFS中,大部分的查询由MapReduce完成(包含*的查询,比如select *from table不会生成MapRedcue任务)。

Hive将元数据存储在数据库中(metastore),目前只支持mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

  • Metastore组件

Hive的Metastore组件是Hive元数据集中存放地。Metastore组件包括两个部分:Metastore服务和后台数据的存储。后台数据存储的介质就是关系数据库,例如Hive默认的嵌入式磁盘数据库derby,还有mysql数据库。Metastore服务是建立在后台数据存储介质之上,并且可以和Hive服务进行交互的服务组件,默认情况下,Metastore服务和Hive服务是安装在一起的,运行在同一个进程当中。我也可以把Metastore服务从Hive服务里剥离出来,Metastore独立安装在一个集群里,Hive远程调用Metastore服务,这样我们可以把元数据这一层放到防火墙之后,客户端访问Hive服务,就可以连接到元数据这一层,从而提供了更好的管理性和安全保障。使用远程的Metastore服务,可以让Metastore服务和hive服务运行在不同的进程里,这样也保证了Hive的稳定性,提升了Hive服务的效率。

Hive的执行流程如下图所示:

Linux安装Hive数据仓库工具

3)前置条件

Hive是建立Hadoop环境安装之上的,所以需要Hadoop的集群环境搭建,Hive即需要依赖于HDFS又需要依赖YARN。安装好Hadoop后需要进行启动HDFS和YARN。

环境安装参考资料:Linux搭建Hadoop-2.7.2分布式集群

环境安装参考资料:

1、Hive下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.7/apache-hive-2.3.7-bin.tar.gz

2、Hadoop和Hbase版本关系表:

Hive版本

Hadoop版本

Hive-2.3.0

2.x.y

Hive-2.2.0

2.x.y

Hive-2.1.1

2.x.y

Hive-2.1.0

2.x.y

Hive-2.0.0

2.x.y

Hive-1.2.2

1.x.y、2.x.y

Hive-1.2.1

1.x.y、2.x.y

Hive-1.1.1

1.x.y、2.x.y

Hive-1.0.1

1.x.y、2.x.y

Hive-1.0.0

1.x.y、2.x.y

Hive-0.13.1

0.20.x.y、0.23.x.y、1.x.y、2.x.y

Hive-0.13.0

0.20.x.y、0.23.x.y、1.x.y、2.x.y

Hive-0.12.0

0.20.x.y、0.23.x.y、1.x.y、2.x.y

Hive-0.11.0

0.20.x.y、0.23.x.y、1.x.y、2.x.y

Hive-0.10.0

0.20.x.y、0.23.x.y、1.x.y、2.x.y

4)安装Hive

1、下载Hive安装包

[root@node1 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.7/apache-hive-2.3.7-bin.tar.gz

2、解压Hive安装包

[root@node1 ~]# tar xf apache-hive-2.3.7-bin.tar.gz

[root@node1 ~]# mv apache-hive-2.3.7-bin /usr/local/hive

[root@node1 ~]# ls -l /usr/local/hive/

total 56

drwxr-xr-x 3 root root 133 Dec 3 10:56 bin

drwxr-xr-x 2 root root 4096 Dec 3 10:56 binary-package-licenses

drwxr-xr-x 2 root root 4096 Dec 3 10:56 conf

drwxr-xr-x 4 root root 34 Dec 3 10:56 examples

drwxr-xr-x 7 root root 68 Dec 3 10:56 hcatalog

drwxr-xr-x 2 root root 44 Dec 3 10:56 jdbc

drwxr-xr-x 4 root root 12288 Dec 3 10:56 lib

-rw-r--r-- 1 root root 20798 Mar 10 2020 LICENSE

-rw-r--r-- 1 root root 230 Apr 8 2020 NOTICE

-rw-r--r-- 1 root root 361 Apr 8 2020 RELEASE_NOTES.txt

drwxr-xr-x 4 root root 35 Dec 3 10:56 scripts

注解:

bin:包含hive的命令shell脚本

binary-package-licenses:包含了LICENSE说明文件

conf:包含hive配置文件

examples:包含了示例

hcatalog:Metastore操作的元数据目录

jdbc:提供了hive-jdbc-2.3.0-standalone.jar包

scripts:提供了sql脚本

3、配置环境变量

[root@node1 ~]# vim /etc/profile

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

4、执行命令source /etc/profile使其生效

[root@node1 ~]# source /etc/profile

5、配置Hive

[root@node1 ~]# cd /usr/local/hive/conf

[root@node1 conf]# cp hive-default.xml.template hive-site.xml

# 新建HDFS目录

[root@node1 conf]# hadoop fs -mkdir -p /data/hive/warehouse

[root@node1 conf]# hadoop fs -mkdir -p /data/hive/tmp

[root@node1 conf]# hadoop fs -mkdir -p /data/hive/log

[root@node1 conf]# hadoop fs -chmod -R 777 /data/hive/warehouse

[root@node1 conf]# hadoop fs -chmod -R 777 /data/hive/tmp

[root@node1 conf]# hadoop fs -chmod -R 777 /data/hive/log

# 用以下命令检查目录是否创建成功

[root@node1 conf]# hadoop fs -ls /user/hive

Found 3 items

drwxrwxrwx - root supergroup 0 2020-12-03 13:36 /data/hive/log

drwxrwxrwx - root supergroup 0 2020-12-03 13:34 /data/hive/tmp

drwxrwxrwx - root supergroup 0 2020-12-03 13:36 /data/hive/warehouse

6、修改hive-site.xml

# 搜索hive.exec.scratchdir,将该name对应的value修改为/data/hive/tmp

<property>
	<name>hive.exec.scratchdir</name>
	<value>/data/hive/tmp</value>
</property>

# 搜索hive.querylog.location,将该name对应的value修改为/data/hive/log/hadoop

<property>
	<name>hive.querylog.location</name>
	<value>/data/hive/log/hadoop</value>
	<description>Location of Hive run time structured logfile</description>
</property>

# 搜索javax.jdo.option.ConnectionURL,将该name对应的value修改为Mysql的地址

<property>
	<name>javax.jdo.option.ConnectionURL</name>
	<value>jdbc:mysql://172.168.1.14:3306/hive?createDatabaseIfNotExist=true</value>
	<description>
		JDBC connectstring for a JDBC metastore.
		To use SSL toencrypt/authenticate the connection, provide
		database-specific SSL flag in theconnection URL.
		For example,jdbc:postgresql://myhost/db?ssl=true for postgres database.
	</description>
</property>

# 搜索javax.jdo.option.ConnectionDriverName,将该name对应的value修改为Mysql驱动类路径

<property>
	<name>javax.jdo.option.ConnectionDriverName</name>
	<value>com.mysql.jdbc.Driver</value>
	<description>Driverclass name for a JDBC metastore</description>
</property>

# 搜索javax.jdo.option.ConnectionUserName,将对应的value修改为Mysql数据库登录名

<property>
	<name>javax.jdo.option.ConnectionUserName</name>
	<value>hive</value>
	<description>Username touse against metastore database</description>
</property>

# 搜索javax.jdo.option.ConnectionPassword,将对应的value修改为Mysql数据库的登录密码

<property>
	<name>javax.jdo.option.ConnectionPassword</name>
	<value>123456</value>
	<description>password to useagainst metastore database</description>
</property>

# 创建tmp目录

[root@node1 conf]# mkdir ../tmp

# 把${system:java.io.tmpdir}改成/usr/local/hive/tmp

[root@node1 conf]# sed -i 's#${system:java.io.tmpdir}#/usr/local/hive/tmp#g' hive-site.xml

# 把${system:user.name}改成${user.name}

[root@node1 conf]# sed -i 's#${system:user.name}#${user.name}#g' hive-site.xml

7、修改hive-env.sh

[root@node1 conf]# mv hive-env.sh.template hive-env.sh

[root@node1 conf]# vim hive-env.sh

# 加入以下内容

HADOOP_HOME=/usr/local/hadoop-2.7.2
export HIVE_CONF_DIR=/usr/local/hive/conf

8、下载Mysql驱动包

[root@node1 conf]# cd ../lib/

[root@node1 lib]# wget https://cdn.mysql.com/archives/mysql-connector-java-5.1/mysql-connector-java-5.1.46.zip

[root@node1 lib]# unzip mysql-connector-java-5.1.46.zip

[root@node1 lib]# mv mysql-connector-java-5.1.46/mysql-connector-java-5.1.46.jar .

[root@node1 lib]# rm -rf mysql-connector-java-5.1.46 mysql-connector-java-5.1.46.zip

9、创建hive数据库及授权

[root@node1 ~]# mysql -uroot -p

mysql> create database hive;

mysql> grant all on hive_test@'%' identifide by '123456';

mysql> flush privileges;

10、初始化Mysql

[root@node1 lib]# cd ../bin

[root@node1 bin]# ./schematool -initSchema -dbType mysql

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/usr/local/hadoop-2.7.2/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLo

ggerBinder.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.168.1.14:3306/hive?createDatabaseIfNotExist=true

Metastore Connection Driver :     com.mysql.jdbc.Driver

Metastore connection User:     hive

Starting metastore schema initialization to 2.3.0

Initialization script hive-schema-2.3.0.mysql.sql

Initialization script completed

schemaTool completed

# 看到schemaTool completed表示初始化成功。

5)启动Hive

[root@node1 lib]# hive

which: no hbase in (/usr/local/jdk1.8.0_181/bin:/usr/local/jdk1.8.0_181/jre/bin:/data/mysql/bin:/usr/local/jdk1.8.0_181/bin:/usr/local/jdk1.8.0_181/jre/bin:/data/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin:/usr/local/hadoop-2.7.2/bin:/root/bin:/bin:/usr/local/hadoop-2.7.2/bin:/usr/local/hive/bin)

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/usr/local/hadoop-2.7.2/share/hadoop/common/lib/slf4j-log4j12-1.7.10.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]

Logging initialized using configuration in jar:file:/usr/local/hive/lib/hive-common-2.3.7.jar!/hive-log4j2.properties Async: true

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> show databases;

OK

default

Time taken: 0.068 seconds, Fetched: 1 row(s)

至此,Hive数据仓库搭建完毕。

继续阅读
若文章图片、下载链接等信息出错,请在评论区留言反馈,博主将第一时间更新!如果喜欢本站,请打赏支持本站,谢谢!
  • 微信号
  • 微信扫一扫加我!
  • weinxin
  • 微信公众号
  • 微信扫一扫关注我!
  • weinxin
Hive最后更新:2021-1-4
小柒博客
  • 本文由 发表于 2020-12-0313:48:46
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: