初识Hadoop、Hive
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的更多相关文章
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- 初识Hadoop入门介绍
初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...
- 大数据测试之初识Hadoop
大数据测试之初识Hadoop POPTEST老李认为测试开发工程师是面向测试的开发,也就是说,写代码就是为完成测试任务服务的,写自动化测试(性能自动化,功能自动化,安全自动化,接口自动化等等)的cas ...
- 细细品味大数据--初识hadoop
初识hadoop 前言 之前在学校的时候一直就想学习大数据方面的技术,包括hadoop和机器学习啊什么的,但是归根结底就是因为自己太懒了,导致没有坚持多长时间,加上一直为offer做准备,所以当时重心 ...
- Hive创建表格报【Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException】引发的血案
在成功启动Hive之后感慨这次终于没有出现Bug了,满怀信心地打了长长的创建表格的命令,结果现实再一次给了我一棒,报了以下的错误Error, return code 1 from org.apache ...
- FineReport中hadoop,hive数据库连接解决方案
1. 描述 Hadoop是个很流行的分布式计算解决方案,Hive是基于hadoop的数据分析工具.一般来说我们对Hive的操作都是通过cli来进行,也就是Linux的控制台,但是,这样做本质上是每个连 ...
- 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 ...
- hadoop+hive使用中遇到的问题汇总
问题排查方式 一般的错误,查看错误输出,按照关键字google 异常错误(如namenode.datanode莫名其妙挂了):查看hadoop($HADOOP_HOME/logs)或hive日志 h ...
- Hadoop Hive基础sql语法
目录 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件映射为一张数据库表,并提供完整的 ...
- Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql、oracle...)间进行数据的传递
http://niuzhenxin.iteye.com/blog/1706203 Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql.postgresql.. ...
随机推荐
- Android数据加密之Base64编码算法
前言: 前面学习总结了平时开发中遇见的各种数据加密方式,最终都会对加密后的二进制数据进行Base64编码,起到一种二次加密的效果,其实呢Base64从严格意义上来说的话不是一种加密算法,而是一种编码算 ...
- C#为IE编写BHO插件心得
啥是BHO,其实大家都用过,没听过只是没在意而已,来张图你就知道是什么了 是不是很熟悉,就是这么个玩意~~ 先说说我要用来干嘛~我们有个库,里面数据很全面,但是某个部门需要在第三方的B/S系统录入某些 ...
- vmware上网的方式
vmware上网设置 vmware虚拟机上网设置 我的一些心得,如下: 如何使vmware虚拟机中的操作系统能够上网? 第一种情况: 主机使用PPPOE拨号上网 方法一:NAT方式 1.先关闭虚拟机中 ...
- IOS FMDB 获取数据库表和表中的数据
ios开发中,经常会用到数据库sqlite的知识,除了增,删,改,查之外,我们说说如何获取数据库中有多少表和表相关的内容. 前言 跟数据库使用相关的一般的增删改查的语句,这里就不做解释了.在网上有很多 ...
- wordpress优化之结合prism.js为编辑器自定义按钮转化代码
原文链接 http://ymblog.net/2016/07/24/wordpress-prism/ 继昨天花了一天一夜的时间匆匆写了主题Jiameil3.0之后,心中一直在想着优化加速,体验更好,插 ...
- EF上下文对象线程内唯一性与优化
在一次请求中,即一个线程内,若是用到EF数据上下文对象,就创建一个,这也加是很多人的代码中习惯在使用上下文对象时,习惯将对象建立在using中,也是为了尽早释放上下文对象, 但是如果有一个业务逻辑调用 ...
- linux系统内存爆满的解决办法!~
1.首先用free工具检查一下内存的使用情况: 这个是我的linux时时数据 Mem: 4046824 763620 3283204 9004 10284 61560 -/+buffers/cach ...
- [原创]ubuntu16.04LTS使用细节
如何给自己安装的应用创建桌面图标 拿php开发神器phpstorm为例,找到可执行文件所在路径. 这里是/home/haive/PhpStorm/bin/phpstorm.sh 打开dash,搜索&q ...
- Linux不能上网ping:unknown host问题怎么解决?
Linux不能上网提示ping:unknown host 检查步骤 Linux系统跟windows平台有所不同的是,为了更好的做网络服务应用.Linux下多用于网络服务器,而且操作界面是字符界面.对于 ...
- DBCP 配置备注
<property name="initialSize" value="5"></property> <property name ...