Hive[2] 基础介绍

2.3 Hive 内部介绍: P44

$HIVE_HOME/lib 下的 jar 文件是具体的功能部分;(CLI模块)

其它组件,Thrift 服务,可以远程访问其他进程功能;也有使用 JDBC 和 ODBC 访问 Hive 的功能;

所有Hive 客户端都需要一个 metastoreservice(元数据服务),Hive 用这个服务来存储表模式信息和其他元数据信息;默认会使用内置的 Derby SQL服务器提供有限的单进程的存储服务;

HWI Hive 网页界面,提供了远程访问Hive 的服务;

conf 目录下存放了Hive 的配置文件

2.4 启动 Hive 进入 CLI 模式

$HIVE_HOME/bin/hive  会显示用户所执行的命令和查询日志数据所存放在的本地文件系统中的位置,还有OK 及查询所消耗的时间等信息;

注意:Hive 中的关键字是不区分大小写的;

如果使用 Derby 数据库作为元数据存储的话,那么会在用户使用的当前的目录是建立一个 metastore_db 的目录,此目录是在启动Hive会话的时候由 Derby 建立的,如果用户切换其它目录来执行启动Hive ,它会在其他目录新建立这个 目录 ,并忘记以前的目录会造成数据丢失,所以要把元数据存储配置成一个永久的路径最好;

hive.metastore.warehouse.dir 用于指定  Hive 表存储所在的位置 在 Hadoop中默认的值是 /usr/hive/warehouse 这个为属性指定不同的值可以允许每个用户定义其自己的数据仓库目录,这样可以避免影响其他系统用户,如:set hive.metastore.warehouse.dir=/user/myname/hive/warehouse;  为了不让每次启动Hive时指定这样的一个脚本比较麻烦,可以把它放在 $HIVE_HOME/.hiverc 文件中,每次启动Hive 文件都会执行这个文件;

2.5 使用 JDBC 连接元数据

Hive所提供的组件中没有元数据存储组件的,这个是Hadoop所没有的,需要外部提供;元数据存储中赶集了表的模式和分区信息等元数据信息,用户在执行操作(create tablse 、alter talbe)的时候会指定这些信息,因为多用户系统可能并发这些元数据存储,所以默认的内置数据库并不适用于生产环境;

设置MySQL 来作业元数据存储:假设在 db1.mydomain.pvt 服务器的 3306 端口上运行着 MySQL,且数据库名为 hive_db

设置 hive-siet.xml 中的元数据存储数据库配置

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://db1.mydomain.pvt:3306/hive_db?createDatabaseIfNotExist=true</value>

<description>JDBC connect string for a JDBC metastore</description>

</property>

<property>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>com.mysql.jdbc.Driver</value>

<description>Driver class name for a JDBC metastore</description>

</property>

<property>

<name>javax.jdo.option.ConnectionUserName</name>

<value>root</value>

<description>username to use against metastore database</description>

</property>

<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>911</value>

<description>password to use against metastore database</description>

</property>

<property>

为了使 Hive 能够连接上 MySql,需要将 JDBC 驱动放置在类路径下: MySQL JDBC (Jconnector 下载地址:http://www.mysql.com/downloads/connecotr/j/)下载完后可放置在 Hive 库路径下,$HOME_HIVE/lib 下;配置信息完毕后 Hive 就会把元数据存储到 MySql 中;

2.6 Hive 命令

$HOME_HIVE/bin/hive   进入 CLI 的 Hive e服务通道

bin/hive --helfp 查看hive 命令的帮助

Service List 里面的内容提供的服务,包括我们常使用的CLI,可以通过  --service name 服务名称来启用某个服务;

Hive 的服务:

cli   命令行界面;用户定义表,执行查询等

hiveserver   Hive Server 监听来自于其他进程的 Thrift 连接的一个守护进程

hwi   HiveWeb 界面;是一个可以执行查询语句和其他命令的简单的 web界面,可以不用登录到集群中的机器上使用 CLI 来进行查询

jar   hadoop jar 命令的一个扩展,这样可以执行需要 Hive 环境的应用

metastore  启动一个扩展的 Hive 元数据服务,可以供多客户端使用

rcfilecat   一个可以打印出 RCFile 格式文件内容的工具;

--auxpath 选项允许用户指定一个以冒号分割的 附属的 Java 包 这些文件中包含用户可能需要的自定义的扩展;

--config 文件目录 这个命令允许用户覆盖 $HIVE_HOME/conf 中默认的属性配置,而指向一个新的配置文件目录;

2.7 命令行界面

$hive --help --service cli  显示 CLI 所提供的选项列表

usage: hive

-d,--define <key=value> Variable subsitution to apply to hive

commands. e.g. -d A=B or --define A=B

--database <databasename> Specify the database to use

-e <quoted-query-string> SQL from command line

-f <filename> SQL from files

-h <hostname> connecting to Hive Server on remote host

-H,--help Print help information

--hiveconf <property=value> Use value for given property

--hivevar <key=value> Variable subsitution to apply to hive  commands. e.g. --hivevar A=B

-i <filename> Initialization SQL file

-p <port> connecting to Hive Server on port number

-S,--silent Silent mode in interactive shell

-v,--verbose Verbose mode (echo executed SQL to the  console)

变量和属性:

--fefine key=value 和 --hivevar key=value 是等价的,二者都可以让用户在命令行定义用户自定义变量以便在 Hive 脚本中引用,来满足不同情况的执行;0.8.0以后的版本才有;并会将这些键值对放到 hivevar 命名空间,以便与其他3种内置命令空间(hiveconf、system、env)进行区分 ;

Hive 中变量和属性命名空间

hivevar    读/写    用户自定义变量

hiveconf    读/写    Hive 相关配置

system       读/写    Java 定义的配置属性

env        读    Shell 环境定义的环境变量

Hive 变量内部是以 Java 字符串的方式存储的,用户可以在查询中引用变量,Hive会先使用变量值替换掉查询的变量引用,然后才会将语句提交给查询处理器;

CLI 中可使用 SET 显示或修改变量值;

set evn:HOME 显示当前执行hive的目录;

set  输出更多目录

hvie -v;  如果不加  -v 则会打印出所以的变更内容;如果使用 -v 则还会打印 hadoop 中所定义的所有的属性,

set --define foo=bar  定义变量

set foo 显示变量  foo=bar;

set hivevar:foo;  显示 变量 foo  显示内容 hivevar:foo=bar

set hivevar:foo=bar2;  设置变量;

set foo;   显示 foo=bar2

从以上可以看出 hivevar: 是可选的;

在CLI 中查询语句中的变量引用会先被替换掉然后才会提交给查询处理器。

create table tossl(i int,${hivevar:foo} string);

describe tossl;  显示 ${hivevar:foo}  变量的值;

set hive.cli.print.current.db 查看此设置的值; 默认为 false ; 设置为 true 可以在CLI 提示符打印当前所在的数据库名;默认的数据名为 default ;

hive> set system:user.name;    显示 system:user.name=root;

hive>set env:HOME;   显示 env:HOME=/root

注意:用户必须使用 system: 或者 env: 前缀来指定系统属性和环境变量;

Hive 中 “一次使用”的命令可以这样:

$hive -e "select * from mytable limit 3";  可以执行一次命令后就会退出;

$ hive -S -e "select * from mytable limit 3" > /tmp/myquery ;   -S 选项可以开启静默模式,结果里就不显示 OK ,Timetaken 等;并将结果存入 /tmp/myquery 文件 而不是HDFS 中;

$hive -S -e "set" | grep warehouse 如果记不清楚某个属性名时,可以使用此命令来查询属性;

从文件中执行 Hive 查询,Hive中可以使用 -f 文件名试执行指定文件中的一个或者多个查询语句;一般把这些 Hive 查询文件保存为.q 或  .hql 后缀的文件;

$hive -f /path/to/file/withqueryies.hql

hive> source /path/to/file/withqueries.hql;   在 CLI 中 执行 文件中的 Hive 语句 ;

$hive -e "LOAD DATA LOCAL INPATH ‘/tmp/myfile‘ INTO TALBE src";

2.7.5 hiverc 文件

$hive -i ‘/tmp/myfile‘  允许用户指定一个文件,当 CLI 启动时会在提示符出现之前先执行这个文件。也可以在 Hive 的 HOME 目录下寻找 .hiverc 的文件,而且会自动执行这个文件中的命令;

对于用户需要和和频繁执行的命令,可以使用此文件,如设置系统属性和变量等;例如:

ADD JAR /path/to/costom_hive_extensions.jar    向分布式内存中半圆一个 jar 文件

set hive.cli.print.current.db=true;    显示CLI提示符前显示当前所在的工作数据库

set hive.exec.mode.local.auto=true;    鼓励 Hive 如果可以使用本地模式执行的话就在本地执行,这样可以加快小数据集的数据查询速度

注意:每行后面的 ; 一定要记得加上

2.7.6 更多的 Hive CLI 介绍

1)自动补全功能:在输入命令过程中 按 Tab 制表键,CLI 会自动 补全可能的关键字;

2)查看操作命令历史:可以用上下箭头来查看之前 的命令,它被记录在  $HOME_HIVE/.hivehistory 中,能保存 10000条

2.7.8 执行 shell 命令

用户不需要退出 Hive CLI就可以执行简单的 bash shell 命令,只要在命令前加上 !并且以 ; 结尾就可以

hive> ! /bin/echo "what up dog";

hive>! pwd;

注意:不能使用 shell 的管道功能 和文件名称自动实例功能;

2.7.9 在 Hive 内使用 Hadoop 的dfs 命令[在hvie中使用 hadoop命令比在 bash shell 中使用要快因为它会在hive的同一个进程中执行这些命令]

hive> dfs -sl /;    只要将 hadoop 命令中的 hadoop 关键字去掉,并且以分号结尾即可

hive> dfs -help ;  查盾 dfs 所提供的所有功能选项列表

2.7.10 Hive 脚本中的注释 
在保存 HiveQuery 的文件里可以以--来注释 语句,但不能在 CLI 中这样注释;

2.7.11 显示字段名称

set hive.cli.print.header=true;   来显示字段名称

时间: 2024-10-28 22:05:57

Hive[2] 基础介绍的相关文章

消息队列之kafka(基础介绍)

一.关于JMS 1. JMS 的基础 ??JMS是Java提供的一套技术规范.即Java消息服务(Java message service).应用程序接口.是一个Java平台中关于面向消息中间件的API.用于在两个应用程序之间或者分布式系统中发送消息,进行异步通信.Java消息服务是一个与具体平台无关的API.??用来异构系统集成通信,缓解系统瓶颈. 提高系统的伸缩性.增强系统用户体验.使得系统模块化和组件化变得可行并更加灵活.JAVA2EE十三大规范:https://blog.csdn.net

【简译】jQuery对象的奥秘:基础介绍

本文翻译自此文章 你有没有遇到过类似$(".cta").click(function(){})这样的JavaScript代码并且在想“$('#x')是什么”?如果这些对你想天书一样,请往下读.如果你认为这些代码不可能是真的,请浏览一些jQuery例子,他们都是这种结构. 这篇文章覆盖了像下面一样吓人的代码片段中涉及的关键概念.我们以一个长例子开始,这个长例子是基于一个让一个正方形运动的简单例子(a simple example of animating a square).你可能不需要

Zabbix 3.0 基础介绍 [一]

Zabbix 3.0 基础介绍 [一] zabbix 一.Zabbix介绍 zabbix 简介   Zabbix 是一个高度集成的网络监控解决方案,可以提供企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收费的技术支持赢利   zabbix是一个基于Web界面的,提供分布式系统监控以及网络监视功能的企业级的开源解决方案.   zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题

【OpenGL】“我叫MT”纯手工3D动画制作之1——基础介绍

最近在家研习面经,温习基础,索性花些时间将本科期间完成的一些学习之作整理出来,分享之余顺便水点经验 其实这个事情起源于一门“计算机图形与动画(Computer Graphics & Animation)”的外方课程,当初的外籍教师Tony教的很认真,对于这门课自己也投入了非常多的时间.言归正传,这里先介绍一些涉及的技术,熟悉的同学请跳过哈~ A.几何物体建模 带阴影的后面我会介绍到的哦~ 加下划线的后面我后面会举栗子的哦~ B.涉及的图形学技术与应用 C.动画技术 参考文献 1.王汝传,张登银,

qt model/view 架构基础介绍之QTreeWidget

# -*- coding: utf-8 -*- # python:2.x #说明:QTreeWidget用于展示树型结构,也就是层次结构同前面说的 QListWidget 类似,这个类需要同另外一个辅助类 # QTreeWidgetItem 一起使用.不过,既然是提供方面的封装类,即便是看上去很复杂的树, # 在使用这个类的时候也是显得比较简单的 __author__ = 'Administrator' from PyQt4.QtGui import  * from PyQt4.Qt impor

qt model/view 架构基础介绍之QTableWidget

# -*- coding: utf-8 -*- # python:2.x #说明:QTreeWidget用于展示树型结构,也就是层次结构同前面说的 QListWidget 类似,这个类需要同另外一个辅助类 # QTreeWidgetItem 一起使用.不过,既然是提供方面的封装类,即便是看上去很复杂的树, # 在使用这个类的时候也是显得比较简单的 __author__ = 'Administrator' from PyQt4.QtGui import  * from PyQt4.Qt impor

Erlang基础 -- 介绍 -- Wordcount示例演示

在前两个blog中,已经说了Erlang的历史.应用场景.特点,这次主要演示一个Wordcount的示例,就是给定一个文本文件,统计这个文本文件中的单词以及该单词出现的次数. 今天和群友们讨论了一个问题,突然一下子就上升到哲学角度上了,装逼装大发了. PS:图片中有错别字,%s/财务和其他9个月/财务和其他9个人/g 不过真心想说的一点是,把Erlang系统,映射到现实中,很多奇葩问题,就能迎刃而解了.所以,在下面的简要设计中,我就尽可能的代入一下现实世界吧. 环境安装 mac 的话,用brew

qt model/view 架构基础介绍之QListWidget

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import  * from PyQt4.Qt import * from PyQt4 import QtGui, QtCore from PyQt4.QtCore import * import sys # MVC是Model-View-Controller的简写,即模型-视图-控制器 #model/view框架将传统的mv模型分

Avaya Exrience Portal(AEP)基础介绍 二(四大组件总结)

什么是Avaya Exrience Portal(AEP)? 1:提供语音(或者多媒体)自动化用户体验的软件平台:  2:基于标准的VXML(定义了如何使用语音识别.语音合成.互联网访问.数据库访问.语音文件播放.DTMF输入等功能开发一个完整的语音应用系统.)和CCXML(它基于XML定义了一系列开放标准的呼叫控制API)的应用:  3:支持多媒体处理:  4:完全基于Web架构:  5:支持TTS文语转换和语音识别技术:     2)AEP包含的组件   EPM:AEP集成的管理,报表,监控