你好,游客 登录 注册 发布搜索
背景:
阅读新闻

使用Amazon EMR和Tableau分析和可视化数据

[日期:2014-09-25] 来源:CSDN  作者: [字体: ]

  引言

  针对不同格式和大小的数据,Hadoop生态圈提供了丰富的工具进行分析并提取价值。最初,Hadoop生态圈专注于分析大批量数据,提供了类似MapReduce、Pig和Hive等组件。而当下,Hadoop已提供了大量用于交互式数据查询的工具,比如Impala、Drill和Presto。本篇文章将教会你如何使用Amazon Elastic MapReduce(Amazon EMR)来分析Amazon Simple Storage Service(Amazon S3)上存储的数据,并使用Tableau配合Impala进行可视化。

  工具介绍

  Amazon Elastic Map Reduce:Amazon EMR是一个基于Web的服务,使用它用户可以便捷及合算地处理海量数据。Amazon EMR使用了Apache Hadoop这个开源框架,在Amazon Elastic Compute Cloud(Amazon EC2)实例组成的集群中进行分布式数据处理。

  Impala: Hadoop生态圈中的一个开源工具,当下已可在EMR中使用进行基于SQL的交互式即席查询。取代使用类似Hive的MapReduce引擎,Impala利用了大规模并行处理引擎(MPP)的优势,类似传统关系型数据库管理系统(RDBMS)中使用的方法,Impala可以实现更快的查询响应时间。

  鉴于Hive和Impala都提供了类似SQL的能力,并且可以共享相同的Metastore(为表格和分割元数据提供的资源库),它们在Hadoop生态圈中互不冲突,各司其职。对比Impala,Hive的批处理形式需要更多响应时间,因此在与类似Tableau等工具配合进行交互式数据分析时颇显乏力。Impala同样存在许多限制,因为内存处理的性质,它需要使用大量的内存资源,从而单查询可操作数据量必然会受到集群可用内存资源限制,但是Hive就完全没有这样的限制——相同硬件上,它可以处理更大的数据集,从而更适合大数据集上的ETL负载。

  Tableau:是个商业智能解决方案,它结合了数据分析和报表形成一个持续可视化分析过程,易于用户认知和使用。Tableau可以交付非常快速的分析、可视化和商业智能,它可以直接连接到AWS和其他数据源。在最新版本的Tableau Desktop中,用户可以使用Amazon EMR专用ODBC驱动将之与运行在Amazon EMR上的Hive或者Impala连接。具体如何将Amazon EMR作为Tableau的一个数据源,你可以联系Tableau取得帮助。

  实例解析

  在本文中,我们将展示如何让Amazon EMR作为Tableau的一个数据源,并把Tableau与Impala连接进行交互式可视化分析。

  使用Amazon EMR来分析Google Books n-grams

  Google Books n-grams数据集已免费存储于Amazon S3的AWS Public Data Sets上,N-grams是大量item组成的固定大小元组。在这里,item是Google Book语料库中抽取的单词。“n”指的是元祖中的元素个数,因此5-gram代表了5个单词或者字母。

  传统情况下,Apache Hadoop运行在HDFS上,但是它同样支持Amazon S3作为其文件系统。而对比Hive可以直接查询Amazon S3存储的数据,Impala则需要HDFS的支持。

  Google Books n-gram当下已经支持Hadoop友好的文件格式,最大体积可达2.2 TB。该数据集使用SequenceFile格式进行存储,并且使用了块级(block-level)的LZO压缩方式。行号使用LongWritable来存储,并作为SequenceFile的键;原始数据使用TextWritable进行存储,并作为SequenceFile的值。

  鉴于使用块级的LZO压缩,SequenceFile需要进一步的进行转换,因为Impala不可以直接建立或对其插入数据,Impala只可以查询LZO压缩的Text表格。Hive则原生支持了使用LZO压缩的SequenceFile格式,并且可以查询存储在Amazon S3上的外部数据。因此,使用它将S3上的数据转换成(储存在HDFS上)Impala支持的格式是个非常不错的选择。

  开启一个Amazon EMR集群

  首先,我们需要建立一个安装Impala和Hive的Amazon EMR集群。

  1. 使用AWS CLI建立一个Amazon EMR集群。如果之前你没有使用CLI的经验,AWS提供了一个说明用于安装和配置。下面是使用CLI建立Amazon EMR集群的语句,同时返回了该集群的唯一识别符。

  aws emr create-cluster --name ImpalaCluster--ami-version 3.1.0 --

  instance-groups

  InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m1.medium

  InstanceGroupType=CORE,InstanceCount=2,InstanceType=m1.medium--ec2-

  attributes KeyName=keyPairName,AvailabilityZone=availabilityZone --

  applications Name=Hive,Name=Impala --no-auto-terminate

  注意:运行该语句前,将keyPairName和availabilityZone字符串替换成合适的值。在下面步骤里,你还需要使用这条语句执行得到的唯一识别符去替换j- XXXXXXXXXXXX字符串。

  2. 5到10分钟后,集群建立完成,其状态会显示成等待。如果需要检查集群的初始化状态,你可以运行下面的命令:

  aws emr describe-cluster --cluster-id j-XXXXXXXXXXXX--query

  'Cluster.Status.State' --output text

  3. 当你的集群进入“WAITING”状态后,你可以使用下面的语句连接到主节点。

  aws emr ssh --cluster-id j-XXXXXXXXXXXX --key-pair-file keyFilePath

  注意: 使用私钥文件的路径替换字符串keyFilePath。

  为来自Amazon S3上的数据建立External Table

  通过建立EXTERNAL TABLE可以让Amazon EMR引用来自外部的数据源。建立到这个数据的引用非常简单,这里并不会产生数据迁移。

  1. 登入主节点后,开启Hive shell:

  $ hive

  2. 使用CREATE TABLE语句定义数据源。在这里例子中,我们将使用一个English 1-grams数据集。

  hive> CREATE EXTERNAL TABLE

  eng_1M_1gram(token STRING, year INT, frequency INT, pages INT,

  books INT) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED

  AS SEQUENCEFILE LOCATION 's3://datasets.elasticmapreduce/ngrams/

  books/20090715/eng-1M/1gram';

  在HDFS中建立一个Replica Table

  为了使用Impala,我们需要建立一个储存在HDFS中的副本表格。在副本表格中,我们将使用Parquet取代Sequence File 格式。Parquet是个面向列的二进制文件格式,旨在服务高效大规模查询。

  1. 在Hive中建立副本表格:

  hive> CREATE TABLE

  eng_1M_1gram_paraquet(token STRING, year INT, frequency INT, pages INT, books

  INT) ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' STORED AS

  inputformat 'parquet.hive.DeprecatedParquetInputFormat' outputformat

  'parquet.hive.DeprecatedParquetOutputFormat';

  2. 调整好mapred.min.split.size设置,因为储存在Amazon S3中的数据是个单文件。

  hive> set mapred.min.split.size=134217728;

  这个设置告诉hive至少分割成128 MB的文件进行处理。这可以防止你处理数据时只使用一个映射器,因为这不会利用MapReduce的分布式特性。

  3. 使用select查询将数据插入到这个表格中。我们从原始数据表格中读取数据,并将之插入新表格。

  hive> INSERT OVERWRITE TABLE eng_1M_1gram_paraquet SELECT lower(token),

  year, frequency, pages, books FROM eng_1M_1gram WHERE year >= 1890 AND

  token REGEXP "^[A-Za-z+'-]+quot;;

  这个查询同时还演示了一个典型的用例——转换数据让下游工具(比如Tableau)可以更便捷的使用。在这个查询中,第一步是过滤掉1890年之前的数据。同时还使用正则表达式过滤掉非字母或常用标点之外的数据。而为了使用相同格式以便后续步骤可以更方便的查询,我们还使用内置函数将所有字母转换成小写格式。

  4. 在上述所有步骤完成后,退出Hive。

  让副本表格在Impala中可用

  在这里,为Hive和Impala使用了同一个Metastore。因此,在表格对Imapa查询可用之前,我们需要更新Impala中的元数据。INVALIDATE METADATA语句可以失效元数据,并在Impala查询发生之前为其重新加载所需的元数据。

  1. 登入Impala。

  $ impala-shell

  2. 无效给Impala副本表格准备的元数据

  impala> invalidate metadata;

  3. 退出Impala shell,并且关闭到Amazon EMR集群的SSH连接。

  使用Tableau可视化Impala传来的数据

  下一个步骤,你需要使用在Windows或者MacOSX主机上安装的Tableau Desktop。如果你还没有安装Tableau,你可以使用Amazon EC2,在其上安装本例需要使用的Tableau。你同样需要一些步骤让Amazon EMR对Tableau可用。当然,你可以通过联系Tableau取得帮助。

  1. 在主机上安装Tableau Desktop需要使用的ODBC驱动,从而你可以将Tableau

  Desktop连接到Amazon EMR上的Impala上。

  A. 下载驱动

  B. 解压下载文件。可能会建立一个名为ImpalaODBC的文件夹。

  C. 将之复制到所需文件中以备安装。

  Windows:ImpalaODBC\1.0.16.1017\Windows\SimbaImpalaODBC64.msi

  MacOSX: ImpalaODBC/1.0.16.1017/MacOSX/SimbaImpalaODBC.dmg

  D. 运行上面的包,按照提示安装ODBC驱动。

  2. 修改Amazon EMR集群的Master Security Group,让Tableau可以连接到运行在Amazon EMR集群主节点上的Impala服务器。

  A. 点击AWS Management Console中的Amazon EC2标签来打开Amazon EC2控制台。

  B. 在导航面板中,选择Network和Security group下的Security Groups。

  C. 在Security Groups列表中,选择Elastic MapReduce-master。

  D. 在靠近下方的面板中,点击Inbound标签。

  E. 在Port Range字段类型20150,标记Source字段的默认值。

  F. 点击Add Rule,然后点击Apply Rule Changes。

  3. 按Tableau指示允许Amazon EMR作为Tableau的一个数据连接选项。点击A可以看到如下图所示的页面。

  

 

  图1

  4. 在Server字段中填写主节点的DNS,然后点击Connect按钮。你可以使用以下语句获得DNS:

  aws emr describe-cluster --cluster-id

  j-XXXXXXXXXXXX --query 'Cluster.MasterPublicDnsName' --output text

  5. 在下一个页面中,从schema下拉框中选择default模式,将名为“eng_1m_1g_paraquet”的表格拖到下图左上角的面板中,然后点击Go to Worksheet按钮。

  

 

  图2

  这将打开一个Tableau workbook,Dimension和Measure会自动填充。现在,我们已经可以使用Tableau与运行在Amazon EMR上的Impala。

  视频演示

  建立交互式可视化

  下面的视频将演示如何使用Tableau进行一些交互式可视化。首先,我们需要为每年发布的书籍建立一个trend-line。

  

 

  视频1

  视频请点击:https://s3.amazonaws.com/rbhartia/Video1.mp4

  建立一个过滤器

  下面这个视频演示如何建立一个过滤器,它将允许用户为trend-line选择一个指定的1-Gram。1905年左右,1-gram里“computer”单词的忽然增加可能就比较有趣。如果你对这个增加有自己的看法,请进行评论。

  

 

  视频2

  视频请点击:https://s3.amazonaws.com/rbhartia/Video2.mp4

  关闭Amazon EMR Cluster

  当你完成上述所有步骤后,请别忘记在AWS控制台中关闭这个Amazon EMR集群。你可以通过下方的CLI语句完成:

  aws emr terminate-cluster --cluster-id j-XXXXXXXXXXXX

  如果你只是为演示这个步骤才建立的Amazon EMR集群,请别忘记关闭。

  总结

  在这篇文章中,我们演示了如何使用Amazon EMR、Impala和Tableau快速可视化分析Amazon S3中的数据。我们演示了如何使用Impala提供一个快速分析,以及如何使用Tableau的数据探索功能,因此我们可以快速的挖掘数据并且可视化来验证猜想。你可以使用同样的方法来快速分析所有Amazon S3上的数据,包括AWS CloudTrail日志或者Amazon S3访问日志。

收藏 推荐 打印 | 录入:574107552 | 阅读:
相关新闻       AWS EMR S3 数据分析 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款