之前一直没有找到Hive和yarn的实例,这片文章的例子挺详细的。

1、Hive基本使用

*创建表和使用hive进行wordcound统计(对比mapreduce的实现的易用性)

建表语句:CREATE TABLE table_name

[(col_name data_type [COMMENT col_comment])]

那么我们进入hive建立一张hive_wordcound表格

create table hive_wordcount(context string);

注:这里还有个问题,你启动hive有的盆友会报错,比如常见的:

org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeException): Cannot create directory。。。。。。。

这样的错误,这种情况是你需要关闭安全模式

输入hadoop dfsadmin -safemode leave 关闭

其实找错误的时候可以开启调试模式输入export HADOOP_ROOT_LOGGER=DEBUG,console

关闭调试模式export HADOOP_ROOT_LOGGER=INFO,console

好了创建成功,select表是什么都没有的,我们进终端看看

hive load原文件删除 hive删数据_Hive

好了,这个时候我们再切到mysql中去看看元数据

hive load原文件删除 hive删数据_hive load原文件删除_02

进到TBLS看到没,已经有这么个表了,表的id是1,表名叫做hive_wordcound,再来看看字段有哪些。进入COLUMNS_V2

hive load原文件删除 hive删数据_hive_03

只有一个context字段,现在表建好了,那么是不是要把数据放到里面去呢?

加载数据到hive表语句:LOAD DATA LOCAL INPATH 'filepath' INTO TABLE tablename (不加 local就是在hdfs上加载过来)

根据语句在终端输入:

load data local inpath '/Users/yinchuchu/Downloads/software/hadoop/hadoop-2.6.0-cdh5.7.0/tmp/test/input/wc/hello.txt
' into table hive_wordcount;

hive load原文件删除 hive删数据_Hive_04

好了,现在select发现数据有了!那么数据有了,下面就要统计词频了!

这里就要用到hive一些函数了。

sql语句:select word, count(1) from hive_wordcount lateral view explode(split(context,'\s')) wc as word group by word;

注:lateral view explode(): 是把每行记录按照指定分隔符进行拆解

split(context,'\s')

hive ql提交执行以后会生成mr作业,并在yarn上运行

hive load原文件删除 hive删数据_hive_05

 

hive load原文件删除 hive删数据_mapreduce_06

 

hive load原文件删除 hive删数据_hive_07

上面是正常运行的截图,但是很多人可能会卡在mapreduce开始job的时候,这个时候就停掉把debug调出来,然后查错误,这个时候肯定会报错的,找到错误的那一条,可能是org.apache.hadoop.util.NativeCodeLoader.buildSupportsOpenssl()Z也可能是java.Uknown等等之类的错误,总之如果卡在开始很可能你的hosts文件有问题,或者你的hadoop配置文件,core-site.xml这些文件配置有问题!google上有很多很多的解决方案。报错不用着急,找错误并且解决掉也是成长的一种方式!

其实到这里应该就能知道,hiveql提交执行以后会生成mapreduce作业,并在yarn上运行,

这就是hive的好处,你只需要写sql语句就能够对文件系统中的数据使用SQL的方式来进行大数据的统计和分析。

到这一步来看使用hive和mapreduce哪个简单?肯定是hive简单,只需要sql语句就能完成对大数据的统计和分析!

*创建一个案例

我们再创建一个公司部门的表来进一步讲述hive的使用。

一个是员工表 emp.txt

一个是部门表dept.txt

首先来看员工表 emp.txt

hive load原文件删除 hive删数据_hive load原文件删除_08

从第一列开始是员工编号、员工名称、员工岗位、员工上级领导的编号、员工入职的时间、员工的工资、员工经贴(有的有有的没有)、员工的部门编号。

然后再来看部门表。

hive load原文件删除 hive删数据_hive_09

从第一列开始是部门编号、部门名称、部门地址。

根据这两张表创建我们的表。

首先是员工表

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';

然后是部门表

create table dept(
deptno int,
dname string,
location string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

注:ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';这一句表示字段之间的分隔符用制表符tab键

然后把这两段sql语句在hive中执行

 

hive load原文件删除 hive删数据_hive load原文件删除_10

 

执行完了之后表中还没有数据,我们要导入数据,和上面导入数据到hive中一样。

load data local inpath '/Users/yinchuchu/Downloads/software/hadoop/SparkSql/data/emp.txt' into table emp;

load data local inpath '/Users/yinchuchu/Downloads/software/hadoop/SparkSql/data/dept.txt' into table dept;

 

hive load原文件删除 hive删数据_hadoop_11

现在数据进来了,我们利用这个数据进行简单的统计,统计每个部门员工人数,这个只需要emp表就能完成。

sql语句这样写

select deptno, count(1) from emp group by deptno;

这句sql表示按照deptno(部门编号)进行分组,求每个部门的人数count(1)

可以看到,执行开始自动提交mapreduce作业!

 

hive load原文件删除 hive删数据_hive_12

然后我们打开yarn页面来看看。

hive load原文件删除 hive删数据_hadoop_13

这就是一个mapreduce作业嘛!我们看执行结果!

hive load原文件删除 hive删数据_hive_14

结果出来了!我们的数据量虽然很小,但是mapreduce花的时间可一点都不少!

好了,到此数据仓库Hive的使用就写到这里吧!