Если вы работаете с большими данными и их передовыми технологиями, такими как Hadoop и т. Д., Вам прежде всего нужен «набор данных» для работы. Таким образом, этими данными могут быть обзоры, блоги, новости, данные социальных сетей (Twitter, Facebook и т. Д.), Данные по конкретным доменам, данные исследований, форумы, группы, каналы, данные пожарных рукавов и т. Д. Как правило, компании обращаются к поставщикам данных за такими данными. вид данных.
Обычно эти поставщики данных сбрасывают данные в среду с общим сервером. Чтобы мы могли использовать эти данные для обработки с помощью MapReduce и т. Д., Мы перемещаем их на S3 для хранения в первую очередь и последующей обработки. Предположим, данные принадлежат социальным сетям, таким как Twitter или Facebook, затем данные могут быть выгружены в соответствии с каталогом формата даты. Большинство случаев, это практика.
Также предполагается, что 140-150 ГБ в день сбрасывается в иерархии, например 2013/04/15 т.е. гггг / мм / дд формат, поток данных, как вы
- загрузить их на s3 в той же иерархии в данное ведро?
- отслеживать новые входящие файлы и загружать их?
- эффективно сэкономить место на диске?
- обеспечить надежность загрузки на s3?
- очистить, если логирование включено для отслеживания?
- повторить попытку неудачной загрузки?
Это были некоторые из вопросов, которые были у меня в голове, когда я хотел автоматизировать загрузку на S3. Кроме того, я хотел 0 вмешательства человека или, по крайней мере, по крайней мере!
Итак, я придумал
- s3sync / s3cmd.
- скрипт Python Watcher от Грегори Эрнандеса, здесь https://github.com/greggoryhz/Watcher
Большое спасибо! Это помогло мне с мониторингом, и это так здорово работает!
- несколько моих собственных сценариев.
Какие ингридиенты?
- Установка s3sync. Я только что использовал один сценарий s3cmd здесь, а не s3sync в реальном. Может быть в будущем — так что у меня есть это.
- Установка Watcher.
- Мои собственные скрипты-обёртки.
- хрон
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
Install Ruby from the repository$ sudo apt-get install ruby libopenssl-rubyConfirm with the version$ ruby -v Download and unzip s3sync$ wget http://s3.amazonaws.com/ServEdge_pub/s3sync/s3sync.tar.gz$ tar -xvzf s3sync.tar.gz Install the certificates.$ sudo apt-get install ca-certificates$ cd s3sync/ Add the credentials to the s3config.yml for s3sync to connect to s3.$ cd s3sync/$ sudo vi s3config.ymlaws_access_key_id: ABCDEFGHIJKLMNOPQRSTaws_secret_access_key: hkajhsg/knscscns19mksnmcnsssl_cert_dir: /etc/ssl/certs Edit aws_access_key_id and aws_secret_access_key to your own credentials. |
|
1
2
3
4
5
6
7
|
Goto https://github.com/greggoryhz/WatcherCopy https://github.com/greggoryhz/Watcher.git to your clipboardInstall git if you have not Clone the Watcher$ git clone https://github.com/greggoryhz/Watcher.git$ cd Watcher/ |
Далее, после настройки среды, давайте сделаем некоторые общие «предположения».
- Сбрасываемые данные будут находиться в / home / ubuntu / data / — оттуда это может быть 2013/04/15, например.
- s3sync находится в / home / ubuntu
- Репозиторий Watcher находится в / home / Ubuntu
Пачкать руки …
- Перейдите в Watcher и задайте каталог, за которым нужно следить, и соответствующие действия, которые необходимо предпринять.
- Создайте скрипт с именем monitor.sh для загрузки в s3 в каталоге s3sync, как показано ниже.
- Переменные, которые вы можете изменить, это s3bucket path в «s3path» в monitor.sh
- Этот сценарий загрузит новый входящий файл, обнаруженный сценарием-наблюдателем, в формате хранения с избыточным резервированием. (вы можете удалить заголовок — при условии, что вы не заинтересованы хранить в формате RRS)
- Сценарий вызовет скрипт s3cmd ruby для рекурсивной загрузки и, таким образом, поддерживает иерархию, т.е. гггг / мм / дд формат с файлами *. *
- Он удалит файл, успешно загруженный на s3 с локального пути — для экономии места на диске.
- Сценарий не удалит каталог, так как об этом позаботится еще один скрипт re-upload.sh, который действует как резервная копия для неудачных загрузок, которые будут снова загружены в s3.
010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748Goto s3sync directory$cd~/s3sync$sudovim monitor.sh#!/bin/bash##...........................................................#### script to upload to S3BUCKET, once the change is detected ####...........................................................#### AWS Credentials required for s3sync ##exportAWS_ACCESS_KEY_ID=ABCDEFGHSGJBKHKDAKSexportAWS_SECRET_ACCESS_KEY=jhhvftGFHVgs/bagFVAdbsga+vtpmefLOdexportSSL_CERT_DIR=/etc/ssl/certs#echo "Running monitor.sh!"echo"[INFO] File or directory modified = $1 "## Read argumentsPASSED=$1# Declare the watch path and S3 destination pathwatchPath='/home/ubuntu/data's3path='bucket-data:'# Trim watch path from PASSEDout=${PASSED#$watchPath}outPath=${out#"/"}echo"[INFO] ${PASSED} will be uploaded to the S3PATH : $s3path$outPath"if[ -d"${PASSED}"]thenecho"[SAFEMODE ON] Directory created will not be uploaded, unless a file exists!"elif[ -f"${PASSED}"]thenruby/home/ubuntu/s3sync/s3cmd.rb --ssl put $s3path$outPath ${PASSED} x-amz-storage-class:REDUCED_REDUNDANCY;#USE s3cmd : Fileelseecho"[ERROR] ${PASSED} is not valid type!!";exit1fiRETVAL=$?[ $RETVAL -eq0 ] &&echo"[SUCCESS] Upload successful! "&&if[ -d"${PASSED}"]thenecho"[SAFEMODE ON] ${PASSED} is a directory and its not deleted!";elif[ -f"${PASSED}"]thensudorm-rf ${PASSED};echo"[SUCCESS] Sync and Deletion successful!";fi[ $RETVAL -ne0 ] &&echo"[ERROR] Synchronization failed!!" - Создайте скрипт с именем re-upload.sh, который будет загружать неудачные загрузки файлов.
- Этот скрипт гарантирует, что файлы, оставшиеся из monitor.sh (неудачные загрузки — этот шанс очень мал. Может быть 2-4 файла / день. — по разным причинам.), Будут снова загружены в s3 с той же иерархия в формате RRS.
- После успешной загрузки, удаляет файл и, следовательно, каталог, если он пуст.
01020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667Goto s3sync directory.$cds3sync$sudovim re-upload.sh#!/bin/bash##.........................................................#### script to detect failed uploads of other date directories## and re-try ####.........................................................#### AWS Credentials required for s3sync ##exportAWS_ACCESS_KEY_ID=ABHJGDVABU5236DVBJDexportAWS_SECRET_ACCESS_KEY=hgvgvjhgGYTfs/I5sdn+fsbfsgLKjsexportSSL_CERT_DIR=/etc/ssl/certs# Get the previous datetoday_date=$(date-d"1 days ago"+%Y%m%d)year=$(date-d"1 days ago"+%Y%m%d|head-c 4|tail-c 4)month=$(date-d"1 days ago"+%Y%m%d|head-c 6|tail-c 2)yday=$(date-d"1 days ago"+%Y%m%d|head-c 8|tail-c 2)# Set the path of databasePath="/home/ubuntu/data"datePath="$year/$month/$yday"fullPath="$basePath/$datePath"echo"Path checked for: $fullPath"# Declare the watch path and S3 destination pathwatchPath='/home/ubuntu/data's3path='bucket-data:'# check for left files (failed uploads)if["$(ls -A $fullPath)"];thenforiin`ls-a $fullPath/*.*`doecho"Left over file: $i";if[ -f"$i"]thenout=${i#$watchPath};outPath=${out#"/"};echo"Uploading to $s3path/$outPath";ruby/home/ubuntu/s3sync/s3cmd.rb --ssl put $s3path$outPath $i x-amz-storage-class:REDUCED_REDUNDANCY;#USE s3cmd : FileRETVAL=$?[ $RETVAL -eq0 ] &&echo"[SUCCESS] Upload successful! "&&sudorm-rf $i &&echo"[SUCCESS] Deletion successful!"[ $RETVAL -ne0 ] &&echo"[ERROR] Upload failed!!"elseecho"[CLEAN] no files exist!!";exit1fidoneelseecho"$fullPath is empty";sudorm-rf $fullPath;echo"Successfully deleted $fullPath"exit1fi# post failed uploads -- delete empty dirsif["$(ls -A $fullPath)"];thenecho"Man!! Somethingz FISHY! All (failed)uploaded files will be deleted. Are there files yet!??";echo"Man!! I cannot delete it then! Please go check $fullPath";elseecho"$fullPath is empty after uploads";sudorm-rf $fullPath;echo"Successfully deleted $fullPath"fi - Теперь более грязная работа — регистрация и очистка журналов.
- Все «эхо», созданные в monitor.sh, можно найти в ~ / .watcher / watcher.log, когда запущен watcher.py.
- Этот журнал помогает нам изначально, а может и позже, чтобы отследить ошибки или около того.
- Call of duty — Дворник за чистку бревен. Чтобы сделать это, мы можем использовать cron для запуска скрипта. Мне было интересно бегать — каждую субботу в 8.00
- Создайте скрипт для очистки журнала как «clean_log.sh» в / home / ubuntu / s3sync
- Время для cron
12345678
$crontab-eAdd the following lines at the end and save.# EVERY SATURDAY 8:00AM clean watcher log0 8 * * 6sudosh/home/ubuntu/s3sync/clean_log.sh# EVERYDAY at 10:00AM check failed uploads of previous day0 10 * * *sudosh/home/ubuntu/s3sync/re-upload.sh - Все готово! очистка журналов происходит каждую субботу в 8.00, и скрипт повторной загрузки выполняется за предыдущий день, чтобы проверить, существуют ли файлы, и выполняет ли очистку соответствующим образом.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
$ cd Watcher/Start the script,$ sudo python watcher.py startThis will create a .watcher dirctory at /home/ubuntuNow,$ sudo python watcher.py stopGoto the .watcher directory created and set the destination to be watched for and action to be undertakenin jobs.yml ie. watch: and command:# Copyright (c) 2010 Greggory Hernandez# Permission is hereby granted, free of charge, to any person obtaining a copy# of this software and associated documentation files (the "Software"), to deal# in the Software without restriction, including without limitation the rights# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell# copies of the Software, and to permit persons to whom the Software is# furnished to do so, subject to the following conditions:# The above copyright notice and this permission notice shall be included in# all copies or substantial portions of the Software.# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN# THE SOFTWARE.# ---------------------------END COPYRIGHT--------------------------------------# This is a sample jobs file. Yours should go in ~/.watcher/jobs.yml# if you run watcher.py start, this file and folder will be createdjob1: # a generic label for a job. Currently not used make it whatever you want label: Watch /home/ubuntu/data for added or removed files # directory or file to watch. Probably should be abs path. watch: /home/ubuntu/data # list of events to watch for. # supported events: # 'access' - File was accessed (read) (*) # 'atrribute_change' - Metadata changed (permissions, timestamps, extended attributes, etc.) (*) # 'write_close' - File opened for writing was closed (*) # 'nowrite_close' - File not opened for writing was closed (*) # 'create' - File/directory created in watched directory (*) # 'delete' - File/directory deleted from watched directory (*) # 'self_delete' - Watched file/directory was itself deleted # 'modify' - File was modified (*) # 'self_move' - Watched file/directory was itself moved # 'move_from' - File moved out of watched directory (*) # 'move_to' - File moved into watched directory (*) # 'open' - File was opened (*) # 'all' - Any of the above events are fired # 'move' - A combination of 'move_from' and 'move_to' # 'close' - A combination of 'write_close' and 'nowrite_close' # # When monitoring a directory, the events marked with an asterisk (*) above # can occur for files in the directory, in which case the name field in the # returned event data identifies the name of the file within the directory. events: ['create', 'move_from', 'move_to'] # TODO: # this currently isn't implemented, but this is where support will be added for: # IN_DONT_FOLLOW, IN_ONESHOT, IN_ONLYDIR and IN_NO_LOOP # There will be further documentation on these once they are implmented options: [] # if true, watcher will monitor directories recursively for changes recursive: true # the command to run. Can be any command. It's run as whatever user started watcher. # The following wildards may be used inside command specification: # $$ dollar sign # $watched watched filesystem path (see above) # $filename event-related file name # $tflags event flags (textually) # $nflags event flags (numerically) # $dest_file this will manage recursion better if included as the dest (especially when copying or similar) # if $dest_file was left out of the command below, Watcher won't properly # handle newly created directories when watching recursively. It's fine # to leave out when recursive is false or you won't be creating new # directories. # $src_path is only used in move_to and is the corresponding path from move_from # $src_rel_path [needs doc] command: sudo sh /home/ubuntu/s3sync/monitor.sh $filename |
- Давайте начнем сценарий
|
1
2
3
4
5
6
|
Goto Watcher repository$ cd ~/Watcher$ sudo python watcher.py start This will create ~/.watcher directory and has watcher.log in it,when started. |
Таким образом, это гарантирует успешную загрузку на S3.