国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

經驗分享:Amazon AWS 中國區的那些坑

云計算
使用AWS 中國區有一段時間了, 期間踩過了一些坑. 簡單寫一下, 希望對別人有幫助。文中很可能有錯誤或者AWS 已經升級了, 還是用他們的 support 服務最靠譜。

[[144692]]

使用AWS 中國區有一段時間了, 期間踩過了一些坑. 簡單寫一下, 希望對別人有幫助。文中很可能有錯誤或者AWS 已經升級了, 還是用他們的 support 服務最靠譜。

Amazon S3

所有坑中, 最數 S3 坑多. 原因很簡單: EC2的服務大不了大家在web console 里面點擊鼠標, S3 更多時候肯定是用SDK訪問. 因此SDK的各種問題都會提前暴露.

Hadoop Over S3

問題: 去年12月份左右(具體jets3t 什么時候fix的這個問題不記得了), hadoop 中使用的library jets3t 不支持中國區(cn-north-1) , 原因很簡單: S3 的signature 已經升級到V4. 但是因為兼容問題, AWS的其他region都兼容V2版本, 中國區是新的region, 沒有兼容問題, 因此僅僅支持V4. 詳情參見 jets3t 的這個issue

折騰了各種解決辦法, 流水賬的形式寫一下吧.

***個法子: copy EMR 集群中的emrfs

emrfs 就是 EMR 集群中hadoop使用的訪問S3 的方式. 是 Amazon

官方提供的, 不開源. 使用的法子也很簡單: 啟動一個emr 集群, 隨便登陸一臺服務器, 在 hadoop-env.sh 中可以看到添加了emrfs 的classpath:

 

#!/bin/bash

export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -XX:MaxPermSize=128m"
export HADOOP_CLASSPATH="$HADOOP_CLASSPATH:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/lib/*"
export HADOOP_DATANODE_HEAPSIZE="384"
export HADOOP_NAMENODE_HEAPSIZE="768"
export HADOOP_OPTS="$HADOOP_OPTS -server"
if [ -e /home/hadoop/conf/hadoop-user-env.sh ] ; then
  . /home/hadoop/conf/hadoop-user-env.sh
fi

 

注意: EMR 可能會發布新的版本, 這里僅僅是提供一個思路, 列出的文件也是當時版本的emr的實現

將 /usr/share/aws/emr/emrfs 下面的所有文件copy出來, 部署到自己的集群并在 core-sites.xml 中添加如下內容:

 

fs.s3n.implcom.amazon.ws.emr.hadoop.fs.EmrFileSystem
  fs.s3.implcom.amazon.ws.emr.hadoop.fs.EmrFileSystem
  fs.s3.buffer.dir/mnt/var/lib/hadoop/s3,/mnt1/var/lib/hadoop/s3
  fs.s3.buckets.create.regioncn-north-1
  fs.s3bfs.implorg.apache.hadoop.fs.s3.S3FileSystem
  fs.s3n.endpoints3.cn-north-1.amazonaws.com.cn

 

設置 EMRFS_HOME 并且把 $EMRFS_HOME/bin 添加到PATH中(后面會用到)

這樣可以保證hadoop 盡快運行起來. 但使用 emrfs 也有一些問題:

沒有源代碼. 官方沒有計劃將這個東西開源. 因此除了問題只有反編譯jar包. 還好官方編譯的jar包沒有混淆并且帶著 lineNumber 等信息. 曾經遇到他代碼里面吃掉異常的情況, 不知道現在是否更新

S3 rename 操作非常耗時. 眾所周知Hadoop Mapreduce 為了保證一致性, 結果文件都是先寫臨時文件, *** rename 成最終輸出文件. 在 HDFS 上這種模式沒有問題, 但是 S3 就會導致*** commit job 時非常慢, 因此默認的committer 是單線程rename文件. 結果文件大并且多文件的情況下S3 非常慢. 因此 emrfs 做了一個hack: 結果僅僅寫本地文件, 到 commit 的時候再一次性上傳結果文件. 但如果你輸出的一個結果文件太大會導致本地磁盤寫滿! 不知道哪里是否有參數配置一下這個***值.

S3 由于不是FileSystem, 僅僅是一個KV存儲. 因此在list dir 時會很慢, emrfs 為了優化, 用dynamodb做了一層索引.但在某些情況下(我們遇到過)mr job fail 會導致索引和 S3 數據不一致. 極端情況下需要使用 emrfs sync path 來同步索引

暫時記得的關于 emrfs 就有這么多.

第二個法子: hadoop-s3a

An AWS SDK-backed FileSystem driver for Hadoop

這是github上有人用 AWS-java-SDK 開發的一個 FileSystem 實現, 雖說是試驗情況下, 修改一下還是可以用的. >;<

但是, 這個直接用也是不行的!~~~

坑如下:

  • 中國區 Amazon S3 Java SDK 有一個神坑: 如果不顯示設置region的 endpoint , 會一直返回 Invalid Request(原因后面解釋), 需要在代碼中添加如下幾行:

 

// 這里獲取配置文件中的region name的設置
//  如果獲取不到, 強烈建議獲取當前系統所在region
AmazonS3Client s3 = new AmazonS3Client(credentials, awsConf);
String regionName = XXXX;
Region region = Region.getRegion(Regions.fromName(regionName));
s3.setRegion(region);
final String serviceEndpoint = region.getServiceEndpoint(ServiceAbbreviations.S3);

// 關鍵是下面這一行, 在除了中國外的其他region, 這行代碼不用寫
s3.setEndpoint(serviceEndpoint);
LOG.info("setting s3 region: " + region + ", : " + serviceEndpoi

 

  • S3 rename 操作慢!

需要在 hadoop-s3a 中需要修改rename 方法的代碼, 使用線程池并行rename 一個dir.

需要寫一個 committer, 在MR job 完成的時候調用并行rename操作.

  • hadoop-s3a 沒有設置 connect timeout. 僅僅設置了socket timetout
  • block size計算錯誤.

需要在社區版本上添加一個 block size 的配置項(跟 hdfs 類似), 并且在所有創建 S3AFileStatus 的地方添加 blockSize 參數. 現在情況下會導致計算 InputSplit 錯誤(blocksize默認是0).

  • 權限管理

通常情況下, hadoop 集群使用IAM role 方式獲取accessKey 訪問S3, 這樣會導致之前在 hdfs 中基于用戶的權限管理失效. 比如, 用戶A 是對一些Table 有讀寫權限, 但是用戶B 只有只讀權限. 但EC2 不支持一個instance 掛載兩個不同的 IAM role. 我們的解決方案是在S3FileSystem中判斷當前的用戶, 根據不同的用戶使用不同的AccessKey, 實現HDFS的權限管理.

S3 api/client

使用S3 api 或者aws client, 還有一個容易誤導的坑:

你有可能在 cn-north-1 的region 訪問到AWS 美國的S3 !

現象: 比如你按照doc 配置好了aws client(access key 和secret都配置好), 簡單執行 aws --debug s3 ls s3://your-bucket/ 確返回如下錯誤:

 

2015-08-06 20:54:25,622 - botocore.endpoint - DEBUG - Sending http request:  2015-08-06 20:54:27,770 - botocore.response - DEBUG - Response Body: b'\nInvalidAccessKeyIdThe AWS Access Key Id you provided does not exist in our records.AAABBBBAAAAAA111B1ABCFEA8D30AfPehbRNkUmZyI6/O3kL7s+J0zCLYo/8U6UE+Hv7PSBFiA6cB6CuLXoCT4pvyiO7l' 2015-08-06 20:54:27,783 - botocore.hooks - DEBUG - Event needs-retry.s3.ListObjects: calling handler  2015-08-06 20:54:27,783 - botocore.retryhandler - DEBUG - No retry needed. 2015-08-06 20:54:27,784 - botocore.hooks - DEBUG - Event after-call.s3.ListObjects: calling handler  2015-08-06 20:54:27,784 - awscli.errorhandler - DEBUG - HTTP Response Code: 403 2015-08-06 20:54:27,784 - awscli.clidriver - DEBUG - Exception caught in main() Traceback (most recent call last):   File "/usr/share/awscli/awscli/clidriver.py", line 187, in main     return command_table[parsed_args.command](remaining, parsed_args)   File "/usr/share/awscli/awscli/customizations/s3/s3.py", line 165, in __call__     remaining, parsed_globals)   File "/usr/share/awscli/awscli/customizations/s3/s3.py", line 276, in __call__     return self._do_command(parsed_args, parsed_globals)   File "/usr/share/awscli/awscli/customizations/s3/s3.py", line 358, in _do_command     self._list_all_objects(bucket, key)   File "/usr/share/awscli/awscli/customizations/s3/s3.py", line 365, in _list_all_objects     for _, response_data in iterator:   File "/usr/lib/python3/dist-packages/botocore/paginate.py", line 147, in __iter__     **current_kwargs)   File "/usr/lib/python3/dist-packages/botocore/operation.py", line 82, in call     parsed=response[1])   File "/usr/lib/python3/dist-packages/botocore/session.py", line 551, in emit     return self._events.emit(event_name, **kwargs)   File "/usr/lib/python3/dist-packages/botocore/hooks.py", line 158, in emit     response = handler(**kwargs)   File "/usr/share/awscli/awscli/errorhandler.py", line 75, in __call__     http_status_code=http_response.status_code) awscli.errorhandler.ClientError: A client error (InvalidAccessKeyId) occurred when calling the ListObjects operation: The AWS Access Key Id you provided does not exist in our records. 2015-08-06 20:54:27,877 - awscli.clidriver - DEBUG - Exiting with rc 25*** client error (InvalidAccessKeyId) occurred when calling the ListObjects operation: The AWS Access Key Id you provided does not exist in our records.

 

上面的錯誤信息非常有誤導性的一句話是:

A client error (InvalidAccessKeyId) occurred when calling the ListObjects operation: The AWS Access Key Id you provided does not exist in our records.

然后你打電話給 support(記住一定要提供request id), 那邊給的答復是你本機的時間不對

WTF! 服務器肯定開啟了NTP, 怎么會時間不對!

其實你使用 aws s3 --region cn-north-1 ls s3://your-bucket 就不會出錯. 或者在 ~/.aws/config 中 配置:

 

[default]
region = cn-north-1

 

但是:

support為什么會說我的時間不對?

為什么 aws client 報錯是 The AWS Access Key Id you provided does not exist in our records

因為你的請求到了AWS 的美國區(或者準確說是非cn-north-1區)!

簡單猜測一下原因(純猜測, 猜對了才奇怪!):

AWS S3 要高可用, 必須要存儲多份數據, 而中國區只有一個availability zone(現在已經有多個了), 因此數據必須存儲到其他region, 也就是說在內部, AWS cn-north-1 去跟其他region網絡是通的!

默認情況下aws s3 的endpoint url 是其他region. 因此那個ls 操作直接請求了非cn-north-1 region.

但是aws cn-north-1 的賬戶系統跟其他region不通, 因此美國區返回錯誤: The AWS Access Key Id you provided does not exist in our records

support 之所以根據request id 告訴你錯誤是因為請求時間不對, 也很簡單: server端驗證了請求的發起時間, 由于時差, 導致時間肯定是非法的. 因此support 告訴你說你的時間有問題

感覺客戶端跟support告訴你的錯誤不一致是吧? 我當時就是因為他們的誤導, 折騰了2天啊!!! ***加一行代碼解決了問題, 想死的❤️都有

因此結論很簡單:

  • 使用awscli 操作 S3 時, 記得帶上 --region cn-north-1
  • 寫代碼訪問S3 時, 顯示調用 setEndpoint 設置api地址

 

// 關鍵是下面這一行, 在除了中國外的其他region, 這行代碼不用寫
s3.setEndpoint(serviceEndpoint);

 

#p#

S3 一個理解錯誤的坑

S3 是一個KV 存儲, 不存儲在文件夾的概念. 比如你存儲數據到 s3://yourbucket/a/b/c/d.txt, S3 僅僅是將s3://yourbucket/a/b/c/d.txt 作為key, value就是文件的內容. 如果你想ls s3://yourbucket/a/b 是不存在的key!

S3 定位錯誤的tips

調試模式下, 可以考慮關閉ssl, 并使用 tcpdump 抓包查看數據是否正確, 非常實用

aws 客戶端可以添加 --debug 開啟調試日志, 出錯后開case時***帶著 Request ID 和 Extended Request ID . AWS 幾乎所有服務的每次請求都是帶有 Request ID 的, 非常便于定位問題. 至于為什么, 建議看Google早年的論文: Dapper, a Large-Scale Distributed Systems Tracing Infrastructure

聊完了 S3, 其他的基本上坑不多, 走過路過也記不得了. 但最深刻的一個關于 IAM 的要注意.

Amazon IAM 坑

啥是IAM?

AWS Identity and Access Management (IAM) 使您能夠安全地控制用戶對 Amazon AWS 服務和資源的訪問權限。您可以使用 IAM 創建和管理 AWS 用戶和群組,并使用各種權限來允許或拒絕他們對 AWS 資源的訪問。

唯一大坑: IAM policy file 中 arn 的寫法

啥是arn?

Amazon Resource Names (ARNs) uniquely identify AWS resources. We require an ARN when you need to specify a resource unambiguously across all of AWS, such as in IAM policies, Amazon Relational Database Service (Amazon RDS) tags, and API calls.

具體參加這里

簡單來說, arn 就是AWS中資源的uri. 任何AWS資源都可以用 arn 標識, 因此對于資源的訪問控制配置文件也要使用 arn 來寫.

arn 的格式如下:

 

arn:partition:service:region:account:resource
arn:partition:service:region:account:resourcetype/resource
arn:partition:service:region:account:resourcetype:resource

 

  • 上面這行代碼據說 在AWS 其他region 都可以使用
  • 唯獨中國區不能用! 因為AWS 中國區非常特殊, 上述文件中的 aws 要修改成 aws-cn !!!!
  • 這樣寫在中國區就可以用:

 

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": ["arn:aws:s3:::your-bucket", "arn:aws:s3:::your-bucket/*"]
    }
 ]
}

 

不要小看這一點小區別, 由于AWS 其他region 都是用 aws 就可以, 因此很多開源項目中, 將 arn:aws: XXXX hard code 在代碼里, 導致這些項目用到中國區會失敗!

BTW, 一個小坑: 上面的配置文件中的 "Version": "2012-10-17", 這個日期是必須寫成這個的, 估計是AWS 的碼農 hard code 的版本, 不能修改其他任何值 , 千萬別用這個值來作為自己的版本控制(偷笑)

建議程序訪問AWS 資源時, 使用IAM role的方式, 不要使用配置文件中寫入AccessKey/Secret 的方式, 非常不安全.

EC2

EC2 就是虛擬主機. AWS 有兩個概念: Reserved Instance 和 Spot Instance

Reserved Instance

簡單來說就是包年購買節點. 優點肯定是便宜. 缺點就是買了就不能退貨. 但這里最坑(不容易理解)的是:

購買N個T類型的RI后, 其實僅僅是在RI有效期限內計費的時候, 該類型的節點中的N 個 T 類型節點按照打折價格計費.

即使你在RI 期限內沒有使用任何該類型的 EC2 節點, 費用照常收取, RI 過期后價格恢復原價

其他節點已久按照正常價格按小時收費

RI 僅僅是計費單元, 節點銷毀后重新啟動, 只要不超過 RI 數量, 都按照打折計費

例如: 購買了3個 t2.micro 類型的RI, 但是你再次期間最多同時開啟了5個 t2.micro 節點, 那么這其中的3個是按照打折價格計費, 2個節點按照正常價格. 如果發現三臺 t2.micro 配置錯誤, 直接 terminate 后啟動新的instance , 依舊是按照 RI 的價格計費

Spot Instance

這個就是可以以非常便宜的價格買到 EC2 節點. 不過迄今未知(2015-08-07) 中國區沒有該項業務.

今天太晚了, 回家睡覺去了. 有時間繼續寫.

再次重申一下, AWS 是在升級的, 這些問題我肯定是遇到過, 但對于原因很多都是猜測, 畢竟AWS 是個非常復雜的系統, 也不開源, 內部如何實現我也無從得知。

原文鏈接:http://www.jianshu.com/p/0d0fd39a40c9
 

責任編輯:Ophira 來源: 簡書
相關推薦

2020-05-22 23:36:48

AWSDNS

2020-03-24 13:35:49

AWSAthena數據查詢

2016-06-27 15:06:46

亞馬遜AWS

2014-12-12 11:18:14

2017-11-02 15:07:56

代碼重寫代碼開發

2021-07-30 17:11:21

EnginePlus亞馬遜云科技

2020-12-09 09:52:16

AWSDevOps Guru

2017-12-02 12:00:39

2015-02-02 09:43:36

亞馬遜AWSAmazon Work

2014-11-13 12:55:11

亞馬遜

2014-11-14 09:19:23

AWSAmazon Auro

2020-05-26 17:50:07

AWSSageMaker

2020-05-20 16:58:34

AWSSageMaker

2020-09-18 10:06:39

AWS機器學習SageMaker

2015-07-10 10:00:24

亞馬遜AWS云計算

2017-11-29 13:47:43

AWSAmazon Sume

2015-09-30 09:36:58

數據分析師面試offer

2020-05-15 10:00:18

機器學習人工智能工具

2017-11-15 11:57:05

亞馬遜AWS云計算

2020-12-15 13:18:29

AWSSageMaker
點贊
收藏

51CTO技術棧公眾號

黄色精品视频| 6080亚洲精品一区二区| 天堂av免费观看| 日韩视频在线观看一区二区| 激情五月综合婷婷| 国产精品区一区二区三在线播放| 九九**精品视频免费播放| 成人av小说网| 欧美精品一区二区不卡| 香蕉精品久久| 大地资源网在线观看免费官网| 性做久久久久久免费观看欧美| 日本不卡免费高清视频在线| 国产精品网站入口| 成人av网站在线观看| 狠狠色伊人亚洲综合网站l| www.久久久久| 久久精品电影| x88av蜜桃臀一区二区| 这里只有精品视频在线| 亚洲精品综合| 中文字幕理伦片免费看| 深夜福利91大全| 欧美一级二区| а√最新版地址在线天堂| 久久精品国产2020观看福利| 亚洲第一精品影视| 国产盗摄一区二区三区| 男人插女人视频在线观看| 欧美日韩亚洲综合| 亚洲理论电影| 日本黄色三级大片| 亚洲精品福利视频| 欧美三区在线| 午夜黄色一级片| 欧美精品在线观看91| 亚洲国产精品中文| 日韩欧美午夜| av在线无限看| 日韩有码在线电影| 久久精品国产第一区二区三区| 欧美巨乳在线| 日本老师69xxx| 国产三级精品三级| 成人天堂yy6080亚洲高清| 久久精品国产美女| 色婷婷久久久亚洲一区二区三区| 亚洲毛片免费看| www午夜视频| 国内成人精品一区| 久久久久久一二三区| 成人爽a毛片免费啪啪| 亚洲成色www久久网站| 日韩一区二区在线观看| 在线视频精品| 99精品老司机免费视频| 成人写真视频福利网| 亚洲国产精品自拍| 国产一区二区三区四区二区| 中文字幕网av| 2019中文字幕在线免费观看| 久久久五月婷婷| 国产在线精品一区二区夜色 | 美州a亚洲一视本频v色道| 欧美久久精品一级黑人c片| 国产精品一二三四五| 日本不卡1234视频| 在线91av| 91精品国产综合久久福利| 亚洲国产三级网| 欧美破处大片在线视频| 久久米奇亚洲| 国产在线精品成人一区二区三区| 亚洲视频在线一区观看| 网友自拍一区| 美日韩在线观看| 国产精品久久久久久久久| 亚洲欧美在线另类| 亚洲欧洲av| 国产精品㊣新片速递bt| 国产精品自产拍在线观| 色综合天天综合色综合av| 欧美福利在线| 麻豆电影在线| 91久色国产| 欧美剧情片在线观看| 三级久久三级久久| 天堂√8在线中文| 青青在线免费观看| 欧美成人一二三| 亚洲日穴在线视频| 久久人人99| 最新国产在线观看| 午夜欧美性电影| 亚洲精品久久久久久久久久久| 国产自产v一区二区三区c| 日韩av首页| 久久精品99国产| 欧美一级视频在线观看| 亚洲一区二区三区四区五区黄 | 国产福利电影在线播放| 亚洲中文字幕无码一区二区三区| 久久精品国产精品亚洲| 中文字幕中文字幕一区二区| 欧美限制电影| 国产日产一区二区三区| 成人一级生活片| 91国产精品视频在线| 夜色激情一区二区| 国产日本精品| 亚洲一区二区小说| 中文字幕在线免费观看| 亚洲第一综合| 69国产精品成人在线播放| 国产精品欧美极品| 日本一区二区成人| 日本中文字幕一区二区有限公司| 9999精品| 蜜臀av国内免费精品久久久夜夜| 亚洲an天堂an在线观看| 欧美在线亚洲一区| 欧美日韩国产首页| 国产精品久久久久一区二区三区 | 伊人狠狠色丁香综合尤物| 蜜桃av久久久亚洲精品| 亚洲午夜影视影院在线观看| 亚洲午夜久久久久久尤物| 午夜激情电影在线播放| 99青春婷婷视频| 日韩激情图片| 麻豆网在线观看| 91丨porny丨探花| 成人中心免费视频| 亚洲天堂av电影| 午夜免费久久看| 国产成人在线色| 亚洲欧美网站在线观看| 色天使综合视频| 第三区美女视频在线| www黄色av| 欧美一区二区三区四区在线观看地址| 欧美日韩高清区| 日韩欧美国产精品| 一区二区三区日韩在线观看| 国产成人免费视频网站| 亚洲国产清纯| 思热99re视热频这里只精品| 蜜桃视频动漫在线播放| 欧洲一区av| 日韩欧美xxxx| 中文字幕一区二区三区乱码| 91视频免费进入| 亚州国产精品久久久| 精品无人区太爽高潮在线播放| 欧美三级xxx| 国产精品久久久久aaaa| 国产乱子伦视频一区二区三区 | 亚洲欧美一区二区三区| 色天堂在线视频| 超碰在线播放91| 超薄肉色丝袜足j调教99| 国产精品jizz视频| 欧亚精品在线观看| 久久国产加勒比精品无码| 亚洲爱爱爱爱爱| 欧美日韩精品免费| 欧美日韩一区二区在线| 亚洲人成7777| 国产精品美女一区二区在线观看| 波多野结衣亚洲一区| 国内精品伊人久久久久av一坑| 久久精品女人天堂| 激情综合久久| 欧美1级日本1级| 99精品一区| 日韩黄色大片| av在线不卡免费观看| 欧美人妖在线| 久久不卡国产精品一区二区| 亚洲精华一区二区三区| 日韩在线黄色| 午夜欧洲一区| 天天躁日日躁狠狠躁欧美巨大小说| 视频二区欧美| 国产成人视屏| 日韩电影免费观看高清完整版在线观看| 羞羞污视频在线观看| 9色在线观看| 97视频在线观看网站| 男人天堂网在线| 一级二级三级在线观看| 美女的尿口免费视频| www.成人精品免费网站青椒| 美女av在线免费观看| 免费看黄视频网站| av美女在线| 波多野结衣av在线播放| 在线国产中文字幕| 国产午夜视频在线观看| 91精彩在线视频|