2016.10.13 20:28

  很久没有写随笔了,自打小宝出生后就没有写过新的文章。数次来到博客园,想开始新的学习历程,总是被各种琐事中断。一方面确实是最近的项目工作比较忙,各个集群频繁地上线加多版本的提测,每次到了晚上就感觉很疲惫,另一方面确实是自己对自己最近有些放松,没有持续地学习。很庆幸今天能在一个忙碌的工作日后,开始着手这篇文章。

  来到大数据前,我对大数据可以说是一无所知。诸如Hadoop、Hive等名词仅仅处于“听过”的阶段,完全不知道其作用。大数据的概念真的很多,想真正理解必须从实践中慢慢体会,否则则永远只能停留在字面意思。

一、Hadoop

  相信大部分人都听过Hadoop,但是都不知道它到底是干什么的,有什么作用。Hadoop其实可以分为两块:HDFS和MapReduce。

  HDFS:Hadoop Distributed File System,是一个分布式文件系统,它的主要作用是为海量数据提供存储,并提供“流式“访问文件系统中的数据。存储在HDFS中的数据文件是结构化的,比如日志文件。

  MapReduce:看过廖雪峰的Python教程的人应该都对Map和Reduce有一定了解,这里的MapReduce其实就是一样的操作(如果没看过,想了解Map、Reduce过程可以访问《廖雪峰Python教程-map/reduce》)。它主要提供了对海量数据的计算。

二、Hive

  在实践中,数据开发工程师们想对数据进行计算就要写一个MapReduce程序,而这显然需要较大的成本,对于那些不擅长开发的人想简单地查询数据更是抬高了较大的门槛。于是Hive就是为了解决这个问题而生的。它将存储在HDFS中的数据文件(例如日志),通过建立一种映射关系映射成一张数据库表,即Hive表。Hive中有一个模块“metastore”,,一般使用mysql,就是专门用来存储该映射后的数据库表的表结构信息,例如表名、字段名、分区、属性(是否外部表、分区表)等,没有具体的数据。业界也称它为”元数据“。然后真实的数据可以通过load data转换为hive表中的数据,或者通过add partition的方式建立数据映射,从而Hive就提供了一种通过SQL语句查询的方式来计算HDFS中的实际数据文件。

  当一条Hive SQL语句被执行时,Hive有一套映射工具(metastore,一般存放在mysql、derby中),它会对应地将SQL语句转化为MapReduce任务,把sql中的表、字段映射成HDFS中的文件、列,然后去执行对HDFS原始数据文件的计算。

  其实这些内容似乎在所有关于Hadoop、Hive的地方都能看到,字面上理解也并不难。但是如果你是一个真正的初次接触大数据的人的话,我想你会可能也跟我刚开始一样,对它们的理解仅仅是停留在字面。这里举一个例子来解释上面这些字面真正的意思。

  比如我有一个存在HDFS中的access.log日志文件,其内容如下:

假如想统计ip为10.165.152.123的登录记录,如果通过MapReduce去做的话,可能的代码实现方法是:首先解析日志文件,每行去查找是否包含“10.165.152.123”,如果是则再通过正则匹配去取出后面的相关内容(Map);然后对每行的结果进行汇总计算(Reduce)。

  Hive的做法:

  1. 先任意取一条日志,例如10.165.152.123 - - [13/Oct/2016:14:55:06 +0800] "GET /index.html HTTP/1.0" 200 7992 2124,将其中的列映射成字段,如:10.165.152.123对应ip,13/Oct/2016:14:55:06对应time,GET /index.html HTTP/1.0对应method(请求方法),200对应result(返回码),7992对应bytes(字节数),2124对应response_time(响应时间)。

  2. 然后相对应地,选定一个数据库(比如znilog)下,创建一张表名为tbl_accesslog的记录字段名、是否分区(比如按date分区)、属性(是否外部表)的hive表。

  需要注意的是,hive表的实际存储位置也是在hdfs上,比如这种情况下默认的hdfs路径可能就是/warehouser/znilog.db/tbl_accesslog。这个路径就是内部表(也称管理表)的hdfs存储路径。如果是外部表,用户可以自己设定外部表的location。  

3. 对于内部表,我们需要将数据通过load data的方式,将原始数据文件中的数据通过映射的方式,转化为映射后的数据(一般按列存放)存入内部表下。

4. 对于外部表,我们可以直接通过add partition的方式将原始hdfs路径下的数据文件,映射到外部表下。当删除表时,Hive默认存储位置的数据会被删除,但是外部表的数据不会被删除。

   5. 这样我们就有了Hive表,以及Hive表包含的元数据信息(存在metastore中,一般是mysql),Hive表中包含转化后的数据信息,我们可以直接通过Hive SQL语句(select * from tbl_accesslog where ip='10.165.152.123')来获取我们想要的信息。

   

初识Hadoop、Hive的更多相关文章

  1. 初识Hadoop

    第一部分:              初识Hadoop 一.             谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...

  2. 初识Hadoop入门介绍

    初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...

  3. 大数据测试之初识Hadoop

    大数据测试之初识Hadoop POPTEST老李认为测试开发工程师是面向测试的开发,也就是说,写代码就是为完成测试任务服务的,写自动化测试(性能自动化,功能自动化,安全自动化,接口自动化等等)的cas ...

  4. 细细品味大数据--初识hadoop

    初识hadoop 前言 之前在学校的时候一直就想学习大数据方面的技术,包括hadoop和机器学习啊什么的,但是归根结底就是因为自己太懒了,导致没有坚持多长时间,加上一直为offer做准备,所以当时重心 ...

  5. Hive创建表格报【Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException】引发的血案

    在成功启动Hive之后感慨这次终于没有出现Bug了,满怀信心地打了长长的创建表格的命令,结果现实再一次给了我一棒,报了以下的错误Error, return code 1 from org.apache ...

  6. FineReport中hadoop,hive数据库连接解决方案

    1. 描述 Hadoop是个很流行的分布式计算解决方案,Hive是基于hadoop的数据分析工具.一般来说我们对Hive的操作都是通过cli来进行,也就是Linux的控制台,但是,这样做本质上是每个连 ...

  7. hive 使用where条件报错 java.lang.NoSuchMethodError: org.apache.hadoop.hive.ql.ppd.ExprWalkerInfo.getConvertedNode

    hadoop 版本 2.6.0 hive版本 1.1.1 错误: java.lang.NoSuchMethodError: org.apache.hadoop.hive.ql.ppd.ExprWalk ...

  8. hadoop+hive使用中遇到的问题汇总

    问题排查方式  一般的错误,查看错误输出,按照关键字google 异常错误(如namenode.datanode莫名其妙挂了):查看hadoop($HADOOP_HOME/logs)或hive日志 h ...

  9. Hadoop Hive基础sql语法

     目录 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件映射为一张数据库表,并提供完整的 ...

  10. Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql、oracle...)间进行数据的传递

    http://niuzhenxin.iteye.com/blog/1706203   Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql.postgresql.. ...

随机推荐

  1. java中的锁

    java中有哪些锁 这个问题在我看了一遍<java并发编程>后尽然无法回答,说明自己对于锁的概念了解的不够.于是再次翻看了一下书里的内容,突然有点打开脑门的感觉.看来确实是要学习的最好方式 ...

  2. Chrome出了个小bug:论如何在Chrome下劫持原生只读对象

    Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...

  3. Partition1:新建分区表

    未分区的表,只能存储在一个FileGroup中:对Table进行分区后,每一个分区都存储在一个FileGroup,或分布式存储在不同的FileGroup中.对表进行分区的过程,是将逻辑上完整的一个表, ...

  4. C# 正则表达式大全

    文章导读 正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法.Regex 类表示不可变(只读)的 ...

  5. 一步一步教你用CSS画爱心

    今天小颖给大家分享一个用CSS画的爱心,底下有代码和制作过程,希望对大家有所帮助. 第一步: 先画一个正方形.如图: <!DOCTYPE html> <html> <he ...

  6. html5 canvas常用api总结(二)--绘图API

    canvas可以绘制出很多奇妙的样式和美丽的效果,通过几个简单的api就可以在画布上呈现出千变万化的效果,还可以制作网页游戏,接下来就总结一下和绘图有关的API. 绘画的时候canvas相当于画布,而 ...

  7. ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案

    好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...

  8. RIFF和WAVE音频文件格式

    RIFF file format RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构.RIFF文 ...

  9. BI分析受阻?FineBI推出SPA螺旋式分析新功能!

    过去,企业级的数据分析通常会有这么几种场景,业务部门托信息部门分析数据,结果报表一出,唇枪舌剑争论你我高低,数据不准,指标不对.信息部门欠缺业务概念,业务部门不懂技术逻辑,数据分析之路,暂时搁浅. 后 ...

  10. 【从零开始学BPM,Day1】工作流管理平台架构学习

    [课程主题] 主题:5天,一起从零开始学习BPM [课程形式] 1.为期5天的短任务学习 2.每天观看一个视频,视频学习时间自由安排. [第一天课程] Step 1 软件下载:H3 BPM10.0全开 ...