hive详解
一、Hive简介
hive的设计就是让精通SQL技能但对编写传统MapReduce程序生疏的分析师,也能对hdfs中存储的大规模数据集运行查询。但是SQL并不适合开发复杂的机器学习算法,但对很多分析任务非常有用。
hive把SQL查询转换为一系列的在Hadoop集群上运行的MapReduce作业。
Hive把数据组织为表,将数据存储到HDFS中,并把元数据存储到名为metastore的数据库中。
Metastore默认运行在本地服务器上,此时hive表的定义存储在本地机器上,因此无法和其他用户共享这些定义。Hive的元数据也可以存储到关系型数据库中,这时hive就可以和其它用户共享这些定义。而且在后期开发中,我们还会接触到hcatelog组件,通过该组件我们能够实现hive与pig、MapReduce、stream开发过程中的元数据共享。
二、hive配置方式
1、全局级别配置:Hive的配置文件为---hive-site.xml,他在hive的conf目录下。这个目录中还包括hive-default.xml,记录着hive运行的选项和默认值。并且还可以通过两种方式,指定hive-site.xml配置文件的位置,分别是:①通过-config选项给hive重新定义hive查找hive-site.xml文件的目录:hive –config /usr/tom/dev/hive-conf;②也可以设置HIVE_CONF_DIR环境变量来指定配置文件目录。注意,这个是指定包含配置文件的目录,而不是配置文件hive-site.xml本身。
2、会话级别配置:Hive还允许通过hive指令为单个会话设置属性:hive –hiveconf ds.default.name=localhost –hiveconf mapred.job.tracker=localhost:8021。
3、会话内局部配置:Hive还可以在一个会话中使用set指令更改设置,这对于某个特定的查询修改hive或者mapReduce作业非常有用:hive> SET hive.enforce.bucketing=true
注意:Hive的设置属性有一个优先层次,如下:①hive set 命令;②命令行-hiveconf选项;③hive-site.xml;④hive-default.xml;⑤hadoop-site.xml;⑥hadoop-default.xml;
4、hive日志配置
通过对hive日志的配置,主要用来指定日志的输出级别和其他日志的相关设置。并且Hive的错误日志保存在【本地文件系统/tmp/$USER/hive.log中】。日志具体的配置方式如下:
①通过配置文件对日志配置,配置文件路径为:conf/hive-log4j.properties
②通过hive会话对日志配置,例如:hive –hiveconf hive.root.logger=DEBUG,console
三、hive服务简介
hive能够提供一系列服务,可通过hive命令指定运行那项服务。在运行hive命令时通过-service选项指定使用哪项服务。还可以键入hive –service help查看hive可用服务列表。默认情况下启动hive外壳环境(即cli服务)。下面分别介绍一下hive的服务:
1、cli:hive的命令行接口(外壳环境)。这是默认的服务。
2、hiveserver:让hive可以提供Thrift服务的服务器形式运行,允许用不同语言编写的客户端进行访问。使用Thrift、JDBC和ODBC连接器的客户端需要运行hive服务器来和hive进行通讯。通过设置HIVE_PORT环境变量来指明服务器所监听的端口号(默认为10 000)
3、hwi:hive的web接口。
4、jar:与hadoopjar等价的hive的接口。这是运行类路径中同时包含hadoop和hive类的java应用程序的便捷方法。
5、metastore:默认情况下,metastore和hive服务运行在同一个进程里。使用这个服务,可以让metastore作为一个单独的进程运行。通过设置METASTORE_PORT环境变量可以指定服务器监听的端口号。
四、hive交互方式
1、hive外壳环境(cli):
是我们和hive进行交互、发出hiveQL命令的主要方式。在启动hive客户端的时候,默认就是启动该服务。进入hive外壳环境的方式是,直接键入hive指令即可。
2、非交互模式运行hive外壳:①使用-f选项可以运行指定文件中的指令:hive –f script.q
②对于短脚本可使用-e选项运行命令:hive –e ‘select * from test’;
3、编写相应程序与hive服务器交互:如果以服务器方式运行hive(hive –service hiveserver),就可以编写多种程序以不同机制连接到服务器。hive客户端与服务之间的联系如下:
① Thrift客户端:简化了在多种编程语言中运行hive命令。Hive的thrift绑定支持C++、java、php、python和ruby。并且可以在hive安装目录的hive/lib下找到对应语言的Thrift绑定
②JDBC驱动:hive提供了纯java的jdbc驱动,在以jdbc:hive://host:port/dbname形式配置JDBCURI以后,java应用程序就可以在指定的主机和端口连接到在另一个进程中运行的hive服务器。
③ODBC驱动:hive的ODBC驱动允许支持ODBC协议的应用程序连接到hive。
4、hadoop监控管理页面交互
在该模式下就是采用hive web interface与hive服务进行交互的。指令执行过程与hive cli下非常相似。
五、Metastore详解