您的位置:首页 > 其它

Hive初识入门

2016-10-17 19:30 337 查看
       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/hivehive 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 ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: