文档章节

跟小菜一起学大数据之工具篇(一)

小仙女的老苞米
 小仙女的老苞米
发布于 2017/08/30 21:02
字数 1409
阅读 14
收藏 1
点赞 0
评论 0

        首先申明一点,小菜并非大神,只是一个刚入门大数据的菜鸟在这里跟大家分享一下学习心得,也算是对自己学习的一种总结,对于文章中的错误之处,欢迎大家指正。

        工欲善其事,必先利其器,想学好大数据那就必然现要学会一些基本的大数据工具,这一些列着重分享一些小菜在学习过程中的一些心得与体会。本篇作为开篇作今天先分享一下在大数据平台下最常用的两个工具,即Hbase与Hive。很多人可能会想学大数据一开始为什么不学Hadoop平台搭建与使用,或者HDFS的使用,小菜的想法是Hadoop与HDFS想一下深入理解没那么容易,所以先从偏应用的开始谈起,待循序渐进熟悉了之后再回过头来聊聊Hadoop,聊聊HDFS会更好理解一些。废话不多说,开始聊正事。  ​    ​
    ​   首先先看一下Hbase,HBase是一个分布式的、面向列的开源数据库。他不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。很多人不太理解什么叫基于列而不是基于行的。这里举个例子说明一下,像通常的关系型数据库就是典型的行模式,一张表创建后列是固定的(不考虑修改的情况,这里只说在表的应用期间),但对于行,是可以随意增减的。而对于Hbase来说,他的存储是基于列的,也就说他的列是不固定的,每一条数据只是单纯的以rowkey做为唯一标识。任意一条数据写入的时候需要哪些列就将数据值与列对应清楚即可(具体写法会在后续讲到),而这么做除了可以很方便的对表结构进行扩展外还有一个更大的好处就是可以节省存储空间,由于他的这种存储结构导致他的每一条数据列数可以是不一样的,举个形象化的例子就是在传统关系型数据库中,每一行的数据列是固定,哪怕有些数据的某几列是空的,但这一列还是要存储下来,占用一定的存储空间,而对于hbase由于他的列是不固定的,这样当某条数据的某列值为空时,该列压根就不会存储下来,这样就可以大大的节省空间并且同时提高了数据读取的性能。

    ​    ​ 接着说一下Hbase的逻辑结构,对于初级使用者来说基本清楚rowkey和列簇,列这几个概念就可以了,至于时间戳和cell在初期几乎用不到。所谓rowkey也就是传统关系型数据库中的主键,每一条数据都会对于一个唯一的rowkey。每一张hbase表可以对应多个列簇(考虑到性能问题经验数据建议普通hbase表最多建不超过三个列簇),每一个列簇可以对应多个列。每一列的对于列赋值包括引用时都需要指定列簇名和列名,即:put(列簇名,列名,value) 即可。

为了便于理解Hbase基于列的设计理念,这里举一个形象化的数据结构

从图中可以很明显的看出对于Hbase来说,1、列是可以随意扩展 2、每一行数据的列可以是不同的。小菜以为,这便是Hbase的核心思想所在。

    ​   接着聊一下Hive,hive是基于Hadoop的一个数据仓库工具,也可以近似的理解为一个基于Hadoop的ETL工具。他可以将存储在hdfs上面的结构化数据文件映射为一张数据库表,也可以自己创建新表并写入数据,但他自己本身并不存储数据,只是提供一个逻辑关系,真正的数据存储在hdfs上面。他最大的优势是提供简单的sql查询功能,并可以将传统的sql语句转换为MapReduce任务进行运行。 也就是对于只熟悉sql但是对map-reduce开发并不十分熟的人可以利用它在大数据平台上做一些ETL即统计分析。有点需要说明,在传统的ETL过程中会涉及到一些比较复杂清洗工作,在hive上涉及到比较复杂的清洗转换时同样可以做,这里就要顺便介绍一下UDF函数了。

    ​   UDF函数可以直接应用于select语句,对查询结构做格式化处理输出内容,自定义UDF需要继承org.apache.Hadoop.Hive.ql.UDF,实现evaluate函数(相当于重写evaluate函数)。简单的讲udf函数就是一种可以直接在hql(hive上的sql)上用的轻量级函数,在函数内部可以定义一些清洗或者转换的方法从而间接的对数据的清洗与转换。

© 著作权归作者所有

共有 人打赏支持
小仙女的老苞米
粉丝 8
博文 4
码字总数 4846
作品 0
青岛
如何搭建高效率的生鲜 B2B 平台(B2B 技术共享第一篇)

很开心在这里和大家交流,我们是一群生鲜B2B的创业者,在生鲜领域创业三年多;我们也是一群工程师,致力于通过互联网产品和技术让我们的农业更轻松更健康,我们是来自宋小菜的产品技术团队,...

Scott ⋅ 06/11 ⋅ 0

大数据、人工智能的出现给每个人造成的影响居然那么大!这是程序员的福音......

《人类简史》作者尤瓦尔·赫拉利说:“人类从来没有做过什么自由的选择,你听从内心想法做出的一切选择,都是经过生物计算输出的结果。” 找对象,看大数据 我们往往在做出决定的时候都会在大...

uzv80px5v412ne ⋅ 2017/12/27 ⋅ 0

C语言编程学习程序解析:控制语句之学习前言

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/27 ⋅ 0

限时下载 | 132G编程资料:Python、JAVA、C,C++、机器人编程、PLC,入门到精通~

当程序员处瓶颈期应如何提高自己?有很多关于“学习编程”的资源,能够让人从 0 到新手(虽然这些资源中大多数的质量是值得商榷的),但是怎么样才能将中级水平提高到专家级? 良好的编程能力...

feimawangfmi ⋅ 05/28 ⋅ 0

一位转行成功并从事5年的大数据的经验分享

本人30岁,从学大数据到现在有6年的时间,我谈一下我的经验分享 我自己的经历:刚开始大数据是看书,一页页的看书,因为身边有一个好的资源,有问题可以问我朋友,后来发现看大数据的零基础书...

JAVA丶学习 ⋅ 04/01 ⋅ 0

小菜学设计模式——单一职责原则

背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习《大话设计模式》时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习设计模式的成...

learn_more ⋅ 2015/05/25 ⋅ 0

C语言编程基础新手学习经典练习题和答案详解入门必备

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/13 ⋅ 0

从小白到大数据技术专家的学习历程

最近有很多人问我,大数据是怎么学?需要学什么技术以及这些技术的学习顺序是什么?今天有时间我把个问题总结成文章分享给大家。 ·大数据处理技术怎么学习呢?首先我们要学习Java语言和Lin...

qq_41842569 ⋅ 04/18 ⋅ 0

如何用形象的比喻描述大数据的技术生态?Hadoop,Hive,hbase,hdfs、MapReduc

学习很重要的是能将纷繁复杂的信息进行归类和抽象。 对应到大数据技术体系,虽然各种技术百花齐放,层出不穷,但大数据技术本质上无非解决4个核心问题。 1. 存储,海量的数据怎样有效的存储?...

chenhao_asd ⋅ 04/25 ⋅ 0

C语言编程学习开发的俄罗斯方块小游戏

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 06/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部