阿里云大数据利器Maxcompute学习之-假如你使用过hive

摘要: 如果您是一个大数据开发工程师并且使用过hadoop的hive框架,那么恭喜您,阿里云的大数据计算服务-Maxcompute,您已经会了90%。这篇文章就来简单对比下Maxcompute和hive的异同,来方便刚开始使用Maxcompute的用户,从hive秒速迁移到Maxcompute的使用上。

点此查看原文:http://click.aliyun.com/m/40814/

如果您是一个大数据开发工程师并且使用过hadoop的hive框架,那么恭喜您,阿里云的大数据计算服务-Maxcompute,您已经会了90%。这篇文章就来简单对比下Maxcompute和hive的异同,来方便刚开始使用Maxcompute的用户,从hive秒速迁移到Maxcompute的使用上。

首先,回顾下hive的概念。

1、hive是基于hadoop的,以表的形式来存储数据,实际上数据是存储在hdfs上,数据库和表其实是hdfs上的两层目录,数据是放在表名称目录下的,计算还是转换成mapreduce计算。
2、hive可以通过客户端命令行和java api操作数据
3、hive是hql语言操作表,跟通用sql语言的语法大致相同,可能会多一些符合本身计算的函数等。hql会解析成mapreduce进行相关逻辑计算
4、hive有分区分桶的概念
5、hive可以通过命令从本地服务器来上传下载表数据
hive可以通过外部表功能映射hbase和es等框架的数据
6、hive任务可以通过hadoop提供的webUI来查看任务进度,日志等
7、hive支持自定义函数udf,udaf,udtf
8、hive可以通过hue界面化操作
9、hive可以通过sqoop等工具和其他数据源交互
10、资源调度依赖于hadoop-yarn平台

那么如果你对这些hive的功能稍微熟悉的话,现在我告诉你,Maxcompute的功能以及用法和上述hive功能基本一致。

先看下Maxcompute的组件:
MaxCompute 主要服务于批量结构化数据的存储和计算,可以提供海量数据仓库的解决方案以及针对大数据的分析建模服务,支持sql查询计算,自定义函数udf实现复杂逻辑,mapreduce程序实现更具体的业务计算,支持Graph面向迭代的图计算处理框架,提供java api来连接操作sqltask。
是不是初步看起来MaxCompute也是和hive一样,可以用sql,udf,mr
①文件系统对比

对比差异之前,容许我先简单介绍下阿里云的基石-飞天系统,详细的可以网上搜下。飞天系统是分布式的文件存储和计算系统,听起来是不是好熟悉,是不是和hadoop的味道一样。这里对于Maxcompute可以暂时把它当作是hadoop类似的框架,那Maxcompute就是基于飞天系统的,类似于hive基于hadoop。

hive的数据实际上是在hdfs上,元数据一般放在mysql,以表的形式展现。你可以直接到hdfs上查到具体文件。Maxcompute的数据是在飞天文件系统,对外不暴露文件系统,底层优化会自动做好。
②hive和Maxcompute客户端
直接上图来对比
hive的客户端:
图片描述

Maxcompute(原odps)的客户端:
图片描述

是不是看起来一致。

实际上

项目空间(Project)是 MaxCompute 的基本组织单元,它类似于传统数据库的Database 或 Schema 的概念,是进行多用户隔离和访问控制的主要边界 。一个用户可以同时拥有多个项目空间的权限

配置文件如图
图片描述
在客户端中可以执行sql和其他命令。

那么MaxCompute除了命令行客户端也提供了python和java的sdk来访问。不说了直接上代码

import java.util.List;import com.aliyun.odps.Instance;import com.aliyun.odps.Odps;import com.aliyun.odps.OdpsException;import com.aliyun.odps.account.Account;import com.aliyun.odps.account.AliyunAccount;import com.aliyun.odps.data.Record;import com.aliyun.odps.task.SQLTask;public class testSql {
//这里accessId和accessKey是阿里云为安全设置的账户访问验证,类似于密码,不止是在Maxcompute中使用private static final String accessId = "";private static final String accessKey = “”;
//这里是的服务地址private static final String endPoint = "http://service.odps.aliyun.com/api";
//Maxcompute的项目名称,类似于hive的databaseprivate static final String project = "";private static final String sql = "select category from iris;";public static voidmain(String[] args) {Account account = new AliyunAccount(accessId, accessKey);Odps odps = new Odps(account);odps.setEndpoint(endPoint);odps.setDefaultProject(project);Instance i;try {i = SQLTask.run(odps, sql);i.waitForSuccess();List<Record> records = SQLTask.getResult(i); for(Record r:records){System.out.println(r.get(0).toString());}} catch (OdpsException e) {e.printStackTrace();}}}

是不是觉得很亲切,跟大多数数据库的访问方式一样。

③odpscmd和hivesql
首先来看建表语句
hive标准建表语句:

hive> create table page_view> (> page_id bigint comment '页面ID',> page_name string comment '页面名称',> page_url string comment '页面URL'> )> comment '页面视图'> partitioned by (ds string comment '当前时间,用于分区字段')> row format delimited> stored as rcfile> location '/user/hive/test'; 

maxcompute建表语句:

create table page_view  
(  
page_id bigint comment '页面ID',  
page_name string comment '页面名称',  
page_url string comment '页面URL'  
)  partitioned by (ds string comment '当前时间,用于分区字段')

从建表语句上明显的可以感觉出来,maxcompute没有指定分隔符,没有指定文件存储路径,没有指定文件的存储格式。难道是默认的吗?不。
因为maxcompute是基于阿里云飞天文件系统,用户无需关心文件存储格式,压缩格式,存储路径等,

这些操作由阿里云来完成,用户也不用来疲于文件存储成本,压缩性价比,读写速度等优化,可以将精力集中在业务的开发上。
另外二者的数据的上传下载;
hive可以通过命令,比如上传
图片描述

maxcompute是通过命令工具 tunnel上传下载,同时支持在上传过程校验文件格式脏数据等
图片描述

④分区和分桶
分区的概念相信使用hive的同学很熟悉,其实就是在表目录上再套一层目录,将数据区分,目的就是提高查询效率。那么从上面建表语句中可以看出maxcomoute和hive都是支持分区的,概念用法一致。
关于分桶,上面建表语句中hive中有分桶语句,maxcompute没有分桶的操作,实际上分桶是把一个大文件根据某个字段hash成多个小文件,适当的分桶会提高查询效率,在maxcompute中这些优化底层已经做了。
⑤外部表功能
hive可以通过外部表的功能来操作例如hbase和es的数据。外部表功能maxcompute(2.0版本支持)中也是同样适用,maxcompute通过外部表来映射阿里云的OTS和OSS两个数据存储产品来处理非结构化的数据,例如音频视频等。看下建表语句:

CREATE EXTERNAL TABLE IF NOT EXISTS ambulance_data_csv_external
(
vehicleId int,
recordId int,
patie
ntId int,
calls int,
locationLatitute double,
locationLongtitue double,
recordTime string,
direction string
)
STORED BY 'com.aliyun.odps.CsvStorageHandler' -- (2)
LOCATION 'oss://oss-cn-hangzhou-zmf.aliyuncs.com/oss-odps-test/Demo/SampleData/CSV/AmbulanceData/';
再看hive映射到hbase建表语句
CREATE EXTERNAL TABLE cofeed_info 
( 
rowkey string, 
id string, 
source string, 
insert_time timestamp, 
dt string 
) STORED BY ‘org.apache.Hadoop.hive.hbase.HBaseStorageHandler’ WITH 
SERDEPROPERTIES (“hbase.columns.mapping”= 
“:key, 
cf:id, 
cf:source, 
cf:insert_time, 
cf:dt”) TBLPROPERTIES (“hbase.table.name” = “cofeed_info”);

语法基本一致,maxcompute可以自定义extractor来处理非结构化数据,可以参考https://yq.aliyun.com/articles/61567来学习
⑥webui
hive任务依赖于hadoop的hdfs和yarn提供的webui访问。看下对比
hadoopwebui
图片描述

在这里可以通过历史任务来查看hive任务的执行情况。个人觉得页面不是很友好。
那么在Maxcompute中当然也是可以通过ui来查看任务执行状态,进度,参数,以及任务日志等
首先在任务执行的时候,在客户端会打印出来一串http地址我们叫做logview,复制下来在浏览器中打开即可。
如图
图片描述

在浏览器中打开

总体上一看,非常清晰明了。任务开始时间结束时间,任务状态,绿色进度条。很方便的获取任务的总体情况
图片描述
点击Detail按钮可以看更具体的调度,日志等
图片描述

点击jsonsumary可以看到非常详细的执行过程
图片描述

那么可以看到Maxcompute的webui还是比较友好的,方便用户很快定位问题。调度方面这里也说一下是由阿里云统一调度,用户无需关心优化。
⑦自定义函数的支持
hive和Maxcompute都支持自定函数。同样是三种,udf,udtf,udaf。
代码写法一致。最大的区别在于数据类型的支持上。
目前Maxcompute支持的数据类型是
UDF 支持 MaxCompute SQL 的数据类型有:Bigint, String, Double, Boolean 类型 。MaxCompute 数据类型与 Java 类型的对应关系如下:

图片描述

注意:

java 中对应的数据类型以及返回值数据类型是对象,首字母请务必大写;

目前暂不支持 datetime 数据类型,建议可以转换成 String 类型传入处理 。
SQL 中的 NULL 值通过 Java 中的 NULL 引用表示,因此 Java primitive type 是不允许使用的,因为无法表示 SQL 中的 NULL 值 。
所以不同于hive中支持各种类型。

看maxcompute代码示例

import com.aliyun.odps.udf.UDF;public final class Lower extends UDF {public String evaluate(String s) {if (s == null) { return null; }return s.toLowerCase();}}

用法一致,所以使用hive的用户基本可以直接迁移。
在此强调一下,在MaxCompute中处于安全层面的考虑对udf和mr是有java沙箱限制的,比如在udf代码中不能启用其他线程等等,具体可以参考
https://help.aliyun.com/document_detail/27967.html
那么可以看到Maxcompute的webui还是比较友好的,方便用户很快定位问题。调度方面这里也说一下是由阿里云统一调度,用户无需关心优化。

⑧界面化操作。
谈到界面化的操作,阿里云的产品基本上都是界面化操作,可拖拽等等,开发门槛非常低,所以也是非常适合初学大数据或者公司没有相关开发人力的公司。
hive可以借助hue工具来操作查询数据,但是实际上交互性不是很强。
那么这里就将Maxcompute的界面化操作以及数据同步,权限控制,数据管理,和其他数据源交互,定时调度等简单介绍下,就是阿里云的产品-大数据开发套件,目前是免费使用的。需要开通Maxcompute项目进入操作。等不及了直接上图
1,Maxcompute sql 查询界面化
图片描述

maxcompute mapreduce界面化配置
图片描述
Maxcompute数据同步界面化
hive可以通过sqoop工具和多种数据源进行数据同步。Maxcompute在大数据开发套件中也是非常方便的和其他数据源进行同步
图片描述

并且可以配置流程控制,调度
图片描述
是不是很神奇,惊不惊喜,意不意外。具体的使用还是大家亲自体验,这里就不一一介绍了。

那最后来看下hadoop-mapreduce和Maxcompute-mapreduce的使用对比。还是用大家最喜欢的wordcount来做示例。
介绍之前还是要强调一下,1,Maxcompute-mapreduce输入输出都是表(或者分区)的形式,如果需要引用其他文件,需要先上传2,Maxcompute-mapreduce也是有沙箱限制,不允许在代码中启用别的框架线程等。
hadoop-mr代码就不贴了,直接上Maxcompute-mapreduce代码

 @Overridepublic void setup(TaskContext context) throws IOException {word = context.createMapOutputKeyRecord();one = context.createMapOutputValueRecord();one.set(new Object[] { 1L });System.out.println("TaskID:" + context.getTaskID().toString());}@Overridepublic void map(long recordNum, Record record, TaskContext context)throws IOException {
//maxcompute中是以表中一行记录来处理,Recordfor (int i = 0; i < record.getColumnCount(); i++) {word.set(new Object[] { record.get(i).toString() });context.write(word, one);}}}

再看job主函数配置,代码逻辑是通用的

 public static void main(String[] args) throws Exception {if (args.length != 2) {System.err.println("Usage: WordCount <in_table> <out_table>");System.exit(2);}JobConf job = new JobConf();job.setMapperClass(TokenizerMapper.class);job.setCombinerClass(SumCombiner.class);job.setReducerClass(SumReducer.class);
//这里可以直接指定map端输出的字段job.setMapOutputKeySchema(SchemaUtils.fromString("word:string"));job.setMapOutputValueSchema(SchemaUtils.fromString("count:bigint"));
//这里输入出需要是表活着分区InputUtils.addTable(TableInfo.builder().tableName(args[0]).build(), job);OutputUtils.addTable(TableInfo.builder().tableName(args[1]).build(), job);JobClient.runJob(job);}

那么基本上主要的功能对比差不多了,大家可以发现,如果您是一位使用过hive的开发人员可以秒迁移到maxcompute上,更加方便简洁的来做开发,将开发人员从苦逼的加班中解放出来,实际上公司节省了大量的运维成本,开发人力成本等等,将主要精力放在业务开发。如果非要问我hive和maxcompute的性能对比,那我只能告诉它是经历双十一考验过的。

总结:如果说工业革命是将人们从体力劳动解放出来,那么如今的互联网革命,尤其是云计算大数据的飞速发展是将人们从脑力中解放出来。

即使你是一个人的研发公司,阿里云也可以让你有对抗世界级企业的能力。你,不是一个人在战斗。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云大数据利器Maxcompute-使用mapjoin优化查询

摘要&#xff1a; small is beautiful&#xff0c;small is powerful 点此查看原文&#xff1a;http://click.aliyun.com/m/40815/ 大数据计算服务&#xff08;MaxCompute&#xff0c;原名 ODPS&#xff09;是一种快速、完全托管的 GB/TB/PB 级数据仓库解决方案。 https://help…

GitHub下载文件时缓慢的问题

用记事本打开hosts文件&#xff0c;路径为 C:\Windows\System32\drivers\etc将下面3行添加到hosts文件中 140.82.114.3 github.com151.101.185.194 github.global.ssl.fastly.net192.30.253.121 codeload.github.com以管理员身份运行CMD&#xff0c;执行命令ipconfig /flushdn…

阿里云大数据利器之-RDS迁移到Maxcompute实现动态分区

摘要&#xff1a; 当前&#xff0c;很多用户的业务数据存放在传统关系型数据库上&#xff0c;例如阿里云的RDS&#xff0c;做业务读写操作。当数据量非常大的时候&#xff0c;此时传系关系型数据库会显得有些吃力&#xff0c;那么会经常有将mysql数据库的数据迁移到[大数据处理…

SaaS前世今生:老树开新花

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 文东海出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcould&#xff09;2019年3月26日&#xff0c;Adobe和微软宣布&#xff0c;两家公司准备展开一项合作&#xff0c;来提升双方的“销售和营销软件”的能力&#xff0c;进…

初体验-阿里云短视频 SDK For Android 快速接入

摘要&#xff1a; 近期的一些创意短视频 App 风靡年轻群体&#xff0c;比较典型的例如抖音、MUSE 等&#xff0c;阿里云也适时地推出了简单易用的短视频 SDK&#xff0c;帮助开发者们以较低的成本快速引入功能完备的创意短视频功能。本文主要介绍如何快速接入阿里云短视频 SDK …

解决Chrome插件安装时出现的“程序包无效”问题

https://blog.csdn.net/ysq5202121/article/details/50809494

【 CDN 最佳实践】CDN 命中率优化思路

摘要&#xff1a; CDN 在静态资源的加速场景中是将静态资源缓存在距离客户端较近的CDN 节点上&#xff0c;然后客户端访问该资源即可通过较短的链路直接从缓存中获取资源&#xff0c;而避免再通过较长的链路回源获取静态资源。因此 CDN的缓存命中率的高低直接影响客户体验&…

首帧秒开+智能鉴黄+直播答题,阿里云直播系统背后技术大起底

摘要&#xff1a; 想要快速实现直播能力&#xff0c;并对原有业务不产生任何影响&#xff0c;依托如阿里云一样的直播平台&#xff0c;来搭建移动直播系统&#xff0c;将技术难题交给阿里云&#xff0c;把更多的精力放在核心业务的本身&#xff0c;是最为稳妥和高效的选择。本文…

《云栖社区2017年度内容特辑》新鲜出炉!800+份大会PPT、20+技术专题、100+话题...快抱走!...

回首2017&#xff0c;云栖社区承载了太多的精彩内容&#xff0c;这一年大量的优秀团队入驻社区&#xff0c;600博主成为云栖专家&#xff0c;他们为读者奉献了无数精彩的内容——100W博文&#xff0c;300场直播&#xff0c;用户互动问答数超过6W&#xff1b;与此同时&#xff0…

K8S精华问答 | K8S 是什么?不是什么?

kubernetes&#xff0c;简称K8S&#xff0c;是用8代替8个字符“ubernete”而成的缩写。是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;Kubernetes的目标是让部署容器化的应用简单并且高效&#xff08;powerful&#xff09;,Kubernetes提供了应…

FaaS如何在云2.0时代发挥优势,又将走向何方?

摘要&#xff1a; 过去十年&#xff0c;云服务深刻地改变了社会获取和使用计算能力的方式&#xff0c;云服务自身也以极快的速度演进。在基础设施云化之后&#xff0c;容器、Serverless等技术迅猛发展&#xff0c;开始推动业务能力的云化&#xff0c;云计算进入2.0时代。 点此查…

解锁新姿势 | 如何用配置中心实现全局动态流控?

摘要&#xff1a; 当资源成为瓶颈时&#xff0c;服务框架需要对消费者做限流&#xff0c;启动流控保护机制。流量控制有多种策略&#xff0c;比较常用的有&#xff1a;针对访问速率的静态流控、针对资源占用的动态流控、针对消费者并发连接数的连接控制和针对并行访问数的并发控…

53K!拿下阿里Python岗,这些技术点全考了!

Python又上热搜了&#xff01;”&#xff0c;最近笔者在逛脉脉时&#xff0c;发现这样的一条信息&#xff1a;看完后&#xff0c;我相信大家和我一样&#xff0c;what&#xff0c;Python这么时候值钱了&#xff1f;本篇文章&#xff0c;我将帮大家搞定两大疑问&#xff1a;1. P…

用WEB技术栈开发NATIVE应用:WEEX SDK原理详解

摘要&#xff1a; WEEX依旧采取传统的web开发技术栈进行开发&#xff0c;同时app在终端的运行体验不输native app。其同时解决了开发效率、发版速度以及用户体验三个核心问题。那么WEEX是如何实现的&#xff1f;目前WEEX已经完全开源&#xff0c;并捐给Apache基金会&#xff0c…

什么是java枚举_什么是java枚举

什么是java枚举&#xff1f;java 枚举的定义与用法一、枚举的定义&#xff1a;枚举是一种特殊的数据类型&#xff0c;之所以特殊是因为它既是一种类(class)类型却又比类型多了些特殊的约束&#xff0c;但是这些约束的存在也造就了枚举类型的简洁&#xff0c;安全性以及便捷性。…

基于阿里云Serverless架构下函数计算的最新应用场景详解(一)

摘要&#xff1a; Serverless概念是近年来特别火的一个技术概念&#xff0c;基于这种架构能构建出很多应用场景&#xff0c;适合各行各业&#xff0c;只要对轻计算、高弹性、无状态等场景有诉求的用户都可以通过本文来普及一些基础概念&#xff0c;看看这些场景是否对用户有一些…

浪潮云完成6亿元B轮融资,正推进上市;VMware收购AI初创公司Bitfusion;小爱同学App在苹果应用商店下架……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 华为Mate30 Lite贴膜曝光&am…

基于阿里云Serverless架构下函数计算的最新应用场景详解(二)

摘要&#xff1a; Serverless概念是近年来特别火的一个技术概念&#xff0c;基于这种架构能构建出很多应用场景&#xff0c;适合各行各业&#xff0c;只要对轻计算、高弹性、无状态等场景有诉求的用户都可以通过本文来普及一些基础概念&#xff0c;看看这些场景是否对用户有一些…

增长黑客系列:今天比昨天增长多少?快使用环比函数来分析日志

摘要&#xff1a; 增长黑客系列&#xff1a;今天比昨天增长多少&#xff1f;快使用环比函数来分析日志 在我们平时分析业务时&#xff0c;一个最重要的指标就是&#xff0c;今天比昨天增长多少&#xff0c;本周比上周增长多少&#xff1b;或者同上一个周期相比增长最大的分类是…

云计算将会让数据中心消失?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 王洪鹏出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcould&#xff09;近年来企业应用云化明显&#xff0c;越来越多的企业开始将自己的公司业务转移到云平台之上&#xff0c;可能是迁到公有云&#xff0c;也可能是私有云…