pig
Pig最早是雅虎公司的一个基于Hadoop的并行处理架构,后来Yahoo将Pig捐献给Apache的一个项目,由Apache来负责维护,Pig是一个基于 Hadoop的大规模数据分析平台。
Pig为复杂的海量数据并行计算提供了一个简 易的操作和编程接口,这一点和FaceBook开源的Hive一样简洁,清晰,易上手!
Pig包括 两部分
1:用于描述数据流的语言,称为 Pig Latin (拉丁猪,个人翻译)
2:用于运行PigLatin程序的 执行环境 。一个是 本地 的单JVM执行环境,一个就是在 hadoop集群上 的分布式执行环境。
作用:
雅虎公司主要使用Pig:
1)吸收和分析用户的行为日志数据(点击流分析、搜索内容分析等),改进匹配和排名算法,以提高检索和广告业务的质量。
2)构建和更新search index。对于web-crawler抓取了的内容是一个流数据的形式,这包括去冗余、链接分析、内容分类、基于点击次数的受欢迎程度计算(PageRank)、最后建立倒排表。
3)处理半结构化数据订阅(data seeds)服务。包括:deduplcaitin(去冗余),geographic location resolution,以及 named entity recognition.
优势与不足
MapReducer能够让我们自己定义 连续执行的map和reduce函数 ,但是数据处理往往需要很多的MapReducer过程才能实现,所以将数据处理要求改写成MapReducer模式是很 复杂的 。和MapReducer相比,Pig提供了更加 丰富的数据结构 ,一般都是 多值 和 嵌套 的数据结构。Pig还提供了一套更强大的 数据交换操作 ,包括了MapReducer中被忽视的" join "操作
使用Pig来操作hadoop处理海量数据,是非常简单的,如果没有Pig,我们就得手写MapReduce代码,这可是一件非常繁琐的事,因为MapReduce的任务职责非常明确,清洗数据得一个job,处理得一个job,过滤得一个job,统计得一个job,排序得一个job,每次只要改动很小的一个地方,就得重新编译整个job,然后打成jar提交到Hadoop集群上运行,是非常繁琐的,调试还很困难。
但是,Pig并不适合处理所有的“数据处理”任务。和MapReducer一样,它是为数据 批处理 而设计的,如果想执行的查询只涉及一个大型数据集的一小部分数据,Pig的实现不是很好, 因为它要扫描整个数据集或其中的很大一部分。
Pig 有两种运行模式:
1、local 模式 : Pig 运行local模式,只涉及单独一台计算的
2、mapReduce 模式:需要可以访问一个hadoop集群,并且需要装上HDFS
Pig 的调用方式:
grunt shell 方式:通过交互方式,输入命令执行任务
Pig script 方式:通过script脚本方式来运行任务
嵌入式方式:嵌入java源码中,通过java调用运行任务
Pig 工作原理:
Apache PIG提供一套高级语言平台,用于对结构化与非结构化数据集进行操作与分析。这种语言被称为Pig Latin,其属于一种脚本形式,可直接立足于PIG shell执行或者通过Pig Server进行触发。用户所创建的脚本会在初始阶段由Pig Latin处理引擎进行语义有效性解析,而后被转换为包含整体执行初始逻辑的定向非循环图(简称DAG)。
为了理解这一优化机制的原理,我们假定用户编写了一套脚本,该脚本对两套数据集进行一项连接操作,而后是一条过滤标准。PIG优化器能够验证过滤操作是否能够在连接之前进行,从而保证连接负载最小化。如果可以,则其将据此进行逻辑规划设计。如此一来,用户即可专注于最终结果,而非将精力分散在性能保障身上。
只有在经过完全优化的逻辑规划准备就绪之后,编译才会生效。其负责生成物理规划,即为最终驻留于HDFS中的数据分配与之交互的执行引擎。
测试案例:
某网站访问日志,请大家使用 pig 计算出每个 ip 的点击次数
//加载HDFS中访问日志,使用空格进行分割,只加载ip列
records = LOAD ‘hdfs://hadoop:9000/class7/input/website_log.txt‘ USING PigStorage(‘ ‘) AS (ip:chararray);
// 按照ip进行分组,统计每个ip点击数
records_b = GROUP records BY ip;
records_c = FOREACH records_b GENERATE group,COUNT(records) AS click;
// 按照点击数排序,保留点击数前10个的ip数据
records_d = ORDER records_c by click DESC;
top10 = LIMIT records_d 10;
// 把生成的数据保存到HDFS的class7目录中
STORE top10 INTO ‘hdfs://hadoop:9000/class7/out‘;
Hive
尽管Apache Pig性能优异,但是它要求程序员要掌握SQL之外的知识。Hive和SQL非常相似,虽然Hive查询语言(HQL)有一定的局限性,但它仍然是非常好用的。Hive为MapReduce提供了很好的开源实现。它在分布式处理数据方面表现很好,不像SQL需要严格遵守模式。
hive 工作原理:
Apache Hive在本质上属于一套数据仓储平台,用于同存储在HDFS或者HBase内的大规模结构化数据集进行交互。Hive查询语言在这一点上类似于SQL,二者都能够与Hadoop实现良好集成。而Pig则不同,其执行流程为纯声明性,因此适合供数据科学家用于实现数据呈现与分析。
在与Hive进行交互时,用户可以直接通过Hive命令行界面直接接入,或者与Hiveserver交互。任何提交查询都会首先由该驱动程序占用,而后由编译器进行语法及语义验证。另外,Hive metastore负责保存全部与Hive相关数据的模式/映射关系,其在验证查询中信息语义方面扮演着重要角色。
服务端组件:
Driver 组件
:该组件包括 Complier、Optimizer 和 Executor,它的作用是将 HiveQL(类 SQL)语句进行解析、编译优化,生成执行计划,然后调用底层的 MapReduce 计算框架;Metastore 组件
:元数据服务组件,这个组件存储 Hive 的元数据,Hive 的元数据存储在关系数据库里,Hive 支持的关系数据库有 derby 和 mysql。元数据对于 Hive 十分重要,因此 Hive 支持把 metastore 服务独立出来,安装到远程的服务器集群里,从而解耦 Hive 服务和 metastore 服务,保证 Hive 运行的健壮性;Thrift 服务
:Thrift 是 facebook 开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发
客户端组件:
CLI
:command line interface,命令行接口。Thrift 客户端
:上面的架构图里没有写上 Thrift 客户端,但是 Hive 架构的许多客户端接口是建立在 Thrift 客户端之上,包括 JDBC 和 ODBC 接口。WEBGUI
:Hive 客户端提供了一种通过网页的方式访问 hive 所提供的服务。这个接口对应 Hive 的 hwi 组件(hive web interface),使用前要启动 hwi 服务。
Tips mysql 首次安装修改密码
sudo mysqld_safe --skip-grant-tables & sudo service mysql status
mysql -u root mysql> use mysql;
mysql> update user set password = password(‘root‘) where user = ‘root‘;
mysql> flush privileges;
mysql> quit;
sudo service mysql restart
sudo service mysql status
# 创建 hive 用户,若已经存在则无需再创建
mysql> create user ‘hive‘ identified by ‘hive‘;
# 赋予权限
mysql> grant all on *.* TO ‘hive‘@‘%‘ identified by ‘hive‘ with grant option;
mysql> grant all on *.* TO ‘hive‘@‘localhost‘ identified by ‘hive‘ with grant option;
# 刷新 MySQL 的系统权限相关表,否则会出现拒绝访问,还有一种方法是重新启动 mysql 服务器,来使新设置生效。
mysql> flush privileges;
Hive 命令
启动:hive
hive 之前需要启动 metastore 和 hiveserver 服务
hive --service metastore &
hive --service hiveserver &
总结
Hive更适合于数据仓库的任务,Hive主要用于静态的结构以及需要经常分析的工作。Hive与SQL相似促使 其成为Hadoop与其他BI工具结合的理想交集。而且很多企业都需要对历史数据进行分析,Hive就是一款分析历史数据的利器。但是Hive只有在结构化数据的情况下才能大显神威。Hive的软肋是实时分析,如果想要进行实时分析,可以采用HBase。
Pig赋予开发人员在大数据集领域更多的灵活性,并允许开发简洁的脚本用于转换数据流以便嵌入到较大的 应用程序。并且Apache Pig适用于非结构化的数据集,可以充分利用SQL。Pig无需构建MapReduce任务,如果你有SQL学习的背景,那么入门会非常快。
以上文章来源 :https://www.cnblogs.com/yezl/p/7787336.html 、 https://www.shiyanlou.com/
Mahout简介
Apache Mahout是ApacheSoftware Foundation (ASF)旗下的一个开源项目,提供了一些经典的机器学习的算法,皆在帮助开发人员更加方便快捷地创建智能应用程序。目前已经有了三个公共发型版本,通过ApacheMahout库,Mahout可以有效地扩展到云中。Mahout包括许多实现,包括聚类、分类、推荐引擎、频繁子项挖掘。
Apache Mahout的主要目标是建立可伸缩的机器学习算法。这种可伸缩性是针对大规模的数据集而言的。Apache Mahout的算法运行在ApacheHadoop平台下,他通过Mapreduce模式实现。但是,Apache Mahout并非严格要求算法的实现基于Hadoop平台,单个节点或非Hadoop平台也可以。Apache Mahout核心库的非分布式算法也具有良好的性能。
mahout主要包含以下5部分
频繁挖掘模式:挖掘数据中频繁出现的项集。
聚类:将诸如文本、文档之类的数据分成局部相关的组。
分类:利用已经存在的分类文档训练分类器,对未分类的文档进行分类。
推荐引擎(协同过滤):获得用户的行为并从中发现用户可能喜欢的事物。
频繁子项挖掘:利用一个项集(查询记录或购物记录)去识别经常一起出现的项目。
————————————————
版权声明:本文为CSDN博主「鲍礼彬」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baolibin528/article/details/39760443
Hadoop家族中Mahout的结构图
主要算法:
算法类 |
算法名 |
中文名 |
分类算法 |
Logistic Regression |
逻辑回归 |
Bayesian |
贝叶斯 |
|
SVM |
支持向量机 |
|
Perceptron |
感知器算法 |
|
Neural Network |
神经网络 |
|
Random Forests |
随机森林 |
|
Restricted Boltzmann Machines |
有限波尔兹曼机 |
|
聚类算法 |
Canopy Clustering |
Canopy聚类 |
K-means Clustering |
K均值算法 |
|
Fuzzy K-means |
模糊K均值 |
|
Expectation Maximization |
EM聚类(期望最大化聚类) |
|
Mean Shift Clustering |
均值漂移聚类 |
|
Hierarchical Clustering |
层次聚类 |
|
Dirichlet Process Clustering |
狄里克雷过程聚类 |
|
Latent Dirichlet Allocation |
LDA聚类 |
|
Spectral Clustering |
谱聚类 |
|
关联规则挖掘 |
Parallel FP Growth Algorithm |
并行FP Growth算法 |
回归 |
Locally Weighted Linear Regression |
局部加权线性回归 |
降维/维约简 |
Singular Value Decomposition |
奇异值分解 |
Principal Components Analysis |
主成分分析 |
|
Independent Component Analysis |
独立成分分析 |
|
Gaussian Discriminative Analysis |
高斯判别分析 |
|
进化算法 |
并行化了Watchmaker框架 |
|
推荐/协同过滤 |
Non-distributed recommenders |
Taste(UserCF, ItemCF, SlopeOne) |
Distributed Recommenders |
ItemCF |
|
向量相似度计算 |
RowSimilarityJob |
计算列间相似度 |
VectorDistanceJob |
计算向量间距离 |
|
非Map-Reduce算法 |
Hidden Markov Models |
隐马尔科夫模型 |
集合方法扩展 |
Collections |
扩展了java的Collections类 |
结构图与算法 来源于:https://www.cnblogs.com/xiangfeng/p/4362301.html
HBase 介绍
HBase - Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
HBase是Google BigTable的开源实现,类似Google BigTable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用Chubby作为协同服务,HBase利用Zookeeper作为对应
优势:
>写入性能高,且几乎可以无限扩展。
>海量数据下(100TB级别表)的查询依然能保持在5ms级别。
>存储容量大,不需要做分库分表,切勿维护简单。
>表的列可以灵活配置,1行可以有多个非固定的列。
劣势:
>并不能保证100%时间可用,宕机回复时间根据写入流量不同在几秒到几十秒内。
>查询便利性上缺少支持sql语句。
>无索引,查询必须按照RowKey严格查询,不带RowKey的filter性能较低。
>对于查询会有一些毛刺,特别是在compact时,平均查询延迟在2~3ms,但是毛刺时会升高到几十到100多毫秒。
上图描述了 Hadoop EcoSystem 中的各层系统,其中 HBase 位于结构化存储层,Hadoop HDFS 为 HBase 提供了高可靠性的底层存储支持,Hadoop MapReduce 为 HBase 提供了高性能的计算能力,Zookeeper 为 HBase 提供了稳定服务和 failover 机制。
此外,Pig 和 Hive 还为 HBase 提供了高层语言支持,使得在 HBase 上进行数据统计处理变的非常简单。 Sqoop 则为 HBase 提供了方便的 RDBMS 数据导入功能,使得传统数据库数据向 HBase 中迁移变的非常方便
访问接口
1. Native Java API,最常规和高效的访问方式,适合Hadoop MapReduce Job并行批处理HBase表数据
2. HBase Shell,HBase的命令行工具,最简单的接口,适合HBase管理使用
3. Thrift Gateway,利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据
4. REST Gateway,支持REST 风格的Http API访问HBase, 解除了语言限制
5. Pig,可以使用Pig Latin流式编程语言来操作HBase中的数据,和Hive类似,本质最终也是编译成MapReduce Job来处理HBase表数据,适合做数据统计
6. Hive,当前Hive的Release版本尚没有加入对HBase的支持,但在下一个版本Hive 0.7.0中将会支持HBase,可以使用类似SQL语言来访问HBase
HBase数据模型Table & Column Family
Row Key |
Timestamp |
Column Family |
|
URI |
Parser |
||
r1 |
t3 |
url=http:// |
title= |
t2 |
host=com |
||
t1 |
|||
r2 |
t5 |
url=http:// |
content=每天… |
t4 |
host=com |
Ø Row Key: 行键,Table的主键,Table中的记录默认按照Row Key升序排序
Ø Timestamp:时间戳,每次数据操作对应的时间戳,可以看作是数据的version number
Ø Column Family:列簇,Table在水平方向有一个或者多个Column Family组成,一个Column Family中可以由任意多个Column组成,即Column Family支持动态扩展,无需预先定义Column的数量以及类型,所有Column均以二进制格式存储,用户需要自行进行类型转换。
Table & Region
当Table随着记录数不断增加而变大后,会逐渐分裂成多份splits,成为regions,一个region由[startkey,endkey)表示,不同的region会被Master分配给相应的RegionServer进行管理:
-ROOT- && .META. Table
HBase中有两张特殊的Table,-ROOT-和.META.
.META.:记录了用户表的Region信息,.META.可以有多个region
-ROOT-:记录了.META.表的Region信息,-ROOT-只有一个region
Ø Zookeeper中记录了-ROOT-表的location
Client访问用户数据之前需要首先访问zookeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问,中间需要多次网络操作,不过client端会做cache缓存。
MapReduce on HBase
在HBase系统上运行批处理运算,最方便和实用的模型依然是MapReduce,如下图:
HBase Table和Region的关系,比较类似HDFS File和Block的关系,HBase提供了配套的TableInputFormat和TableOutputFormat API,可以方便的将HBase Table作为Hadoop MapReduce的Source和Sink,对于MapReduce Job应用开发人员来说,基本不需要关注HBase系统自身的细节。
HBase系统架构
Client
HBase Client使用HBase的RPC机制与HMaster和HRegionServer进行通信,对于管理类操作,Client与HMaster进行RPC;对于数据读写类操作,Client与HRegionServer进行RPC
Zookeeper
Zookeeper Quorum中除了存储了-ROOT-表的地址和HMaster的地址,HRegionServer也会把自己以Ephemeral方式注册到Zookeeper中,使得HMaster可以随时感知到各个HRegionServer的健康状态。此外,Zookeeper也避免了HMaster的单点问题,见下文描述
HMaster
HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行,HMaster在功能上主要负责Table和Region的管理工作:
1. 管理用户对Table的增、删、改、查操作
2. 管理HRegionServer的负载均衡,调整Region分布
3. 在Region Split后,负责新Region的分配
4. 在HRegionServer停机后,负责失效HRegionServer 上的Regions迁移
HRegionServer
HRegionServer主要负责响应用户I/O请求,向HDFS文件系统中读写数据,是HBase中最核心的模块。
HRegionServer内部管理了一系列HRegion对象,每个HRegion对应了Table中的一个Region,HRegion中由多个HStore组成。每个HStore对应了Table中的一个Column Family的存储,可以看出每个Column Family其实就是一个集中的存储单元,因此最好将具备共同IO特性的column放在一个Column Family中,这样最高效。
HStore存储是HBase存储的核心了,其中由两部分组成,一部分是MemStore,一部分是StoreFiles。MemStore是Sorted Memory Buffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile),当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBase I/O的高性能。当StoreFiles Compact后,会逐步形成越来越大的StoreFile,当单个StoreFile大小超过一定阈值后,会触发Split操作,同时把当前Region Split成2个Region,父Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。下图描述了Compaction和Split的过程:
在理解了上述HStore的基本原理后,还必须了解一下HLog的功能,因为上述的HStore在系统正常工作的前提下是没有问题的,但是在分布式系统环境中,无法避免系统出错或者宕机,因此一旦HRegionServer意外退出,MemStore中的内存数据将会丢失,这就需要引入HLog了。每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中(HLog文件格式见后续),HLog文件定期会滚动出新的,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取 到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。
Compaction 和 Split 的过程:
Hbase存储格式
HBase中的所有数据文件都存储在Hadoop HDFS文件系统上,主要包括上述提出的两种文件类型:
1. HFile, HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile
2. HLog File,HBase中WAL(Write Ahead Log) 的存储格式,物理上是Hadoop的Sequence File
首先HFile文件是不定长的,长度固定的只有其中的两块:Trailer和FileInfo。正如图中所示的,Trailer中有指针指向其他数据块的起始点。File Info中记录了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等。Data Index和Meta Index块记录了每个Data块和Meta块的起始点。
Data Block是HBase I/O的基本单元,为了提高效率,HRegionServer中有基于LRU的Block Cache机制。每个Data块的大小可以在创建一个Table的时候通过参数指定,大号的Block有利于顺序Scan,小号Block利于随机查询。每个Data块除了开头的Magic以外就是一个个KeyValue对拼接而成, Magic内容就是一些随机数字,目的是防止数据损坏。后面会详细介绍每个KeyValue对的内部构造。
HFile里面的每个KeyValue对就是一个简单的byte数组。但是这个byte数组里面包含了很多项,并且有固定的结构。我们来看看里面的具体结构:
开始是两个固定长度的数值,分别表示Key的长度和Value的长度。紧接着是Key,开始是固定长度的数值,表示RowKey的长度,紧接着是RowKey,然后是固定长度的数值,表示Family的长度,然后是Family,接着是Qualifier,然后是两个固定长度的数值,表示Time Stamp和Key Type(Put/Delete)。Value部分没有这么复杂的结构,就是纯粹的二进制数据了。
HLogFile
上图中示意了HLog文件的结构,其实HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和region名字外,同时还包括 sequence number和timestamp,timestamp是“写入时间”,sequence number的起始值为0,或者是最近一次存入文件系统中sequence number。
HLog Sequece File的Value是HBase的KeyValue对象,即对应HFile中的KeyValue,可参见上文描述。
参考来源于 : https://baike.baidu.com/item/HBase/7670213?fr=aladdin 、 https://www.shiyanlou.com/ 、 https://www.cnblogs.com/xiangfeng/p/4362301.html
原文地址:https://www.cnblogs.com/caicai920/p/12322923.html