Python 还能承担下一个时代的发展重任吗?Mojo 语言的横空出世对 AI 研发生态有什么影响? 了解详情
写点什么

使用 R 完成基于 Amazon Athena 交互分析(二)

  • 2019-12-26
  • 本文字数:2859 字

    阅读完需:约 9 分钟

使用 R 完成基于 Amazon Athena 交互分析(二)

3. 在 Rstudio Server 上配置与 Amazon Athena 的连接

3.1. 登录 Rstudio Server

从 EC2 控制台,获得 EC2 的公网 IP,在浏览器内输入:


http:// RstudioServer-ec2-IP:8787,登录页面输入 2.2 节配置的用户名及密码即可登录。

3.2. 安装 R packages

在 Rstudio 的 Console 中输入:


Bash


install.packages("DBI")install.packages("rJava")install.packages("RJDBC")install.packages(c("plyr","dplyr"))library(DBI)library(rJava)library(RJDBC)library(plyr)library(dplyr)
复制代码


 
复制代码

3.3. 连接到 Athena

AWS 提供了连接到 JDBC 的驱动,详见:


https://docs.aws.amazon.com/athena/latest/ug/connect-with-jdbc.html


这里使用 JDBC 驱动程序版本 2.0.9 版本,符合 JDBC API 4.1 和 4.2 数据标准。更多的安装说明可参考页面中的:JDBC 驱动程序安装和配置指南。


检查访问 Athena 的凭证即环境,即.Renviron 文件中保存的凭证,在 Rstudio 的 Console 中输入:


Bash


Sys.getenv()
复制代码





下载 Athena JDBC 驱动:


Bash


URL <- 'https://s3.amazonaws.com/athena-downloads/drivers/JDBC/SimbaAthenaJDBC_2.0.9/AthenaJDBC42_2.0.9.jar'fil <- basename(URL)if (!file.exists(fil)) download.file(URL, fil)
复制代码


检查下载:


Bash


Fillist.files()
复制代码


设置驱动:


Bash


drv <- JDBC(driverClass="com.simba.athena.jdbc.Driver", fil, identifier.quote="'")
复制代码


连接到 Athena,AwsRegio 表明当前 Athena 所在的区域,并设置中间文件及 output 文件的存储位置:


Bash


con <- jdbcConnection <- dbConnect(drv, 'jdbc:awsathena://AwsRegion=us-west-2',                                   s3_staging_dir="s3://athena-gdelt/mid/",                                   S3OutputLocation="s3://athena-gdelt/output/",                                   user=Sys.getenv("ATHENA_USER"),                                   password=Sys.getenv("ATHENA_PASSWORD"))
复制代码


查询 Athena 自带样例库中的 elb_logs 表:


Bash


dbListTables(con)dfelb=dbGetQuery(con, "SELECT * FROM sampledb.elb_logs limit 10")head(dfelb,2)
复制代码





在 Rstudio 控制台显示结果


Bash


View(dfelb)
复制代码

4. 调用 Athena 进行交互查询

GDELT 是一个大数据存储项目,它提供了自 1979 年至今的全球广播、印刷和网络新闻媒体报道的事件,并按时间和位置索引。其数据量十分庞大,类别也很丰富。


Aws 提供公开数据集,后续以此为例进行 Athena 的使用。


https://registry.opendata.aws/gdelt/


接下来,您将练习从 R 交互式查询 Athena 以进行分析和可视化。


创建数据库和表,这一步也可以在 Athena 界面中完成。


Bash


dbSendUpdate(con,"CREATE DATABASE IF NOT EXISTS gdelt")
dbSendUpdate(con,"CREATE EXTERNAL TABLE IF NOT EXISTS gdelt.events ( `globaleventid` INT,`day` INT,`monthyear` INT,`year` INT,`fractiondate` FLOAT, `actor1code` string,`actor1name` string,`actor1countrycode` string,`actor1knowngroupcode` string, `actor1ethniccode` string,`actor1religion1code` string,`actor1religion2code` string, `actor1type1code` string,`actor1type2code` string,`actor1type3code` string, `actor2code` string,`actor2name` string,`actor2countrycode` string,`actor2knowngroupcode` string, `actor2ethniccode` string,`actor2religion1code` string,`actor2religion2code` string, `actor2type1code` string,`actor2type2code` string,`actor2type3code` string, `isrootevent` BOOLEAN,`eventcode` string,`eventbasecode` string,`eventrootcode` string, `quadclass` INT,`goldsteinscale` FLOAT,`nummentions` INT,`numsources` INT,`numarticles` INT,`avgtone` FLOAT, `actor1geo_type` INT,`actor1geo_fullname` string,`actor1geo_countrycode` string,`actor1geo_adm1code` string, `actor1geo_lat` FLOAT,`actor1geo_long` FLOAT,`actor1geo_featureid` INT, `actor2geo_type` INT,`actor2geo_fullname` string,`actor2geo_countrycode` string,`actor2geo_adm1code` string, `actor2geo_lat` FLOAT,`actor2geo_long` FLOAT,`actor2geo_featureid` INT, `actiongeo_type` INT,`actiongeo_fullname` string,`actiongeo_countrycode` string,`actiongeo_adm1code` string, `actiongeo_lat` FLOAT,`actiongeo_long` FLOAT,`actiongeo_featureid` INT, `dateadded` INT,`sourceurl` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ('serialization.format' = ' ','field.delim' = ' ') LOCATION 's3://gdelt-open-data/events/';")
复制代码


在 rstudio 中针对新创建的表运行查询,查找每年发生的事件:


Bash


year<-dbGetQuery(con,"SELECT year,         COUNT(globaleventid) AS nb_eventsFROM gdelt.eventsGROUP BY yearORDER BY year ASC;")str(year)head(year,2)View(year)
复制代码





查询的时候可能遇到错误


[Simba]AthenaJDBC Query execution got cancelled for this query:


这时可在 Athena 界面内设置“数据使用控制限制”的范围



进一步查询包含 OBAMA 的事件:


Bash


dOBAMA<-dbGetQuery(con,"SELECT year,COUNT(globaleventid) AS nb_eventsFROM gdelt.eventsWHERE actor1name='BARACK OBAMA'GROUP BY yearORDER BY year ASC;")View(dOBAMA)
复制代码



更多 rjdbc 语法的使用,请参考:https://www.rforge.net/doc/packages/RJDBC/00Index.html

4.1. 进一步优化

针对 Athena 的性能和成本的优化,可阅读《Amazon Athena 的十大性能优化技巧》:


https://aws.amazon.com/cn/blogs/china/top-10-performance-tuning-tips-for-amazon-athena/


为保证 Rstudio server 的安全、稳定,可结合 Amazon Elastic Load Balancing 及 Auto-scaling 来实现,并启用 https 传输。


在多用户的环境,可以结合 ADFS 或 OKTA 进行用户认证。详见 JDBC Driver Installation and Configuration 中认证部分。Guide: https://docs.aws.amazon.com/athena/latest/ug/connect-with-jdbc.html


进一步可以使用 Rstudio server Pro,这个版本对多用户的管理和共享做的更完善。


https://aws.amazon.com/marketplace/pp/RStudio-RStudio-Server-Pro-for-AWS/B06W2G9PRY

5. 结论

上面如何使用 Athena 和 R 构建简单的交互式应用程序。Athena 可用于使用标准 SQL 存储和查询大数据应用程序的基础数据,而 R 可用于交互式查询 Athena 并使用 R 提供的功能强大的数据洞察,而数据则安全高效的存放在 S3 上,您只需要为您的使用付费。


作者介绍:


!



### [](https://amazonaws-china.com/cn/blogs/china/tag/%E8%B0%B7%E9%9B%B7/)
AWS APN 合作伙伴解决方案架构师,主要负责 AWS (中国)合作伙伴的方案架构咨询和设计工作,同时致力于 AWS 云服务在国内的应用及推广。
复制代码


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/complete-amazon-athena-based-interaction-analysis-using-r/


2019-12-26 13:47402

评论

发布
暂无评论
发现更多内容

40 岁程序员会有哪些肺腑之言?这篇文章告诉你

宇宙之一粟

学习 程序员 读书感悟 9月月更

Web3.0杂谈-#001(47/100)

hackstoic

Web3.0

SSM整合(功能模块的开发)

十八岁讨厌编程

Java ssm 后端开发 9月月更

SSM整合(接口测试)

十八岁讨厌编程

Java SSM框架 后端开发 9月月更

ESP32-C3入门教程 基础篇(三、UART模块 — 与Enocean无线模块串口通信)

矜辰所致

ESP32-C3 9月月更 UART

ESP32-C3入门教程 基础篇(四、I2C总线 — 与SHT21温湿度传感器通讯)

矜辰所致

I2C I2C协议 ESP32-C3 9月月更

开发者有话说|情分 or 本分

卷卷龙

个人成长 职场 PUA

监控系统的阶段建设

穿过生命散发芬芳

监控系统 9月月更

开发者有话说 | 一个普通人的前端职业成长之路

范文杰

个人成长

[SSM]SSM整合①(整合配置)

十八岁讨厌编程

Java 后端开发 9月月更

C++学习---cstdio的源码学习分析04-创建临时文件函数tmpfile

桑榆

c++ 源码阅读 9月月更

【数据结构】五分钟带你了解及自定义有向图

迷彩

数据结构 算法 无向图 9月月更 有向图

开发者有话说|时间过得真快,我也是一个“奔三”的人了

武师叔

个人成长

面试突击85:为什么事务@Transactional会失效?

王磊

Java 面试

通过爬虫爬取一些图片

吉师职业混子

9月月更

面对全新的编程语言,这些思路可以帮助你察觉漏洞

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞利用

【字符串函数内功修炼】strlen + strstr + strtok + strerror(三)

Albert Edison

C语言 9月月更 strlen strstr strtok

Python教程之Python简介

向阳逐梦

编程语言 9月月更 Python简介

springboot搭建基于minio的高性能存储

CTO技术共享

数据平台发展史-从数据仓库数据湖到数据湖仓

明哥的IT随笔

hadoop spark 数据仓库 数据湖 湖仓一体

4 分钟优化 Fetch 函数写法~

掘金安东尼

前端 9月月更

数字化转型新抓手:一看就懂的《企业应用现代化行动指南》(附下载)

York

容器 微服务 云原生 应用现代化

RAID(独立冗余磁盘阵列)

阿柠xn

Linux 运维 操作系统 raid 9月月更

史上最详细vue的入门基础

楠羽

Vue 笔记 9月月更

跟着卷卷龙一起学Camera--CCM

卷卷龙

ISP 9月月更

《简单记个笔记》之表单标签加CSS选择器

吉师职业混子

9月月更

2022-09-20:以下go语言代码输出什么?A:8 8;B:8 16;C:16 16;D:16 8。 package main import ( “unsafe“ “fmt“ )

福大大架构师每日一题

golang 福大大 选择题

2022-09-19:给定字符串 S and T,找出 S 中最短的(连续)子串 W ,使得 T 是 W 的 子序列 。 如果 S 中没有窗口可以包含 T 中的所有字符,返回空字符串 ““。 如果有不

福大大架构师每日一题

算法 rust 福大大

【云原生 | 从零开始学Kubernetes】一、kubernetes到底是个啥

泡泡

云计算 云原生 k8s 9月月更

概述构建应用智能运维系统的核心能力

阿泽🧸

智能运维 9月月更

《简单记个笔记》之部分CSS选择器介绍

吉师职业混子

9月月更

  • 扫码加入 InfoQ 开发者交流群
使用 R 完成基于 Amazon Athena 交互分析(二)_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章