From 5baafeb2f4a3c0a9f2a69de53f0efc8359e6bd6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Skurzy=C5=84ski?= Date: Wed, 27 Mar 2024 13:49:30 +0100 Subject: [PATCH] first commit --- .DS_Store | Bin 0 -> 6148 bytes lab/.DS_Store | Bin 0 -> 6148 bytes lab/LAB_01.md | 276 + mr/.DS_Store | Bin 0 -> 6148 bytes mr/LICENSE | 8 + mr/README | 8 + .../1711_20_000_mil_podmorskiej_zeglugi.txt | 6973 ++++++++++ mr/books/1762_dzieje_grzechu.txt | 9320 +++++++++++++ ...itan_czart_przygody_cyrana_de_bergerac.txt | 10754 ++++++++++++++++ mr/books/732_druga_ksiega_dzungli.txt | 3211 +++++ mr/python/mapper.py | 14 + mr/python/reducer.py | 38 + mr/python/wordcount.sh | 12 + terraform/README.md | 17 + terraform/dataproc_cluster/main.tf | 71 + terraform/dataproc_cluster/variables.tf | 28 + 16 files changed, 30730 insertions(+) create mode 100644 .DS_Store create mode 100644 lab/.DS_Store create mode 100644 lab/LAB_01.md create mode 100644 mr/.DS_Store create mode 100644 mr/LICENSE create mode 100644 mr/README create mode 100644 mr/books/1711_20_000_mil_podmorskiej_zeglugi.txt create mode 100644 mr/books/1762_dzieje_grzechu.txt create mode 100644 mr/books/556_kapitan_czart_przygody_cyrana_de_bergerac.txt create mode 100644 mr/books/732_druga_ksiega_dzungli.txt create mode 100644 mr/python/mapper.py create mode 100644 mr/python/reducer.py create mode 100644 mr/python/wordcount.sh create mode 100644 terraform/README.md create mode 100644 terraform/dataproc_cluster/main.tf create mode 100644 terraform/dataproc_cluster/variables.tf diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..202195e8c630b9fe1b38dc4be4c04ab069deaf8e GIT binary patch literal 6148 zcmeHKF>XRJ47CdbQWr+XT%k9J5IsRJ&;sK}NUgg6iF0wZzGoY$=!*>&^ej0qacoC< zLmZo#uYdP%W=k_$K#6wZFct1oC-PDjqBF;C*dC7qt(UFxxD9li*AO^&M7!U(u;7$xwU0uB1DWB4a0Wt7A4DfwuP+~6}6XWT?5dVDO9Oe+rqn7|S z8i2iUOoRpE)gpL>dbJpy;n;8G*9*tQ3^$LHk*7}f>QFpRhrNZnc~8_R2E@QM1G8K% zS^wXmH~RnUAg#oJ7Lv7aM&XpnAKdL0kR_z1CL|i5Bb#=#Q*>R literal 0 HcmV?d00001 diff --git a/lab/.DS_Store b/lab/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 +create database if not exists ${hiveconf:USERNAME}; +use ${hiveconf:USERNAME}; +``` + +#### 2.1.2.Utworzenie tabeli doc +Utwórz tabelę przechowującą dokumenty tekstowe w postaci wierszowej: + +```sql +create table ${hiveconf:USERNAME}.doc( + text string +) row format delimited fields terminated by '\n' +stored as textfile; +``` + + + +#### 2.1.3.Ładowanie danych do tabeli +Utwórz zewnętrzną tabelę zawierającą dane z folderu _tmp/books_ + +```sql +create external table ${hiveconf:USERNAME}.doc_( + text string +) row format delimited fields terminated by '\n' + stored as textfile location '/user/${hiveconf:USERNAME}/tmp/books/'; +``` + +Następnie należy skopiować dane z tabeli _doc__ do _doc_: + +```sql +insert into ${hiveconf:USERNAME}.doc select * from ${hiveconf:USERNAME}.doc_; +``` + +#### 2.1.4.Utworzenie widoku +Kolejnym krokiem jest utworzenie widoku, zawierającego słowa wydzielone z krotek tabeli doc: + +```sql +CREATE VIEW ${hiveconf:USERNAME}.words +AS SELECT cast(word as string) as word FROM ( + SELECT explode(split(text, ' ')) AS word FROM ${hiveconf:USERNAME}.doc +) doc; +``` + + +#### 2.1.5.Obliczenie ilości słów: +Należy wykonać polecenie: + +```sql +select word, count(*) from ${hiveconf:USERNAME}.words group by word; +``` + + +#### 2.1.6.Pominięcie widoku +Obliczenie ilości słów jest również możliwe z pominięciem utworzenia widoku, a z wykorzystaniem podzapytania: + + + SELECT word, count(*) from (SELECT explode(split(text, ' ')) AS ${hiveconf:USERNAME}.word FROM doc) words group by word; + + + + +## 3.WordCount – Pig +Uruchom Pig w konsoli. + + + +### 3.1.Pig Latin + + +#### 3.1.11.Ładowanie pliku +Zdefiniuj zmienną books, ładującą tekst książek: + +``` +books = LOAD 'tmp/books' USING TextLoader() AS (line:chararray); +``` + + +#### 3.1.12.Wydzielenie słów + +Zdefiniuj zmienną words wydzielającą słowa z tekstu: +``` +words = FOREACH books GENERATE FLATTEN(TOKENIZE(line)) as word; +``` + + +#### 3.1.13.Grupowanie + +Pogrupój słowa: +``` +grouped = GROUP words BY word; +``` + +#### 3.1.14.Obliczanie ilości słów + +Policz słowa: +``` +wordcount = FOREACH grouped GENERATE group, COUNT(words); +``` + + +#### 3.1.15.Wyświetlenie rezultatów +Wyświetl wynik działania algorytmu: + +``` + DUMP wordcount; +``` + + + +## 4.WordCount Spark + + +### 4.1.Scala +Uruchom spark-shell. + + + +#### 4.1.1.Ładowanie pliku +Zdefiniuj zmienną ładującą plik z HDFS: + +``` +val text_file = sc.textFile("tmp/books/") +``` + +#### 4.1.2.Definicja funkcji MapReduce +Spark korzysta z zalet języka Scala i umożliwia utworzenie prostej funkcji: + +``` +val counts = text_file.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _) +``` + + +#### 4.1.3.Wyświetlenie wyników +Aby wyświetlić rezultaty wykonaj: + +``` +counts.collect().foreach(println) +``` + + + +#### 4.1.4.Zapis rezultatu do pliku +Aby zapisać rezultat do pliku wykonaj: + +``` +counts.saveAsTextFile("tmp/spark-outputs") +``` + + +#### 4.1.5.Zapis alternatywny +Przy tworzeniu bardziej skomplikowanych funkcji przydatny może okazać się zapis, w którym parametry wejściowe funkcji przyjmują określone nazwy lub chcemy czytać z lokalnego systemu plików/udziału NFS: + +``` +sc.textFile("file:///home//apache_hadoop/mr/books") +val counts2 = text_file. + flatMap(txt => txt.split(" ")). + map(word => (word, 1)). + reduceByKey((a, b) => a + b) +counts2.collect().foreach(println) +counts2.saveAsTextFile("tmp/spark-outputs") +``` + + + +### 5.1.PySpark +Uruchom pyspark. + + + +#### 5.1.1.Ładowanie pliku +Zdefiniuj zmienną ładującą plik z HDFS: + +``` + text_file = sc.textFile("hdfs:///tmp/books/*") +``` + + +#### 5.1.2.Definicja funkcji MapReduce +Spark korzysta z zalet języka Scala i umożliwia utworzenie prostej funkcji: + +``` + counts = text_file.flatMap(lambda line: line.split(" ")) \ \ + .map(lambda word: (word, 1)) \ \ + .reduceByKey(lambda a, b: a + b) +``` + + +#### 5.1.3.Wyświetlenie wyników +Aby wyświetlić rezultaty wykonaj: + +``` + counts.collect() +``` + + +#### 5.1.4.Zapis rezultatu do pliku +Aby zapisać rezultat do pliku wykonaj: + +``` + counts.saveAsTextFile("tmp/pyspark-outputs") +``` + +## 6. Modyfikacje (zaliczenie) + +Czy potrafisz dokonać modyfikacji? Przykładowe pomysły: +- posortuj słowa według ich długości +- wyczyść nieznaczące znaki i sprowadź słowa do małych liter +- policz wystąpienia słów o określonej ilości znaków \ No newline at end of file diff --git a/mr/.DS_Store b/mr/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..0f95520c8457be0ea69fa299c1f93c06a59a0143 GIT binary patch literal 6148 zcmeHKJ8Hu~5S@ulFt~Axfg8%zLTh$z-q=HC6bQ#1qr468r}J?f&rS7w!nluekuUj> z*I)4GZ)KJWPys4H1*iZOSW>`xFKn|7WTXOAfC}6cu