Skip to content

Commit e5cb630

Browse files
committed
split howto and readme
1 parent cc31a09 commit e5cb630

6 files changed

Lines changed: 96 additions & 106 deletions

File tree

‎HOWTO.md‎

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Компиляция Cython
2+
3+
1. Для компиляции cython-скриптов в Linux вам понадобится установить некоторые зависимости
4+
5+
```shell
6+
apt install build-essential
7+
# поменяйте на используемую вами версию
8+
apt install python3.8-dev
9+
pip3 install cython --upgrade
10+
```
11+
2. генерируем C-файл
12+
13+
```shell
14+
cython3 -D --embed -3 -o <scriptname>.c <scriptname>.pyx
15+
```
16+
3. компилируем бинарник
17+
18+
```shell
19+
# поменяйте на используемую вами версию
20+
gcc -Os -I /usr/include/python3.8 -o <scriptname> <scriptname>.c -lpython3.8 -lpthread -lm -lutil -ldl
21+
```
22+
4. можно запускать
23+
24+
```shell
25+
./<scriptname>
26+
```
27+
28+
29+
# Установка контейнеров для MapReduce
30+
31+
1. Скачать docker-compose
32+
33+
```shell
34+
git clone https://github.com/pimiento/mapreduce-example-infra.git
35+
cd mapreduce-example-infra
36+
```
37+
2. Установить контейнеры
38+
39+
```shell
40+
docker-compose up -d
41+
```
42+
3. Зайти на NameNode
43+
44+
```shell
45+
docker exec -it namenode bash
46+
```
47+
4. Выполнить код
48+
49+
```shell
50+
./run_mapreduce.sh
51+
```
File renamed without changes.

‎README.md‎

Lines changed: 0 additions & 51 deletions
This file was deleted.

‎README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
webinar.md

‎webinar.md‎

Lines changed: 39 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1-
- [Процесс](#org6dd6899)
2-
- [Поток](#orgc9c961a)
3-
- [Что можно узнать про процесс?](#org59af907)
4-
- [создание процессов](#org765f9ae)
5-
- [CPU-bound / IO-bound задачи](#orgcc64b3a)
6-
- [GIL](#orgb689542)
7-
- [GIL](#org316b855)
8-
- [GIL](#orgbc00acd)
9-
- [GIL](#org8b3d46a)
10-
- [Практика](#orgf605c93)
11-
- [Дополнительная литература](#org078e40d)
12-
- [Что такое Celery?](#org2a8f169)
13-
- [Практика запуска задач на Celery](#org99b935d)
14-
- [Что такое map-reduce](#org05c4f7c)
15-
- [Практика запуска map-reduce на pyspark](#org2cf3038)
16-
- [Практика запуска map-reduce на pyspark](#orgbb64a65)
17-
- [Вопросы-ответы](#orgae31ab3)
18-
19-
20-
21-
<a id="org6dd6899"></a>
1+
- [Процесс](#org5462f95)
2+
- [Поток](#orgee5cb08)
3+
- [Что можно узнать про процесс?](#org0af10b3)
4+
- [создание процессов](#org3fa51d9)
5+
- [CPU-bound / IO-bound задачи](#org37135aa)
6+
- [GIL](#orgdd6460d)
7+
- [GIL](#org3bdf677)
8+
- [GIL](#org87eb7e5)
9+
- [GIL](#org285fe74)
10+
- [Практика](#org0a693c4)
11+
- [Дополнительная литература](#orge48836f)
12+
- [Что такое Celery?](#org3a64cf7)
13+
- [Практика запуска задач на Celery](#orgf34b2f0)
14+
- [Что такое map-reduce](#org672c593)
15+
- [Практика запуска map-reduce на pyspark](#org98a8d38)
16+
- [Практика запуска map-reduce на pyspark](#org5394ae7)
17+
- [Вопросы-ответы](#org9220784)
18+
19+
20+
21+
<a id="org5462f95"></a>
2222

2323
# Процесс
2424

@@ -31,7 +31,7 @@
3131
Переключение между процессами происходит на уровне ядра.
3232

3333

34-
<a id="orgc9c961a"></a>
34+
<a id="orgee5cb08"></a>
3535

3636
# Поток
3737

@@ -41,7 +41,7 @@
4141
Переключение между потоками может происходить как на уровне ядра, так и на уровне пользователя (процесса).
4242

4343

44-
<a id="org59af907"></a>
44+
<a id="org0af10b3"></a>
4545

4646
# Что можно узнать про процесс?
4747

@@ -54,7 +54,7 @@ ls -l /proc/<PID>/
5454
```
5555

5656

57-
<a id="org765f9ae"></a>
57+
<a id="org3fa51d9"></a>
5858

5959
# создание процессов
6060

@@ -64,15 +64,15 @@ ls -l /proc/<PID>/
6464
- **CreateProcess:** Win2k-системы
6565

6666

67-
<a id="orgcc64b3a"></a>
67+
<a id="org37135aa"></a>
6868

6969
# CPU-bound / IO-bound задачи
7070

7171
- **CPU-bound:** задачи, которые активно используют CPU. Арифметические операции, матричные вычисления, поиск строк, и т.д.
7272
- **IO-bound:** задачи, связанные с вводом-выводом данных. Работа с сетью, с файловыми системами, с пользовательским вводом
7373

7474

75-
<a id="orgb689542"></a>
75+
<a id="orgdd6460d"></a>
7676

7777
# GIL
7878

@@ -85,14 +85,14 @@ static PyThread_type_lock
8585
```
8686

8787

88-
<a id="org316b855"></a>
88+
<a id="org3bdf677"></a>
8989

9090
# GIL
9191

9292
GIL гарантирует интерпретатору, что только один *поток* может быть запущен в текущий момент. Это сделано для безопасной работы управления памятью, вызова расширений написанных на других языках (на C).
9393

9494

95-
<a id="orgbc00acd"></a>
95+
<a id="org87eb7e5"></a>
9696

9797
# GIL
9898

@@ -102,21 +102,21 @@ GIL гарантирует интерпретатору, что только о
102102
- sys.getswitchinterval() # -> Python3
103103

104104

105-
<a id="org8b3d46a"></a>
105+
<a id="org285fe74"></a>
106106

107107
# GIL
108108

109109
GIL замедляет CPU-bound задачи. Старая реализация GIL очень плохо работала с *CPU-bound + IO-bound* задачами. <span class="underline"><span class="underline">[Пример](https://dabeaz.blogspot.com/2010/01/python-gil-visualized.html)</span></span>, да и новая не лучше.
110110

111111

112-
<a id="orgf605c93"></a>
112+
<a id="org0a693c4"></a>
113113

114114
# Практика
115115

116116
<span class="underline"><span class="underline">[GitHub](https://github.com/pimiento/python_threads_examples/)</span></span>
117117

118118

119-
<a id="org078e40d"></a>
119+
<a id="orge48836f"></a>
120120

121121
# Дополнительная литература
122122

@@ -127,7 +127,7 @@ GIL замедляет CPU-bound задачи. Старая реализация
127127
- <span class="underline"><span class="underline">[multiprocessing](https://docs.python.org/3/library/multiprocessing.html)</span></span>
128128

129129

130-
<a id="org2a8f169"></a>
130+
<a id="org3a64cf7"></a>
131131

132132
# Что такое Celery?
133133

@@ -136,7 +136,7 @@ GIL замедляет CPU-bound задачи. Старая реализация
136136
*Celery* это брокер задач, который позволяет в фоновом, асинхронном режиме выполнять задачи в отдельных процессах/тредах и/или на других машинах.
137137

138138

139-
<a id="org99b935d"></a>
139+
<a id="orgf34b2f0"></a>
140140

141141
# Практика запуска задач на Celery
142142

@@ -148,7 +148,7 @@ apt install rabbitmq-server
148148
- <span class="underline"><span class="underline">[Можно описывать сложные последовательности](https://docs.celeryq.dev/en/stable/getting-started/next-steps.html#groups)</span></span>
149149

150150

151-
<a id="org05c4f7c"></a>
151+
<a id="org672c593"></a>
152152

153153
# Что такое map-reduce
154154

@@ -159,30 +159,24 @@ apt install rabbitmq-server
159159
3. Reduce — для каждого ключа выполнить некоторую функцию над всеми данными в этом ключе
160160

161161

162-
<a id="org2cf3038"></a>
162+
<a id="org98a8d38"></a>
163163

164164
# Практика запуска map-reduce на pyspark
165165

166166
*[тестовая сборка для работы с Hadoop](https://medium.com/analytics-vidhya/how-to-easily-install-hadoop-with-docker-ad094d556f11) (надо дополнительно поставить python на namenode)*
167167

168168
- <span class="underline"><span class="underline">[mapper.py](https://github.com/pimiento/python_threads_examples/blob/main/mapper.py)</span></span>
169169
- <span class="underline"><span class="underline">[reducer.py](https://github.com/pimiento/python_threads_examples/blob/main/reducer.py)</span></span>
170-
- создадим директорию в HDFS для данных и вывода (на NameNode)
171-
172-
```shell
173-
hdfs dfs -mkdir /d
174-
```
175170

176171

177-
<a id="orgbb64a65"></a>
172+
<a id="org5394ae7"></a>
178173

179174
# Практика запуска map-reduce на pyspark
180175

181176
- запуск на NameNode
182177

183178
```shell
184-
hdfs dfs -rmdir\
185-
--ignore-fail-on-non-empty\
179+
hdfs dfs -rm -r -skipTrash\
186180
/d/out
187181
hadoop jar /opt/hadoop-2.7.4/share\
188182
/hadoop/tools/lib/\
@@ -191,13 +185,13 @@ apt install rabbitmq-server
191185
/root/reducer.py\
192186
-mapper /root/mapper.py\
193187
-reducer /root/reducer.py\
194-
-input /d/out/98.txt\
188+
-input /d/in/98.txt\
195189
-output /d/out
196190
hdfs dfs -cat /d/out/part-00000
197191
```
198192

199193

200-
<a id="orgae31ab3"></a>
194+
<a id="org9220784"></a>
201195

202196
# Вопросы-ответы
203197

‎webinar.org‎

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -77,15 +77,10 @@
7777
/[[https://medium.com/analytics-vidhya/how-to-easily-install-hadoop-with-docker-ad094d556f11][тестовая сборка для работы с Hadoop]] (надо дополнительно поставить python на namenode)/
7878
- __[[https://github.com/pimiento/python_threads_examples/blob/main/mapper.py][mapper.py]]__
7979
- __[[https://github.com/pimiento/python_threads_examples/blob/main/reducer.py][reducer.py]]__
80-
- создадим директорию в HDFS для данных и вывода (на NameNode)
81-
#+BEGIN_SRC shell
82-
hdfs dfs -mkdir /d
83-
#+END_SRC
8480
* Практика запуска map-reduce на pyspark
8581
- запуск на NameNode
8682
#+BEGIN_SRC shell :exports code
87-
hdfs dfs -rmdir\
88-
--ignore-fail-on-non-empty\
83+
hdfs dfs -rm -r -skipTrash\
8984
/d/out
9085
hadoop jar /opt/hadoop-2.7.4/share\
9186
/hadoop/tools/lib/\
@@ -94,15 +89,15 @@
9489
/root/reducer.py\
9590
-mapper /root/mapper.py\
9691
-reducer /root/reducer.py\
97-
-input /d/out/98.txt\
92+
-input /d/in/98.txt\
9893
-output /d/out
9994
hdfs dfs -cat /d/out/part-00000
10095
#+END_SRC
10196

10297
#+BEGIN_SRC shell :exports none :tangle run_mapreduce.sh :shebang "#!/bin/bash"
103-
hdfs dfs -rmdir --ignore-fail-on-non-empty /d/out
104-
hadoop jar /opt/hadoop-2.7.4/share/hadoop/tools/lib/hadoop-streaming-2.7.4.jar -files /root/mapper.py, /root/reducer.py -mapper /root/mapper.py -reducer /root/reducer.py -input /d/out/98.txt -output /d/out
105-
hdfs dfs -cat /d/out/part-00000
98+
hdfs dfs -rm -r -skipTrash /d/out
99+
hadoop jar /opt/hadoop-2.7.4/share/hadoop/tools/lib/hadoop-streaming-2.7.4.jar -files /root/mapper.py, /root/reducer.py -mapper /root/mapper.py -reducer /root/reducer.py -input /d/in/98.txt -output /d/out
100+
hdfs dfs -cat /d/out/part-00000 | sort -k2 -n
106101
#+END_SRC
107102

108103
* Вопросы-ответы

‎webinar.pdf‎

-482 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)