Pig最早是雅虎公司的一个基于Hadoop的并行处理架构,后来Yahoo将Pig捐献给Apache的一个项目,由Apache来负责维护,Pig是一个基于Hadoop的大规模数据分析平台。
Pig为复杂的海量数据并行计算提供了一个简易的操作和编程接口,这一点和FaceBook开源的Hive一样简洁,清晰,易上手!
Pig包括两部分
1:用于描述数据流的语言,称为PigLatin(拉丁猪,个人翻译)
2:用于运行PigLatin程序的执行环境。一个是本地的单JVM执行环境,一个就是在hadoop集群上的分布式执行环境。
作用:
雅虎公司主要使用Pig:
优势与不足
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的调用方式:
gruntshell方式:通过交互方式,输入命令执行任务
Pigscript方式:通过script脚本方式来运行任务
嵌入式方式:嵌入java源码中,通过java调用运行任务
Pig工作原理:
ApachePIG提供一套高级语言平台,用于对结构化与非结构化数据集进行操作与分析。这种语言被称为PigLatin,其属于一种脚本形式,可直接立足于PIGshell执行或者通过PigServer进行触发。用户所创建的脚本会在初始阶段由PigLatin处理引擎进行语义有效性解析,而后被转换为包含整体执行初始逻辑的定向非循环图(简称DAG)。
为了理解这一优化机制的原理,我们假定用户编写了一套脚本,该脚本对两套数据集进行一项连接操作,而后是一条过滤标准。PIG优化器能够验证过滤操作是否能够在连接之前进行,从而保证连接负载最小化。如果可以,则其将据此进行逻辑规划设计。如此一来,用户即可专注于最终结果,而非将精力分散在性能保障身上。
只有在经过完全优化的逻辑规划准备就绪之后,编译才会生效。其负责生成物理规划,即为最终驻留于HDFS中的数据分配与之交互的执行引擎。
某网站访问日志,请大家使用pig计算出每个ip的点击次数
//加载HDFS中访问日志,使用空格进行分割,只加载ip列records=LOAD'hdfs://hadoop:9000/class7/input/website_log.txt'USINGPigStorage('')AS(ip:chararray);
//按照ip进行分组,统计每个ip点击数records_b=GROUPrecordsBYip;records_c=FOREACHrecords_bGENERATEgroup,COUNT(records)ASclick;
//按照点击数排序,保留点击数前10个的ip数据records_d=ORDERrecords_cbyclickDESC;top10=LIMITrecords_d10;
//把生成的数据保存到HDFS的class7目录中STOREtop10INTO'hdfs://hadoop:9000/class7/out';
尽管ApachePig性能优异,但是它要求程序员要掌握SQL之外的知识。Hive和SQL非常相似,虽然Hive查询语言(HQL)有一定的局限性,但它仍然是非常好用的。Hive为MapReduce提供了很好的开源实现。它在分布式处理数据方面表现很好,不像SQL需要严格遵守模式。
hive工作原理:
服务端组件:
客户端组件:
Tipsmysql首次安装修改密码
sudomysqld_safe--skip-grant-tables&sudoservicemysqlstatus
mysql-urootmysql>usemysql;
mysql>updateusersetpassword=password('root')whereuser='root';
mysql>flushprivileges;
mysql>quit;
sudoservicemysqlrestart
sudoservicemysqlstatus
#创建hive用户,若已经存在则无需再创建mysql>createuser'hive'identifiedby'hive';
#赋予权限mysql>grantallon*.*TO'hive'@'%'identifiedby'hive'withgrantoption;mysql>grantallon*.*TO'hive'@'localhost'identifiedby'hive'withgrantoption;
启动:hive
hive之前需要启动metastore和hiveserver服务
hive--servicemetastore&
hive--servicehiveserver&
总结
Hive更适合于数据仓库的任务,Hive主要用于静态的结构以及需要经常分析的工作。Hive与SQL相似促使其成为Hadoop与其他BI工具结合的理想交集。而且很多企业都需要对历史数据进行分析,Hive就是一款分析历史数据的利器。但是Hive只有在结构化数据的情况下才能大显神威。Hive的软肋是实时分析,如果想要进行实时分析,可以采用HBase。
Pig赋予开发人员在大数据集领域更多的灵活性,并允许开发简洁的脚本用于转换数据流以便嵌入到较大的应用程序。并且ApachePig适用于非结构化的数据集,可以充分利用SQL。Pig无需构建MapReduce任务,如果你有SQL学习的背景,那么入门会非常快。
ApacheMahout是ApacheSoftwareFoundation(ASF)旗下的一个开源项目,提供了一些经典的机器学习的算法,皆在帮助开发人员更加方便快捷地创建智能应用程序。目前已经有了三个公共发型版本,通过ApacheMahout库,Mahout可以有效地扩展到云中。Mahout包括许多实现,包括聚类、分类、推荐引擎、频繁子项挖掘。
ApacheMahout的主要目标是建立可伸缩的机器学习算法。这种可伸缩性是针对大规模的数据集而言的。ApacheMahout的算法运行在ApacheHadoop平台下,他通过Mapreduce模式实现。但是,ApacheMahout并非严格要求算法的实现基于Hadoop平台,单个节点或非Hadoop平台也可以。ApacheMahout核心库的非分布式算法也具有良好的性能。
mahout主要包含以下5部分
频繁挖掘模式:挖掘数据中频繁出现的项集。
分类:利用已经存在的分类文档训练分类器,对未分类的文档进行分类。
推荐引擎(协同过滤):获得用户的行为并从中发现用户可能喜欢的事物。
频繁子项挖掘:利用一个项集(查询记录或购物记录)去识别经常一起出现的项目。
主要算法:
算法类
算法名
中文名
分类算法
LogisticRegression
逻辑回归
Bayesian
贝叶斯
SVM
支持向量机
Perceptron
感知器算法
NeuralNetwork
神经网络
RandomForests
随机森林
RestrictedBoltzmannMachines
有限波尔兹曼机
聚类算法
CanopyClustering
Canopy聚类
K-meansClustering
K均值算法
FuzzyK-means
模糊K均值
ExpectationMaximization
EM聚类(期望最大化聚类)
MeanShiftClustering
均值漂移聚类
HierarchicalClustering
层次聚类
DirichletProcessClustering
狄里克雷过程聚类
LatentDirichletAllocation
LDA聚类
SpectralClustering
谱聚类
关联规则挖掘
ParallelFPGrowthAlgorithm
并行FPGrowth算法
回归
LocallyWeightedLinearRegression
局部加权线性回归
降维/维约简
SingularValueDecomposition
奇异值分解
PrincipalComponentsAnalysis
主成分分析
IndependentComponentAnalysis
独立成分分析
GaussianDiscriminativeAnalysis
高斯判别分析
进化算法
并行化了Watchmaker框架
推荐/协同过滤
Non-distributedrecommenders
Taste(UserCF,ItemCF,SlopeOne)
DistributedRecommenders
ItemCF
向量相似度计算
RowSimilarityJob
计算列间相似度
VectorDistanceJob
计算向量间距离
非Map-Reduce算法
HiddenMarkovModels
隐马尔科夫模型
集合方法扩展
Collections
扩展了java的Collections类
HBase-HadoopDatabase,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PCServer上搭建起大规模结构化存储集群。
HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
HBase是GoogleBigTable的开源实现,类似GoogleBigTable利用GFS作为其文件存储系统,HBase利用HadoopHDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用HadoopMapReduce来处理HBase中的海量数据;GoogleBigtable利用Chubby作为协同服务,HBase利用Zookeeper作为对应
优势:
>写入性能高,且几乎可以无限扩展。
>海量数据下(100TB级别表)的查询依然能保持在5ms级别。
>存储容量大,不需要做分库分表,切勿维护简单。
>表的列可以灵活配置,1行可以有多个非固定的列。
劣势:
>查询便利性上缺少支持sql语句。
>无索引,查询必须按照RowKey严格查询,不带RowKey的filter性能较低。
>对于查询会有一些毛刺,特别是在compact时,平均查询延迟在2~3ms,但是毛刺时会升高到几十到100多毫秒。
上图描述了HadoopEcoSystem中的各层系统,其中HBase位于结构化存储层,HadoopHDFS为HBase提供了高可靠性的底层存储支持,HadoopMapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。
此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便