Hive WordCount

本文详细介绍如何使用Hive SQL进行数据处理,包括启动metastore服务、建表、加载数据、使用HQL进行数据查询和分析,以及常见异常处理。通过具体实例,展示如何将文本文件中的数据加载到Hive表,并利用HQL进行单词分割和计数,对比传统MapReduce编程,Hive SQL提供更为简便高效的数据处理方式。

1. 启动metastore服务

 ./hive --service metastore &

2. 建表

创建一个行表,用于存储foobar.txt文件中的每行句子。

create table tbl_line(line string) 
row format delimited 
fields terminated by '\n';

3. 加载数据

将文件数据加载到hive表中。

echo "Hadoop Common\nHadoop Distributed File System\nHadoop YARN\nHadoop MapReduce " > /tmp/foobar.txt
hive> load data local inpath '/tmp/foobar.txt' into table tbl_line;

加载的数据会放到Hadoop中/data/hive/warehouse/test.db目录下,/data/hive/warehouse是hive-site.xml配置的hive.metastore.warehouse.dir值, test是数据库名称, tbl_line是表名。

在这里插入图片描述

4. HQL

根据MapReduce方式我们需要将每行句子拆分成独立的单词,然后对单词汇总。

  • split(字符串,分割符) 函数:用于分割字符串, 返回一个数组
  • explode(数组)函数:将数组中的每个元素展开成列
hive> select split("hello world", " ") from tbl_line limit 1;
OK
["hello","world"]

hive> select * from tbl_line;
OK
Hadoop Common
Hadoop Distributed File System
Hadoop YARN
Hadoop MapReduce

# 将每行句子分割成每个单词数组
hive> select split(line, " ") from tbl_line;
OK
["Hadoop","Common"]
["Hadoop","Distributed","File","System"]
["Hadoop","YARN"]
["Hadoop","MapReduce",""]

hive> select explode(split(line, " ")) from tbl_line;
OK
Hadoop
Common
Hadoop
Distributed
File
System
Hadoop
YARN
Hadoop
MapReduce
# 创建一个单词表
hive> create table tbl_word(word string);

# 将每一行句子拆分成每个单词插入到表中
hive> insert into table tbl_word select explode(split(line, " ")) as word from tbl_line;

hive> select * from tbl_word;
OK
Hadoop
Common
Hadoop
Distributed
File
System
Hadoop
YARN
Hadoop
MapReduce

hive> select word, count(*) as count from tbl_word  group by word order by count desc;

在这里插入图片描述

使用Hadoop MapReduce需要写代码,然后执行jar包。使用Hive只需要写HQL就可以了。相比之下使用Hive SQL更简便。

5. 异常

  • FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

    ./hive --service metastore &

  • Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$POSIX.stat(Ljava/lang/String;)Lorg/apache/hadoop/io/nativeio/NativeIO$POSIX$Stat;
    此异常是最常见的异常,这里列举出现此异常的几个原因:

  1. 有可能是hql语法有错误,确保语法是正确。
  2. hadoop 中lib/native有问题,把lib重命名成lib2,然后重启hadoop,再执行hive sql就好了,相当于不使用原生库了lib/native。不使用原生库hadoop就会报警告 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable ,先不用管这个警告。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风流 少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值