解决spark-redshift只能写不能读的问题
来源:互联网 发布:网络音乐地址 编辑:程序博客网 时间:2024/05/22 06:50
spark-redshift 是由 databricks 公司开发的读写redshift 工具包
在AWS 中国区总出现问题,比如读redshift 报错如下
Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 6C553788BDAF505B), S3 Extended Request ID: r98olrdUZ7E1LB8tQfW3iNwRnmYRuVQmSWVpKj9pETTduF88v7AdFns9B7vGFuNxq4V3ip6w720=
结合工作实践,就该spark-redshift 修改相关源码,解决了以上问题。
代码修改 基于spark-redshift .v3.0.0-preview1,
在此和同行分享
1、修改 Utils.scala文件将new AmazonS3URI(addEndpointToUrl(url))注释 改为 new AmazonS3URI(url)
/** * Factory method to create new S3URI in order to handle various library incompatibilities with * older AWS Java Libraries */ def createS3URI(url: String): AmazonS3URI = { try { // try to instantiate AmazonS3URI with url// new AmazonS3URI(addEndpointToUrl(url)) new AmazonS3URI(url) } catch { case e: IllegalArgumentException if e.getMessage. startsWith("Invalid S3 URI: hostname does not appear to be a valid S3 endpoint") => { new AmazonS3URI(addEndpointToUrl(url)) } } } /** * Since older AWS Java Libraries do not handle S3 urls that have just the bucket name
2、修改RedshiftRelation.scala
增加两行代码
val cn_region = Region.getRegion(Regions.CN_NORTH_1)
s3Client.setRegion(cn_region)
val filesToRead: Seq[String] = { val cleanedTempDirUri = Utils.fixS3Url(Utils.removeCredentialsFromURI(URI.create(tempDir)).toString) val s3URI = Utils.createS3URI(cleanedTempDirUri) val s3Client = s3ClientFactory(creds) val cn_region = Region.getRegion(Regions.CN_NORTH_1) s3Client.setRegion(cn_region)// println("s3Client.setRegion(cn_region),s3Client.getRegion.toString:" + s3Client.getRegion.toString) val is = s3Client.getObject(s3URI.getBucket, s3URI.getKey + "manifest").getObjectContent val s3Files = try { val entries = Json.parse(new InputStreamReader(is)).asObject().get("entries").asArray() entries.iterator().asScala.map(_.asObject().get("url").asString()).toSeq } finally { is.close() }
重新用sbt 打包,问题解决
阅读全文
0 0
- 解决spark-redshift只能写不能读的问题
- 树莓派的U盘只能读不能写的问题
- Mac原生解决ntfs格式只能读不能写
- 通过spark-redshift工具包读取redshift上的表
- linux 下文件只能读不能写或者运行的解决
- U盘只能读不能写的问题---检查你的注册表键值
- 解决cPanel邮箱只能发信不能收信的问题
- vs 只能调试不能运行问题的解决
- 解决systemUIDapp不能写sdcard的问题
- Mac系统对于NTFS的移动硬盘只能读不能写
- windows2003下access只能读,不能写
- 如何解决spark写hive慢的问题
- spark写mysql解决schema不一致问题的简单方法
- U盘只能读,不能写,不能删,也不能格式化的处理
- 黑莓9000通过数据线不能写文件问题的解决
- 解决雅虎邮箱使用outlook只能收不能发送的问题(针对yahoo.com.cn)
- 解决我无限网络只能上QQ不能上网的问题!!
- 解决android模拟器启动后只能在任务栏显示而不能在电脑屏幕显示的问题
- 游戏安全资讯精选2017年第五期:国际网络犯罪基础设施被曝光
- 九、 通用工具 ----class ratio<>
- 四十、vue中封装jsonp
- picture picker(选择多张本地图片,网格布局)
- Angular 点击事件
- 解决spark-redshift只能写不能读的问题
- Anaconda基础介绍
- 【JVM】JVM进阶之JVM算法及种类
- ios 懒加载注意问题
- gitlab 用分支做版本发布
- checkSelfPermission总是返回PERMISSION_GRANTED
- 51Nod-1222-最小公倍数计数
- 算法-归并排序
- Angular 1.63 双向数据绑定 通过 $http 发送数据