前言:Hadoop体系核心大多源自Google的思想,里面的思想的确很精彩!比如分布式计算,云的思想等,比起其他简单技术,更使得我想写这文章,
虽然这个东东在一般公司不可能用到!
首先由于hadoop是分布计算、存储的东四,所有组件其实都是构建在Hadoop集群的基础之上,所有玩hadoop,比先说这个。。
1.namenode&2nd namenode,类似master,但不是纯数据的,是个*协调器的作用,可惜是单点的,不过有ZooKeeper----后面介绍下
2.datanode,类似slave,存放数据的节点
3.jobtracker,不管是java弄的还是其他脚本弄的东四,都用job表示,再转为MR运行的,一般跟在name上面
4.tasktracker,就是对job的分解任务了,分布在每个数据节点上
由于hadoop是建立在java体系的,所以有一堆配置的风格(或者说是Liunx风格)。所以hadoop环境变量配置和core、hdfs、MR三个配置文件是要的,
而在Linux下运行,其实主要也是一堆命令和配置了,还有ssh也是必备的等。不过上面所有事情主要还是应该算DBA&运维的事。。。
还有个Hadoop里面提供他系统内部的类似Linux的命令给用户交互,当然Eclipse也有插件可以直接图形操作的,只是一般也没啥用。
好了,再说Hadoop的两大基础核心:HDFS&MR
1.HDFS:这是分布式的文件系统,独立于附属系统(Linux等)的一个文件管理,有点像关系型数据库文件系统,但它能保存和管理任何文件,包括hbase的文件和其他任何类型文件。
而且是完全分布式的,也提供很好的可靠性机制,什么事务日志和镜像等概念,还有只写的,分小块存储(这个有点像mysql的分块思想)---可能因为这个才适合hbase的BigTable思想。
这里给个图---其实里面很多是旧思想
里面还有提供java的API,以方便一些像直接可以用java操作里面文件。
2.MR(MapReduce):这个的核心思想其实就是算法里的分而治之的先分再合处理来的。这个对于pig&hive等里面都用到它,当然用的比较多可能还是java的程序,
这里就没什么好多说的,其实对开发而言,这个用在计算的代码会比较多就是了。当然地,里面是job和task的协调,同时也提供web界面管理支持。
再者就是几个扩展组件:
1.Hbase(HadoopDataBase),说的这个,起初知道Hadoop的时候,以为像Mysql,各种组件组拼,然后是分布式集群的设置实用,但深入后,发觉有N大不同。。其实就跟Hbase也很不一样。
因为Hbase是很出名的nosql之一,支持一点类sql的HQL。再者是Mysql是行市存储,而Hbase是基于列式存储的,(其实是伪列式,里面先用了KV的行设计杂交的,其中kv是像网络的帧哦。)
而列式存储,可以较好保存相同类型数据,所以压缩率很高,也所以读取的IO性能高N多,而且其在数据分析的属性、维度方面是很方便的。再就是其是非事务性(后来版本不知)的只插入的,
很高效写,而且其插入是根据时间的(时间戳),所以很适合做数据分析决策。还有一点提下,就是其里面其实也是用了B+树的增删查,又是树的优势啊。。呵呵~
当然里面也是N复杂,如辅助索引,还有什么HRegion(Server)、 MemStore和FileStore原理等等。可能我理解还不深入,感觉Hbase的直插入日志方式和SVN等一个思想。。。
2.Pig(猪),hadoop客户端,直接有类似sql的pig语言、脚本等直接给MR任务去调用,免去java的调用方式
3.Hive(蜜蜂),数据仓库工具,支持简单的sql(叫HiveQL)查询,像是SQL映射到MR,也可用shell直接调用MR得到结果。还能结合JDBC/ODBC接口
4.Zookeeper(动物园管理者),协调节点层面的操作,如节点故障处理,单点失效切换等。注:和jobtracker处理MR层面的不同的。
5.sqoop(??),和关系型数据库交互的
6.Avro(鹰),数据序列化工具,如序列化java对象数据等
7.Chukwa(乌龟),提供数据采集&分析用的,如日志的采集、分析,定时、周期性。
总结:由于Hadoop的分布式原理,可以支持无限扩展性能需求,难怪google的处理能力那么强!说道这个,还得提下分布是对加密解密的事。
对于像RSA这样的,源自数论里的素数分解在时间上不对称原理,以前的几乎不可能,其实分布式计算应该也是可以很快破解(分解因式)出来的。。
只是hadoop就像云技术,很浮云啊,也很杯具。真正所谓大数据,里面涵盖真的太多东东了,像数据仓库、数据分析与设计、还有那个云技术也是。
虽然以前有过公司想用hadoop,不过没多少小公司会用到,估计我以后去的公司也恐怕没什么机会用到。。。o(︶︿︶)o 唉
这里插个小故事(有点被白老鼠感觉):记得不久前,也是个面试,一小公司(感觉)就说有钱!让我带(招)几个人搞个云平台,去!虽说云技术思想没啥特别,但要实现起来那可怎不是盖的~
而且目前只听说国内有阿里、百度那个级别的才。。。技术都不算什么,哪怕是用什么openstack之类的,就像电商一样(现都没啥技术含量了),关键有人会用你的云平台、云服务吗?
想我去带领几个人就------只能说啥人都有,也可能是我能力真的。。。撑死胆小的吧~~~
最后回来,其实简单使用的话(高级可能连各主件都要代码调用的!),hadoop跟我们交互最多还 存储(hbase)和计算(MR)。这个要求很好分辨实用场景!而且像其他非关系型数据库(如mongodb、redis等)一样,
必须知道其特性,然后适合用哪个、在哪里和怎么用是主要。。一句话得看场景!
PS,写了一堆,mysql没写成,却写完这个了,写文章有点好精力,之后一段时间,除了不全那个Android的,应该都不再怎么写文章。
因为总结的写得差不多,细化的要写那就真耗时间了,网上一大堆什么系列的,而且关键的细节还是要工作中去实践,并且我还是喜欢看的多。。。哈哈