引言
针对不同格式和大小的数据,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-groupsInstanceGroupType=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 TABLEeng_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 TABLEeng_1M_1gram_paraquet(token STRING, year INT, frequency INT, pages INT, booksINT) ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe' STORED ASinputformat '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-idj-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访问日志。
原文链接:http://blogs.aws.amazon.com/bigdata/post/TxFSE0F3ZOO24E/Using-Amazon-EMR-and-Tableau-to-Analyze-and-Visualize-Data
如您需要了解AWS最新资讯或是技术文档可访问AWS中文技术社区;如您有更多的疑问请在AWS技术论坛提出,稍后会有专家进行答疑。
订阅“AWS中文技术社区”微信公众号,实时掌握AWS技术及产品消息!
AWS中文技术社区为广大开发者提供了一个Amazon Web Service技术交流平台,推送AWS最新资讯、技术视频、技术文档、精彩技术博文等相关精彩内容,更有AWS社区专家与您直接沟通交流!快加入AWS中文技术社区,更快更好的了解AWS云计算技术。
(译者/薛童阳 责编/王玉平)