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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 如果您是一个大数据开发工程师并且使用过hadoop的hive框架,那么恭喜您,阿里云的大数据计算服务-Maxcompute,您已经会了90%。这篇文章就来简单对比下Maxcompute和hive的异同,来方便刚开始使用Maxcompute的用户,从hive秒速迁移到Maxcompute的使用上。

如果您是一个大数据开发工程师并且使用过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的客户端:
image

Maxcompute(原odps)的客户端:
image

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

配置文件如图
image
在客户端中可以执行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的database
    private static final String project = "";
    private static final String sql = "select category from iris;";
    public static void
    main(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可以通过命令,比如上传
image

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

④分区和分桶
分区的概念相信使用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
image

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

在浏览器中打开

总体上一看,非常清晰明了。任务开始时间结束时间,任务状态,绿色进度条。很方便的获取任务的总体情况
image

点击Detail按钮可以看更具体的调度,日志等
image

点击jsonsumary可以看到非常详细的执行过程
image

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

image

注意:

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 查询界面化
image

maxcompute mapreduce界面化配置
image

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

并且可以配置流程控制,调度
image

是不是很神奇,惊不惊喜,意不意外。具体的使用还是大家亲自体验,这里就不一一介绍了。

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

 @Override
        public void setup(TaskContext context) throws IOException {
          word = context.createMapOutputKeyRecord();
          one = context.createMapOutputValueRecord();
          one.set(new Object[] { 1L });
          System.out.println("TaskID:" + context.getTaskID().toString());
        }

        @Override
        public void map(long recordNum, Record record, TaskContext context)
            throws IOException {
//maxcompute中是以表中一行记录来处理,Record
         for (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的性能对比,那我只能告诉它是经历双十一考验过的。

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

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

有对大数据技术感兴趣的,可以加笔者的微信 wx4085116.目前笔者已经从阿里离职,博客不代表阿里立场。笔者开了一个大数据培训班。有兴趣的加我。

另外我们这边长期对外提供优秀的大数据开发工程师人才。
带领训练,做过多个项目。主要技能为:
熟悉Hadoop的系统架构,熟练使用MapReduce、Hive、Hbase等主流技术框架以及CDH版本的搭建
熟悉Spark原理和执行流程,熟练使用Spark Core、Spark Streaming、SparkSQL,Spark MLlib
熟悉机器学习主流算法:分类、回归、预测等。有简单项目经验,熟悉python主流库的使用
熟悉阿里云大数据平台等产品:如Maxcompute、DataWorks、Quick-BI、DataV、阿里云流计算-Flink、RDS
熟悉数据数据仓库建设,熟练使用Hive进行海量数据统计分析、优化。可以进行用户画像分析、数据建模,各项指标统计分析
熟练操作MySQL、Redis、HBase数据库以及Elasticsearch搜索引擎。 快速上手干活。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
3天前
|
弹性计算 数据库 Docker
学习阿里云架构设计知识2-wp搭建及配置
VPC分区清晰架构,VSW网络分隔,CEN连通VPC,按量付费小规格,均衡策略,ESS/ACK内置SNAT,ECS用NAT上网。建DMZ需VPC、VSW、NAT、EIP。主系统多VPC/VSW配ECS和Redis,CEN全连接。CEN设路由表,外网访问设DMZ、CEN、EIP,加堡垒机。Web系统ACR部署WordPress,配数据库。验证WordPress、弹性伸缩,测外访、发文、负载。含架构图。
30 1
学习阿里云架构设计知识2-wp搭建及配置
|
3天前
|
分布式计算 DataWorks 大数据
MaxCompute产品使用合集之大数据计算MaxCompute如何实现通过离线同步脚本模式
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
3天前
|
分布式计算 大数据 BI
MaxCompute产品使用合集之MaxCompute项目的数据是否可以被接入到阿里云的Quick BI中
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
3天前
|
机器学习/深度学习 分布式计算 大数据
MaxCompute产品使用合集之大数据计算MaxCompute是否支持直接在多个节点之间进行批量复制
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
MaxCompute产品使用合集之大数据计算MaxCompute是否支持直接在多个节点之间进行批量复制
|
3天前
|
分布式计算 DataWorks 数据管理
DataWorks操作报错合集之DataWorks中udf开发完后,本地和在MaxCompute的工作区可以执行函数查询,但是在datawork里报错FAILED: ODPS-0130071:[2,5],是什么原因
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
29 0
|
3天前
|
分布式计算 DataWorks Java
DataWorks产品使用合集之阿里云DataWorks专有云环境下,上传MaxCompute的UDF(用户自定义函数)的JAR包的步骤如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
22 0
|
3天前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之在DataWorks中,使用JSON解析函数将MySQL表中的字段解析成多个字段将这些字段写入到ODPS(MaxCompute)中如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
29 3
|
3天前
|
分布式计算 大数据 调度
MaxCompute产品使用合集之大数据计算MaxCompute底层加速查询的原理是什么
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
3天前
|
弹性计算 运维 监控
解密阿里云弹性计算:探索云服务器ECS的核心功能
阿里云ECS是核心计算服务,提供弹性云服务器资源,支持实例按需配置、集群管理和监控,集成安全防护,确保服务稳定、安全,助力高效业务运营。
80 0
|
3天前
|
存储 弹性计算 固态存储
阿里云服务器CPU内存配置详细指南,如何选择合适云服务器配置?
阿里云服务器配置选择涉及CPU、内存、公网带宽和磁盘。个人开发者或中小企业推荐使用轻量应用服务器或ECS经济型e实例,如2核2G3M配置,适合低流量网站。企业用户则应选择企业级独享型ECS,如通用算力型u1、计算型c7或通用型g7,至少2核4G配置,公网带宽建议5M,系统盘可选SSD或ESSD云盘。选择时考虑实际应用需求和性能稳定性。
148 6

热门文章

最新文章