Hive初识入门

       Hive是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张表,并提供类SQL查询功能。本质是将HQL转换为MapReduce程序。数据存储在HDFS上。

hive架构

用户接口:Client
          CLI(hive shell)、JDFB/ODBC(java访问hive)、WEBUI(浏览器访问hive)

元数据:Metastore

          元数据包括:表名、表所属的数据库(默认default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等等。默认存储在自带的derby数据库中(只允许单个用户使用),推荐采用Mysql数据库。

Hadoop

           使用HDFS进行存储,使用MapReduce进行计算

驱动器:Dirver

           包含:解析器、编译器、优化器、执行器
           解析器:将SQL字符串转换成抽象语法树AST,这一步一般都是第三方工具完成。
           编译器:将AST编译成逻辑执行计划
           优化器:对逻辑执行计划进行优化
           执行器:把逻辑执行计划转换成可以运行的物理计划。对与hive来说就是MR、Spark

hive优点与使用场景

操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)
避免了去写MR,减少开发人员的学习成本
统一的元数据管理,可以与impala/spark等共享元数据
易扩展(HDFS+MapReduce:可以扩展集群规模;支持自定义函数)
数据的离线处理;比如:日志分析、海量结构化数据离线分析
Hive的执行延迟比较高,因此hive常用于离线数据分析的,对于实时性要求不高的场合
Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高

Hive环境搭建(基于hadoop之上)

$ tar -xzvf hive-x.y.z.tar.gz –C /opt/modules/
在hive安装目录下修改配置文件
	vi hive-env.sh
	修改HADOOP_HOME=/opt/modules/hadoop-2.5.0
	修改export HIVE_CONF_DIR=/opt/modules/hive-0.13.1/conf
Hive数据仓库位置配置
默认情况是在/user/hive/warehouse
	$ $HADOOP_HOME/bin/hadoop fs -mkdir       /tmp
 	$ $HADOOP_HOME/bin/hadoop fs -mkdir       /user/hive/warehouse
  	$ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /tmp
  	$ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /user/hive/warehouse
启动
	bin/hive
hive shell
show databases ;
use default;
show tables ;
create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
load data local inpath '/opt/datas/student.txt'into table student ;
select * from student ;  不走MR
select id from student ;
安装mysql
查看是否已经安装:
	# rpm -qa|grep mysql
卸载已经安装的mysql:
	# rpm -e --nodeps mysql-*
安装rpm包
	# rpm -ivh MySQL-server-5.6.24-1.el6.x86_64.rpm
生成默认密码路径在: 
	cat  /root/.mysql_secret
启动mysql: 
	# service mysql start  
查看状态: 
	# service mysql status
安装客户端包:
	# rpm -ivh MySQL-client-5.6.24-1.el6.x86_64.rpm
修改mysql密码
	先登录:mysql –uroot  -p前面默认密码
	修改密码:UPDATE user SET Password=PASSWORD('123456') where USER='root';
拷贝mysql驱动jar包,到Hive安装目录的lib下
	$ cp mysql-connector-java-5.1.27-bin.jar /opt/modules/hive-0.13.1/lib/
设置远程用户登录mysql
	进入mysql有一张user表,select User,Host,Password from user;可以查看用户连接信息。
	执行 update user set host=’%’ where user = root and host = 'localhost'	;
	后任何机器都能连接上。执行Flush privileges;	
配置hive-site.xml
<property>
	<name>javax.jdo.option.ConnectionURL</name>
	<value>jdbc:mysql://<host name>/<database name>?createDatabaseIfNotExist=true</value>
</property>
<property>
	<name>javax.jdo.option.ConnectionDriverName</name>
	<value>com.mysql.jdbc.Driver</value>
</property>
<property>
	<name>javax.jdo.option.ConnectionUserName</name>
	<value>root</value>
</property>
<property>
	<name>javax.jdo.option.ConnectionUserName </name>
	<value>123456</value>
</property>
Hive数据仓库位置配置
default
	/user/hive/warehouse
注意事项
* 在仓库目录下,没有对默认的数据库default创建文件夹
* 如果某张表属于default数据库,直接在数据仓库目录下创建一个文件夹
<property>
	<name>hive.metastore.warehouse.dir</name>
	<value>/user/hive/warehouse</value>
</property>
在cli命令行上显示当前数据库,以及查询表的行头信息
配置$HIVE_HOME/conf/hive-site.xml
<property>
	<name>hive.cli.print.header</name>
	<value>true</value>
	<description>Whether to print the names of the columns in query output.</description>
</property>
<property>
	<name>hive.cli.print.current.db</name>
	<value>true</value>
	<description>Whether to include the current database in the Hive prompt.</description>
</property>
配置日志信息
Hive运行日志信息位置 
	$HIVE_HOME/conf/hive-log4j.properties
		hive.log.dir=/opt/modules/hive-0.13.1/logs
		hive.log.file=hive.log

指定hive运行时显示的log日志的级别
	$HIVE_HOME/conf/hive-log4j.properties
		hive.root.logger=INFO,DRFA

hive的基本操作

show databases ;
create database db_hive ;
create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
show tables ;
desc student ;
desc extended student ;
desc formatted student ;

use db_hive ;
load data local inpath '/opt/datas/student.txt'into table db_hive.student ;

show functions ;
desc function upper ;
desc function extended upper ;
select id ,upper(name) uname from db_hive.student ;

Hive Shell常用操作

[beifeng@hadoop-senior hive-0.13.1]$ bin/hive -help
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,--help                        Print help information
 -h <hostname>                    connecting to Hive Server on remote host
    --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)

* bin/hive -e <quoted-query-string>
eg:
	bin/hive -e "select * from db_hive.student ;"

* bin/hive -f <filename>
eg:
	$ touch hivef.sql
		select * from db_hive.student ;
	$ bin/hive -f /opt/datas/hivef.sql 
	$ bin/hive -f /opt/datas/hivef.sql > /opt/datas/hivef-res.txt

* bin/hive -i <filename>
	与用户udf相互使用

在hive cli命令窗口中如何查看hdfs文件系统
	hive (default)> dfs -ls / ;  

在hive cli命令窗口中如何查看本地文件系统
	hive (default)> !ls /opt/datas ;



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值