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. Android性能优化之利用Rxlifecycle解决RxJava内存泄漏

    前言: 其实RxJava引起的内存泄漏是我无意中发现了,本来是想了解Retrofit与RxJava相结合中是如何通过适配器模式解决的,结果却发现了RxJava是会引起内存泄漏的,所有想着查找一下资料学 ...

  2. 【Web动画】SVG 线条动画入门

    通常我们说的 Web 动画,包含了三大类. CSS3 动画 javascript 动画(canvas) html 动画(SVG) 个人认为 3 种动画各有优劣,实际应用中根据掌握情况作出取舍,本文讨论 ...

  3. javascript单元测试框架mochajs详解

    关于单元测试的想法 对于一些比较重要的项目,每次更新代码之后总是要自己测好久,担心一旦上线出了问题影响的服务太多,此时就希望能有一个比较规范的测试流程.在github上看到牛逼的javascript开 ...

  4. echarts+php+mysql 绘图实例

    最近在学习php+mysql,因为之前画图表都是直接在echart的实例demo中修改数据,便想着两相结合练习一下,通过ajax调用后台数据画图表. 我使用的是echart3,相比较第二版,echar ...

  5. JQuery(2)

    JQuery下拉框操作: 取值赋值操作 body代码: <select id="sel"> <option value="北京">北京& ...

  6. ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存

    ASP.Net MVC4+Memcached+CodeFirst实现分布式缓存 part 1:给我点时间,允许我感慨一下2016年 正好有时间,总结一下最近使用的一些技术,也算是为2016年画上一个完 ...

  7. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  8. mongodb

    修改所有的记录: > db.t_express_apply.update({},{$set:{"isStatus" : 0}},{multi:true})WriteResul ...

  9. PostGIS(解压版)安装

    1.软件下载 postgresql-9.6.1-1-windows-x64-binaries.zip https://www.postgresql.org/download/windows/ post ...

  10. 一些关于Linux入侵应急响应的碎碎念

    近半年做了很多应急响应项目,针对黑客入侵.但疲于没有时间来总结一些常用的东西,寄希望用这篇博文分享一些安全工程师在处理应急响应时常见的套路,因为方面众多可能有些杂碎. 个人认为入侵响应的核心无外乎四个 ...