天天看点

Hive架构及搭建方式Hive架构及搭建方式

< h1 id"蜂巢架构和构造方法">Hive 架构和构造方法</h1>

[目录]

< h2 id ,"前言">前言</h2>

本文档基于配置单元 3.1.2

< h2 id "hive" >hive 的基础知识</h2>

< h3 id,"基本架构">基本架构</h3>

Hive架构及搭建方式Hive架构及搭建方式

整个 hpe 由 hpeserver2 和 hpe 客户端组成

有三种类型的蜂巢客户端,直线,使用jdbc链接蜂巢服务器,或使用蜂巢CLI(这已经过时了,蜂巢官员不再推荐,推荐直行)

Hive 服务器本身由 hiv server2 和 metastore 组成

元存储是配置单元的元数据管理组件

hcatalog 在元存储上设置,公开一组 API,允许其他框架(如 Pig)使用实时元数据管理功能从表的角度管理数据

Webchat是基于hcatalog的公开的宁静界面

蜂巢的实际数据存储在hadoop的hodfs中

Hue为用户提供了一种基于sql的开发的图形化方式,当然还有其他附加功能<h3 id""metastore">元存储</h3>蜂巢数据基本上存储在hdffs中。如何从表的角度看数据,这是元存储的功劳,它存储了表的架构信息、序列化信息、存储位置信息等

元存储本身由两部分组成

元存储服务器

metatore db

这种经典的架构,就像任何单体java应用程序一样,服务器本身就是应用程序,db来存储数据。但整体上有三种特定的元存储部署模式

< h4 id,"内联服务和数据库">嵌入式服务和数据库</h4>

Hive架构及搭建方式Hive架构及搭建方式

Metastore 服务器和 metatastore DB 与 hive 服务器一起内联部署,其中 metastore DB 使用嵌入式 Derby 数据库启动

< h4 id - 内联服务>内联服务</h4>

Hive架构及搭建方式Hive架构及搭建方式

元存储服务器仍与配置单元一起部署。但是元存储数据库使用一个单独的Mysql来承担

< h4 id"服务和数据库单独部署">服务和数据库单独部署</h4>

Hive架构及搭建方式Hive架构及搭建方式

除了数据库独立部署之外,元存储服务本身也是独立部署的

<h3 id="hcatalog">hcatalog</h3>

Hive架构及搭建方式Hive架构及搭建方式

演示

上面的命令首先将文件复制到 hdfs,然后使用 hatalog 作为表 rawevents 的新分区

<客户端> h3 id"客户端"</h3>

< h4 id"客户端的本地模式">客户端的本地模式</h4>

上面描述的元存储的嵌入或远程部署是从 hiveserver 的角度出发的。Hiveserver 本身是一个独立的部署。但是,对于实时客户端,您可以通过远程模式连接到已部署的远程服务器。您还可以使用本地实时服务器及其相应的元存储启动客户端。找出答案很重要

<h4 id="beeline">beeline</h4>

作为hive推荐的下一代客户端。他使用Thrift远程通话。直线的本地模式

直线的本地模式

本地和远程之间的区别在于是否指定远程主机和端口。如果不是,则为本地模式

< h4 id"直线自动模式">直线自动模式</h4>

每次通过直线连接到远程 hpeserver 时,都需要指定一个较长的 jdbc url,这很麻烦,如果我们想点击直线命令,请直接连接到远端的 liveserver2,可以将其添加到实时配置文件目录中

<code>蜜蜂网站.xml</code>

配置文件,文件的内容大致如下

有两种方法可以配置直线连接和特定的 jdbc 连接字符串。一个使用 tcp,一个使用 http。默认情况下使用 Tcp

<h4 id="jdbc">jdbc</h4>

Jdbc 链接配置单元还有两种模式

对于远程服务器,URL 格式为

&lt;code&gt;jdbc:hive2://&lt;host&gt;:&lt;port&gt;/&lt;db&gt;; initFile=&lt;file&gt;&lt;/code&gt;

(HiveServer2 的默认端口为 10000)。

对于嵌入式服务器,URL 格式为

&lt;code&gt;jdbc:hive2:///; initFile=&lt;file&gt;&lt;/code&gt;

(无主机或端口)。

< h2 id"部署"的>部署</h2>

蜂巢的全面部署涉及五个组件,主要是前三个组件

元存储的部署

部署蜂巢服务器2

客户端的部署

部署 hcatalog 服务器(不是必需的)

部署 webhcat 服务器(不需要)

1,2个中的一个可以放在一起,即lifeverver2嵌入式元存储,只是METAstore DB,挂在Mysql上。

特别是在物理服务器上,上述三个组件可以部署到三台不同的计算机上,尽管 hp 客户端通常位于多台计算机上。

所有三个组件的配置都可以是实时站点.xml,但配置内容不一定相同。例如,需要配置 liveserver2、元数据库连接信息,但 clin 不需要此信息。

除了实时站点.xml之外,hive 还支持在其他几个位置进行配置

在命令启动时传递

<code>--蜂巢</code>

参数,指定自定义配置,例如

<code>bin/hive --hiveconf hive.exec.scratchdir=/tmp/mydir</code>

与元存储相关的配置在 hivemetastore-site .xml 文件中指定

hiveserver2 的独占配置在 liveserver2 站点.xml中指定。

当这些路径和配置文件具有相同的配置时,配置单元识别优先级如下所示,从左到右,将配置单元站点.xml -&gt; hivemetastore-site .xml -&gt; hiveserver2-site .xml -&gt;'-hiveconf'

因此,最佳配置策略是:

在实时站点.xml中配置,hiveserver2 和 hive 客户端客户端共享一个配置,从而可以轻松地将配置直接分发到多台计算机

将与元存储相关的配置放在 hivemetastore-site .xml。与元数据库相关的配置(仅存在于元服务器部署的计算机上)不会在四个分区中颁发数据库密码

将 hiveserver2 的唯一配置放在 liveserver2 站点.xml

< h3 id " "Deployiveserver2" > deploy hivserver2</h3>

以下配置以嵌入式元存储服务器(远程元存储数据库)的形式进行配置,用于生命服务器部署

在需要部署配置单元的计算机上。创建一个真实账户,

<code>添加用户配置单元</code>

并将其添加到hadoop组中,所有后续配置和启动都由蜂巢用户执行

下载实时安装包。删除 conf 下的单个模板文件,并根据需要对其进行配置。配置单元默认值.xml.template 需要更改为实时站点.xml

配置单元默认.xml.template 包含所有配置单元组件的默认配置。

详细的部署文档:https://cwiki.apache.org/confluence/display/Hive/AdminManual+Configuration#AdminManualConfiguration-HiveMetastoreConfigurationVariables

<h4 id"在 hdfs 中创建实时数据存储路径"> hdfs 中创建配置单元数据存储路径</h4>

在 hdfs 中创建以下文件,并向配置单元所属的组授予写入权限

/user/hive/warehouse 是实际存储配置单元中表数据的位置。这是默认路径,您当然可以在实时站点.xml

<code>hive.metastore.warehouse.dir</code>

用于指定新路径的属性

< h4 id"配置配置配置环境变量></h4>

< h4 id ,配置日志输出路径>配置日志输出路径</h4>

配置单元的默认输出路径为

&lt;code&gt;/tmp/&lt;user.name&gt;/hive.log&lt;/code&gt;

如果我们从蜂巢用户开始,则路径为

<code>/tmp/hive/hive.log</code>

/tmp 路径是 linux 用于存储每个应用程序的运行时的中间状态数据,通常在操作系统重新启动后自动清理。当然,您可以修改实时log4j文件以指定

&lt;code&gt;hive.log.dir=&lt;other_location&gt;&lt;/code&gt;

路径

您还可以动态地通过 liveconf 参数在启动 liveserver2 时指定路径

<code>bin/hiveserver2 --hiveconf hive.root.logger=INFO,DRFA</code>

< h4 id""hive" >hive 的临时文件配置</h4>

hive 运行时还会在本地和 hdfs 中存储临时文件(称为暂存文件)。存储的文件路径为 hdfs:

&lt;code&gt;/tmp/hive-&lt;用户名&gt;&lt;/code&gt;

当地:

&lt;code&gt;/tmp/&lt;用户名&gt;&lt;/code&gt;

值得注意的是,蜂巢站点.xml模板,有许多路径配置

<code>${java.io.tmpdir}/${user.name}/</code>

<code>${java.io.tmpdir}</code>

此配置的缺省值是使用临时目录(通常在 linux 下)获取 Java

<code>/吨/吨</code>

<code>${user.name}</code>

表示正在采用当前启动配置单元的用户。如果未具体指定,则可以删除相应的配置项目。并且不要直接在配置中编写

在 xml 中无法识别这些占位符。

<h4 id"配置元存储的数据库信息,并初始化>配置元存储的数据库信息并对其进行初始化</h4>

在与.xml对应的目录中,为指定人员创建一个.xml文件,以配置元存储相关信息

Hive架构及搭建方式Hive架构及搭建方式

初始化元存储数据库

dbType 的值可以在哪里

<code>derby, oracle, mysql, mssql, postgres</code>

参考 https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administration

<h4 id""start liveserver2" > start hiveserver2</h4>

上述命令针对前台运行,最好是在无挂断加后台模式下运行

启动后 hpe 的 Web 界面的端口为:10002

< h3 id,"基本客户端部署">基本客户端部署</h3>

< h4 id"包分发">包分发</h4>

将上述带有配置的hpe发包复制到需要启动直线的机器上,即完成客户端的配置。配置文件只需要实时站点的.xml,根据特定的机器环境修改相应的路径配置信息,并且不需要 livemetastore-site .xml 和 hiveserver2-site 的.xml文件

< h4 id ,"环境变量配置">环境变量配置</h4>

< h4 id,"日志路径配置">日志路径配置</h4>

与 lifeerver 一样,根据具体情况进行一些路径配置修改

< h4 id"开始">开始</h4>

<code>$HIVE_HOME/bin/beeline -u jdbc:hive2://$HS 2_HOST:$HS 2_PORT</code>

你可以连接到liveerver2。

由于 hpe 在 hdfs 中使用的目录,因此默认值为

<code>/用户/配置单元/仓库</code>

,因此,为了避免与权限相关的错误,您需要通过直线添加链接

<code>-n</code>

参数,指定当前客户端正在使用的用户。用户必须

而它下面的文件的相关权限,如果不需要单独添加的话。权限模型,类似于 Linux。如果存在权限问题,则一般错误类似

具有用户名的链接采用以下形式:

这是蜂巢用户到蜂巢服务器的链接

Beeline 将文档作为一个整体使用:https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients

<h3 id"蜂巢服务器高可用性部署">hiveserver 高可用性部署</h3>

< h4 id,"服务端配置">端配置</h4>

在需要启动 hiverserver 的所有计算机上,配置 liveserver2-site .xml。其中有以下配置

还要记住,需要部署的计算机都具有相同的元存储配置,确保它们连接到相同的mysql,并且livemetastore-site.xml配置可以复制到需要启动lifeerver的多台计算机上

参考资料: http://lxw1234.com/archives/2016/05/675.htm

< h4 id - "客户端连接">客户端连接</h4>

与直线的连接如下:

请注意,其中的 jdbc 网址必须用引号括起来

< h3 id - "认证">认证</h3>

此处选择 Kerberos 作为身份验证选项。需要配置的三个配置项如下:

<h4 id"在kerberos认证后使用直线链接方法">在kerberos认证后使用直线链接方法</h4>

在使用上述命令之前,可以保证当前机器的 kerberos 认证已通过 kinit 实现。"无直线"命令将报告错误,因为未获取 Kerberos 认证票证。

该命令会自动读取当前登录的 kerberos 用户信息,该信息在执行命令时随您一起获取

例如,当前的 kerberos tgt 是测试用户,则与所有者对应的 hivesql 就是测试。实际组件之间的通信身份验证由实时/[email protected] 用户使用。但是,将控制授权的粒度以进行测试。

此功能由 hpe 配置

<code>hive.server2.enable.doAs</code>

要控制的属性(当该属性为 true 时)表示运行以将用户提交为最终 sql 执行的用户

另外,我们最好在蜂巢服务器的配置文件中

<code>hive.server2.allow.user.substitution</code>

关闭为 false。由于此选项,允许用户使用

该参数指定用户。这会导致一个用户使用自己的 kerberos 凭据操作其他人的库表。但是,禁用时,Hue 无法将其登录用户设为提交作业的人员。

<h3 id"基于实时站点xml的客户端连接">基于实时站点.xml的客户端连接</h3>

上述记录以 jdbc 实现的方式连接到 hpeserver2。但是,某些依赖于 hpe 的程序只能通过.xml以这种方式连接到 hiveserver。典型色调

顺化会走

<code>${HIVE_CONF_DIR}</code>

环境变量或

<code>/etc/hive/conf</code>

往下看

<code>网站.xml</code>

<code>蜜蜂-hs2-连接.xml</code>

两个配置文件,读取其中的信息,实现与生命服务器的连接。

如果群集配置了 kerberos,则需要在实时站点.xml中对其进行配置,例如,与 liveserver2-site .xml相同的 kerberos 身份验证配置

与 hue 使用直线连接一样,您也可以配置 beeline-hs2 连接.xml,您可以在其中指定一些连接到 hiveserver2 的代理用户信息,但当前未发现该配置仍然可用。如下:

< h3 id ,"一些错误">一些错误</h3>

< h4 id"错误 1-番石榴">错误 1 番石榴</h4>

初始化元存储架构是一个错误

原因是hadoop路径

<code>share/hadoop/common/lib/</code>

下面的番石榴包与 live lib 下的番石榴包版本不一致。

解决方案是删除hpe的番石榴包,并将hadoop的相应番石榴包复制过来

<h4 id"错误2,mysql驱动器">错误2,mysql驱动器</h4>

问题的原因,蜂巢缺乏mysql驱动器

解决方案是下载一个mysql驱动程序并将其安装在实时库下

< h4 id"错误 3">错误 3</h4>

使用直线客户端时:

<code>beeline -u jdbc:hive2://master:10000</code>

链接,蜂巢服务器 2,报告了以下错误

我们是由蜂巢用户启动的 hpeserver2。因此,所有客户端,无论是否以书面形式链接到 hpeserver2,最终都会使用 hiveserver2 来访问 hadoop 集群,所有这些客户端都由 hive 的用户访问。

但是,如果你不在hadoop中,做相关的配置,那么hadoop默认不允许用户将集群作为其他用户的代理用户,所以你需要在hadoop的代码站点.xml做以下配置。

< h2 id , "资源" > 参考文献</h2>

https://cwiki.apache.org/confluence/display/Hive/GettingStartedhttps://cwiki.apache.org/confluence/display/Hive/HCatalog+InstallHCathttps://stackoverflow.com/questions/22533814/what-is-use-of-hcatalog-in-hadoophttps://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients

欢迎来到我的个人公众号"西北UP",记录代码生活,行业思考,科技评论