绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
数据仓库Hive的使用
2020-07-01 17:10:06

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表是什么都没有的,我们进终端看看

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

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

只有一个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;

好了,现在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上运行



上面是正常运行的截图,但是很多人可能会卡在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

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

然后再来看部门表。

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

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

首先是员工表

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


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

sql语句这样写

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

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

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


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


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


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

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

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Hive专区
创建时间:2020-07-01 14:09:32
Hive是一个基于Hadoop的数据仓库平台。通过hive,我们可以方便地进行ETL的工作。hive定义了一个类似于SQL的查询语言:HQL,能 够将用户编写的QL转化为相应的Mapreduce程序基于Hadoop执行。 Hive是Facebook 2008年8月刚开源的一个数据仓库框架,其系统目标与 Pig 有相似之处,但它有一些Pig目前还不支持的机制,比如:更丰富的类型系统、更类似SQL的查询语言、Table/Partition元数据的持久化等。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • markriver
    专家
戳我,来吐槽~