设为首页 加入收藏

TOP

大数据学习笔记之Hive(四):Hive介绍以及简单操作
2019-05-14 12:47:35 】 浏览:125
Tags:数据 学习 笔记 Hive 介绍 以及 简单 操作
版权声明:本文为作者原创,转载请注明出处,除非你送我一个女朋友。 https://blog.csdn.net/dataiyangu/article/details/90199297

Hive创建表的方式

1、使用create命令创建一个新表
例如:create table if not exists db_web_data.track_log(字段)
partitioned by (date string,hour string)
row format delimited fields terminated by ‘\t’;
2、把一张表的某些字段抽取出来,创建成一张新表
例如:create table backup_track_log as select * from db_web_data.track_log;
尖叫提示:会复制属性以及属性值到新的表中
3、复制表结构
例如:create table like_track_log like db_web_data.track_log;
尖叫提示:不会复制属性值,只会复制表结构。

Hive表导入数据方式

1、本地导入
load data local inpath ‘local_path/file’ into table 表名称 ;
2、HDFS导入
load data inpath ‘hdfs_path/file’ into table 表名称 ;
3、覆盖导入
load data local inpath ‘path/file’ overwrite into table 表名称 ;
load data inpath ‘path/file’ overwrite into table 表名称 ;
4、查询导入
create table track_log_bak as select * from db_web_data.track_log;
5、insert导入–常用
** 追加-append-默认方式
insert into table 表名 select * from track_log;
** 覆盖-overwrite-显示指定-使用频率高
insert overwrite table 表名 select * from track_log;

Hive表导出数据方式

1、本地导出
例如:insert overwrite local directory “/home/admin/Desktop/1/2” row format delimited fields terminated by ‘\t’ select * from db_hive_demo.emp ;
尖叫提示:会递归创建目录,但是注意home目录其他用户是没有可写权限的,只有root用户有。
2、HDFS导出
例如:insert overwrite diretory “path/” select * from staff;
3、Bash shell覆盖追加导出
例如:$ bin/hive -e “select * from staff;” > /home/z/backup.log
4、Sqoop

Hive数据清洗之思路

例如在20150828的日志里面,有一些错乱的数据,比如查询出来的数据没有url,或者省份id和期望的值不一样,有的省份id是汉字是不合法的
在这里插入图片描述

需求:实现按照省份和日期统计PV和UV
SELECT date, provinceId, count(url) pv, count(distinct guid) uv from track_log group by date, provinceId;
见代码
![在这里插入在这里插入图片描述
在这里插入图片描述
省份中有汉字

Hive自动化处理日志

需求:网站产生的日志会按照某个日期分类的文件夹存储,定期分析该日志,产出结果
/opt/modules/weblog
-20170724(文件夹)
-2017072418(日志文件)
-2017072419
-20170725
-2017072518(日志文件)
-2017072619
见脚本

Hive中的几种排序

order by
全局排序,就一个Reduce
sort by
相当于对每一个Reduce内部的数据进行排序,不是全局排序。
distribute by
类似于MRpartition, 进行分区,一般要结合sort by使用。
cluster by
当distribute和sort字段相同时,就是cluster by
案例见:HQL案例.txt

业务案例梳理

需求:执行周期性任务,每天的晚上6点,执行自动化脚本,
加载昨天的日志文件到HDFS,
同时分析网站的多维数据(PV,UV按照省份和小时数进行分类查询)
最后将查询的结果,存储在一张临时表中(表字段:date,hour,provinceId,pv,uv)存储在HIVE中,并且
将该临时表中的所有数据,存储到MySQL中,以供第二天后台开发人员的调用,展示。
1、定时加载本地数据到HDFS,涉及到:auto.sh,crontab
2、清洗数据,打包jar,定时执行,
/user/hive/warehouse/db_web_data.db/track_log/date=20150828/hour=18
part-000001
/user/hive/warehouse/db_web_data.db/track_log/date=20150828/hour=19
part-000001
3、建表track_log,也不需要建立现成的分区,临时指定清洗好的数据作为仓库源
alter table track_log add partition(date=‘20150828’,hour=‘18’) location
“/user/hive/warehouse/db_web_data.db/track_log/date=20150828/hour=18”;
alter table track_log add partition(date=‘20150828’,hour=‘18’) location
“/user/hive/warehouse/db_web_data.db/track_log/date=20150828/hour=19”;
4、开始分析想要的数据,将结果存储在Hive的临时表中
创建临时表:
create table if not exists temp_track_log(date string, hour string, provinceId string, pv string, uv string)
row format delimited fields terminated by ‘\t’;
向临时表中插入数据:
insert overwrite table temp_track_log select date, hour, provinceId, count(url) pv, count(distinct guid) uv
from track_log where date=‘20150828’ group by date, hour, provinceId;
5、使用自定义的JAR,导入本地导出的文件到MYsql或者使用Sqoop。

Sqoop

一、SQL-TO-HADOOP
二、配置:
1、开启Zookeeper
2、开启集群服务
3、配置文件:
** sqoop-env.sh
#export HADOOP_COMMON_HOME=
export HADOOP_COMMON_HOME=/opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/

#Set path to where hadoop-*-core.jar is available
#export HADOOP_MAPRED_HOME=
export HADOOP_MAPRED_HOME=/opt/modules/cdh/hadoop-2.5.0-cdh5.3.6/

#set the path to where bin/hbase is available
#export HBASE_HOME=

#Set the path to where bin/hive is available
#export HIVE_HOME=
export HIVE_HOME=/opt/modules/cdh/hive-0.13.1-cdh5.3.6/

#Set the path for where zookeper config dir is
#export ZOOCFGDIR=
export ZOOCFGDIR=/opt/modules/cdh/zookeeper-3.4.5-cdh5.3.6/
export ZOOKEEPER_HOME=/opt/modules/cdh/zookeeper-3.4.5-cdh5.3.6/

4、拷贝jdbc驱动到sqoop的lib目录下
cp -a mysql-connector-java-5.1.27-bin.jar /opt/modules/cdh/sqoop-1.4.5-cdh5.3.6/lib/
5、启动sqoop
$ bin/sqoop help查看帮助
6、测试Sqoop是否能够连接成功
$ bin/sqoop list-databases --connect jdbc:mysql://hadoop-senior01.itguigu.com:3306/metastore
–username root
–password 123456

案例

使用sqoop将mysql中的数据导入到HDFS
Step1、确定Mysql服务的正常开启
Step2、在Mysql中创建一张表
mysql> create database company;
mysql> create table staff(
id int(4) primary key not null auto_increment,
name varchar(255) not null,
sex varchar(255) not null);
mysql> insert into staff(name, sex) values(‘Thomas’, ‘Male’);
Step3、操作数据

RDBMS --> HDFS
使用Sqoop导入数据到HDFS
** 全部导入
$ bin/sqoop import
–connect jdbc:mysql://hadoop-senior01.itguigu.com:3306/company
–username root
–password 123456
–table staff
–target-dir /user/company
–delete-target-dir
–num-mappers 1
–fields-terminated-by “\t”
** 查询导入
$ bin/sqoop import
–connect jdbc:mysql://hadoop-senior01.itguigu.com:3306/company
–username root
–password 123456
–target-dir /user/company
–delete-target-dir
–num-mappers 1
–fields-terminated-by “\t”
–query ‘select name,sex from staff where id >= 2 and $CONDITIONS;’
** 导入指定列
$ bin/sqoop import
–connect jdbc:mysql://hadoop-senior01.itguigu.com:3306/company
–username root
–password 123456
–target-dir /user/company
–delete-target-dir
–num-mappers 1
–fields-terminated-by “\t”
–columns id, sex
–table staff
** 使用sqoop关键字筛选查询导入数据
$ bin/sqoop import
–connect jdbc:mysql://hadoop-senior01.itguigu.com:3306/company
–username root
–password 123456
–target-dir /user/company
–delete-target-dir
–num-mappers 1
–fields-terminated-by “\t”
–table staff
–where “id=3”

RDBMS --> Hive
1、在Hive中创建表(不需要提前创建表,会自动创建)
hive (company)> create table staff_hive(id int, name string, sex string) row format delimited fields terminated by ‘\t’;
2、向Hive中导入数据
$ bin/sqoop import
–connect jdbc:mysql://hadoop-senior01.itguigu.com:3306/company
–username root
–password 123456
–table staff
–num-mappers 1
–hive-import
–fields-terminated-by “\t”
–hive-overwrite
–hive-table company.staff_hive

Hive/HDFS --> RDBMS
1、在Mysql中创建一张表
$ bin/sqoop export
–connect jdbc:mysql://hadoop-senior01.itguigu.com:3306/company
–username root
–password 123456
–table staff_mysql
–num-mappers 1
–export-dir /user/hive/warehouse/company.db/staff_hive
–input-fields-terminated-by “\t”

使用opt文件打包sqoop命令,然后执行
Step1、创建一个.opt文件
Step2、编写sqoop脚本
export
–connect
jdbc:mysql://hadoop-senior01.itguigu.com:3306/company
–username
root
–password
123456
–table
staff_mysql
–num-mappers
1
–export-dir
/user/hive/warehouse/company.db/staff_hive
–input-fields-terminated-by
“\t”
Step3、执行该脚本
$ bin/sqoop --options-file opt/job_hffs2rdbms.opt

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇hive:Access denied for user .. 下一篇hive:Access denied for user ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目