为什么使用Hive?Hive提供了什么?Hive支持哪些用户

为什么使用Hive?Hive提供了什么?Hive支持哪些用户,第1张

为什么使用Hive?

为什么使用Hive?那么,在哪里使用Hive呢?在载入了60亿行(经度、维度、时间、数据值、高度)数据集到MySQL后,系统崩溃了,并经历过数据丢失。这可能部分是因为我们最初的策略是将所有的数据都存储到单一的一张表中了。后来,我们调整了策略通过数据集和参数进行分表,这有所帮助但也因此引入了额外的消耗,而这并非是我们愿意接受的。

相反,我们决定尝试使用Apache Hive技术。我们安装了Hive 0.5 + 20,使用CDHv3和Apache Hadoop(0 20 2 + 320)。CDHv3还包含有许多其他相关工具,包括Sqoop和Hue这些在我们的架构中都标识出来了,如图23-3底部所示。

我们使用Apache Sqoop转储数据到Hive中,然后通过写一个Apache OODT包装器,来使Hive按照空间/时间约束查询数据,然后将结果提供给RCMET和其他用户(图23-2中间部分显示)。RCMES集群的完整的架构如图23- 3所示。我们有5台机器,包括图中所示的一个主/从配置,通过一个运行GigE的私人网进行连接。

Hive提供了什么

Photobucket公司使用Hive的主要目标是为业务功能、系统性能和用户行为提供答案。为了满足这些需求,我们每晚都要通过Flume从数百台服务器上的MySQL数据库中转储来自Web服务器和自定义格式日志TB级别的数据。这些数据有助于支持整个公司许多组织,比如行政管理、广告、客户支持、产品开发和 *** 作,等等。对于历史数据,我们保持所有MySQL在每月的第一天创建的所有的数据作为分区数据并保留30天以上的日志文件。Photobucket使用一个定制的ETL框架来将MySQL数据库中数据迁移到Hive中。使用Flume将日志文件数据写入到HDFS中并按照预定的Hive流程进行处理。

Hive支持的用户有哪些

行政管理依赖于使用Hadoop提供一般业务健康状况的报告。Hive允许我们解析结构化数据库数据和非结构化的点击流数据,以及业务所涉及的数据格式进行读取。

广告业务使用Hive筛选历史数据来对广告目标进行预测和定义配额。产品开发无疑是该组织中产生最大数量的特定的查询的用户了。对于任何用户群,时间间隔变化或随时间而变化。Hive是很重要的,因为它允许我们通过对在当前和历史数据中运行A / B测试来判断在一个快速变化的用户环境中新产品的相关特性。

在Photobucket公司中,为我们的用户提供一流的系统是最重要的目标。从 *** 作的角度来看,Hive被用来汇总生成跨多个维度的数据。在公司里知道最流行的媒体、用户、参考域是非常重要的。控制费用对于任何组织都是重要的。一个用户可以快速消耗大量的系统资源,并显著增加每月的支出。Hive可以用于识别和分析出这样的恶意用户,以确定哪些是符合我们的服务条款,而哪些是不符合的。也可以使用Hive对一些 *** 作运行A / B测试来定义新的硬件需求和生成ROI计算。Hive将用户从底层MapReduce代码解放出来的能力意味着可以在几个小时或几天内就可以获得答案,而不是之前的数周。

Hive中的数据库

Hive中数据库的概念本质上仅仅是表的一个目录或者命名空间。然而,对于具有很多组和用户的大集群来说,这是非常有用的,因为这样可以避免表命名冲突。通常会使用数据库来将生产表组织成逻辑组。

如果用户没有显式指定数据库,那么将会使用默认的数据库default。

下面这个例子就展示了如何创建一个数据库:

hive>CREATE DATABASE financials

如果数据库financials已经存在的话,那么将会抛出一个错误信息。使用如下语句可以避免在这种情况下抛出错误信息:

hive>CREATE DATABASE IF NOT EXISTS financials

虽然通常情况下用户还是期望在同名数据库已经存在的情况下能够抛出警告信息的,但是IF NOT EXISTS这个子句对于那些在继续执行之前需要根据需要实时创建数据库的情况来说是非常有用的。

在所有的数据库相关的命令中,都可以使用SCHEMA这个关键字来替代关键字TABLE。

随时可以通过如下命令方式查看Hive中所包含的数据库:

hive>SHOW DATABASES

default

financials

hive>CREATE DATABASE human_resources

hive>SHOW DATABASES

default

financials

human_resources

如果数据库非常多的话,那么可以使用正则表达式匹配来筛选出需要的数据库名,正则表达式这个概念,将会在第6.2.3节“Like和RLike”介绍。下面这个例子展示的是列举出所有以字母h开头,以其他字符结尾(即.*部分含义)的数据库名:

hive>SHOW DATABASES LIKE 'h.*'

human_resources

hive>...

Hive会为每个数据库创建一个目录。数据库中的表将会以这个数据库目录的子目录形式存储。有一个例外就是default数据库中的表,因为这个数据库本身没有自己的目录。

数据库所在的目录位于属性hive.metastore.warehouse.dir所指定的顶层目录之后,这个配置项我们已经在前面的第2.5.1节“本地模式配置”和第2.5.2节“分布式模式和伪分布式模式配置”中进行了介绍。假设用户使用的是这个配置项默认的配置,也就是/user/hive/warehouse,那么当我们创建数据库financials时,Hive将会对应地创建一个目录/user/hive/warehouse/financials.db。这里请注意,数据库的文件目录名是以.db结尾的。

用户可以通过如下的命令来修改这个默认的位置:

hive>CREATE DATABASE financials

>LOCATION '/my/preferred/directory'

用户也可以为这个数据库增加一个描述信息,这样通过DESCRIBE DATABASE <database>命令就可以查看到该信息。

hive>CREATE DATABASE financials

>COMMENT 'Holds all financial tables'

hive>DESCRIBE DATABASE financials

financials Holds all financial tables

hdfs://master-server/user/hive/warehouse/financials.db

从上面的例子中,我们可以注意到,DESCRIEB DATABASE语句也会显示出这个数据库所在的文件目录位置路径。在这个例子中,URI格式是hdfs。如果安装的是MapR,那么这里就应该是maprfs。对于亚马逊d性MapReduce(EMR)集群,这里应该是hdfs,但是用户可以设置hive.metastore.warehouse.dir为亚马逊S3特定的格式(例如,属性值设置为s3n://bucketname...)。用户可以使用s3作为模式,但是如果使用新版的规则s3n会更好。

前面DESCRIBE DATABASE语句的输出中,我们使用了master-server来代表URI权限,也就是说应该是由文件系统的“主节点”(例如,HDFS中运行NameNode服务的那台服务器)的服务器名加上一个可选的端口号构成的(例如,服务器名:端口号这样的格式)。如果用户执行的是伪分布式模式,那么主节点服务器名称就应该是localhost。对于本地模式,这个路径应该是一个本地路径,例如file:///user/hive/warehouse/financials.db。

如果这部分信息省略了,那么Hive将会使用Hadoop配置文件中的配置项fs.default.name作为master-server所对应的服务器名和端口号,这个配置文件可以在$HADOOP_HOME/conf这个目录下找到。

需要明确的是,hdfs:///user/hive/warehouse/financials.db和hdfs://master-server/user/hive/

warehouse/financials.db是等价的,其中master-server是主节点的DNS名和可选的端口号。

为了保持完整性,当用户指定一个相对路径(例如,some/relative/path)时,对于HDFS和Hive,都会将这个相对路径放到分布式文件系统的指定根目录下(例如,hdfs:///user/<user-name>)。然而,如果用户是在本地模式下执行的话,那么当前的本地工作目录将是some/relative/path的父目录。

为了脚本的可移植性,通常会省略掉那个服务器和端口号信息,而只有在涉及到另一个分布式文件系统实例(包括S3存储)的时候才会指明该信息。

此外,用户还可以为数据库增加一些和其相关的键-值对属性信息,尽管目前仅有的功能就是提供了一种可以通过DESCRIBE DATABASE EXTENDED <database>语句显示出这些信息的方式:

hive>CREATE DATABASE financials

>WITH DBPROPERTIES ('creator' = 'Mark Moneybags', 'date' = '2012-01-02')

hive>DESCRIBE DATABASE financials

financials hdfs://master-server/user/hive/warehouse/financials.db

hive>DESCRIBE DATABASE EXTENDED financials

financials hdfs://master-server/user/hive/warehouse/financials.db

{date=2012-01-02, creator=Mark Moneybags)

USE命令用于将某个数据库设置为用户当前的工作数据库,和在文件系统中切换工作目录是一个概念:

hive>USE financials

现在,使用像SHOW TABLES这样的命令就会显示当前这个数据库下所有的表。

不幸的是,并没有一个命令可以让用户查看当前所在的是哪个数据库!幸运的是,在Hive中是可以重复使用USE…命令的,这是因为在Hive中并没有嵌套数据库的概念。

可以回想下,在第2.7.2节“变量和属性”中提到过,可以通过设置一个属性值来在提示符里面显示当前所在的数据库(Hive v0.8.0版本以及之后的版本才支持此功能):

hive>set hive.cli.print.current.db=true

hive (financials)>USE default

hive (default)>set hive.cli.print.current.db=false

hive>...

最后,用户可以删除数据库:

hive>DROP DATABASE IF EXISTS financials

IF EXISTS子句是可选的,如果加了这个子句,就可以避免因数据库finanacials不存在而抛出警告信息。

默认情况下,Hive是不允许用户删除一个包含有表的数据库的。用户要么先删除数据库中的表,然后再删除数据库;要么在删除命令的最后面加上关键字CASCADE,这样可以使Hive自行先删除数据库中的表:

hive>DROP DATABASE IF EXISTS financials CASCADE

如果使用的是RESTRICT这个关键字而不是CASCADE这个关键字的话,那么就和默认情况一样,也就是,如果想删除数据库,那么必须先要删除掉该数据库中的所有表。

如果某个数据库被删除了,那么其对应的目录也同时会被删除。

配置 Hue

配置hue server

[desktop]

http_host=cdh1

http_port=8888

secret_key=qpbdxoewsqlkhztybvfidtvwekftusgdlofbcfghaswuicmqp

time_zone=Asia/Shanghai

如果想配置 SSL,则添加下面设置:

ssl_certificate=/path/to/certificate

ssl_private_key=/path/to/key

并使用下面命令生成证书:

# Create a key

$ openssl genrsa 1024 >host.key

# Create a self-signed certificate

$ openssl req -new -x509 -nodes -sha1 -key host.key >host.cert

配置 DB Query

DB Query 的相关配置在 hue.ini 中 databases 节点下面,目前共支持 sqlite, mysql, postgresql 和 oracle 四种数据库,默认使用的是 sqlite 数据库,你可以按自己的需要修改为其他的数据库。

[[database]]

engine=sqlite3

name=/var/lib/hue/desktop.db

配置 Hadoop 参数

HDFS 集群配置

在 hadoop.hdfs_clusters.default 节点下配置以下参数:

fs_defaultfs:

logical_name: NameNode 逻辑名称

webhdfs_url:

security_enabled:是否开启 Kerberos

hadoop_conf_dir: hadoop 配置文件路径

完整配置如下:

[hadoop]

[[hdfs_clusters]]

[[[default]]]

# Enter the filesystem uri

fs_defaultfs=hdfs://mycluster

# NameNode logical name.

logical_name=mycluster

# Use WebHdfs/HttpFs as the communication mechanism.

# Domain should be the NameNode or HttpFs host.

# Default port is 14000 for HttpFs.

## webhdfs_url=http://localhost:50070/webhdfs/v1

webhdfs_url=http://cdh1:14000/webhdfs/v1

# Change this if your HDFS cluster is Kerberos-secured

security_enabled=true

hadoop_conf_dir=/etc/hadoop/conf

配置 WebHDFS 或者 HttpFS

Hue 可以通过下面两种方式访问 Hdfs 中的数据:

WebHDFS:提供高速的数据传输,客户端直接和 DataNode 交互

HttpFS:一个代理服务,方便与集群外部的系统集成

两者都支持 HTTP REST API,但是 Hue 只能配置其中一种方式;对于 HDFS HA部署方式,只能使用 HttpFS。

对于 WebHDFS 方式,在每个节点上的 hdfs-site.xml 文件添加如下配置并重启服务:

<property>

<name>dfs.webhdfs.enabled</name>

<value>true</value>

</property>

配置 Hue 为其他用户和组的代理用户。对于 WebHDFS 方式,在 core-site.xml 添加:

<!-- Hue WebHDFS proxy user setting -->

<property>

<name>hadoop.proxyuser.hue.hosts</name>

<value>*</value>

</property>

<property>

<name>hadoop.proxyuser.hue.groups</name>

<value>*</value>

</property>

对于 HttpFS 方式,在 /etc/hadoop-httpfs/conf/httpfs-site.xml 中添加下面配置并重启 HttpFS 进程:

<!-- Hue HttpFS proxy user setting -->

<property>

<name>httpfs.proxyuser.hue.hosts</name>

<value>*</value>

</property>

<property>

<name>httpfs.proxyuser.hue.groups</name>

<value>*</value>

</property>

对于 HttpFS 方式,在 core-site.xml 中添加下面配置并重启 hadoop 服务:

<property>

<name>hadoop.proxyuser.httpfs.hosts</name>

<value>*</value>

</property>

<property>

<name>hadoop.proxyuser.httpfs.groups</name>

<value>*</value>

</property>

修改 /etc/hue/conf/hue.ini 中 hadoop.hdfs_clusters.default.webhdfs_url 属性。

对于 WebHDFS:

webhdfs_url=http://cdh1:50070/webhdfs/v1/

对于 HttpFS:

webhdfs_url=http://cdh1:14000/webhdfs/v1/

YARN 集群配置

在 hadoop.yarn_clusters.default 节点下配置:

[hadoop]

[[yarn_clusters]]

[[[default]]]

resourcemanager_host=cdh1

resourcemanager_port=8032

submit_to=True

security_enabled=true

resourcemanager_api_url=http://cdh1:8088

proxy_api_url=http://cdh1:8088

history_server_api_url=http://cdh1:19888

集成 Hive

在 beeswax 节点下配置:

[beeswax]

hive_server_host=cdh1

hive_server_port=10000

hive_conf_dir=/etc/hive/conf

这里是配置为连接一个 Hive Server2 节点,如有需要可以配置负载均衡,连接一个负载节点。

集成 Impala

在 impala 节点下配置

[impala]

# Host of the Impala Server (one of the Impalad)

server_host=cdh1

# Port of the Impala Server

server_port=21050

# Kerberos principal

impala_principal=impala/cdh1@JAVACHEN.COM

# Turn on/off impersonation mechanism when talking to Impala

impersonation_enabled=True

这里是配置为连接一个 Impala Server 节点,如有需要可以配置负载均衡,连接一个负载节点。

参考 Configuring Per-User Access for Hue 和 Use the Impala App with Sentry for real security,在配置 impersonation_enabled 为 true 的情况下,还需要在 impalad 的启动参数中添加 authorized_proxy_user_config 参数,修改 /etc/default/impala中的 IMPALA_SERVER_ARGS 添加下面一行:

-authorized_proxy_user_config=hue=* \

另外,如果集群开启了 Kerberos,别忘了配置 impala_principal 参数。

集成 kerberos

首先,需要在 kerberos server 节点上生成 hue 用户的凭证,并将其拷贝到 /etc/hue/conf 目录。:

$ kadmin: addprinc -randkey hue/cdh1@JAVACHEN.COM

$ kadmin: xst -k hue.keytab hue/cdh1@JAVACHEN.COM

$ cp hue.keytab /etc/hue/conf/

然后,修改 hue.ini 中 kerberos 节点:

[[kerberos]]

# Path to Hue's Kerberos keytab file

hue_keytab=/etc/hue/conf/hue.keytab

# Kerberos principal name for Hue

hue_principal=hue/cdh1@JAVACHEN.COM

# Path to kinit

kinit_path=/usr/bin/kinit

接下来,修改 /etc/hadoop/conf/core-site.xml,添加:

<!--hue kerberos-->

<property>

<name>hadoop.proxyuser.hue.groups</name>

<value>*</value>

</property>

<property>

<name>hadoop.proxyuser.hue.hosts</name>

<value>*</value>

</property>

<property>

<name>hue.kerberos.principal.shortname</name>

<value>hue</value>

</property>

最后,重启 hadoop 服务。

集成 LDAP

开启 ldap 验证,使用 ldap 用户登录 hue server,修改 auth 节点:

[desktop]

[[auth]]

backend=desktop.auth.backend.LdapBackend

另外修改 ldap 节点:

[desktop]

[[ldap]]

base_dn="dc=javachen,dc=com"

ldap_url=ldap://cdh1

# ldap用户登陆时自动在hue创建用户

create_users_on_login = true

# 开启direct bind mechanism

search_bind_authentication=false

# ldap登陆用户的模板,username运行时被替换

ldap_username_pattern="uid=<username>,ou=people,dc=javachen,dc=com"

注意:在开启ldap验证前,先普通方法创建一个ldap存在的用户,赋超级用户权限,否则无法管理hue用户。

集成 Sentry

如果 hive 和 impala 中集成了 Sentry,则需要修改 hue.ini 中的 libsentry 节点:

[libsentry]

# Hostname or IP of server.

hostname=cdh1

# Port the sentry service is running on.

port=8038

# Sentry configuration directory, where sentry-site.xml is located.

sentry_conf_dir=/etc/sentry/conf

另外,修改 /etc/sentry/conf/sentry-store-site.xml 确保 hue 用户可以连接 sentry:

<property>

<name>sentry.service.allow.connect</name>

<value>impala,hive,solr,hue</value>

</property>

集成 Sqoop2

在 sqoop 节点配置 server_url 参数为 sqoop2 的地址即可。

集成 HBase

在 hbase 节点配置下面参数:

truncate_limit:Hard limit of rows or columns per row fetched before truncating.

hbase_clusters:HBase Thrift 服务列表,例如: Cluster1|cdh1:9090,Cluster2|cdh2:9090,默认为: Cluster|localhost:9090

集成 Zookeeper

在 zookeeper 节点配置下面两个参数:

host_ports:zookeeper 节点列表,例如: localhost:2181,localhost:2182,localhost:2183

rest_url:zookeeper 的 REST 接口,默认值为 http://localhost:9998

集成 Oozie

未使用,暂不记录。

管理 Hue

如果配置了 kerberos,则先获取 hue 凭证:

kinit -k -t /etc/hue/conf/hue.keytab hue/cdh1@JAVACHEN.COM

启动 hue server:

$ service hue start

停止 hue server:

$ service hue stop

hue server 默认使用 8888 作为 web 访问端口,故需要在防火墙上开放该端口。

你可以在 /var/log/hue 目录查看 hue 的日志,或者通过 http://cdh1:8888/logs 查看。

测试

在开启了 LDAP 后,使用 LDAP 中的管理员用户登录 hue,根据提示向导进行设置并将 LDAP 中的用户同步到 Hue Server,然后依次测试每一个功能是否运行正常。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10060847.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存