hive是什么意思

这篇文章主要介绍hive是什么意思,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

创新互联建站专注于双滦网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供双滦营销型网站建设,双滦网站制作、双滦网页设计、双滦网站官网定制、微信小程序开发服务,打造双滦网络公司原创品牌,更为您提供双滦网站排名全网营销落地服务。

    hive是hadoop整个项目使用中最常用的辅助项目之一。

    hadoop基础的组件有hdfs和mapreduce。hdfs完成整个hadoop集群中数据的存储,采用google的bigTable架构,其实我觉得就是将数据平分为多份,然后平分给分布式中的各机器上,存储在上面的数据就像一个隐藏文件,你在本地硬盘上找不到它们,但却可以通过hadoop中hdfs指令显示和操作它们,像hadoop dfs -ls 路径。而mapreduce则是将存储在集群中的数据进行分布式计算,由原来1台电脑的工作放到集群中所有电脑上,因此它的运算效率会有显著的提高。

    说完了hdfs和mapreduce,你应该对hadoop有个基本的了解了,咱们再说下hive。

    hive是通过解析你所写的HiveQL语句,来进行mapreduce计算,实现数据仓库中分析数据的作用。hive其实就是针对mapreduce写了一系列的方法和类,咱们可以通过写HIVEQL的形式执行mapreduce.用hiveQL能实现的功能你都能在mapReduce中写出来,如果你不闲麻烦的话。。。

    说下hive的主要功能:数据ETL(抽取、转换、加载)工具、数据存储和大型数据集的查询和分析能力。

    hive包含了四种数据模型:表(Table)、外部表(External Table)、分区(Partition)、桶(bucket)。

    表和外部表个人感觉用起来没什么区别, 有区别的地方只不过是外部表在创建的时候数据没有移动到数据仓库目录中,也就是说外部表不是由它自己来管理。而删除外部表的时候,只会删除元数据,外部表内的数据不会被删除。

    而分区和桶。。。就用分区。。不过分区和桶应该都是为了优化hive的分析效率而做的架构,我原来放10号到20号的数据都放个一个文件中,现在,我通过分区,将10号到20号的每日数据存储在以天为单位的存储文件中,这样,我查询某一天的数据时只是查询这一天的文件,而不是查询未分区前的整个文件,这样,效率就上来了,当然,这只是我的理解,可能还有其它作用。。。

    我理解的hive的基本工作是:将metadata存到hive自建的表中,然后通过操作和分析hive表中的数据,得到你想要的分析结果。

    hive的元数据存储有三种方式:

    一、Single User Mode.其实就是将metadata存储在一个内存数据库(derby)中。内存才多大啊,所以日常中基本不用。

    二、Multi User Mode. 通过是连接本机的MySQL,来获取元数据。这是日常和工作中最常用的一种方式。。貌似是工作中。。

    三、Remote Server Mode .其实就是通过本机的thrift协议访问另一个服务器上的metaStoreServcer,metadata不在本地。

    关于hive配置,不多说了,网上一堆。。。

   关于hive中表的操作,我说下容易让人误会的地方:

    hive虽然有表的概念,但它是一个离线数据分析工具,建表只是为了分析服务的,而分析的数据你不可能一条一条插入进去,或者删几条。。而它的正常使用方式是将metadata导入到hive表中,再通过hiveQL分析hive表中的数据。所以hive中不提供手动插入一条或几条数据。有手动就得有自动,自动我举个例子:insert overwrite table abc select * from bbc;这就是我认为的自动。。。。不能手动增加数据了,只能导入数据或自动添加数据。那么删除和修改呢,妥妥的也不能。

    关于hive语句的介绍也不多说了,网上也一堆,说的都挺清楚明白的。不过,这里我还得举个例子,关于我今天写的一个,烦了我一天的mapjoin...

     mapjoin 有两个好处:1.关联的两张表中有一个表非常小时,mapjoin可以将小表中的数据加载到内存中,然后在map阶段会自动大表中的数据,效率还不错。like :select /*+ mapjoin*/ a.id,a,username from a join b on (a.id=b.id)。这是在对等的情况下,效率相当不错。

                          2.还有一个好处就是它可以实现不对等连接。。 join ..on  ()  ,on 后面会跟对等的条件,像a.id=b.id ,你如果跟个like 会报错。而mapjoin可以实现不对等条件,就是在join后面不用on了,直接用where,不过这个效率,试了下,个人感觉效率不高。。like :select /*+ mapjoin*/ a.id,a,username from a join b where a.username like 'error')。

            关于hive其它的方面我还没有看。。等以后看完了,再谈下感受吧。。

    PS: 关于mapjoin()的非等值测试:

    两张表:pv_temp_test1(大表)  ,title_keyword_test(小表)

             pv_temp_test1:  530180 条 

             title_keyword_test  5646 条

  测试语句 :

hive> insert overwrite table hbase_test_keyword 
select /*+ mapjoin(a)*/ a.keyword,b.dt,b.pid,b.area,count(*),count(distinct clientid) from title_keyword_test a join (select dt,pid,area,wd,clientid from pv_temp_test1 where wd!='' and wd != 'None') b where b.wd like concat('%',a.keyword,'%') group by  a.keyword,b.dt,b.area,b.pid;

   花费时间:4927秒......

以上是“hive是什么意思”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


当前文章:hive是什么意思
本文来源:http://azwzsj.com/article/gpjoso.html