## Wymagania dla systemu Mac OS X (Mavericks)

Zanim będzie można zainstalować środowisko wirtualne i jego zależności, trzeba zainstalować poniższe komponenty. Jeśli są już zainstalowane w systemie, można przejść od razu do konfigurowania środowiska wirtualnego dla Pythona. 

```
# Instalowanie anta -- wymaganego do skompilowania snappy-c i yaml-c 
brew install ant

# Instalowanie mavena - potrzebnego do Wonderdoga
brew install maven

# Instalowanie pakietu gfortran - wymaganego do kompilacji SciPy
brew install gfortran
```

## Ustawienie środowiska wirtualnego Pythona (Python Virtual Environment) ##

```
# z głównego katalogu projektu:

# konfiguracja środowiska virtualenv
virtualenv -p `which python2.7` venv --distribute
source venv/bin/activate
pip install -r requirements.txt
```

## Pobieranie zawartości skrzynki odbiorczej Gmaila! ##

```
# Pobieranie skrzynki z Gmaila
cd gmail
./gmail.py -m automatic -u me@gmail.com -p 'my_password_' -s ./email.avro.schema -f '[Gmail]/All Mail' -o /tmp/my_inbox_directory 2>&1 &
```

## Pobieranie Apache Pig ##
```
wget http://www.trieuvan.com/apache/pig/pig-0.10.1/pig-0.10.1.tar.gz
tar -xvzf pig-0.10.1.tar.gz
cd pig-0.10.1
ant
```

Now you can run 'bin/pig'!

## Modyfikacja i uruchomienie sent_counts.pig ##

Otwórz plik 'ch3/pig/sent_counts.pig' i zmień ścieżki na odpowiadające miejscu składowania wiadomości w plikach Avro:

```
/* Wczytanie e-maili w formacie Avro za pomocą modułu AvroStorage z Piggybanku */
messages = LOAD '/tmp/my_inbox_directory' USING AvroStorage();
```
Teraz uruchom 'pig -l /tmp -x local -v -w' i wklej wynikowy kod (wiersz po wierszu) do grunt-a. Na poszczególnych etapach wypróbuj polecenia 'DESCRIBE', opisujące bieżący format danych. Po zakończeniu skryptu zajrzyj do '/tmp/sent_counts.txt'

W pliku tym powinno być coś podobnego:

```
jira@apache.org pig-dev@hadoop.apache.org       22994
stack@duboce.net        user@hbase.apache.org   1933
jdcryans@apache.org     user@hbase.apache.org   1410
jira@apache.org russell.jurney@gmail.com        870
harsh@cloudera.com      common-user@hadoop.apache.org   685
dvryaboy@gmail.com      user@pig.apache.org     684
yuzhihong@gmail.com     user@hbase.apache.org   593
stack@duboce.net        hbase-user@hadoop.apache.org    581
michael_segel@hotmail.com       user@hbase.apache.org   435
doug.meil@explorysmedical.com   user@hbase.apache.org   404
jdcryans@apache.org     hbase-user@hadoop.apache.org    387
...
```

## Instalowanie MongoDB ##

Informacje o instalowaniu MongoDB dla Twojej platformy znajdziesz w dokumentacji pod adresem http://docs.mongodb.org/manual/installation/; oprogramowanie MongoDB dostępne jest tu: http://www.mongodb.org/downloads/. Pamiętaj o pobraniu 64-bitowej wersji MongoDB.

Na przykład, w systemie Mac OS X:
```
wget http://fastdl.mongodb.org/osx/mongodb-osx-x86_64-2.2.2.tgz
tar -xvzf mongodb-osx-x86_64-2.2.2.tgz
cd mongodb-osx-x86_64-2.2.2
sudo mkdir -p /data/db/
sudo chown `id -u` /data/db
```

Teraz uruchom MongoDB:

```
bin/mongod 2>&1 &
```

I podłącz się do bazy MongoDB:

```
bin/mongo agile_data
```

## Instalowanie sterownika MongoDB dla języka Java ##

The MongoDB Java driver is available at https://github.com/mongodb/mongo-java-driver/downloads Download it, and place it at the base of your MongoDB install directory.

```
cd <my_mongodb_install_path>
wget https://github.com/downloads/mongodb/mongo-java-driver/mongo-2.10.1.jar
```

## Instalowanie mongo-hadoop ##

Projekt 'mongo-hadoop' integruje MongoDB z Hadoopem. Będziemy z niego korzystać do komunikacji z MongoDB z poziomu skryptów Pig. Do pobrania oprogramowania potrzebny jest git:

```
git clone https://github.com/mongodb/mongo-hadoop.git
cd mongo-hadoop
./sbt update
./sbt package
find .|grep jar

./.lib/0.12.0-RC1/sbt-launch.jar
./core/target/mongo-hadoop-core-1.1.0-SNAPSHOT.jar
./examples/pigtutorial/lib/pigtutorial.jar
./flume/target/mongo-flume-1.1.0-SNAPSHOT.jar
./pig/target/mongo-hadoop-pig-1.1.0-SNAPSHOT.jar
./target/mongo-hadoop-1.1.0-SNAPSHOT.jar
```

## Publikacja danych z Piga do MongoDB ##

Przed uruchomieniem skryptu 'ch3/pig/mongo.pig' ustaw w nim odpowiednie dla swojego środowiska ścieżki do plików danych.

```
REGISTER </my_mongo_install_path>/mongo-2.10.1.jar
REGISTER </my_mongo_install_path>/core/target/mongo-hadoop-core-1.1.0-SNAPSHOT.jar
REGISTER </my_mongo_install_path>/pig/target/mongo-hadoop-pig-1.1.0-SNAPSHOT.jar

set mapred.map.tasks.speculative.execution false
set mapred.reduce.tasks.speculative.execution false

sent_counts = LOAD '/tmp/sent_counts.txt' AS (from:chararray, to:chararray, total:long);
STORE sent_counts INTO 'mongodb://localhost/agile_data.sent_counts' USING com.mongodb.hadoop.pig.MongoStorage();
```

## Podłączenie do MongoDB z Pythona ##

Aby zainstalować wszystkie potrzebne zależności, wykonaj polecenia:

```
pip install -r requirements.txt
```

Uruchom skrypt 'ch3/python/mongo.py'

```
python ch3/python/mongo.py

{u'total': 22994L, u'to': u'pig-dev@hadoop.apache.org', u'_id': ObjectId('50ea5e0a30040697fb0f0710'), u'from': u'jira@apache.org'}
{u'total': 1933L, u'to': u'user@hbase.apache.org', u'_id': ObjectId('50ea5e0a30040697fb0f0714'), u'from': u'stack@duboce.net'}
{u'total': 1410L, u'to': u'user@hbase.apache.org', u'_id': ObjectId('50ea5e0a30040697fb0f0721'), u'from': u'jdcryans@apache.org'}
{u'total': 870L, u'to': u'russell.jurney@gmail.com', u'_id': ObjectId('50ea5e0a30040697fb0f0725'), u'from': u'jira@apache.org'}
{u'total': 685L, u'to': u'common-user@hadoop.apache.org', u'_id': ObjectId('50ea5e0a30040697fb0f0731'), u'from': u'harsh@cloudera.com'}
{u'total': 684L, u'to': u'user@pig.apache.org', u'_id': ObjectId('50ea5e0a30040697fb0f0732'), u'from': u'dvryaboy@gmail.com'}
{u'total': 593L, u'to': u'user@hbase.apache.org', u'_id': ObjectId('50ea5e0a30040697fb0f073c'), u'from': u'yuzhihong@gmail.com'}
{u'total': 581L, u'to': u'hbase-user@hadoop.apache.org', u'_id': ObjectId('50ea5e0a30040697fb0f073d'), u'from': u'stack@duboce.net'}
{u'total': 435L, u'to': u'user@hbase.apache.org', u'_id': ObjectId('50ea5e0a30040697fb0f0751'), u'from': u'michael_segel@hotmail.com'}
{u'total': 404L, u'to': u'user@hbase.apache.org', u'_id': ObjectId('50ea5e0a30040697fb0f0755'), u'from': u'doug.meil@explorysmedical.com'}
{u'total': 387L, u'to': u'hbase-user@hadoop.apache.org', u'_id': ObjectId('50ea5e0a30040697fb0f075a'), u'from': u'jdcryans@apache.org'}
...
```

## Instalowanie wyszukiwarki ElasticSearch ##

ElasticSearch to prosty w użyciu mechanizm wyszukiwarki pełnotekstowej, na bazie Lucene.

```
wget http://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.20.2.tar.gz
tar -xvzf elasticsearch-0.20.2.tar.gz
cd elasticsearch-0.20.2
mkdir plugins
bin/elasticsearch -f
```

## Instalowanie Wonderdoga ##

Wonderdog umożliwia łatwe korzystanie z ElasticSearcha z poziomu skryptów Pig.

```
git clone https://github.com/infochimps-labs/wonderdog.git
cd wonderdog
mvn install
find .|grep jar

./target/wonderdog-1.0-SNAPSHOT.jar
```

## Publikacja danych z Piga do ElasticSearcha ##

Przed uruchomieniem skryptu 'ch3/pig/elasticsearch.pig' należy w nim dostosować ścieżki tak, aby odpowiadały położeniu lokalnych katalogów instalacyjnych 'elasticsearch' i 'wonderdog'. Szczególnie istotne są parametry przekazywane do wywołania 'com.infochimps.elasticsearch.pig.ElasticSearchStorage()', a mianowicie ścieżka do pliku 'elasticsearch.yml' (plik konfiguracyjny dostępu do ElasticSearcha), oraz ścieżka do katalogu 'plugins' ElasticSearcha.

Uwaga: w nazwach indeksów ElasticSearcha nie należy używać znaków podkreślenia ('_').


## Podłączenie do ElasticSearcha z Pythona (PyElasticsearch) ##

Do integracji skryptów języka Python z ElasticSearchem używamy modułu 'pyelasticsearch'. Wymagane zależności można zainstalować poleceniami:

```
pip install -r requirements.txt
```

Potem można już uruchomić skrypt 'ch3/python/elasticsearch.py':
```
python ch3/python/elasticsearch.py

           ...
```

## Pierwsza aplikacja Flask

Usługę aktywuje skrypt 'ch3/python/flask_echo.py'.

```
Działanie samej usługi jest bardzo proste:

```
curl 'http://localhost:5000/Ahoj%20Przygodo'
Ahoj przygodo
```

## Wypisywanie liczników sent_counts za pośrednictwem swerwera Flask ##

Uruchom skrypt 'ch3/python/flask_mongo.py'
Pobierz wyniki (zapytanie curl należy zmodyfikować odpowiednio do nazwy skrzynki pocztowej):
```
curl http://localhost:5000/sent_counts/russell.jurney@gmail.com/****.jurney@gmail.com
{"to": "****.jurney@gmail.com", "total": 552, "from": "russell.jurney@gmail.com"}```


