在本地虚拟机安装Hive以及基本操作「建议收藏」

在本地虚拟机安装Hive以及基本操作「建议收藏」CDH使用postgreDB #企业通常我们会选择另外一种mysql来存储 #元数据包括:表名、表所属的数据库、 表的拥有者、列/分区字段、表的

大家好,欢迎来到IT知识分享网。

Hive下载地址

http://archive.cloudera.com/cdh5/cdh/5/

# Facebook开源

# 官网:hive.apache.org

# Hive是基于Hadoop的一个数据仓库工具

一. Hive与数据库:

数据库: mysql、oracle、DB2、sqlserver

数据仓库 !== 数据库 换言之, Hive不是数据库

二. Hive简介:

# 流程

# hql –> Hive(java) –> mapreduce –>yarn –> hdfs

# 本质: 将HQL转化成MapReduce程序

# 使用MapReduce计算模型,运行在yarn平台之上

# Hive适合离线批量处理,延时比较大

# 不适合在线业务实时分析结果,业务要求延时较低的场景不适合

三. Hive体系结构

# 用户接口: Client

# 终端命令行CLI –主要的一种使用方式

# JDBC方式 –几乎不用

# 元数据:metastore

# 默认apache使用的是derby数据库(只能有一个客户端使用),CDH使用postgreDB

# 企业通常我们会选择另外一种mysql来存储

# 元数据包括:表名、表所属的数据库(默认是default)、

表的拥有者、列/分区字段、表的类型(是否是外部表)、

表的数据所在目录等

# 这里并没有存储Hive表的真实数据

# 使用HDFS进行存储

# 使用MapReduce进行计算

# 驱动器: Driver

# 解析器: 解析Hql语句

# 编译器: 把sql语句翻译成MapReduce程序

# 优化器: 优化sql语句

# 执行器: 在yarn平台运行MapReduce程序

====Hive安装========================================

# 版本 0.13.1(和后面使用到的框架兼容性好)

1、安装JDK

JDK可以百度安装

2、安装Hadoop

具备虚拟机大数据平台环境

3、安装mysql

# yum -y install mysql –安装mysql客户端、常用命令

# yum -y install mysql-server –安装mysql服务

# yum -y install mysql-devel –mysql develop扩展包

–查看安装的mysql

# rpm -qa|grep mysql

–查看安装位置

# rpm -ql mysql-server-5.1.73-7.el6.x86_64

–启动mysql服务

# service mysqld start

–设置开机启动

# chkconfig mysqld on

–初始化密码,只能执行一次

# /usr/bin/mysqladmin -uroot password ‘root’

给用户授权:

# mysql -uroot -proot

#* grant 权限 on 数据库对象(数据库.表) to 用户

mysql> grant all on *.* to root@’blue01.mydomain’ identified by ‘root’;

mysql> flush privileges; #刷新授权表,可以不执行

mysql> set password for root@localhost = password(‘root’); –修改密码

mysql> show databases;

# mysql数据库默认只允许root用户通过localhost(127.0.0.1)来登录使用

# 想要使用Windows上的Navicat登录,需要授权

# mysql> grant all on *.* to root@’192.168.131.132′ identified by ‘root’;

附:yum命令和rpm命令安装的都是rpm包

yum安装包的来源: 来自互联网(由仓库配置文件指定)

rpm安装包的来源: 先提取现在需要安装的软件包

4、安装Hive

# su – hive –进入hive用户

$ tar zxf /opt/softwares/apache-hive-0.13.1-bin.tar.gz

# 在conf/目录:修改配置

–重命名

$ cp -a hive-env.sh.template hive-env.sh

$ cp -a hive-default.xml.template hive-site.xml

5、修改hive-env.sh

JAVA_HOME=/opt/modules/jdk1.7.0_67

HADOOP_HOME=/opt/modules/hadoop-2.5.0

export HIVE_CONF_DIR=/opt/modules/apache-hive-0.13.1-bin/conf

6、配置hive-site.xml,注意:用户名和密码不可以有空格

<property>

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

<value>jdbc:mysql://主机名:3306/metastore?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.ConnectionPassword</name>

<value>root</value>

</property>

7、拷贝mysql驱动到lib/

–下载mysql驱动包拷贝到如下目录

$ cp mysql-connector-java-5.1.27-bin.jar /opt/modules/apache-hive-0.13.1-bin/lib/

8、进入Hadoop目录,修改目录权限

# /tmp存放临时文件

–给用户组加上写的权限

$ hadoop fs -chmod g+w /tmp

— 注:/user/hive/warehouse为Hive存放数据的目录

$ hadoop fs -mkdir -p /user/hive/warehouse

$ hadoop fs -chmod g+w /user/hive/warehouse

9、启动客户端使用Hive

$ bin/hive–用法几乎跟mysql一样

hive> show databases;

====基本操作==========================================

基本操作语句:

hive> show databases;

hive> create database mydb;

hive> use mydb;

hive> show tables;

–创建表

create table customer(

id int,

username string

)row format delimited fields terminated by ‘\t’;

hive> desc customer;

hive> desc formatted customer; –详细信息

–向表插入数据

[tom@blue01 ~]$ vi b.txt

1001aaa

1002bbb

hive> load data local inpath ‘/home/tom/b.txt’ into table customer;

–查看数据

hive> select * from customer;

—-hive日志———————-

定义Hive的日志信息

# 重命名配置文件

$ cp hive-log4j.properties.template hive-log4j.properties

$ mkdir logs –用来存放日志

# 修改hive-log4j.properties,指定日志文件生成的位置

hive.log.dir=/opt/modules/apache-hive-0.13.1-bin/logs

重启Hive

# 动态监视日志文件,hive里执行任何操作,日志都会有显示

# 此时可以打开一个hive窗口,随意执行些操作,观察效果

$ tail -f hive.log 这句话的意思是进入到这里后会监视

Hive里面的操作[hive@ logs]$ tail -f hive.log

——————————-

–hive目录列名以及数据库名配置

# hive显示列名配置

# 修改hive-site.xml(重启)

<property>

<name>hive.cli.print.header</name>

<value>true</value>

</property>

# hive显示数据库名

<property>

<name>hive.cli.print.current.db</name>

<value>true</value>

</property>

====hive其他操作============================================

Hive里面两个重要的选项:

# -e 一次性执行hive语句

[hive apache-hive-0.13.1-bin]$ bin/hive -e “select * from mydb.customer”

$ bin/hive -e “select * from mydb.customer”

$ bin/hive -e “select * from mydb.customer” > a.txt –结果导入到文件

# -f 执行hql脚本文件

[tom@blue01 apache-hive-0.13.1-bin]$ vi a.hql

$ vi a.hql –创建hql脚本

select * from mydb.customer;

[tom@blue01 apache-hive-0.13.1-bin]$ bin/hive -f a.hql

$ bin/hive -f a.hql –linux命令行

hive> source a.hql; –hive命令行

# 在Hive里执行简单的Linux命令(并非所有的命令都可以在Hive里执行)

> !pwd;

> !ls;

# dfs命令

hive> dfs -ls /;

hive> dfs -mkdir /aaa;

hive> dfs -rmr /aaa;

Hive中set命令:

hive > set; –显示hive属性

hive > set -v; –更多的属性,包括hadoop、mapreduce、yarn属性

hive > set hive.cli.print.current.db; –显示单个属性

hive > set hive.cli.print.current.db=true; –设置,set命令设置的值是临时生效

# 如果记不清某个属性,可以使用如下技巧来查找

$ bin/hive -e “set”|grep print;

$ bin/hive -e “set -v”|grep print;

Hive中历史命令的存放位置

~/.hivehistory –‘~’是指/home/tom目录

$ cat .hivehistory

Hive调试参数

# 将日志输出级别降低为DEBUG,通常在调试错误时,会加这个参数

# 日志级别为5级:DEBUG、INFO、WARN、ERROR、FATAL

$ bin/hive –hiveconf hive.root.logger=DEBUG,console

hive > select * from mydb.customer;

hive > select username from mydb.customer;

hive的其他语句:

hive > show functions;–函数,显示内置函数,如:count、sum…

hive > truncate 表名;删除表里面的数据

====Hive表常用操作==========================================

#*Hive官网:wiki–User Documentation(DDL)

Hive创建数据库

hive (mydb)> create database 数据库名称 ;

hive (mydb)> drop database 数据库名称 ;

Hive创建表

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name

[(col_name data_type …)]

[PARTITIONED BY (col_name data_type , …)]

[ROW FORMAT row_format]

[LOCATION hdfs_path]

[AS select_statement];

create table aaa(

a int,

b string

)row format delimited fields terminated by ‘\t’;

Hive中常见数据类型:

tinyint smallint int bigint

float double

boolean

string

……

加载数据

load data local inpath ‘文件路径’ [overwrite] into table 数据库名.表名 ;

# local 表示加载本地文件,若inpath后面跟随一个目录,那么会将该目录下的所有文件copy过去

# 去掉local表示hdfs,注意:此时使用load data,进行的将是move操作

# 文件加载模式

# append 追加,默认的,可以省略,

# overwrite 覆盖

# load data加载只是把文件从本地简单地复制到hdfs上,我们可以通过hdfs增加、删除对应表格目录里面的文件,

这样做,会影响到表格里的数,可见hive和hdfs是松散关系

# 加载数据时,hive不会去判断字段分隔符是否正确,只有在查询数据时,才会发现是否有错

hive> load data local inpath ‘/home/tom/b.txt’ into table aaa;

#*若是再次执行load data,新的文件中的数据将会追加到hive表的末尾

–创建表

create table dept(

deptno int, –部门编号

dname string, –部门名称

loc string –地点

)row format delimited fields terminated by ‘\t’;

create table emp(

empno int, –雇员号

ename string,

job string, –职位

mgr int, –上司

hiredate string,

sal double, –薪水

comm double, –奖金(注意:有人没有奖金)

deptno int

)row format delimited fields terminated by ‘\t’;

–导入数据

hive > load data local inpath ‘dept.txt’ into table dept;

hive > load data local inpath ’emp.txt’ into table emp;

Hive创建表注意事项

# 一般都是先有数据文件,再去用Hive把它映射成一张对应的表

# 创建表时,字段要根据原文件内容而定

# 指定表的列分隔符时,必须要和原文件字段分隔符一致,否则Hive识别不到数据

终止job任务:

#*执行 select deptno,dname from dept; 语句时,将会运行mapreduce任务,可以在8088端口查看

#*若是任务运行过程中卡住了,可以执行”hadoop job -kill 任务名”来终止任务,如:

#*hadoop job -kill job_1479691925666_0003

#*执行语句时,日志中有提示:Kill Command = /opt/modules/hadoop-2.5.0/bin/hadoop job -kill job_1479691925666_0003

====管理表、外部表=================================

Hive中表类型:

# 管理表(内部表)

# MANAGED_TABLE –可以通过desc formatted emp查看

# 删除表,会连同HDFS上面的数据文件一起删除

# 外部表

# EXTERNAL_TABLE

# 删除表,不会连同HDFS上面的数据文件一起删除

# 通常有多个业务接入同一个文件(同一个数据源)时,会创建外部表

业务1 业务2 业务3

table1 table2 table3

同一个文件(HDFS)

# 外部表在创建的时候,数据源一般就已经存在了

–创建管理表

create table emp_inner(

empno int,

ename string,

job string,

mgr int,

hiredate string,

sal double,

comm double,

deptno int

)row format delimited fields terminated by ‘\t’;

–创建外部表

create external table emp_ext(

empno int,

ename string,

job string,

mgr int,

hiredate string,

sal double,

comm double,

deptno int

)row format delimited fields terminated by ‘\t’;

load data local inpath ’emp.txt’ into table emp_inner;

load data local inpath ’emp.txt’ into table emp_ext;

#*基于相同数据,创建其他外部表

create external table emp_ext1(

empno int,

ename string,

job string,

mgr int,

hiredate string,

sal double,

comm double,

deptno int

)

row format delimited fields terminated by ‘\t’

–关联对应目录

location “/user/hive/warehouse/mydb.db/emp_ext”;

hive > select * from emp_ext1;

#同理可创建emp_ext2

create external table emp_ext2(

empno int,

ename string,

job string,

mgr int,

hiredate string,

sal double,

comm double,

deptno int

)

row format delimited fields terminated by ‘\t’

location “/user/hive/warehouse/mydb.db/emp_ext”;

hive > select * from emp_ext2 ;

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/6198.html

(0)
上一篇 2022-12-17 16:20
下一篇 2022-12-17 16:40

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信