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></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;   来显示字段名称

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

  1. 揭秘FaceBook Puma演变及发展——FaceBook公司的实时数据分析平台是建立在Hadoop 和Hive的基础之上,这个根能立稳吗?hive又是sql的Map reduce任务拆分,底层还是依赖hbase和hdfs存储

    在12月2日下午的“大数据技术与应用”分论坛的第一场演讲中,来自全球知名互联网公司——FaceBook公司的软件工程师.研发经理邵铮就带来了一颗重磅炸弹,他将为我们讲解FaceBook公司的实时数据处 ...

  2. Web3D编程入门总结——WebGL与Three.js基础介绍

    /*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识 ...

  3. C++ 迭代器 基础介绍

    C++ 迭代器 基础介绍 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围.迭代器就如同一个指针.事实上,C++的指针也是一种迭代器.但是,迭代器不仅仅是指针,因此你不能认为他们一定 ...

  4. Node.js学习笔记(一)基础介绍

    什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...

  5. Node.js 基础介绍

    什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...

  6. 1、git基础介绍及远程/本地仓库、分支

    1. Git基础介绍 基于Git进行开发时,首先需要将远程仓库代码clone到本地,即为本地仓库.后续大部分时间都是基于本地仓库上的分支进行编码,最后将本地仓库的代码合入远程仓库. 1.1. 远程仓库 ...

  7. git基础介绍

    git基础介绍 这是git操作的基础篇,是以前的写的操作文档,就没有进行手打,直接把图片贴进来了,你们担待哈,有不正确的地方可以指正出来,我将在第一时间去修改,多谢哈! 一.文件状态:git系统的文件 ...

  8. OSPF基础介绍

    OSPF基础介绍 一.RIP的缺陷 1.以跳数评估的路由并非最优路径 2.最大跳数16导致网络尺度小 3.收敛速度慢 4.更新发送全部路由表浪费网络资源 二.OSPF基本原理 1.什么是OSPF a& ...

  9. iOS系统及客户端软件测试的基础介绍

    iOS系统及客户端软件测试的基础介绍 iOS现在的最新版本iOS5是10月12号推出,当前版本是4.3.5 先是硬件部分,采用iOS系统的是iPad,iPhone,iTouch这三种设备,其中iPho ...

随机推荐

  1. [UIView beginAnimations:context:]与[UIView animateWithDuration:animations:]值得注意的一个区别

    原文链接:http://longtimenoc.com/archives/uiview-beginanimationscontext%E4%B8%8Euiview-animatewithduratio ...

  2. Bridge桥接模式

    当我们的功能要在多个维度进行扩展时,各个维度之间可以交叉组合,就可以考虑使用桥接模式. 将抽象部分与实现部分分离,使它们都可以独立的变化.                                ...

  3. 服务器压力测试 ab

    1.ab命令原理 Apache自带的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx.lighthttp.IIS等其它Web服务器的压力(测试其它服务器时需单独下载ab压力测试工具 ...

  4. JAVA中压缩与解压缩

    以压缩Zip文件为例.主要是通过ZipOutputStream类实现.解压缩主要使用ZipFile类和ZipInputStream以及ZipEntry类. package main; import j ...

  5. Java中的观察者模式

    让一个类能够被观察,则该类需要继承java.util.Observable类. 要让一个类成为观察者,则该类需要实现java.util.Observable接口. 让观察者和被观察者建立联系通过Obs ...

  6. 算法库:基础线性代数子程序库(Basic Linear Algebra Subprograms,BLAS)介绍

    调试DeepFlow光流算法,由于作者给出的算法是基于Linux系统的,所以要在Windows上运行,不得不做大量的修改工作.移植到Windows平台,除了一些头文件找不到外,还有一些函数也找不到.这 ...

  7. [kuangbin带你飞]专题九 连通图

        ID Origin Title   76 / 163 Problem A POJ 1236 Network of Schools   59 / 177 Problem B UVA 315 Ne ...

  8. 判断Windows操作系统的版本

    private void Form1_Load(object sender, EventArgs e) { if (!IsWin7()) { Application.Exit(); } } bool ...

  9. Cannot merge new index 67361 into a non-jumbo instruction

    升级Android ADT 后项目出现如题错误. https://groups.google.com/forum/?fromgroups=#!topic/adt-dev/tuLXN9GkVas jus ...

  10. php array函数实例应用

    array_diff_key() array_diff_assoc() array_count_values() array_combine() array_column() array_chunk( ...