目录

1. Hive简介

2. Hive安装及配置

2.1 安装Hive

2.2 安装并配置mysql

2.2.1 Ubuntu安装MySQL

2.2.2 启动Hive

3. Hive常用HiveQL操作(参考)

3.1 Hive基本数据类型

3.1.1 基本数据类型

3.1.2 复杂数据类型

3.2 常用的HiveQL操作命令

3.3 数据操作

3.3.1 向表中装载数据

3.3.2 从表中导出数据

3.3.3 查询操作

3.3.4 连接

3.3.5 子查询

4. 实验7(词频统计)


1. Hive简介

(略)

2. Hive安装及配置

2.1 安装Hive

官网下载:Index of /hive

不建议用最新版,推荐按照教程使用3.1.2版本Hive

解压安装,配置环境变量

sudo tar -zxvf ./apache-hive-3.1.2-bin.tar.gz -C /usr/local   # 解压到/usr/local中
cd /usr/local/
sudo mv apache-hive-3.1.2-bin hive       # 将文件夹名改为hive
sudo chown -R dblab:dblab hive            # 修改文件权限

【作者在这里安装在/media/liuhao/sda4/】

vim ~/.bashrc

export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
export HADOOP_HOME=/usr/local/hadoop

路径根据自己安装的实际路径修改

source ~/.bashrc

修改/usr/local/hive/conf下的hive-site.xml

cd /usr/local/hive/conf
mv hive-default.xml.template hive-default.xml

将hive-default.xml.template重命名为hive-default.xml

使用vim编辑器新建一个配置文件hive-site.xml

cd /usr/local/hive/conf
vim hive-site.xml

在hive-site.xml中添加如下配置信息:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://localhost:3306/hive?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>hive</value><description>username to use against metastore database</description></property><property><name>javax.jdo.option.ConnectionPassword</name><value>hive</value><description>password to use against metastore database</description></property>
</configuration>

其中:

<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
    <description>username to use against metastore database</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hive</value>
    <description>password to use against metastore database</description>
  </property>

需要改成自己数据库的用户名和密码,不然hive无法连接数据库!

(未配置mysql数据可先按照2.2安装并配置数据库)

2.2 安装并配置mysql

2.2.1 Ubuntu安装MySQL

sudo apt-get update  #更新软件源
sudo apt-get install mysql-server  #安装mysql

  • 启动和关闭mysql服务器:
service mysql start
service mysql stop
  • 确认是否启动成功,mysql节点处于LISTEN状态表示启动成功:
sudo netstat -tap | grep mysql
  • 进入mysql shell界面:
mysql -u root -p

【重新设置root密码参考】:出现ERROR 1698 (28000): Access denied for user ‘root‘@‘localhost‘ 的解决方法_码农研究僧的博客-CSDN博客_1698 access denied for

其他说明:

解决利用sqoop导入MySQL中文乱码的问题(可以插入中文,但不能用sqoop导入中文)
导致导入时中文乱码的原因是character_set_server默认设置是latin1,如下图。

可以单个设置修改编码方式set character_set_server=utf8;但是重启会失效,建议按以下方式修改编码方式。
(1)编辑配置文件。sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
(2)在[mysqld]下添加一行character_set_server=utf8。如下图


(3)重启MySQL服务。service mysql restart
(4)登陆MySQL,并查看MySQL目前设置的编码。show variables like "char%";

2.2.2 启动Hive

下载mysql jdbc 包

下载地址:MySQL :: Download Connector/J

tar -zxvf mysql-connector-java-5.1.40.tar.gz   #解压
cp mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar  /usr/local/hive/lib #将mysql-connector-java-5.1.40-bin.jar拷贝到/usr/local/hive/lib目录下(按照自己定义的路径)

【这个下载有些困难,可使用下面链接下载】

http://mvnrepository.com/artifact/mysql/mysql-connector-java

【实现词频统计功能时会提到,hive支持jdk8但不支持jdk18,mysql-connector选择对应版本,即8.9.30】

 启动并登陆mysql shell

service mysql start #启动mysql服务
 mysql -u root -p  #登陆shell界面

新建hive数据库

mysql> create database hive;    #这个hive数据库与hive-site.xml中localhost:3306/hive的hive对应,用来保存hive元数据

配置mysql允许hive接入

mysql> grant all on *.* to hive@localhost identified by 'hive';   #将所有数据库的所有表的所有权限赋给hive用户,后面的hive是配置hive-site.xml中配置的连接密码
mysql> flush privileges;  #刷新mysql系统权限关系表

启动hive

start-dfs.sh #启动Hadoop的HDFS
hive  #启动hive

注意,我们这里已经配置了PATH,所以,不要把start-all.sh和hive命令的路径加上。如果没有配置PATH,请加上路径才能运行命令,比如,本教程Hadoop安装目录是“/usr/local/hadoop”,Hive的安装目录是“/usr/local/hive”,因此,启动hadoop和hive,也可以使用下面带路径的方式:

cd /usr/local/hadoop #进入Hadoop安装目录
./sbin/start-dfs.sh
cd /usr/local/hive
./bin/hive

【启动Hive过程中,可能出现的错误和解决方案:】

【错误1】
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument
【原因】
com.google.common.base.Preconditions.checkArgument 这是因为hive内依赖的guava.jar和hadoop内的版本不一致造成的。
【解决方法】
1.查看hadoop安装目录下share/hadoop/common/lib内guava.jar版本
2.查看hive安装目录下lib内guava.jar的版本 如果两者不一致,删除版本低的,并拷贝高版本的 问题解决!

【错误2】

org.datanucleus.store.rdbms.exceptions.MissingTableException: Required table missing : “VERSION” in Catalog “” Schema “”. DataNucleus requires this table to perform its persistence operations.

【解决方案】
进入hive安装目录(比如/usr/local/hive),执行如下命令:./bin/schematool -dbType mysql -initSchema

【错误3】

在启动Hive时,有可能会出现Hive metastore database is not initialized的错误,这里给出解决方案。
【解决方案】
解决Hive启动,Hive metastore database is not initialized的错误。出错原因:以前曾经安装了Hive或MySQL,重新安装Hive和MySQL以后,导致版本、配置不一致。解决方法是,使用schematool工具。Hive现在包含一个用于 Hive Metastore 架构操控的脱机工具,名为 schematool.此工具可用于初始化当前 Hive 版本的 Metastore 架构。此外,其还可处理从较旧版本到新版本的架构升级。所以,解决上述错误,你可以在终端执行如下命令:

cd /usr/local/hive

./bin/schematool -dbType mysql -initSchema

3. Hive常用HiveQL操作(参考)

3.1 Hive基本数据类型

首先,我们简单叙述一下HiveQL的基本数据类型。

Hive支持基本数据类型和复杂类型, 基本数据类型主要有数值类型(INT、FLOAT、DOUBLE ) 、布尔型和字符串, 复杂类型有三种:ARRAY、MAP 和 STRUCT。

3.1.1 基本数据类型

TINYINT: 1个字节

SMALLINT: 2个字节

INT: 4个字节

BIGINT: 8个字节

BOOLEAN: TRUE/FALSE

FLOAT: 4个字节,单精度浮点型

DOUBLE: 8个字节,双精度浮点型STRING 字符串

3.1.2 复杂数据类型

ARRAY: 有序字段

MAP: 无序字段

STRUCT: 一组命名的字段

3.2 常用的HiveQL操作命令

Hive常用的HiveQL操作命令主要包括:数据定义、数据操作。接下来详细介绍一下这些命令即用法(想要了解更多请参照《Hive编程指南》一书)。

主要用于创建修改和删除数据库、表、视图、函数和索引。

1创建、修改和删除数据库

create database if not exists hive;       #创建数据库

show databases;                           #查看Hive中包含数据库

show databases like 'h.*';                #查看Hive中以h开头数据库

describe databases;                       #查看hive数据库位置等信息

alter database hive set dbproperties;     #为hive设置键值对属性

use hive;                                 #切换到hive数据库下

drop database if exists hive;             #删除不含表的数据库

drop database if exists hive cascade;     #删除数据库和它中的表

注意,除 dbproperties属性外,数据库的元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置,没有办法删除或重置数据库属性。

2创建、修改和删除表

#创建内部表(管理表)

create table if not exists hive.usr(

      name string comment 'username',

      pwd string comment 'password',

      address struct<street:string,city:string,state:string,zip:int>,

      comment  'home address',

      identify map<int,tinyint> comment 'number,sex')

      comment 'description of the table'  

     tblproperties('creator'='me','time'='2016.1.1');

#创建外部表

create external table if not exists usr2(

      name string,

      pwd string,

  address struct<street:string,city:string,state:string,zip:int>,

      identify map<int,tinyint>)

      row format delimited fields terminated by ','

     location '/usr/local/hive/warehouse/hive.db/usr';

#创建分区表

create table if not exists usr3(

      name string,

      pwd string,

      address struct<street:string,city:string,state:string,zip:int>,

      identify map<int,tinyint>)

      partitioned by(city string,state string);    

#复制usr表的表模式  

create table if not exists hive.usr1 like hive.usr;

 

show tables in hive;  

show tables 'u.*';        #查看hive中以u开头的表

describe hive.usr;        #查看usr表相关信息

alter table usr rename to custom;      #重命名表

 

#为表增加一个分区

alter table usr2 add if not exists

     partition(city=”beijing”,state=”China”)

     location '/usr/local/hive/warehouse/usr2/China/beijing';

#修改分区路径

alter table usr2 partition(city=”beijing”,state=”China”)

     set location '/usr/local/hive/warehouse/usr2/CH/beijing';

#删除分区

alter table usr2 drop if exists  partition(city=”beijing”,state=”China”)

#修改列信息

alter table usr change column pwd password string after address;

 

alter table usr add columns(hobby string);                  #增加列

alter table usr replace columns(uname string);              #删除替换列

alter table usr set tblproperties('creator'='liming');      #修改表属性

alter table usr2 partition(city=”beijing”,state=”China”)    #修改存储属性

set fileformat sequencefile;             

use hive;                                                   #切换到hive数据库下

drop table if exists usr1;                                  #删除表

drop database if exists hive cascade;                       #删除数据库和它中的表

(3)视图和索引的创建、修改和删除

create view view_name as....;                #创建视图

alter view view_name set tblproperties(…);   #修改视图

#删除视图

drop view if exists view_name;

#创建索引

create index index_name on table table_name(partition_name/column_name)  

as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild....;

alter index index_name on table table_name partition(...)  rebulid;   #重建索引

show formatted index on table_name;                       #显示索引

drop index if exists index_name on table table_name;      #删除索引

(4)用户自定义函数

·在新建用户自定义函数(UDF)方法前,先了解一下Hive自带的那些函数。show functions; 命令会显示Hive中所有的函数名称:

·若想要查看具体函数使用方法可使用describe function 函数名:

首先编写自己的UDF前需要继承UDF类并实现evaluate()函数,或是继承GenericUDF类实现initialize()函数、evaluate()函数和getDisplayString()函数,还有其他的实现方法,感兴趣的用户可以自行学习。

另外,如果用户想在Hive中使用该UDF需要将我们编写的Java代码进行编译,然后将编译后的UDF二进制类文件(.class文件)打包成一个JAR文件,然后在Hive会话中将这个JAR文件加入到类路径下,在通过create function语句定义好使用这个Java类的函数。

add jar <jar文件的绝对路径>;                        #创建函数

create temporary function function_name;

drop temporary function if exists function_name;    #删除函数

3.3 数据操作

主要实现的是将数据装载到表中(或是从表中导出),并进行相应查询操作,对熟悉SQL语言的用户应该不会陌生。

3.3.1 向表中装载数据

创建表stu和course,stu有两个属性id与name,course有两个属性cid与sid。

create table if not exists hive.stu(id int,name string)

row format delimited fields terminated by '\t';

create table if not exists hive.course(cid int,sid int)

row format delimited fields terminated by '\t';

向表中装载数据有两种方法:从文件中导入和通过查询语句插入。

(1)从文件中导入

load data local inpath '/usr/local/hadoop/examples/stu.txt' overwrite into table stu;

(2)通过查询语句插入

create table stu1 as select id,name from stu;

insert overwrite table stu1 select id,name from stu where(条件);

3.3.2 从表中导出数据

(1)简单拷贝文件或文件夹

hadoop  fs -cp source_path target_path;

(2)写入临时文件

insert overwrite local directory '/usr/local/hadoop/tmp/stu'  select id,name from stu;

3.3.3 查询操作

和SQL的查询完全一样,这里不再赘述。主要使用select…from…where…等语句,再结合关键字group by、having、like、rlike等操作。这里我们简单介绍一下SQL中没有的case…when…then…句式、join操作和子查询操作。

case…when…then…句式和if条件语句类似,用于处理单个列的查询结果,语句如下:

select id,name,

case

when id=1 then 'first'

when id=2 then 'second'

else 'third'

3.3.4 连接

连接(join)是将两个表中在共同数据项上相互匹配的那些行合并起来, HiveQL 的连接分为内连接、左向外连接、右向外连接、全外连接和半连接 5 种。

(1)内连接(等值连接)

内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。

select stu.*, course.* from stu join course on(stu .id=course .sid);

(2)左连接

左连接的结果集包括“LEFT OUTER”子句中指定的左表的所有行, 而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行, 则在相关联的结果集中右表的所有选择列均为空值

select stu.*, course.* from stu left outer join course on(stu .id=course .sid);

(3)右连接

右连接是左向外连接的反向连接,将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

select stu.*, course.* from stu right outer join course on(stu .id=course .sid);

(4)全连接

全连接返回左表和右表中的所有行。当某行在另一表中没有匹配行时,则另一个表的选择列表包含空值。如果表之间有匹配行,则整个结果集包含基表的数据值

select stu.*, course.* from stu full outer join course on(stu .id=course .sid);

(5)半连接

半连接是 Hive 所特有的, Hive 不支持 in 操作,但是拥有替代的方案; left semi join, 称为半连接, 需要注意的是连接的表不能在查询的列中,只能出现在 on 子句中

select stu.* from stu left semi join course on(stu .id=course .sid);

3.3.5 子查询

标准 SQL 的子查询支持嵌套的 select 子句,HiveQL 对子查询的支持很有限,只能在from 引导的子句中出现子查询。

注意,在定义或是操作表时,不要忘记指定所需数据库。

4. 实验7(词频统计)

1.安装配置Hive(具体教程在2.1)

2.安装配置MySQL(具体教程在2.2)

【注意以下几点问题:】

(1)hive支持jdk1.8(jdk8),不支持jdk18,需要下载并配置jdk1.8

(2)mysql-connector下载对应版本放到hive/bin文件中(8.0.30)

(3)更改环境配置(jdk18→jdk1.8)

3.实现词频统计

(1)创建input目录,output目录会自动生成。其中input为输入目录,output目录为输出目录。

cd /usr/local/hadoop

mkdir input

(2)在input文件夹中创建测试文件myfile.txt

(3)打开MySQL数据库,新建数据库hive;打开Hadoop、Hive,

打开MySQL数据库,新建数据库hive

create database hive;

use hive;

打开Hadoop、Hive

./sbin/start-dfs.sh

./bin/hive

 (3.5)测试hive能否成功连接数据库

输入指令:show databases;

出现以下结果,则表明连接数据库成功

若无法连接数据库有以下集中可能:

a. jdk版本问题,请下载并配置jdk1.8

b. 环境配置有误,请检查:

~/.bashrc

hive/conf/

hadoop/etc/hadoop/hadoop-env.sh

c.没有初始化数据库,请输入以下指令:

schematool -dbType mysql -initSchema

(出现***Failed***的原因大概率是jdk不匹配,connector不匹配)

(4)通过HiveQL实现词频统计功能,HiveQL实现命令如下:

  1. create table docs(line string);
  2. load data inpath 'file:///usr/local/hadoop/input' overwrite into table docs;
  3. create table word_count as
  4. select word, count(1) as count from
  5. (select explode(split(line,' '))as word from docs) w
  6. group by word
  7. order by word

 (5)执行后,用select语句查看:

select * from word_count;

【参考资料】(部分参考资料需要校园网登录查看)

Hive3.1.2安装指南_厦大数据库实验室博客

Ubuntu安装MySQL及常用操作_厦大数据库实验室博客

【大数据处理技术】实验7(推荐林子雨老师的教程)相关推荐

  1. 大数据技术原理与应用(林子雨)MOOC作业与检验答案

    第1章 大数据概述 1单选(2分) 第三次信息化浪潮的标志是: A.个人电脑的普及 B.云计算.大数据.物联网技术的普及 C.虚拟现实技术的普及 D.互联网的普及 正确答案:B你选对了 2单选(2分) ...

  2. 大数据处理技术作业——使用HBaseMongoDBMapReduce进行数据存储和管理

    前言 写这篇文章的目的,主要是为了记录一下这次作业历程,并且笔者了解到很多同志饱受作业折磨,遂简单分享一下个人完成作业的历程,以下内容仅为本人的一些乱七八糟的想法,仅作参考O(∩_∩)O 作业要求 1 ...

  3. 《大数据处理技术Spark》--林子雨

    从林子雨老师的网课上学到的东西,林老师讲的特别清晰,记录一下,防止忘记. 以下是资料的链接: hadoop安装 课程 课件链接 其他资料: Spark-SQL之DataFrame操作大全 文章目录 1 ...

  4. 【大数据处理技术】「#0」实验环境准备

    文章目录 实验步骤解析 「Mac系统」安装配置Linux虚拟机 虚拟机下载安装 Ubuntu下载安装 设置共享文件夹 安装Hadoop 创建hadoop用户(可忽略,本实验不使用hadoop用户) 更 ...

  5. 【大数据处理技术】实验10

    文章目录 安装Flink 实现WordCount程序(了解) 使用IntelliJ IDEA 开发调试 WordCount程序 [林子雨老师教程] 安装Flink 下载:https://flink.a ...

  6. 大数据技术原理与应用—第1讲 大数据概述(林子雨老师)课后习题

    以下是慕课上林子雨老师,大数据原理及应用的第一讲习题答案.仅供大家学习参考. 第8题:4V指的是:价值密度低,数据量大,数据类型多,处理速度快

  7. 大数据技术原理与应用—第10讲 Spark(林子雨老师)课后习题

    以下是慕课上林子雨老师,大数据原理及应用的第十讲习题答案.仅供大家学习参考. 10.RDD,中文全称是 (==弹性分布式数据 ==),是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型. 多 ...

  8. 《大数据原理与应用》林子雨:一. 大数据基础

    <大数据原理与应用>林子雨:一. 大数据基础 思维导图 PS:边学边记 重点: 理解大数据的概念及其处理架构Hadoop 难点: 掌握大数据处理架构Hadoop的安装与使用方法 第1章 大 ...

  9. 【大数据处理技术】期末复习整理

    所用教材:<大数据技术原理与应用--概念.存储.处理.分析与应用(第2版)>,由厦门大学计算机科学系林子雨编著. 教材官网:http://dblab.xmu.edu.cn/post/big ...

  10. 大数据概述 ——林子雨老师第一课

    大数据概念:数据量大,数据类型繁多,处理速度快,价值密度低 . 大数据的影响: 思维方面:全样而非抽样,效率而非精确,相关而非因果. 关键技术:数据采集,数据存储与管理,数据处理与分析,数据隐私和安全 ...

最新文章

  1. J-Focus动画应用框架使用教程
  2. Nginx的https设置
  3. 线程之线程共享成员变量的几种情况
  4. Codeforces Round #359 (Div. 2) C. Robbers' watch 搜索
  5. 深度学习(四十三)——深度强化学习(6)AlphaGo全系列
  6. 虚拟网络的组建和应用课后习题答案
  7. Codeforces Round #623 (Div. 2, based on VK Cup 2019-2020 - Elimination Round, Engine) C. Restoring
  8. 通过Java 8中的Applicative Builder组合多个异步结果
  9. ICCV 2019 Oral 端到端任意形状场景文字识别
  10. UI设计加载动效趋势|可以认真学习临摹的素材模板
  11. 复旦自考 网络专业 java 上机考_上海复旦大学自考方法及考试科目
  12. 保存网站快捷方式到桌面的php代码,转的一个朋友的了,加了点判断
  13. 学python可以做什么职业-业余学Python能做什么?对职业发展有什么帮助?
  14. java实例摘要(三)
  15. 智慧城市智慧园区智慧路灯方案介绍
  16. 3DMAX 卸载方法,完美彻底卸载清除干净3DMAX各种残留注册表和文件【转载】
  17. 我的大脑越来越喜欢那些碎片化的、不用思考的文章了!
  18. Docker在千寻位置的实践
  19. Xubuntu之lightdm开机无密码进入界面
  20. 软件开发工具下载地址

热门文章

  1. STM32 ADC 过采样技术
  2. MATLAB实现离散信号的DTFT和DFT
  3. python数据挖掘实验报告_Python数据挖掘实践—决策树
  4. (一)人工智能、AI批量抠图、AI视频抠像、图片换背景、视频换背景、实时抠图、实时抠像、虚拟场景直播系统、虚拟旅游、人像去背景、图像去背景、视频背景消除
  5. 7教程统计意义_SPSS进行中介效应检验的实战操作与分析结果详解 ——【杏花开生物医药统计】...
  6. android手机 无电池开机画面,还有这种操作,这款手机无电池也能开机
  7. iOS动画之CAAnimation
  8. mescroll源码
  9. 单片机 WIFI模块发送AT指令收不到回复问题
  10. python计算微积分_python 微积分计算