Skip to content

Deployment/Orchestration of Apache Spark applications on Amazon EMR.

Notifications You must be signed in to change notification settings

vitalibo/spark-aws-orchestration

Repository files navigation

Orchestration Apache Spark on Amazon EMR

This solution help you automate the deployment of Apache Spark applications on Amazon EMR. Orchestration Apache Spark implemented via integration with AWS CloudFormation and AWS Step Functions. Using AWS CloudFormation custom resource you can easily deploy your Apache Spark application on Amazon EMR cluster. It is useful for deploying your application on dev environment for testing purpose or organize CI/CD of Real-Time application. Integration with AWS Step Functions allow serverless* orchestration Apache Spark application and organize flexible Apache Spark based ETL pipeline.

Build Status

Usage

This guide provide samples of deployment and orchestration Apache Spark applications on Amazon EMR.

Deploy Apache Spark application via AWS CloudFormation stack

One of the problems that solved this solution is deployment Apache Spark application. Integration with AWS CloudFormation implemented via Custom Resource (high level diagram you can see below).

CloudFormation_Diagram

SVG code
@cloudformation.svg
<svg xmlns="https://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink" version="1.1" width="899px" height="169px" viewBox="-0.5 -0.5 899 169" content="&lt;mxfile host=&quot;app.diagrams.net&quot; modified=&quot;2021-02-13T04:48:44.351Z&quot; agent=&quot;5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.3 Safari/605.1.15&quot; etag=&quot;-9R7mQUELhbbxcOfFF_y&quot; version=&quot;14.3.1&quot; type=&quot;device&quot;&gt;&lt;diagram id=&quot;I6a4dCh0OPyMva8bbqvm&quot; name=&quot;Page-1&quot;&gt;7VrbcqM4EP0aPyaFwBjyaGN7M1WZ3dRmd5J5mlJABm0EYmT5Nl+/LRA2IHKZKTJxOXFSFfro3t2nuyM8cIJ0+4fAefKZR4QNbCvaDpzpwIaP68AfhexK5MLxSiAWNCohdABu6A+iQUujKxqRZaOj5JxJmjfBkGcZCWUDw0LwTbPbgrPmqjmOiQHchJiZ6C2NZFKivu0d8EtC46RaGY0uypYUV531SZYJjvimBjmzgRMIzmX5lG4DwpTyKr2U4+aPtO43JkgmXzJgdPfn98vLs7+Cb1+Sr9ltNJ9vr8/0LGvMVvrAX64DvV+5q5SQc5rJQpHuBH5hncAauNASKOncdltAW/aaADIlNUcTaMteE0Dt6VFrfdTeYA0wpMb0Vmt9q7ZB+HUmfCUZzUiwdzkLwFjgiIIpAs64ACzjGWhvksiUgYTgcZNQSW5yHCqtboAugC14JrXTI7uSteLVrOA0uXpOt7Hi1zneLIfnseCrvFjyE7h9Z+u3dR6q4VLwB1JtaWA79tD30VAtRBlrbXVNhKTg+WNGYzWr5GoRrCVGFlLNCPunWXxVSFPH0nuuLTEeT7yJD3iElwmJ9EG0n8ESZPuoA6M9LSCeEJ4SKXbQRQ84c0aaSjqW2L6WNwdmDocaS+qsrAZiHQ3i/eQHwsCD5sxP8Mc2uEIiiB9a5EImPOYZZrMDOgH7ZNFeMYc+V1wpvHCV/4iUO+0XeCV505FAX2J3p8cXwlclgMtqcbqtN053demaCApnJ6JhGLXrp80Ch+QrEZInlKFDvcQiJvKJfm63mQVhWNJ1cx+9W8wxIp5hwk5+t7wcfuZq1cd4X+cXdJ8EyHFHBiN15wZTKhpe4XvCrvmSSlqQ/J5LydNneRrCXpRx6w7zXJTBy7w86IJu1T4mRcAnYrYmZdxHj4UiSdIcrEZ6Yrh30WS4Y5sMH7kmwT3/lbxl+Cb83lJ5V3uusRukA7mVsKsJbWr3GieWQGs5VhWVcjKGl0saVvCcsmrvPYYT94XhxHvLcOI+H046q6fOCqqriuqspMxqqtGtqG86VmiDXZhngsjsVpVEJtiFddV/7dGoYzRqjS6qrw919qrOX0p2Uyqgc5mXMhXhXpzxoGVRfI4x7XWmOEHKSFXW2hMQu6rukPFVtOAC/u0r9t1LOnRHz6fDKvX9lnQ4+kiH/ZfN3gvznP+Wec77yHMnEpinlhsg790EZobT+wj3dQNhH1lA9j9oeSK0dMeONXHfDS1JKnri5PDIKHlhUHJ8ewNAoCrE+b5CtEdM3afeC3iK1dM/1VVKm8CgG9k0VOclUseNrmHstk+kNIqKIq3rbrpZuPVhKh95527TWhe+YS1UWbBuLve1bnCrF00/ba8TtpPro2OzkvmiqrTSVZneT9cWzvDobGGbtkjxD8URa/b57xO2xejoTNH1NqMMVCp5N+ww+r7iVcPZskjzY+iAUL49NFbB7d88KlKRZca97ugIC+HwoeoNhynXP/lQ6Vktn0Bm+fGbfWL4Sj4RCFL4xLxyjvmUMFJ4CSlfFL076w/bEeHtrd/1QqIP639SGsdhcdOkzgfHs60xKDhRMmhaPKhLrASUHDearuh69/48w3as5z3D78czQDx8jahoq30Zy5n9Dw==&lt;/diagram&gt;&lt;/mxfile&gt;" style="background-color: rgb(255, 255, 255);"><defs/><g><g id="cell-6XNqHH-OC_VhYnWdFFxP-1"><path d="M 458 0 L 898 0 L 898 160 L 458 160 Z" fill="none" stroke="#248814" stroke-miterlimit="10" pointer-events="all"/><path d="M 468.59 6.65 C 468.53 6.65 468.48 6.65 468.42 6.65 L 468.42 6.65 C 467.11 6.68 466.03 7.24 465.14 8.25 C 465.13 8.25 465.13 8.25 465.13 8.25 C 464.2 9.36 463.87 10.52 463.96 11.73 C 462.81 12.06 462.12 12.92 461.76 13.74 C 461.75 13.75 461.75 13.76 461.74 13.78 C 461.33 15.05 461.68 16.36 462.24 17.16 C 462.25 17.17 462.25 17.17 462.26 17.18 C 462.94 18.05 463.97 18.53 465.02 18.53 L 476.17 18.53 C 477.19 18.53 478.07 18.16 478.8 17.37 C 479.25 16.94 479.49 16.29 479.58 15.59 C 479.67 14.9 479.61 14.16 479.32 13.55 C 479.31 13.54 479.31 13.53 479.31 13.52 C 478.8 12.62 477.95 11.81 476.76 11.64 C 476.74 10.79 476.28 9.99 475.68 9.56 C 475.67 9.55 475.66 9.55 475.65 9.54 C 475.01 9.18 474.4 9.14 473.91 9.3 C 473.6 9.4 473.36 9.56 473.14 9.74 C 472.51 8.36 471.43 7.18 469.81 6.79 C 469.81 6.79 469.81 6.79 469.81 6.79 C 469.38 6.7 468.97 6.65 468.59 6.65 Z M 468.43 7.38 C 468.8 7.38 469.2 7.43 469.64 7.53 C 471.16 7.89 472.15 9.07 472.66 10.48 C 472.71 10.6 472.81 10.69 472.94 10.72 C 473.07 10.74 473.2 10.7 473.29 10.61 C 473.54 10.34 473.83 10.11 474.14 10.01 C 474.44 9.91 474.78 9.92 475.26 10.18 C 475.67 10.49 476.11 11.31 476.03 11.9 C 476.01 12.01 476.05 12.12 476.12 12.2 C 476.19 12.28 476.29 12.33 476.39 12.33 C 477.46 12.34 478.16 13.02 478.64 13.88 C 478.85 14.3 478.91 14.92 478.84 15.5 C 478.76 16.07 478.53 16.59 478.28 16.83 C 478.27 16.84 478.27 16.85 478.26 16.85 C 477.65 17.53 477.03 17.78 476.17 17.78 L 465.02 17.78 C 464.2 17.78 463.39 17.41 462.85 16.73 C 462.44 16.13 462.14 15.02 462.46 14.02 C 462.79 13.27 463.36 12.55 464.41 12.36 C 464.6 12.32 464.74 12.14 464.71 11.94 C 464.56 10.79 464.8 9.81 465.7 8.74 C 466.49 7.85 467.33 7.39 468.43 7.38 Z M 470.2 10.7 C 469.77 10.7 469.4 10.93 469.13 11.21 C 468.85 11.5 468.64 11.85 468.64 12.25 L 468.64 12.71 L 468.14 12.71 C 468.04 12.71 467.94 12.75 467.87 12.82 C 467.8 12.89 467.76 12.98 467.76 13.08 L 467.76 15.7 C 467.76 15.8 467.8 15.89 467.87 15.96 C 467.94 16.03 468.04 16.07 468.14 16.07 L 472.16 16.07 C 472.26 16.07 472.35 16.03 472.42 15.96 C 472.49 15.89 472.53 15.8 472.53 15.7 L 472.53 13.08 C 472.53 12.98 472.49 12.89 472.42 12.82 C 472.35 12.75 472.26 12.71 472.16 12.71 L 471.68 12.71 L 471.68 12.25 C 471.68 11.84 471.47 11.47 471.21 11.2 C 470.94 10.92 470.61 10.7 470.2 10.7 Z M 470.2 11.45 C 470.29 11.45 470.5 11.54 470.67 11.72 C 470.83 11.89 470.93 12.11 470.93 12.25 L 470.93 12.71 L 469.39 12.71 L 469.39 12.25 C 469.39 12.15 469.49 11.91 469.66 11.74 C 469.83 11.56 470.06 11.45 470.2 11.45 Z M 468.51 13.46 L 471.78 13.46 L 471.78 15.32 L 468.51 15.32 Z M 458 25 L 458 0 L 483 0 L 483 25 Z" fill="#248814" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 408px; height: 1px; padding-top: 7px; margin-left: 490px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #AAB7B8; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">VPC</div></div></div></foreignObject><text x="490" y="19" fill="#AAB7B8" font-family="Helvetica" font-size="12px">VPC</text></switch></g></g><g id="cell-6XNqHH-OC_VhYnWdFFxP-2"><path d="M 93 79 L 251.63 79" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 256.88 79 L 249.88 82.5 L 251.63 79 L 249.88 75.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-6XNqHH-OC_VhYnWdFFxP-3"><rect x="28" y="40" width="65" height="78" fill="none" stroke="none" pointer-events="all"/><path d="M 56.85 101.39 L 56.85 104.36 L 82.91 104.36 L 82.91 101.39 Z M 39.58 93.69 C 38.76 93.69 38.1 94.36 38.1 95.18 L 38.1 106.17 C 38.1 106.99 38.76 107.66 39.58 107.66 L 50.48 107.66 C 51.3 107.66 51.96 106.99 51.96 106.17 L 51.96 95.18 C 51.96 94.36 51.3 93.69 50.48 93.69 Z M 41.07 96.67 L 48.99 96.67 L 48.99 104.68 L 41.07 104.68 Z M 56.85 79.71 L 56.85 82.68 L 82.91 82.68 L 82.91 79.71 Z M 39.58 72.02 C 38.76 72.02 38.1 72.68 38.1 73.5 L 38.1 84.5 C 38.1 85.32 38.76 85.98 39.58 85.98 L 50.48 85.98 C 51.3 85.98 51.96 85.32 51.96 84.5 L 51.96 73.5 C 51.96 72.68 51.3 72.02 50.48 72.02 Z M 41.07 74.99 L 48.99 74.99 L 48.99 83.01 L 41.07 83.01 Z M 56.85 58.03 L 56.85 61.01 L 82.91 61.01 L 82.91 58.03 Z M 39.58 50.34 C 38.76 50.34 38.1 51.01 38.1 51.83 L 38.1 62.82 C 38.1 63.64 38.76 64.31 39.58 64.31 L 50.48 64.31 C 51.3 64.31 51.96 63.64 51.96 62.82 L 51.96 51.83 C 51.96 51.01 51.3 50.34 50.48 50.34 Z M 41.07 53.32 L 48.99 53.32 L 48.99 61.33 L 41.07 61.33 Z M 29.49 40.3 C 29.09 40.3 28.71 40.45 28.44 40.73 C 28.16 41.01 28 41.39 28 41.78 L 28 116.22 C 28 117.04 28.67 117.7 29.49 117.7 L 91.51 117.7 C 92.33 117.7 93 117.04 93 116.22 L 93 41.78 C 93 41.39 92.84 41.01 92.56 40.73 C 92.29 40.45 91.91 40.3 91.51 40.3 Z M 30.97 43.27 L 90.03 43.27 L 90.03 114.73 L 30.97 114.73 Z" fill="#bc1356" stroke="none" pointer-events="all"/></g><g id="cell-6XNqHH-OC_VhYnWdFFxP-4"><path d="M 342.37 79 L 491.63 79" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 337.12 79 L 344.12 75.5 L 342.37 79 L 344.12 82.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 496.88 79 L 489.88 82.5 L 491.63 79 L 489.88 75.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-6XNqHH-OC_VhYnWdFFxP-5"><path d="M 258 40 L 336 40 L 336 118 L 258 118 Z" fill="#bc1356" stroke="none" pointer-events="all"/><path d="M 296.95 52.26 C 296.72 52.26 296.49 52.26 296.26 52.26 L 296.26 52.26 C 293.54 52.34 291.24 53.17 289.41 54.42 C 286.97 56.09 285.35 58.44 284.4 60.67 L 286.62 61.62 C 287.42 59.74 288.8 57.77 290.77 56.42 C 292.74 55.08 295.29 54.31 298.73 54.83 C 303.96 55.86 306.59 59.09 308.02 63.18 C 308.34 64.09 309.55 64.28 310.13 63.51 C 310.87 62.51 311.63 61.98 312.49 61.81 C 313.33 61.65 314.4 61.84 315.81 62.63 C 317.4 64.1 317.58 65.61 317.32 66.9 C 317.17 67.62 317.69 68.3 318.42 68.35 C 321.46 68.57 323.84 70.47 324.9 72.96 C 325.66 75.04 325.68 78.04 323.75 80.73 C 322.14 82.66 320.22 83.49 317.3 83.48 L 300.55 83.48 L 300.55 85.9 L 317.3 85.9 C 320.75 85.91 323.59 84.72 325.64 82.26 C 325.66 82.24 325.67 82.22 325.69 82.2 C 328.16 78.79 328.2 74.89 327.17 72.1 C 327.16 72.08 327.16 72.06 327.15 72.05 C 325.89 69.04 323.1 66.79 319.64 66.17 C 319.68 64.39 319.23 62.41 317.37 60.74 C 317.31 60.69 317.24 60.64 317.17 60.6 C 315.35 59.54 313.61 59.13 312.04 59.44 C 311.08 59.63 310.27 60.12 309.53 60.73 C 307.7 56.81 304.5 53.49 299.17 52.45 C 299.16 52.45 299.14 52.44 299.12 52.44 C 298.37 52.33 297.65 52.26 296.95 52.25 Z M 267.01 63.59 C 266.34 63.59 265.8 64.13 265.8 64.8 L 265.8 104.54 C 265.8 105.21 266.34 105.75 267.01 105.75 L 294.3 105.75 C 294.96 105.75 295.51 105.21 295.51 104.54 L 295.51 82.22 L 293.09 82.22 L 293.09 103.33 L 268.22 103.33 L 268.22 66.01 L 293.09 66.01 L 293.09 74.85 L 295.51 74.85 L 295.51 64.8 C 295.51 64.13 294.96 63.59 294.3 63.59 Z M 271.9 71.1 L 271.9 73.52 L 281.9 73.52 L 281.9 71.1 Z M 271.94 77.31 L 271.94 79.73 L 309.24 79.73 L 309.24 77.31 Z M 311.7 77.31 L 311.7 79.73 L 316.68 79.73 L 316.68 77.31 Z M 271.93 83.47 L 271.93 85.89 L 285.61 85.89 L 285.61 83.47 Z M 271.91 89.66 L 271.91 92.08 L 280.49 92.08 L 280.49 89.66 Z M 283.11 89.66 L 283.11 92.08 L 289.36 92.08 L 289.36 89.66 Z" fill="#ffffff" stroke="none" pointer-events="all"/></g><g id="cell-6XNqHH-OC_VhYnWdFFxP-6"><path d="M 576 79 L 771.63 79" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 776.88 79 L 769.88 82.5 L 771.63 79 L 769.88 75.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-6XNqHH-OC_VhYnWdFFxP-7"><path d="M 498 40 L 576 40 L 576 118 L 498 118 Z" fill="#d05c17" stroke="none" pointer-events="all"/><path d="M 518.31 47.8 C 517.64 47.8 517.09 48.35 517.09 49.02 L 517.09 62.78 C 517.09 63.45 517.64 64 518.31 64 L 527.52 64 L 549.3 109.51 C 549.5 109.93 549.93 110.2 550.4 110.2 L 565.76 110.2 C 566.44 110.2 566.98 109.65 566.98 108.98 L 566.98 95.22 C 566.98 94.55 566.44 94 565.76 94 L 560.31 94 L 538.61 48.5 C 538.41 48.07 537.98 47.8 537.51 47.8 Z M 519.53 50.24 L 536.74 50.24 L 558.44 95.74 C 558.64 96.17 559.07 96.44 559.54 96.44 L 564.55 96.44 L 564.55 107.76 L 551.17 107.76 L 529.39 62.26 C 529.18 61.83 528.76 61.56 528.29 61.56 L 519.53 61.56 Z M 525.3 72.11 C 524.82 72.1 524.38 72.37 524.17 72.81 L 507.2 108.44 C 507.02 108.82 507.04 109.26 507.27 109.62 C 507.49 109.97 507.88 110.19 508.3 110.19 L 524.48 110.19 C 524.95 110.19 525.37 109.92 525.58 109.49 L 534.55 90.74 C 534.71 90.41 534.71 90.02 534.55 89.69 L 526.37 72.8 C 526.17 72.39 525.76 72.12 525.3 72.11 Z M 525.28 76.15 L 532.09 90.22 L 523.71 107.75 L 510.23 107.75 Z" fill="#ffffff" stroke="none" pointer-events="all"/></g><g id="cell-6XNqHH-OC_VhYnWdFFxP-8"><path d="M 778 40 L 856 40 L 856 118 L 778 118 Z" fill="#5a30b5" stroke="none" pointer-events="all"/><path d="M 820.16 47.8 C 816.41 47.8 813.34 50.86 813.34 54.61 C 813.34 56.15 813.86 57.57 814.72 58.71 L 809.18 66.09 C 806.89 64.69 804.21 63.88 801.34 63.88 C 793.06 63.88 786.32 70.62 786.32 78.89 C 786.32 87.17 793.06 93.91 801.34 93.91 C 804.06 93.91 806.61 93.18 808.82 91.91 L 814.52 99.33 C 813.67 100.46 813.16 101.87 813.16 103.39 C 813.16 107.14 816.23 110.2 819.98 110.2 C 823.73 110.2 826.79 107.14 826.79 103.39 C 826.79 101.47 825.99 99.73 824.7 98.49 L 829.6 89.21 L 833.88 90.56 C 833.87 90.65 833.87 90.74 833.87 90.83 C 833.87 94.57 836.93 97.64 840.68 97.64 C 844.43 97.64 847.5 94.57 847.5 90.83 C 847.5 87.08 844.43 84.01 840.68 84.01 C 839.67 84.01 838.71 84.24 837.84 84.64 L 834.94 79.1 L 838.44 72.48 C 839.19 72.77 840.01 72.93 840.87 72.93 C 844.62 72.93 847.68 69.87 847.68 66.12 C 847.68 62.37 844.62 59.3 840.87 59.3 C 837.12 59.3 834.05 62.37 834.05 66.12 C 834.05 66.65 834.12 67.16 834.23 67.65 L 829.66 69.05 L 824.72 59.66 C 826.1 58.41 826.97 56.61 826.97 54.61 C 826.97 50.86 823.91 47.8 820.16 47.8 Z M 820.16 50.23 C 822.59 50.23 824.53 52.18 824.53 54.61 C 824.53 57.05 822.59 58.99 820.16 58.99 C 817.72 58.99 815.78 57.05 815.78 54.61 C 815.78 52.18 817.72 50.23 820.16 50.23 Z M 816.52 60.37 C 817.58 61.04 818.82 61.43 820.16 61.43 C 821.04 61.43 821.88 61.25 822.65 60.95 L 827.29 69.78 L 815.33 73.45 C 814.43 71.15 812.98 69.12 811.14 67.53 Z M 840.87 61.74 C 843.3 61.74 845.25 63.68 845.25 66.12 C 845.25 68.55 843.3 70.5 840.87 70.5 C 838.43 70.5 836.49 68.55 836.49 66.12 C 836.49 63.68 838.43 61.74 840.87 61.74 Z M 801.34 66.31 C 808.3 66.31 813.92 71.93 813.92 78.89 C 813.92 85.86 808.3 91.48 801.34 91.48 C 794.37 91.48 788.75 85.86 788.75 78.89 C 788.75 71.93 794.37 66.31 801.34 66.31 Z M 835.21 69.9 C 835.53 70.38 835.92 70.82 836.35 71.21 L 833.56 76.49 L 830.81 71.25 Z M 828.44 71.97 L 832.19 79.1 L 828.4 86.27 L 815.95 82.33 C 816.21 81.23 816.35 80.08 816.35 78.89 C 816.35 77.83 816.24 76.78 816.03 75.78 Z M 800.16 72.76 L 800.16 77.8 L 795.17 77.8 L 795.17 80.23 L 800.16 80.23 L 800.16 85.33 L 802.6 85.33 L 802.6 80.23 L 807.66 80.23 L 807.66 77.8 L 802.6 77.8 L 802.6 72.76 Z M 833.56 81.71 L 835.84 86.05 C 835.24 86.66 834.75 87.38 834.41 88.18 L 830.76 87.02 Z M 815.21 84.65 L 827.24 88.46 L 822.66 97.13 C 821.84 96.77 820.93 96.57 819.98 96.57 C 818.63 96.57 817.37 96.97 816.3 97.66 L 810.82 90.53 C 812.73 88.97 814.25 86.95 815.21 84.65 Z M 840.68 86.45 C 843.12 86.45 845.06 88.39 845.06 90.83 C 845.06 93.26 843.12 95.21 840.68 95.21 C 838.25 95.21 836.3 93.26 836.3 90.83 C 836.3 88.39 838.25 86.45 840.68 86.45 Z M 819.98 99.01 C 822.41 99.01 824.36 100.95 824.36 103.39 C 824.36 105.82 822.41 107.77 819.98 107.77 C 817.55 107.77 815.6 105.82 815.6 103.39 C 815.6 100.95 817.55 99.01 819.98 99.01 Z" fill="#ffffff" stroke="none" pointer-events="all"/></g><g id="cell-6XNqHH-OC_VhYnWdFFxP-9"><rect x="0.5" y="118" width="120" height="50" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 143px; margin-left: 2px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">AWS CloudFormation<br />Template</div></div></div></foreignObject><text x="61" y="147" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">AWS CloudFormation...</text></switch></g></g><g id="cell-6XNqHH-OC_VhYnWdFFxP-10"><rect x="237" y="118" width="120" height="50" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 143px; margin-left: 238px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">AWS CloudFormation<br /></div></div></div></foreignObject><text x="297" y="147" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">AWS CloudFormation&#xa;</text></switch></g></g><g id="cell-6XNqHH-OC_VhYnWdFFxP-11"><rect x="477" y="118" width="120" height="50" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 143px; margin-left: 478px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">AWS Lambda</div></div></div></foreignObject><text x="537" y="147" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">AWS Lambda</text></switch></g></g><g id="cell-6XNqHH-OC_VhYnWdFFxP-12"><rect x="757" y="118" width="120" height="50" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 143px; margin-left: 758px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Amazon EMR</div></div></div></foreignObject><text x="817" y="147" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Amazon EMR</text></switch></g></g><g id="cell-6XNqHH-OC_VhYnWdFFxP-13"><rect x="117" y="30" width="120" height="50" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 55px; margin-left: 118px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 11px">Update <br />AWS CloudFormation stack</font></div></div></div></foreignObject><text x="177" y="59" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Update...</text></switch></g></g><g id="cell-6XNqHH-OC_VhYnWdFFxP-14"><rect x="357" y="30" width="120" height="50" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 55px; margin-left: 358px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 11px">Create/Update/Delete events</font></div></div></div></foreignObject><text x="417" y="59" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Create/Update/Delete...</text></switch></g></g><g id="cell-6XNqHH-OC_VhYnWdFFxP-15"><rect x="588" y="30" width="180" height="50" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 178px; height: 1px; padding-top: 55px; margin-left: 589px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 11px">Interactive with Apache Spark through Apache Livy</font></div></div></div></foreignObject><text x="678" y="59" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Interactive with Apache Spark...</text></switch></g></g></g><switch><g requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
@cloudformation.svg

The solution include the following steps:

  1. The developer define SparkJob custom resource in CloudFormation template, which includes Apache Livy host name and Apache Spark parameters (ClassName, NumExecutors, ExecutorCores etc.).
  2. Whenever anything changes in resource, AWS CloudFormation sends a request (Create/Update/Delete) to Apache Spark Job submitter.
  3. Apache Spark Job submitter is a AWS Lambda that launch in VPC and interactive with Apache Spark through Apache Livy that launched on Amazon EMR in same VPC.

Following sample demonstrate usage AWS CloudFormation custom resource.

SparkPi:
  Type: 'Custom::SparkJob'
  Properties:
    ServiceToken: !Fn::ImportValue 'spark-job-submitter'
    LivyHost: !GetAtt
      - EmrSparkCluster
      - MasterPublicDNS
    LivyPort: 8998
    Parameters: 
      Name: 'Spark Pi'
      ClassName: 'org.apache.spark.examples.SparkPi'
      NumExecutors: 1
      DriverMemory: '512m'
      ExecutorMemory: '512m'
      ExecutorCores: 1
      Args:
       - 10
Orchestration Apache Spark based ETL pipeline via AWS Step Functions

Another popular problem is manage ETL task. Amazon EMR provide out of the box installation of Apache Oozie, but no integration with others AWS services and difficult configure, manage Apache Spark applications might not be suitable for some users. Integration with AWS Step Functions allow simplify deployment and manage ETL tasks with moder UI and integrations with other AWS services (high level solution diagram you can see below).

StepFunctions_Diagram

SVG code
@stepfunctions.svg
<svg xmlns="https://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink" version="1.1" width="3139px" height="585px" viewBox="-0.5 -0.5 3139 585" content="&lt;mxfile host=&quot;app.diagrams.net&quot; modified=&quot;2021-02-13T04:45:10.158Z&quot; agent=&quot;5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.3 Safari/605.1.15&quot; etag=&quot;8B5il50xgZJOyIEQpuTo&quot; version=&quot;14.3.1&quot; type=&quot;device&quot;&gt;&lt;diagram id=&quot;e1jB6cRCLywFRj79zxxH&quot; name=&quot;Page-1&quot;&gt;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&lt;/diagram&gt;&lt;/mxfile&gt;" style="background-color: rgb(255, 255, 255);"><defs/><g><g id="cell-Na90MfbzHcX0U7akbqYx-52"><path d="M 2353.1 102 L 3111 102 L 3111 554.21 L 2353.1 554.21 Z" fill="none" stroke="#d86613" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><path d="M 2353.1 102 L 2378.1 102 L 2378.1 127 L 2353.1 127 Z M 2374.17 110.37 L 2374.17 109.66 L 2372.5 109.66 L 2372.5 107.61 L 2370.35 107.61 L 2370.35 105.93 L 2369.64 105.93 L 2369.64 107.61 L 2368.1 107.61 L 2368.1 105.93 L 2367.39 105.93 L 2367.39 107.61 L 2365.87 107.61 L 2365.87 105.93 L 2365.16 105.93 L 2365.16 107.61 L 2363.63 107.61 L 2363.63 105.93 L 2362.92 105.93 L 2362.92 107.61 L 2361.39 107.61 L 2361.39 105.93 L 2360.67 105.93 L 2360.67 107.61 L 2358.71 107.61 L 2358.71 109.66 L 2357.03 109.66 L 2357.03 110.37 L 2358.71 110.37 L 2358.71 111.9 L 2357.03 111.9 L 2357.03 112.61 L 2358.71 112.61 L 2358.71 114.14 L 2357.03 114.14 L 2357.03 114.86 L 2358.71 114.86 L 2358.71 116.39 L 2357.03 116.39 L 2357.03 117.1 L 2358.71 117.1 L 2358.71 118.63 L 2357.03 118.63 L 2357.03 119.34 L 2358.71 119.34 L 2358.71 121.39 L 2360.67 121.39 L 2360.67 123.07 L 2361.39 123.07 L 2361.39 121.39 L 2362.92 121.39 L 2362.92 123.07 L 2363.63 123.07 L 2363.63 121.39 L 2365.16 121.39 L 2365.16 123.07 L 2365.87 123.07 L 2365.87 121.39 L 2367.39 121.39 L 2367.39 123.07 L 2368.1 123.07 L 2368.1 121.39 L 2369.63 121.39 L 2369.63 123.07 L 2370.35 123.07 L 2370.35 121.39 L 2372.49 121.39 L 2372.49 119.34 L 2374.17 119.34 L 2374.17 118.63 L 2372.5 118.63 L 2372.5 117.1 L 2374.17 117.1 L 2374.17 116.39 L 2372.5 116.39 L 2372.5 114.86 L 2374.17 114.86 L 2374.17 114.14 L 2372.5 114.14 L 2372.5 112.61 L 2374.17 112.61 L 2374.17 111.9 L 2372.5 111.9 L 2372.5 110.37 Z M 2371.78 120.68 L 2359.42 120.68 L 2359.42 108.32 L 2371.78 108.32 Z" fill="#d86613" stroke="none" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-1"><rect x="1165.74" y="0.95" width="1970.52" height="581.05" fill="none" stroke="#5a30b5" stroke-width="3" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-2"><path d="M 1 2 L 551 2 L 551 582 L 1 582 Z" fill="none" stroke="#cd2264" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><path d="M 13.51 5.83 C 12.54 5.83 11.75 6.62 11.75 7.58 C 11.75 8.43 12.35 9.14 13.15 9.31 L 13.15 9.98 L 8.31 9.98 C 8.1 9.98 7.93 10.15 7.93 10.36 L 7.93 11.71 L 5.2 11.71 C 4.99 11.71 4.82 11.88 4.82 12.09 L 4.82 13.84 C 4.82 14.04 4.99 14.21 5.2 14.21 L 7.93 14.21 L 7.93 14.82 L 5.19 14.82 C 4.98 14.82 4.81 14.99 4.81 15.2 L 4.81 16.96 C 4.81 17.16 4.98 17.33 5.19 17.33 L 7.93 17.33 L 7.93 18.7 C 7.93 18.9 8.1 19.07 8.31 19.07 L 13.14 19.07 L 13.14 19.74 C 12.36 19.92 11.78 20.62 11.78 21.45 C 11.78 22.42 12.57 23.21 13.54 23.21 C 14.5 23.21 15.3 22.42 15.3 21.45 C 15.3 20.61 14.69 19.9 13.89 19.73 L 13.89 19.07 L 18.72 19.07 C 18.93 19.07 19.09 18.9 19.09 18.7 L 19.09 16.94 L 18.34 16.94 L 18.34 18.32 L 8.68 18.32 L 8.68 17.33 L 11.45 17.33 C 11.66 17.33 11.83 17.16 11.83 16.96 L 11.83 15.2 C 11.83 14.99 11.66 14.82 11.45 14.82 L 8.68 14.82 L 8.68 14.21 L 11.46 14.21 C 11.67 14.21 11.83 14.04 11.83 13.84 L 11.83 12.09 C 11.83 11.88 11.67 11.71 11.46 11.71 L 8.68 11.71 L 8.68 10.73 L 18.34 10.73 L 18.34 12.45 L 19.09 12.45 L 19.09 10.36 C 19.09 10.15 18.93 9.98 18.72 9.98 L 13.9 9.98 L 13.9 9.3 C 14.68 9.12 15.27 8.42 15.27 7.58 C 15.27 6.62 14.48 5.83 13.51 5.83 Z M 13.51 6.58 C 14.07 6.58 14.52 7.02 14.52 7.58 C 14.52 8.15 14.07 8.59 13.51 8.59 C 12.95 8.59 12.5 8.15 12.5 7.58 C 12.5 7.02 12.95 6.58 13.51 6.58 Z M 5.57 12.46 L 11.08 12.46 L 11.08 13.46 L 5.57 13.46 Z M 14.9 13.13 C 14.69 13.13 14.52 13.29 14.52 13.5 L 14.52 15.92 C 14.52 16.13 14.69 16.3 14.9 16.3 L 21.83 16.3 C 22.04 16.3 22.21 16.13 22.21 15.92 L 22.21 13.5 C 22.21 13.29 22.04 13.13 21.83 13.13 Z M 15.27 13.88 L 21.46 13.88 L 21.46 15.55 L 15.27 15.55 Z M 5.56 15.57 L 11.08 15.57 L 11.08 16.58 L 5.56 16.58 Z M 13.54 20.44 C 14.1 20.44 14.55 20.89 14.55 21.45 C 14.55 22.02 14.1 22.46 13.54 22.46 C 12.97 22.46 12.53 22.02 12.53 21.45 C 12.53 20.89 12.97 20.44 13.54 20.44 Z M 1 27 L 1 2 L 26 2 L 26 27 Z" fill="#cd2264" stroke="none" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-4"><ellipse cx="251" cy="147" rx="25" ry="25" fill="#e3c800" stroke="#b09500" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 48px; height: 1px; padding-top: 147px; margin-left: 227px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="color: rgb(0 , 0 , 0)">Start</span></div></div></div></foreignObject><text x="251" y="151" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">Start</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-5"><rect x="201" y="192" width="100" height="40" rx="6" ry="6" fill="#60a917" stroke="#2d7600" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 212px; margin-left: 202px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="color: rgb(0 , 0 , 0)">FetchAnOrder</span></div></div></div></foreignObject><text x="251" y="216" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">FetchAnOrder</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-6"><path d="M 251 172 L 251 185.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 251 190.88 L 247.5 183.88 L 251 185.63 L 254.5 183.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-7"><rect x="201" y="252" width="100" height="40" rx="6" ry="6" fill="#60a917" stroke="#2d7600" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 272px; margin-left: 202px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div style="color: rgb(0 , 0 , 0)">RegionChoice</div></div></div></div></foreignObject><text x="251" y="276" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">RegionChoice</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-8"><path d="M 251 232 Q 251 232 251 245.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 251 250.88 L 247.5 243.88 L 251 245.63 L 254.5 243.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-9"><rect x="201" y="312" width="100" height="40" rx="6" ry="6" fill="#60a917" stroke="#2d7600" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 332px; margin-left: 202px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="color: rgb(0 , 0 , 0)">CreateOrederB</span></div></div></div></foreignObject><text x="251" y="336" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">CreateOrederB</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-10"><path d="M 251 292 Q 251 292 251 305.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 251 310.88 L 247.5 303.88 L 251 305.63 L 254.5 303.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-11"><rect x="91" y="312" width="90" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 332px; margin-left: 92px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span>CreateOrderA</span></div></div></div></foreignObject><text x="136" y="336" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">CreateOrderA</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-12"><path d="M 201 282 Q 136 282.2 136 305.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 136 310.88 L 132.5 303.88 L 136 305.63 L 139.5 303.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-13"><rect x="131" y="382" width="70" height="40" rx="6" ry="6" fill="#60a917" stroke="#2d7600" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 68px; height: 1px; padding-top: 402px; margin-left: 132px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="color: rgb(0 , 0 , 0)">OrderOK</span></div></div></div></foreignObject><text x="166" y="406" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">OrderOK</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-14"><path d="M 226 352 L 226 357.1 Q 226 362.2 216 362.2 L 193.6 362.2 Q 183.6 362.2 183.57 368.92 L 183.53 375.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 183.51 380.88 L 180.04 373.86 L 183.53 375.63 L 187.04 373.9 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-15"><path d="M 136 352 L 136 357.1 Q 136 362.2 146 362.2 L 156 362.2 Q 166 362.2 166 368.92 L 166 375.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 166 380.88 L 162.5 373.88 L 166 375.63 L 169.5 373.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-16"><rect x="111" y="452" width="110" height="40" rx="6" ry="6" fill="#60a917" stroke="#2d7600" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 472px; margin-left: 112px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="color: rgb(0 , 0 , 0)">ProcessOrder</span></div></div></div></foreignObject><text x="166" y="476" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">ProcessOrder</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-17"><path d="M 166 422 L 166 445.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 166 450.88 L 162.5 443.88 L 166 445.63 L 169.5 443.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-18"><rect x="236" y="382" width="100" height="40" rx="6" ry="6" fill="#e51400" stroke="#b20000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 402px; margin-left: 237px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div><font color="#000000">DatabaseError</font></div></div></div></div></foreignObject><text x="286" y="406" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">DatabaseError</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-19"><path d="M 251 352 L 251.1 357.1 Q 251.2 362.2 261.2 362.2 L 276 362.2 Q 286 362.2 286 368.92 L 286 375.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 286 380.88 L 282.5 373.88 L 286 375.63 L 289.5 373.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-20"><rect x="351" y="382" width="110" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 402px; margin-left: 352px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div>UnservedRegion</div></div></div></div></foreignObject><text x="406" y="406" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">UnservedRegion</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-21"><path d="M 301 282 Q 406 282.2 406 375.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 406 380.88 L 402.5 373.88 L 406 375.63 L 409.5 373.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-22"><rect x="291" y="452" width="113" height="40" rx="6" ry="6" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 111px; height: 1px; padding-top: 472px; margin-left: 292px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span>NoOrderPossible</span></div></div></div></foreignObject><text x="348" y="476" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">NoOrderPossible</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-23"><path d="M 286 422 L 286 427.1 Q 286 432.2 296 432.2 L 311.6 432.2 Q 321.6 432.2 321.61 438.76 L 321.62 445.31" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 321.62 450.56 L 318.11 443.57 L 321.62 445.31 L 325.11 443.56 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-24"><path d="M 406 422 L 406 427.1 Q 406 432.2 396 432.2 L 386 432.2 Q 376 432.2 375.92 438.92 L 375.83 445.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 375.76 450.88 L 372.35 443.84 L 375.83 445.63 L 379.35 443.93 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-25"><ellipse cx="266" cy="517" rx="25" ry="25" fill="#e3c800" stroke="#b09500" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 48px; height: 1px; padding-top: 517px; margin-left: 242px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #ffffff; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="color: rgb(0 , 0 , 0)">End</span></div></div></div></foreignObject><text x="266" y="521" fill="#ffffff" font-family="Helvetica" font-size="12px" text-anchor="middle">End</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-26"><path d="M 166 492 Q 166 517 234.63 517" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 239.88 517 L 232.88 520.5 L 234.63 517 L 232.88 513.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-27"><path d="M 347.5 492 Q 347.6 517 297.37 517" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 292.12 517 L 299.12 513.5 L 297.37 517 L 299.12 520.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-28"><path d="M 1 2 L 64 2 L 64 65 L 1 65 Z" fill="#bc1356" stroke="none" pointer-events="all"/><path d="M 32.44 8.37 C 29.71 8.37 27.48 10.6 27.48 13.33 C 27.48 15.73 29.22 17.75 31.49 18.2 L 31.49 20.43 L 17.35 20.43 C 16.81 20.43 16.37 20.87 16.37 21.41 L 16.37 25.43 L 8.28 25.43 C 7.74 25.43 7.3 25.87 7.3 26.42 L 7.3 31.47 C 7.3 32.01 7.74 32.45 8.28 32.45 L 16.37 32.45 L 16.37 34.52 L 8.28 34.52 C 7.74 34.52 7.3 34.96 7.3 35.5 L 7.3 40.55 C 7.3 41.1 7.74 41.54 8.28 41.54 L 16.37 41.54 L 16.37 45.61 C 16.37 46.15 16.81 46.59 17.35 46.59 L 31.49 46.59 L 31.49 48.8 C 29.22 49.25 27.48 51.27 27.48 53.67 C 27.48 56.4 29.71 58.63 32.44 58.63 C 35.17 58.63 37.4 56.4 37.4 53.67 C 37.4 51.29 35.7 49.29 33.46 48.82 L 33.46 46.59 L 47.57 46.59 C 48.11 46.59 48.55 46.15 48.55 45.61 L 48.55 40.51 L 46.59 40.51 L 46.59 44.63 L 18.33 44.63 L 18.33 41.54 L 26.48 41.54 C 27.02 41.54 27.46 41.1 27.46 40.55 L 27.46 35.5 C 27.46 34.96 27.02 34.52 26.48 34.52 L 18.33 34.52 L 18.33 32.45 L 26.48 32.45 C 27.02 32.45 27.46 32.01 27.46 31.47 L 27.46 26.42 C 27.46 25.87 27.02 25.43 26.48 25.43 L 18.33 25.43 L 18.33 22.39 L 46.59 22.39 L 46.59 27.45 L 48.55 27.45 L 48.55 21.41 C 48.55 20.87 48.11 20.43 47.57 20.43 L 33.46 20.43 L 33.46 18.18 C 35.7 17.71 37.4 15.71 37.4 13.33 C 37.4 10.6 35.17 8.37 32.44 8.37 Z M 32.44 10.34 C 34.1 10.34 35.43 11.66 35.43 13.33 C 35.43 14.99 34.1 16.32 32.44 16.32 C 30.78 16.32 29.45 14.99 29.45 13.33 C 29.45 11.66 30.78 10.34 32.44 10.34 Z M 9.27 27.4 L 25.49 27.4 L 25.49 30.48 L 9.27 30.48 Z M 36.52 29.5 C 35.97 29.5 35.53 29.94 35.53 30.48 L 35.53 37.58 C 35.53 38.13 35.97 38.57 36.52 38.57 L 56.72 38.57 C 57.26 38.57 57.7 38.13 57.7 37.58 L 57.7 30.48 C 57.7 29.94 57.26 29.5 56.72 29.5 Z M 37.5 31.46 L 55.73 31.46 L 55.73 36.6 L 37.5 36.6 Z M 9.27 36.49 L 25.49 36.49 L 25.49 39.57 L 9.27 39.57 Z M 32.44 50.68 C 34.1 50.68 35.43 52.01 35.43 53.67 C 35.43 55.34 34.1 56.66 32.44 56.66 C 30.78 56.66 29.45 55.34 29.45 53.67 C 29.45 52.01 30.78 50.68 32.44 50.68 Z" fill="#ffffff" stroke="none" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-29"><rect x="81" y="18.5" width="330" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 328px; height: 1px; padding-top: 26px; margin-left: 83px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="color: rgb(205 , 34 , 100) ; font-family: &quot;helvetica&quot; ; font-style: normal ; font-weight: normal ; letter-spacing: normal ; text-align: left ; text-indent: 0px ; text-transform: none ; word-spacing: 0px ; background-color: rgb(248 , 249 , 250) ; text-decoration: none ; display: inline ; float: none"><font style="font-size: 32px">AWS Step Function</font></span></div></div></div></foreignObject><text x="83" y="34" fill="#000000" font-family="Helvetica" font-size="8px">AWS Step Function</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-30"><path d="M 720.9 342.2 L 561.2 342.2 L 551 342.2" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 727.65 342.2 L 718.65 346.7 L 720.9 342.2 L 718.65 337.7 Z" fill="#000000" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-31"><path d="M 731 212 L 991 212 L 991 472 L 731 472 Z" fill="#bc1356" stroke="none" pointer-events="all"/><path d="M 860.75 238.29 C 849.5 238.29 840.29 247.5 840.29 258.75 C 840.29 268.67 847.45 277.01 856.85 278.84 L 856.85 288.04 L 798.48 288.04 C 796.24 288.04 794.42 289.86 794.42 292.1 L 794.42 308.71 L 761.06 308.71 C 758.82 308.71 757 310.52 757 312.77 L 757 333.61 C 757 335.85 758.82 337.67 761.06 337.67 L 794.42 337.67 L 794.42 346.2 L 761.06 346.2 C 758.82 346.2 757 348.02 757 350.26 L 757 371.1 C 757 373.35 758.82 375.16 761.06 375.16 L 794.42 375.16 L 794.42 391.97 C 794.42 394.22 796.24 396.03 798.48 396.03 L 856.85 396.03 L 856.85 405.16 C 847.45 406.99 840.29 415.33 840.29 425.24 C 840.29 436.5 849.5 445.71 860.75 445.71 C 872.01 445.71 881.23 436.5 881.23 425.24 C 881.23 415.43 874.22 407.17 864.97 405.22 L 864.97 396.03 L 923.19 396.03 C 925.43 396.03 927.25 394.22 927.25 391.97 L 927.25 370.94 L 919.13 370.94 L 919.13 387.91 L 802.54 387.91 L 802.54 375.16 L 836.14 375.16 C 838.38 375.16 840.2 373.35 840.2 371.1 L 840.2 350.26 C 840.2 348.02 838.38 346.2 836.14 346.2 L 802.54 346.2 L 802.54 337.67 L 836.14 337.67 C 838.38 337.67 840.2 335.85 840.2 333.61 L 840.2 312.77 C 840.2 310.52 838.38 308.71 836.14 308.71 L 802.54 308.71 L 802.54 296.16 L 919.13 296.16 L 919.13 317.02 L 927.25 317.02 L 927.25 292.1 C 927.25 289.86 925.43 288.04 923.19 288.04 L 864.97 288.04 L 864.97 278.78 C 874.22 276.83 881.23 268.57 881.23 258.75 C 881.23 247.5 872.01 238.29 860.75 238.29 Z M 860.75 246.41 C 867.62 246.41 873.11 251.89 873.11 258.75 C 873.11 265.62 867.62 271.1 860.75 271.1 C 853.89 271.1 848.41 265.62 848.41 258.75 C 848.41 251.89 853.89 246.41 860.75 246.41 Z M 765.12 316.83 L 832.08 316.83 L 832.08 329.55 L 765.12 329.55 Z M 877.57 325.48 C 875.33 325.48 873.51 327.3 873.51 329.54 L 873.51 358.84 C 873.51 361.09 875.33 362.9 877.57 362.9 L 960.94 362.9 C 963.18 362.9 965 361.09 965 358.84 L 965 329.54 C 965 327.3 963.18 325.48 960.94 325.48 Z M 881.63 333.6 L 956.88 333.6 L 956.88 354.78 L 881.63 354.78 Z M 765.12 354.32 L 832.08 354.32 L 832.08 367.05 L 765.12 367.05 Z M 860.75 412.9 C 867.62 412.9 873.11 418.38 873.11 425.24 C 873.11 432.11 867.62 437.59 860.75 437.59 C 853.89 437.59 848.41 432.11 848.41 425.24 C 848.41 418.38 853.89 412.9 860.75 412.9 Z" fill="#ffffff" stroke="none" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-32"><path d="M 1231.42 342.02 L 1116.4 342.2 L 991 341.58" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1238.17 342.01 L 1229.18 346.52 L 1231.42 342.02 L 1229.17 337.52 Z" fill="#000000" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-33"><path d="M 1191 102 L 2302.58 102 L 2302.58 556.74 L 1191 556.74 Z" fill="none" stroke="#d86613" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><path d="M 1191 102 L 1216 102 L 1216 127 L 1191 127 Z M 1212.07 110.37 L 1212.07 109.66 L 1210.39 109.66 L 1210.39 107.61 L 1208.25 107.61 L 1208.25 105.93 L 1207.54 105.93 L 1207.54 107.61 L 1206 107.61 L 1206 105.93 L 1205.29 105.93 L 1205.29 107.61 L 1203.77 107.61 L 1203.77 105.93 L 1203.06 105.93 L 1203.06 107.61 L 1201.53 107.61 L 1201.53 105.93 L 1200.81 105.93 L 1200.81 107.61 L 1199.29 107.61 L 1199.29 105.93 L 1198.57 105.93 L 1198.57 107.61 L 1196.61 107.61 L 1196.61 109.66 L 1194.93 109.66 L 1194.93 110.37 L 1196.61 110.37 L 1196.61 111.9 L 1194.93 111.9 L 1194.93 112.61 L 1196.61 112.61 L 1196.61 114.14 L 1194.93 114.14 L 1194.93 114.86 L 1196.61 114.86 L 1196.61 116.39 L 1194.93 116.39 L 1194.93 117.1 L 1196.61 117.1 L 1196.61 118.63 L 1194.93 118.63 L 1194.93 119.34 L 1196.61 119.34 L 1196.61 121.39 L 1198.57 121.39 L 1198.57 123.07 L 1199.29 123.07 L 1199.29 121.39 L 1200.81 121.39 L 1200.81 123.07 L 1201.53 123.07 L 1201.53 121.39 L 1203.06 121.39 L 1203.06 123.07 L 1203.77 123.07 L 1203.77 121.39 L 1205.29 121.39 L 1205.29 123.07 L 1206 123.07 L 1206 121.39 L 1207.53 121.39 L 1207.53 123.07 L 1208.24 123.07 L 1208.24 121.39 L 1210.39 121.39 L 1210.39 119.34 L 1212.07 119.34 L 1212.07 118.63 L 1210.39 118.63 L 1210.39 117.1 L 1212.07 117.1 L 1212.07 116.39 L 1210.39 116.39 L 1210.39 114.86 L 1212.07 114.86 L 1212.07 114.14 L 1210.39 114.14 L 1210.39 112.61 L 1212.07 112.61 L 1212.07 111.9 L 1210.39 111.9 L 1210.39 110.37 Z M 1209.68 120.68 L 1197.32 120.68 L 1197.32 108.32 L 1209.68 108.32 Z" fill="#d86613" stroke="none" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-35"><rect x="1241.53" y="212" width="260" height="260" fill="#e6e6e6" stroke="none" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-36"><image x="1284.81" y="224.5" width="172.46" height="234" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjU0LjcyNTM1NzA1NTY2NDA2IiBoZWlnaHQ9IjM0NS4zNzk2NjkxODk0NTMxIiB2aWV3Qm94PSIwLjUxNjg3NzY1MTIxNDU5OTYgMC4zNzE0MzI3MjE2MTQ4Mzc2NSAyNTQuNzI1MzU3MDU1NjY0MDYgMzQ1LjM3OTY2OTE4OTQ1MzEiIHZlcnNpb249IjEuMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiYjeGE7CTxnPiYjeGE7CQk8cGF0aCBkPSJNODIuNTUzOTQ5MSwyNjcuNDcyNTI0IEM4Mi41NTM5NDkxLDI2Ny40NzI1MjQgNjkuMzU1NTIsMjc1LjE0Nzg2OSA5MS45NDY4MjE4LDI3Ny43NDUxMDUgQzExOS4zMTU1NDksMjgwLjg2NzM3NSAxMzMuMzAzMzg5LDI4MC40MTk2MDcgMTYzLjQ2MzkxMywyNzQuNzExMjczIEMxNjMuNDYzOTEzLDI3NC43MTEyNzMgMTcxLjM5MzM5NiwyNzkuNjgzMjU4IDE4Mi40Njc0OTEsMjgzLjk4OTY0NCBDMTE0Ljg1NTU2NCwzMTIuOTY2OTgyIDI5LjQ0ODM3ODIsMjgyLjMxMTIxNSA4Mi41NTM5NDkxLDI2Ny40NzI1MjQiIGZpbGw9IiM1MzgyQTEiLz4mI3hhOwkJPHBhdGggZD0iTTc0LjI5MjEzMDksMjI5LjY1ODk5NiBDNzQuMjkyMTMwOSwyMjkuNjU4OTk2IDU5LjQ4ODgxNDUsMjQwLjYxNjcyNyA4Mi4wOTY4NzI3LDI0Mi45NTUxNzEgQzExMS4zMzMwMDQsMjQ1Ljk3MTMxNiAxMzQuNDIxNDExLDI0Ni4yMTgwMDcgMTc0LjM3MzIzNiwyMzguNTI0OTc1IEMxNzQuMzczMjM2LDIzOC41MjQ5NzUgMTc5Ljg5OTExMywyNDQuMTI3MTg1IDE4OC41ODgyMTgsMjQ3LjE5MDgwNyBDMTA2Ljg0MTM2NywyNzEuMDk0NjkxIDE1Ljc5MDA4LDI0OS4wNzU4OTggNzQuMjkyMTMwOSwyMjkuNjU4OTk2IiBmaWxsPSIjNTM4MkExIi8+JiN4YTsJCTxwYXRoIGQ9Ik0xNDMuOTQxODE4LDE2NS41MTQ3MDUgQzE2MC42MDEzNjcsMTg0LjY5NTE1NiAxMzkuNTY0Njg0LDIwMS45NTUxNDIgMTM5LjU2NDY4NCwyMDEuOTU1MTQyIEMxMzkuNTY0Njg0LDIwMS45NTUxNDIgMTgxLjg2NjEyNCwxODAuMTE3ODc2IDE2Mi40Mzg5ODIsMTUyLjc3MjQyMiBDMTQ0LjI5NDYzMywxMjcuMjcxMDk4IDEzMC4zODAzMzUsMTE0LjYwMDQ5NSAyMDUuNzA2NzA1LDcwLjkxMzg2MTggQzIwNS43MDY3MDUsNzAuOTEzODYxOCA4Ny40NjkxNDkxLDEwMC40NDQxNiAxNDMuOTQxODE4LDE2NS41MTQ3MDUiIGZpbGw9IiNFNzZGMDAiLz4mI3hhOwkJPHBhdGggZD0iTTIzMy4zNjQwMTUsMjk1LjQ0MTY4NyBDMjMzLjM2NDAxNSwyOTUuNDQxNjg3IDI0My4xMzExMTMsMzAzLjQ4OTM5NiAyMjIuNjA3MzYsMzA5LjcxNTMxNiBDMTgzLjU4MDg1OCwzMjEuNTM3ODYyIDYwLjE3NDg5NDUsMzI1LjEwNzg5OCAyNS44OTMyMzY0LDMxMC4xODYzNTYgQzEzLjU2OTg2MTgsMzA0LjgyNTI1MSAzNi42Nzk2OCwyOTcuMzg1NDI1IDQzLjk0OTE0OTEsMjk1LjgyNDI5MSBDNTEuNTMwNDcyNywyOTQuMTgwMzA1IDU1Ljg2MjkyMzYsMjk0LjQ4NjU3NSA1NS44NjI5MjM2LDI5NC40ODY1NzUgQzQyLjE1ODA4LDI4NC44MzIxMTYgLTMyLjcxOTU5MjcsMzEzLjQ0MzYwNyAxNy44Mjg3NzA5LDMyMS42Mzc0NjkgQzE1NS42ODE1MTMsMzQzLjk5MzI1MSAyNjkuMTIxMTY0LDMxMS41NzA2MTggMjMzLjM2NDAxNSwyOTUuNDQxNjg3IiBmaWxsPSIjNTM4MkExIi8+JiN4YTsJCTxwYXRoIGQ9Ik04OC45MDA4ODczLDE5MC40Nzk4MjUgQzg4LjkwMDg4NzMsMTkwLjQ3OTgyNSAyNi4xMjg3NTY0LDIwNS4zODkyNjUgNjYuNjcxNzA5MSwyMTAuODAzNDMzIEM4My43OTAxOTY0LDIxMy4wOTUzMzEgMTE3LjkxNTQ2MiwyMTIuNTc2ODE1IDE0OS43MDIyODQsMjA5LjkxMzQ4NCBDMTc1LjY4MDIzMywyMDcuNzIyMTI0IDIwMS43NjUyMzYsMjAzLjA2MjkyNCAyMDEuNzY1MjM2LDIwMy4wNjI5MjQgQzIwMS43NjUyMzYsMjAzLjA2MjkyNCAxOTIuNjA1MDkxLDIwNi45ODU3NzUgMTg1Ljk3Nzk0OSwyMTEuNTEwOTI0IEMxMjIuMjMzOTQ5LDIyOC4yNzU2NjUgLTAuOTA3NjM2MzY0LDIyMC40NzY1MDkgMzQuNTQzMjQzNiwyMDMuMzI4MjMzIEM2NC41MjQxMDE4LDE4OC44MzU4NCA4OC45MDA4ODczLDE5MC40Nzk4MjUgODguOTAwODg3MywxOTAuNDc5ODI1IiBmaWxsPSIjNTM4MkExIi8+JiN4YTsJCTxwYXRoIGQ9Ik0yMDEuNTA2NDQ0LDI1My40MjIzMTMgQzI2Ni4zMDUxNjQsMjE5Ljc1MDQgMjM2LjM0NDc4NSwxODcuMzkyIDIxNS40MzI4NDQsMTkxLjc1MTQ0NyBDMjEwLjMwNzI1OCwxOTIuODE4MjY5IDIwOC4wMjE4NzYsMTkzLjc0MjY2MiAyMDguMDIxODc2LDE5My43NDI2NjIgQzIwOC4wMjE4NzYsMTkzLjc0MjY2MiAyMDkuOTI0NjU1LDE5MC43NjE4OTEgMjEzLjU1ODkyNCwxODkuNDcxNjUxIEMyNTQuOTI5NDU1LDE3NC45MjcxMjcgMjg2Ljc0NjA2NSwyMzIuMzY4ODczIDIwMC4yMDQxMDIsMjU1LjExOTM2IEMyMDAuMjA0MTAyLDI1NS4xMjAyOTEgMjAxLjIwNjY5MSwyNTQuMjIzODI1IDIwMS41MDY0NDQsMjUzLjQyMjMxMyIgZmlsbD0iIzUzODJBMSIvPiYjeGE7CQk8cGF0aCBkPSJNMTYyLjQzODk4MiwwLjM3MTQzMjcyNyBDMTYyLjQzODk4MiwwLjM3MTQzMjcyNyAxOTguMzI1NTI3LDM2LjI3MDA4IDEyOC40MDIxNTMsOTEuNDcyMDU4MiBDNzIuMzMwNzA1NSwxMzUuNzUzNTQyIDExNS42MTYxMTYsMTYxLjAwMTY1OCAxMjguMzc4ODgsMTg5Ljg0ODY2OSBDOTUuNjQ5MDQ3MywxNjAuMzE4MzcxIDcxLjYyOTczMDksMTM0LjMyMjczNSA4Ny43NDM3NjczLDExMC4xMjg0MDcgQzExMS4zOTUzNzUsNzQuNjEzMjk0NSAxNzYuOTE4MzQyLDU3LjM5NDI2OTEgMTYyLjQzODk4MiwwLjM3MTQzMjcyNyIgZmlsbD0iI0U3NkYwMCIvPiYjeGE7CQk8cGF0aCBkPSJNOTUuMjY4MzA1NSwzNDQuNjY1MzY3IEMxNTcuNDY2OTk2LDM0OC42NDY4NjUgMjUyLjk4MDEzMSwzNDIuNDU2MzIgMjU1LjI0MjI0LDMxMy4wMjU2MjkgQzI1NS4yNDIyNCwzMTMuMDI1NjI5IDI1MC44OTM5NjQsMzI0LjE4MjU3NSAyMDMuODM4MzcxLDMzMy4wNDI5NjcgQzE1MC43NTA0ODcsMzQzLjAzMzQ4NCA4NS4yNzQwNjU1LDM0MS44NjcwNTUgNDYuNDM5MzMwOSwzMzUuNDY0MjYyIEM0Ni40NDAyNjE4LDMzNS40NjMzMzEgNTQuMzg5Mjk0NSwzNDIuMDQzOTI3IDk1LjI2ODMwNTUsMzQ0LjY2NTM2NyIgZmlsbD0iIzUzODJBMSIvPiYjeGE7CTwvZz4mI3hhOzwvc3ZnPg==" preserveAspectRatio="none"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-38"><rect x="1989.31" y="212" width="260" height="260" fill="#e6e6e6" stroke="none" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-39"><image x="2001.81" y="276.5" width="234" height="130" xlink:href="data:image/svg+xml;base64,PHN2ZyB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAuMDAwMTgzMTA1NDY4NzUgMzg4LjEwNjcxOTk3MDcwMzEgMjAxLjg0OTg2ODc3NDQxNDA2IiBoZWlnaHQ9IjIwMS44NDk4Njg3NzQ0MTQwNiIgd2lkdGg9IjM4OC4xMDY3MTk5NzA3MDMxIiB4bWw6c3BhY2U9InByZXNlcnZlIiB2ZXJzaW9uPSIxLjEiIGlkPSJzdmc0MTU1Ij48bWV0YWRhdGEgaWQ9Im1ldGFkYXRhNDE2MSI+PHJkZjpyZGY+PGNjOndvcmsgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiLz48ZGM6dGl0bGUvPjwvY2M6d29yaz48L3JkZjpyZGY+PC9tZXRhZGF0YT48ZGVmcyBpZD0iZGVmczQxNTkiLz48ZyB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwwLDIwMS44NSkiIGlkPSJnNDE2MyI+PGcgdHJhbnNmb3JtPSJzY2FsZSgwLjEsMC4xKSIgaWQ9Imc0MTY1Ij48cGF0aCBpZD0icGF0aDQxNjciIHN0eWxlPSJmaWxsOiNlMjVhMWM7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiIGQ9Im0gMjg0MC4yMiw4MDAuMDc4IGMgLTIuNjgsNS43MjMgLTMuODksOC42MSAtNS4zNSwxMS4zNzkgLTM4LjksNzMuOTU3IC03Ny43MSwxNDcuOTY5IC0xMTYuOTYsMjIxLjc0MyAtMy45Niw3LjQxIC0zLjQ3LDExLjgyIDEuOTUsMTguMTUgNjEuODcsNzIuMjggMTIzLjQyLDE0NC44NSAxODUuMDQsMjE3LjM1IDIuMTYsMi41NCA0LjExLDUuMjYgNC45NCw5Ljc4IC0xOC4wMiwtNC43MSAtMzYuMDQsLTkuMzYgLTU0LjA0LC0xNC4xMyAtNzQuNzYsLTE5LjgxIC0xNDkuNTQsLTM5LjU2IC0yMjQuMjMsLTU5LjY0IC02Ljk3LC0xLjg3IC0xMC4xMywwLjE3IC0xMy41OSw1Ljk0IC00Mi40NSw3MC45MSAtODUuMTQsMTQxLjY3IC0xMjcuNzgsMjEyLjQ2IC0yLjIxLDMuNjggLTQuNTgsNy4yNSAtOS4yNywxMC4zNCAtMy40MywtMTguODkgLTYuOTIsLTM3Ljc3IC0xMC4yOCwtNTYuNjcgLTExLjg4LC02Ni43MiAtMjMuNzIsLTEzMy40NiAtMzUuNTYsLTIwMC4xOSAtMS4yOSwtNy4yIC0zLjA3LC0xNC4zNyAtMy42OCwtMjEuNjMgLTAuNiwtNi44OSAtNC4xMywtOS40MyAtMTAuMzYsLTExLjM5IC04OC4xMSwtMjcuNjYgLTE3Ni4xMywtNTUuNTkgLTI2NC4xNSwtODMuNDkgLTMuODcsLTEuMjIgLTcuNjQsLTIuOCAtMTEuNzksLTYuNTcgNzIuMDEsLTI4LjYyIDE0NC4wMiwtNTcuMjM3IDIxNy4xNCwtODYuMjk1IC0yLjY2LC0yLjExMyAtNC4zOSwtMy43MzggLTYuMzQsLTUuMDA4IC00NS4wMiwtMjkuMTI5IC05MC4xMSwtNTguMTQxIC0xMzUuMDIsLTg3LjQyMiAtNS4zNywtMy41IC05LjY0LC0zLjk5NiAtMTUuNjgsLTEuMjc3IC01My43NywyNC4yMTUgLTEwNy43NSw0Ny45NzIgLTE2MS42LDcyLjAyMyAtMjQuMTgsMTAuNzk3IC00NS45MywyNS4xNDEgLTYyLjg3LDQ1Ljg1NiAtMzguMjksNDYuODQzIC0zMC43MywxMDAuMTMzIDIwLjI5LDEzMi42ODMgMTYuNywxMC42NSAzNS42NSwxOC42NCA1NC41NiwyNC44MSA4Ni4yOSwyOC4xMSAxNzIuOTEsNTUuMjIgMjU5LjQ5LDgyLjQyIDcuMjUsMi4yNyAxMC42Miw1LjUyIDExLjk3LDEzLjM4IDExLjUzLDY2Ljc5IDIzLjUsMTMzLjUxIDM1LjUzLDIwMC4yIDYuNDQsMzUuNjYgOS44Niw3Mi4yNCAyNy4yMiwxMDQuOTIgNi42NiwxMi41NiAxNC42NSwyNC44NyAyNC4xNSwzNS40IDM0LjM2LDM4LjE0IDgyLjMzLDM5LjYyIDExOC42NywzLjI4IDEyLjI2LC0xMi4yNiAyMi44MSwtMjYuNzMgMzEuOTIsLTQxLjU3IDQwLjA0LC02NS4yNyA3OS40MiwtMTMwLjk2IDExOC41OSwtMTk2Ljc2IDQuNjMsLTcuNzggOC44MSwtOS4zNSAxNy4zOCwtNy4wNSA5Ni41NCwyNS44OCAxOTMuMTgsNTEuMzYgMjg5LjgyLDc2Ljg5IDE5LjkzLDUuMjYgNDAuMDksNy4yIDYwLjU1LDMuMzcgNDQuNTQsLTguMzQgNjQuMDEsLTQyLjI1IDQ4Ljk0LC04NS4yNyAtNi44NiwtMTkuNjEgLTE4LjY5LC0zNi4xNiAtMzIsLTUxLjggLTY3LjQzLC03OS4zIC0xMzQuNzUsLTE1OC42OSAtMjAyLjQxLC0yMzcuNzkgLTUuNTMsLTYuNDYgLTUuNjUsLTExLjE0IC0xLjgyLC0xOC4zNiA0MC4zNiwtNzYuMDc3IDgwLjM3LC0xNTIuMzM5IDEyMC41MywtMjI4LjUyNyA5LjYxLC0xOC4yNDIgMTYuOTQsLTM3LjE2IDE3LjE2LC01OC4xMDEgMC40OCwtNDcuNjI5IC0zNC4zNSwtODYuNjA2IC04MS42OCwtOTMuNTQzIC0yNi41MSwtMy44OTUgLTUxLjE0LDEuNzY5IC03NS45OCw5LjQ0MSAtNjAuNTMsMTguNzExIC0xMjEuMTcsMzcuMTEgLTE4MS44NCw1NS4zNTYgLTUuNjIsMS42ODMgLTcuNzcsMy44ODIgLTguNzYsOS45NDEgLTYuOTgsNDIuNjk1IC0xNC41OSw4NS4yOTcgLTIxLjk1LDEyNy45MzQgLTAuMjEsMS4xNzIgMC4xNCwyLjQzNyAwLjMyLDUuMDQ3IDY5LjA3LC0xOS4wNTUgMTM3LjU0LC0zNy45NDIgMjA4LjgzLC01Ny42MSIvPjxwYXRoIGlkPSJwYXRoNDE2OSIgc3R5bGU9ImZpbGw6IzNjM2EzZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZSIgZD0ibSAyNzIyLjIsMTc4LjIzIGMgLTU0LjU5LDAuMDk4IC0xMDkuMTgsMC4zNDggLTE2My43OCwwLjEyOSAtNy4yLC0wLjAxOSAtMTEuMjksMi4wODIgLTE1LjMxLDguMjExIC02NC42Myw5OC40NDIgLTEyOS41NSwxOTYuNjkyIC0xOTQuNDIsMjk0Ljk4MSAtMi4wNywzLjEyOSAtNC4yNyw2LjE0OCAtNy45NCwxMS40MSAtMTMuOTcsLTEwNi4xNiAtMjcuNjIsLTIwOS45NDkgLTQxLjMsLTMxNCAtNDcuNzcsMCAtOTQuNTksMCAtMTQyLjk2LDAgMS42NywxMy45MyAzLjE0LDI3LjM5MSA0LjksNDAuODAxIDEzLjk2LDEwNi41OSAyNy45NywyMTMuMTc5IDQxLjk4LDMxOS43NTggMTMuMzgsMTAxLjgzOSAyNi43MiwyMDMuNjc5IDQwLjMsMzA1LjUgMC40LDMuMDM5IDIuNDIsNi44NzUgNC45LDguNDg4IDQ5LjE5LDMyLjA3NCA5OC41NSw2My44NzEgMTQ3LjkxLDk1LjY5MSAwLjcyLDAuNDY5IDEuNzIsMC41MjQgNC4yNywxLjI0NiAtMTQuOTMsLTExMy44NzEgLTI5Ljc1LC0yMjYuODUxIC00NC41NywtMzM5LjgzNiAwLjU5LC0wLjM5OCAxLjE3LC0wLjggMS43NiwtMS4yMTEgNzcuNDQsODUuODQ0IDE1NC44OSwxNzEuNjg4IDIzNCwyNTkuMzcyIDIuMjksLTEzLjIgNC4yNywtMjQuNDk3IDYuMjEsLTM1LjgwMSA1LjU1LC0zMi4zNjcgMTAuODcsLTY0Ljc4MSAxNi44MSwtOTcuMDgyIDEuMiwtNi41MDggLTAuNTMsLTEwLjU1OSAtNC44NywtMTUuMDg2IC01MC4wOCwtNTIuNDEgLTk5Ljk3LC0xMDUgLTE0OS45LC0xNTcuNTM5IC0yLjE4LC0yLjI5MyAtNC4yNywtNC42NzIgLTYuNzUsLTcuMzkxIDEuNTksLTIuNTUxIDIuOTUsLTUgNC41NiwtNy4yNjkgODYuMTMsLTEyMC44OTEgMTcyLjI2LC0yNDEuNzYyIDI1OC40NiwtMzYyLjYwMiAxLjU2LC0yLjE5MSAzLjgxLC0zLjkxIDUuNzQsLTUuODUyIDAsLTAuNjM2IDAsLTEuMjc3IDAsLTEuOTE4Ii8+PHBhdGggaWQ9InBhdGg0MTcxIiBzdHlsZT0iZmlsbDojM2MzYTNlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIiBkPSJtIDEwMjcuNjQsNDkyLjQ4OCBjIC0yLjE4LDExLjE0MSAtMy43NCwyNy41IC04LjY5LDQyLjc4MiAtMjMuOTM4LDczLjg3MSAtOTkuNzM1LDExNC4zNzggLTE3OC4xODgsOTYuMTE3IC04Ni4wNjMsLTIwLjAyOCAtMTQ3LjU2NywtODcuNjg4IC0xNTYuNDY1LC0xNzUuNTA4IC02LjU4NiwtNjQuOTU3IDI4LjM5NCwtMTI3LjUzOSA5My40MzMsLTE1MS4wMjcgNTIuMzk5LC0xOC45MyAxMDIuODQ4LC0xMS4wMTIgMTQ5LjY4OCwxNy4wNzggNjIuMDg2LDM3LjI1IDk1Ljc2Miw5Mi41NSAxMDAuMjIyLDE3MC41NTggeiBNIDY0OS43MDMsMjE3LjkyMiBDIDY0NS40NTcsMTg2LjE0MSA2NDEuNDA2LDE1Ni4xOTEgNjM3LjQ2NSwxMjYuMjE5IDYzMi4yMyw4Ni4zNzg5IDYyNy4wMDgsNDYuNTMxMyA2MjEuOTkyLDYuNjcxODggNjIxLjQwNiwyLjAxOTUzIDYxOS45OTYsLTAuMDMxMjUgNjE1LDAgNTc1LjczLDAuMTYwMTU2IDUzNi40NjEsMC4xMjEwOTQgNDk3LjE5NSwwLjE3OTY4OCBjIC0wLjg5NCwwIC0xLjc4OSwwLjQ5MjE4NyAtMy45MTgsMS4wODk4NDIgMi4zNzUsMTguODA4NTcgNC42ODQsMzcuNjcxODcgNy4xNTMsNTYuNTE5NTcgOC42NjQsNjYuMDgxOSAxNy4zMDgsMTMyLjE3MTkgMjYuMTAxLDE5OC4yNDE5IDEwLjA1NSw3NS41NDcgMTguMDIsMTUxLjQ1NyAzMC44OTUsMjI2LjUyIDIyLjgwNCwxMzIuOTE0IDEzNS41NjIsMjQ3LjQ1NyAyNjcuODc5LDI3NS45NzYgNzYuNzExLDE2LjU0NyAxNTAuMTI1LDguODkxIDIxNy4wOTUsLTM0LjI3MyA2Ni43OSwtNDMuMDQ3IDEwNS4xLC0xMDUuNTE2IDExMy44MywtMTg0LjA5NCAxMi4zNSwtMTExLjEwMSAtMjguNTQsLTIwMy4zMzIgLTEwNy40NiwtMjc5LjYyOSAtNTEuNzkzLC01MC4wOSAtMTEzLjgwNSwtODEuOTIyIC0xODUuMzMyLC05Mi42NzkgLTczLjY4NCwtMTEuMTE0IC0xNDIuOTQ2LDEuMTc5IC0yMDUuMTAyLDQ0LjYxNyAtMi4yODUsMS41OSAtNC43MjMsMi45OCAtOC42MzMsNS40NTMiLz48cGF0aCBpZD0icGF0aDQxNzMiIHN0eWxlPSJmaWxsOiMzYzNhM2U7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiIGQ9Im0gNTg1LjcxMSw4NDkuNTEyIGMgLTQ0LjAzOSwtMzIuNzg1IC04Ni40OTYsLTY0LjM4NyAtMTI5LjEzNywtOTYuMTI5IC02Ljg3MSwxMC44NDQgLTEzLjAyNywyMS42NDQgLTIwLjIxNSwzMS42OTUgLTE4LjUsMjUuODUyIC00MS40NzYsNDUuMTY4IC03NC44OTQsNDcuNTEyIC0yNy43OTMsMS45NDkgLTUxLjU2MywtNy4yMDcgLTcwLjQ4MSwtMjcuNjk5IC0xNi45MjEsLTE4LjMyNSAtMTkuMTMyLC00NC4zNzkgLTMuMzIsLTY1LjA3NSAxNy40MDYsLTIyLjc4MSAzNi40NTcsLTQ0LjM5NCA1NS45MSwtNjUuNDg0IDMyLjI0NiwtMzQuOTYxIDY1Ljk1MywtNjguNTgyIDk3Ljk5MiwtMTAzLjczIDI5LjE1MywtMzEuOTczIDUyLjM5MSwtNjcuODUyIDU5LjU2NywtMTExLjU3MSA4LjUzNSwtNTEuOTcyIC0xLjgzMiwtMTAxLjQ3MiAtMjYuNDE4LC0xNDcuMTUyIC00NS40OTYsLTg0LjUyNyAtMTE3LjE0MSwtMTMzLjU3IC0yMTEuNzIzLC0xNDguOTE4IC00MS43NjksLTYuNzcgLTgzLjQyNiwtNS40MjIgLTEyNC4xODMsNi41NzggQyA4NC43MTg4LDE4NS40NjEgNDcuMDcwMywyMjAuOTEgMjIuODU5NCwyNzAuOTY5IDE0LjMwNDcsMjg4LjY2OCA3Ljc2MTcyLDMwNy4zNCAwLDMyNi4zMDkgYyA0Ny4zNTU1LDI1LjMzOSA5My4zNTU1LDQ5Ljk2MSAxNDAuMDMxLDc0Ljk0MSAxLjYyOSwtMy44OTEgMi43NjYsLTcuMTI5IDQuMjg1LC0xMC4xNiA3Ljk1NywtMTUuOTMgMTQuNDczLC0zMi44NTIgMjQuMzMyLC00Ny41MTIgMjkuMjM1LC00My40NjkgNzYuNDU3LC01Ni42OTkgMTI0LjM2NCwtMzUuMjA3IDEyLjMwNCw1LjUyIDI0LjE1NiwxMy4zMDkgMzQuMjUsMjIuMjU4IDMwLjg3MSwyNy40MDIgMzYuNjYsNjUuNTUxIDEzLjgwOCwxMDAuMDMxIC0xMy4xMjksMTkuODA5IC0yOS41NSwzNy41NyAtNDUuNTM1LDU1LjMyIC0zOC4yMDMsNDIuNDMgLTc3Ljk2MSw4My41IC0xMTUuMjgxLDEyNi42OTIgLTI1LjcyNywyOS43NjkgLTQzLjIwNyw2NC40ODggLTQ4LjczOCwxMDQuMzYzIC02LjA0Myw0My41MzUgMi42NjQsODQuNjE3IDI1LjMyLDEyMS4yNyA1Ni4zMjQsOTEuMTA1IDEzOC4xNzIsMTM4LjUgMjQ2LjQzLDEzNC41NzQgNjEuNzE4LC0yLjIzOCAxMTAuODYzLC0zMS4wOTggMTQ5LjAxMSwtNzkuMDUxIDExLjI4OSwtMTQuMTgzIDIxLjg2OCwtMjguOTMzIDMzLjQzNCwtNDQuMzE2Ii8+PHBhdGggaWQ9InBhdGg0MTc1IiBzdHlsZT0iZmlsbDojM2MzYTNlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lIiBkPSJtIDE2MzEuNDQsMzYwLjM5OCBjIC03LjE4LC01NC44NzggLTEzLjk1LC0xMDcuMDM5IC0yMC45OSwtMTU5LjE2IC0wLjM2LC0yLjYzNiAtMi40MywtNi4yMjYgLTQuNjgsLTcuMjc3IC0xMDYuNTYsLTQ5LjM1MiAtMjQ2Ljg4LC00Mi40NjEgLTMzNC4zOSw1Ni45MTggLTQ3LjAyLDUzLjM5MSAtNjYuNzUsMTE2Ljc2MiAtNjMuOCwxODcuMjYyIDYuODIsMTYzLjE5OSAxNDIuMTMsMzA1LjY2OCAzMDMuOTQsMzI1LjU3NCA5NC41NCwxMS42MzMgMTc3LjQ1LC0xMy45MDIgMjQxLjUsLTg3LjM0IDQzLjYyLC01MC4wMzEgNjMuOCwtMTA5Ljc3MyA2MC44MiwtMTc1LjcwMyAtMS45NiwtNDMuNTUxIC04Ljc5LC04Ni45MSAtMTQuMjEsLTEzMC4yNjIgLTcuNjgsLTYxLjM5OCAtMTYuMDcsLTEyMi43MTkgLTI0LjE4LC0xODQuMDcgLTAuMjksLTIuMTggLTAuNzMsLTQuMzQgLTEuMjIsLTcuMTEgLTQyLjE5LDAgLTg0LjEzLDAgLTEyNy40OCwwIDEuNywxNC4wOTggMy4yNSwyNy44OTkgNS4wNCw0MS42NjggOS4yMyw3MC44NjQgMTkuMzgsMTQxLjYxNCAyNy40NywyMTIuNjAyIDUuMDQsNDQuMjExIDEuODcsODguMDkgLTE4LjM1LDEyOS4wMzkgLTIxLjUxLDQzLjUyIC01Ny41Nyw2Ni41MzkgLTEwNSw3MS41NyAtOTguMTYsMTAuMzkxIC0xOTEuNTUsLTU3LjgyIC0yMTIuNDksLTE1NC40MTggLTEzLjgzLC02My43NjkgNy45NywtMTI0Ljg5IDU4Ljc1LC0xNTguNjc5IDQ5LjUsLTMyLjkzNCAxMDIuNTEsLTMzLjA0MyAxNTYuNDUsLTExLjY4NCAyNy4zNSwxMC44MiA1MC42NSwyNy45NTMgNzIuODIsNTEuMDciLz48cGF0aCBpZD0icGF0aDQxNzciIHN0eWxlPSJmaWxsOiMzYzNhM2U7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiIGQ9Im0gMjE2OC4yMyw3NTEuMzI0IGMgLTUuODIsLTQ0LjE5OSAtMTEuNTUsLTg3LjczOCAtMTcuNDEsLTEzMi4xNzkgLTI2Ljk1LDAgLTUzLjM4LDAuMTU2IC03OS44LC0wLjA1NSAtMjEuNDEsLTAuMTY4IC00MC45NSwtMTMuOTg4IC00Ny4zOCwtMzMuOTgxIC0yLjUyLC03LjgyIC0zLjQ1LC0xNi4xODcgLTQuNTMsLTI0LjM5IC0xMy40MSwtMTAxLjQ4OSAtMjYuNzIsLTIwMi45ODEgLTQwLjAzLC0zMDQuNDgxIC0zLjM2LC0yNS41OSAtNi42MywtNTEuMTk5IC05Ljk5LC03Ny4xNzkgLTQ0LjIyLDAgLTg3LjgxLDAgLTEzMi42OSwwIDIuNDgsMTkuNTE5IDQuODIsMzguNDAyIDcuMjksNTcuMjYxIDguNjMsNjUuNzgyIDE3LjI2LDEzMS41MzkgMjYsMTk3LjI4OSA3LjU1LDU2LjkwMyAxNC4yOCwxMTMuOTMgMjMuMTcsMTcwLjYyMSAxMS45Miw3NS45OTcgODcuNTMsMTQzLjQ4NSAxNjQuMjIsMTQ2LjgyMSAzNi41OSwxLjU5IDczLjMxLDAuMjczIDExMS4xNSwwLjI3MyIvPjxwYXRoIGlkPSJwYXRoNDE3OSIgc3R5bGU9ImZpbGw6IzNjM2EzZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAyODc4LjYzLDE3OS4wNTkgMCw1Ni4wMTEgLTAuMzIsMCAtMjEuOTgsLTU2LjAxMSAtNy4wMSwwIC0yMS45OCw1Ni4wMTEgLTAuMzMsMCAwLC01Ni4wMTEgLTExLjA3LDAgMCw2Ny4wODkgMTcuMDksMCAyMC4wMywtNTAuOTY4IDE5LjcxLDUwLjk2OCAxNi45NCwwIDAsLTY3LjA4OSAtMTEuMDgsMCB6IG0gLTk3LjM4LDU4LjEyMSAwLC01OC4xMjEgLTExLjA3LDAgMCw1OC4xMjEgLTIxLjAxLDAgMCw4Ljk2OCA1My4wOSwwIDAsLTguOTY4IC0yMS4wMSwwIi8+PHBhdGggaWQ9InBhdGg0MTgxIiBzdHlsZT0iZmlsbDojM2MzYTNlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDc2My40NTcsOTQzLjcxOSAzMi44OTgsMCAtNy43NTcsNDkuODA4IC0yNS4xNDEsLTQ5LjgwOCB6IG0gMzguMDYzLC0zMi4xOCAtNTQuNzM1LDAgLTE3LjM4NywtMzQuMDU5IC0zOC43NjEsMCA4NS41LDE1OS43MyAzNy4zNjcsMCAyOS4xMTMsLTE1OS43MyAtMzUuOTMzLDAgLTUuMTY0LDM0LjA1OSIvPjxwYXRoIGlkPSJwYXRoNDE4MyIgc3R5bGU9ImZpbGw6IzNjM2EzZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSA5OTcuMzUyLDEwMDUuMDQgLTE5LjUsMCAtNi41NjMsLTM2Ljg3NiAxOS40ODQsMCBjIDExLjc1NywwIDIxLjE1Nyw3LjczOCAyMS4xNTcsMjIuMzEzIDAsOS42MzMgLTUuODksMTQuNTYzIC0xNC41NzgsMTQuNTYzIHogbSAtNDcuMjE1LDMyLjE3IDUxLjIyMywwIGMgMjYuNzgsMCA0NS41NiwtMTUuOTcgNDUuNTYsLTQzLjQ0NCAwLC0zNC41MzYgLTI0LjQzLC01Ny43ODIgLTU5LjE5NywtNTcuNzgyIGwgLTIyLjA3NSwwIC0xMC4zNDcsLTU4LjUwNCAtMzMuMzQsMCAyOC4xNzYsMTU5LjczIi8+PHBhdGggaWQ9InBhdGg0MTg1IiBzdHlsZT0iZmlsbDojM2MzYTNlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDExNjAuMjIsOTQzLjcxOSAzMi45LDAgLTcuNzYsNDkuODA4IC0yNS4xNCwtNDkuODA4IHogbSAzOC4wNiwtMzIuMTggLTU0LjczLDAgLTE3LjM5LC0zNC4wNTkgLTM4Ljc2LDAgODUuNSwxNTkuNzMgMzcuMzYsMCAyOS4xMiwtMTU5LjczIC0zNS45MywwIC01LjE3LDM0LjA1OSIvPjxwYXRoIGlkPSJwYXRoNDE4NyIgc3R5bGU9ImZpbGw6IzNjM2EzZTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIgZD0ibSAxNDE0LjY3LDg4My4xMjUgYyAtMTEuMjcsLTUuMTY0IC0yMy43MSwtOC4yMzQgLTM2LjE3LC04LjIzNCAtNDIuMjcsMCAtNjguODMsMzEuNzIyIC02OC44Myw3MS40MjIgMCw1MC43NDYgNDIuNzUsOTMuNDk3IDkzLjUsOTMuNDk3IDEyLjY4LDAgMjQuMiwtMy4wNSAzMy41OSwtOC4yMiBsIC00LjcsLTM4LjMwMSBjIC03LjA0LDcuNzYxIC0xOC4zMywxMy4xNjEgLTMyLjQyLDEzLjE2MSAtMjkuMTIsMCAtNTQuOTYsLTI2LjMyMSAtNTQuOTYsLTU2Ljg0OCAwLC0yMy4yNSAxNC41NiwtNDEuMzU2IDM3LjU5LC00MS4zNTYgMTQuMSwwIDI3LjcxLDUuNDA2IDM2Ljg3LDEyLjkyMiBsIC00LjQ3LC0zOC4wNDMiLz48cGF0aCBpZD0icGF0aDQxODkiIHN0eWxlPSJmaWxsOiMzYzNhM2U7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIGQ9Im0gMTYxOC41Miw5NDEuODQ4IC02OS41MywwIC0xMS4yOSwtNjQuMzY4IC0zMy4zNCwwIDI4LjE4LDE1OS43MyAzMy4zNiwwIC0xMS4yNywtNjMuMTgzIDY5LjUzLDAgMTEuMjYsNjMuMTgzIDMzLjM2LDAgLTI4LjE3LC0xNTkuNzMgLTMzLjM2LDAgMTEuMjcsNjQuMzY4Ii8+PHBhdGggaWQ9InBhdGg0MTkxIiBzdHlsZT0iZmlsbDojM2MzYTNlO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIiBkPSJtIDE3NDAuODUsODc3LjQ4IDI4LjE3LDE1OS43MyA4OC41NywwIC01LjY0LC0zMi4xNyAtNTUuMjEsMCAtNS42MiwtMzEuMDEzIDUwLjcyLDAgLTUuNjIsLTMyLjE3OSAtNTAuNzUsMCAtNS42NCwtMzIuMTg0IDU1LjIxLDAgLTUuNjQsLTMyLjE4NCAtODguNTUsMCIvPjwvZz48L2c+PC9zdmc+" preserveAspectRatio="none"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-40"><path d="M 1511.63 342 L 1979.21 342" fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1504.88 342 L 1513.88 337.5 L 1511.63 342 L 1513.88 346.5 Z" fill="#000000" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/><path d="M 1985.96 342 L 1976.96 346.5 L 1979.21 342 L 1976.96 337.5 Z" fill="#000000" stroke="#000000" stroke-width="3" stroke-miterlimit="10" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-41"><rect x="1516.27" y="222" width="454.74" height="126.32" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 453px; height: 1px; padding-top: 285px; margin-left: 1517px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 30px">Interactive with Apache Spark <br />through Apache Livy</font></div></div></div></foreignObject><text x="1744" y="289" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Interactive with Apache Spark...</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-42"><rect x="1219.94" y="472" width="303.16" height="78.32" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 301px; height: 1px; padding-top: 511px; margin-left: 1221px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 32px">Java Application</font></div></div></div></foreignObject><text x="1372" y="515" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Java Application</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-43"><rect x="1967.73" y="472" width="303.16" height="78.32" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 301px; height: 1px; padding-top: 511px; margin-left: 1969px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 32px">Apache Spark</font></div></div></div></foreignObject><text x="2119" y="515" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Apache Spark</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-45"><path d="M 1165.74 0.95 L 1229.74 0.95 L 1229.74 64.95 L 1165.74 64.95 Z" fill="#5a30b5" stroke="none" pointer-events="all"/><path d="M 1200.33 7.35 C 1197.25 7.35 1194.74 9.86 1194.74 12.94 C 1194.74 14.2 1195.16 15.36 1195.87 16.3 L 1191.32 22.36 C 1189.45 21.21 1187.24 20.54 1184.89 20.54 C 1178.09 20.54 1172.56 26.07 1172.56 32.86 C 1172.56 39.65 1178.09 45.18 1184.89 45.18 C 1187.12 45.18 1189.21 44.58 1191.02 43.54 L 1195.7 49.63 C 1195 50.56 1194.59 51.71 1194.59 52.96 C 1194.59 56.03 1197.1 58.55 1200.18 58.55 C 1203.26 58.55 1205.77 56.03 1205.77 52.96 C 1205.77 51.38 1205.11 49.96 1204.05 48.94 L 1208.08 41.32 L 1211.58 42.43 C 1211.58 42.5 1211.58 42.58 1211.58 42.65 C 1211.58 45.73 1214.09 48.24 1217.17 48.24 C 1220.24 48.24 1222.76 45.73 1222.76 42.65 C 1222.76 39.58 1220.24 37.06 1217.17 37.06 C 1216.34 37.06 1215.55 37.25 1214.84 37.57 L 1212.45 33.03 L 1215.33 27.6 C 1215.95 27.84 1216.62 27.97 1217.32 27.97 C 1220.4 27.97 1222.91 25.45 1222.91 22.38 C 1222.91 19.3 1220.4 16.79 1217.32 16.79 C 1214.24 16.79 1211.73 19.3 1211.73 22.38 C 1211.73 22.81 1211.78 23.23 1211.88 23.64 L 1208.13 24.79 L 1204.07 17.08 C 1205.2 16.05 1205.92 14.57 1205.92 12.94 C 1205.92 9.86 1203.4 7.35 1200.33 7.35 Z M 1200.33 9.34 C 1202.32 9.34 1203.92 10.94 1203.92 12.94 C 1203.92 14.93 1202.32 16.53 1200.33 16.53 C 1198.33 16.53 1196.73 14.93 1196.73 12.94 C 1196.73 10.94 1198.33 9.34 1200.33 9.34 Z M 1197.35 17.66 C 1198.21 18.21 1199.23 18.53 1200.33 18.53 C 1201.05 18.53 1201.74 18.39 1202.37 18.14 L 1206.18 25.38 L 1196.36 28.39 C 1195.63 26.5 1194.44 24.84 1192.93 23.54 Z M 1217.32 18.78 C 1219.32 18.78 1220.91 20.38 1220.91 22.38 C 1220.91 24.37 1219.32 25.97 1217.32 25.97 C 1215.32 25.97 1213.73 24.37 1213.73 22.38 C 1213.73 20.38 1215.32 18.78 1217.32 18.78 Z M 1184.89 22.54 C 1190.6 22.54 1195.21 27.15 1195.21 32.86 C 1195.21 38.57 1190.6 43.19 1184.89 43.19 C 1179.17 43.19 1174.56 38.57 1174.56 32.86 C 1174.56 27.15 1179.17 22.54 1184.89 22.54 Z M 1212.68 25.48 C 1212.94 25.88 1213.26 26.24 1213.62 26.56 L 1211.33 30.89 L 1209.07 26.59 Z M 1207.13 27.18 L 1210.2 33.03 L 1207.09 38.91 L 1196.88 35.68 C 1197.09 34.78 1197.21 33.83 1197.21 32.86 C 1197.21 31.98 1197.11 31.13 1196.94 30.3 Z M 1183.92 27.83 L 1183.92 31.96 L 1179.83 31.96 L 1179.83 33.96 L 1183.92 33.96 L 1183.92 38.14 L 1185.92 38.14 L 1185.92 33.96 L 1190.08 33.96 L 1190.08 31.96 L 1185.92 31.96 L 1185.92 27.83 Z M 1211.32 35.17 L 1213.19 38.73 C 1212.7 39.23 1212.3 39.82 1212.02 40.48 L 1209.02 39.53 Z M 1196.27 37.58 L 1206.14 40.71 L 1202.38 47.82 C 1201.71 47.53 1200.96 47.37 1200.18 47.37 C 1199.07 47.37 1198.04 47.69 1197.17 48.26 L 1192.67 42.4 C 1194.23 41.13 1195.48 39.47 1196.27 37.58 Z M 1217.17 39.06 C 1219.17 39.06 1220.76 40.65 1220.76 42.65 C 1220.76 44.65 1219.17 46.24 1217.17 46.24 C 1215.17 46.24 1213.58 44.65 1213.58 42.65 C 1213.58 40.65 1215.17 39.06 1217.17 39.06 Z M 1200.18 49.36 C 1202.18 49.36 1203.77 50.96 1203.77 52.96 C 1203.77 54.95 1202.18 56.55 1200.18 56.55 C 1198.18 56.55 1196.59 54.95 1196.59 52.96 C 1196.59 50.96 1198.18 49.36 1200.18 49.36 Z" fill="#ffffff" stroke="none" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-46"><rect x="1245.21" y="13.5" width="277.89" height="40" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 276px; height: 1px; padding-top: 21px; margin-left: 1247px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="font-family: &quot;helvetica&quot; ; font-style: normal ; font-weight: normal ; letter-spacing: normal ; text-indent: 0px ; text-transform: none ; word-spacing: 0px ; background-color: rgb(248 , 249 , 250) ; text-decoration: none ; display: inline ; float: none"><font color="#5a30b5" style="font-size: 32px">Amazon EMR</font></span></div></div></div></foreignObject><text x="1247" y="33" fill="#000000" font-family="Helvetica" font-size="12px">Amazon EMR</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-47"><rect x="1271.52" y="119" width="309.48" height="43" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 307px; height: 1px; padding-top: 126px; margin-left: 1274px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="color: rgb(216 , 102 , 19) ; font-family: &quot;helvetica&quot; ; font-style: normal ; font-weight: normal ; letter-spacing: normal ; text-align: left ; text-indent: 0px ; text-transform: none ; word-spacing: 0px ; background-color: rgb(248 , 249 , 250) ; text-decoration: none ; display: inline ; float: none"><font style="font-size: 32px">Master Instance</font></span></div></div></div></foreignObject><text x="1274" y="134" fill="#000000" font-family="Helvetica" font-size="8px">Master Instance</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-49"><rect x="1191" y="102" width="64" height="64" fill="#d86613" stroke="#d86613" stroke-width="3" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-50"><rect x="1199" y="110" width="48" height="48" fill="none" stroke="none" pointer-events="all"/><path d="M 1209.21 110 L 1209.21 114.69 L 1203.69 114.69 L 1203.69 120.45 L 1199 120.45 L 1199 122.45 L 1203.69 122.45 L 1203.69 126.72 L 1199 126.72 L 1199 128.72 L 1203.69 128.72 L 1203.69 133 L 1199 133 L 1199 135 L 1203.69 135 L 1203.69 139.28 L 1199 139.28 L 1199 141.28 L 1203.69 141.28 L 1203.69 145.55 L 1199 145.55 L 1199 147.55 L 1203.69 147.55 L 1203.69 153.31 L 1209.21 153.31 L 1209.21 158 L 1211.21 158 L 1211.21 153.31 L 1215.48 153.31 L 1215.48 158 L 1217.48 158 L 1217.48 153.31 L 1221.76 153.31 L 1221.76 158 L 1223.76 158 L 1223.76 153.31 L 1228.04 153.31 L 1228.04 158 L 1230.04 158 L 1230.04 153.31 L 1234.32 153.31 L 1234.32 158 L 1236.32 158 L 1236.32 153.31 L 1242.31 153.31 L 1242.31 147.55 L 1247 147.55 L 1247 145.55 L 1242.31 145.55 L 1242.31 141.28 L 1247 141.28 L 1247 139.28 L 1242.31 139.28 L 1242.31 135 L 1247 135 L 1247 133 L 1242.31 133 L 1242.31 128.72 L 1247 128.72 L 1247 126.72 L 1242.31 126.72 L 1242.31 122.45 L 1247 122.45 L 1247 120.45 L 1242.31 120.45 L 1242.31 114.69 L 1236.32 114.69 L 1236.32 110 L 1234.32 110 L 1234.32 114.69 L 1230.04 114.69 L 1230.04 110 L 1228.04 110 L 1228.04 114.69 L 1223.76 114.69 L 1223.76 110 L 1221.76 110 L 1221.76 114.69 L 1217.48 114.69 L 1217.48 110 L 1215.48 110 L 1215.48 114.69 L 1211.21 114.69 L 1211.21 110 Z M 1205.69 116.69 L 1240.31 116.69 L 1240.31 151.31 L 1205.69 151.31 Z" fill="#ffffff" stroke="none" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-51"><rect x="2429.95" y="112.5" width="291.05" height="43" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 289px; height: 1px; padding-top: 120px; margin-left: 2432px;"><div style="box-sizing: border-box; font-size: 0; text-align: left; "><div style="display: inline-block; font-size: 8px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="color: rgb(216 , 102 , 19) ; font-family: &quot;helvetica&quot; ; font-style: normal ; font-weight: normal ; letter-spacing: normal ; text-align: left ; text-indent: 0px ; text-transform: none ; word-spacing: 0px ; background-color: rgb(248 , 249 , 250) ; text-decoration: none ; display: inline ; float: none"><font style="font-size: 32px">Core Instances</font></span></div></div></div></foreignObject><text x="2432" y="128" fill="#000000" font-family="Helvetica" font-size="8px">Core Instances</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-53"><rect x="2706.79" y="304.1" width="50.53" height="75.79" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 49px; height: 1px; padding-top: 311px; margin-left: 2708px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><span style="color: rgb(0 , 0 , 0) ; font-family: &quot;helvetica&quot; ; font-style: normal ; font-weight: normal ; letter-spacing: normal ; text-indent: 0px ; text-transform: none ; word-spacing: 0px ; background-color: rgb(248 , 249 , 250) ; text-decoration: none ; display: inline ; float: none"><font style="font-size: 32px">...</font></span></div></div></div></foreignObject><text x="2732" y="323" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">...</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-54"><rect x="2403.63" y="199.37" width="260" height="260" fill="none" stroke="none" pointer-events="all"/><path d="M 2458.94 199.37 L 2458.94 224.77 L 2429.03 224.77 L 2429.03 255.97 L 2403.63 255.97 L 2403.63 266.8 L 2429.03 266.8 L 2429.03 289.94 L 2403.63 289.94 L 2403.63 300.78 L 2429.03 300.78 L 2429.03 323.96 L 2403.63 323.96 L 2403.63 334.79 L 2429.03 334.79 L 2429.03 357.97 L 2403.63 357.97 L 2403.63 368.8 L 2429.03 368.8 L 2429.03 391.94 L 2403.63 391.94 L 2403.63 402.77 L 2429.03 402.77 L 2429.03 433.97 L 2458.94 433.97 L 2458.94 459.37 L 2469.77 459.37 L 2469.77 433.97 L 2492.9 433.97 L 2492.9 459.37 L 2503.73 459.37 L 2503.73 433.97 L 2526.91 433.97 L 2526.91 459.37 L 2537.75 459.37 L 2537.75 433.97 L 2560.92 433.97 L 2560.92 459.37 L 2571.76 459.37 L 2571.76 433.97 L 2594.95 433.97 L 2594.95 459.37 L 2605.78 459.37 L 2605.78 433.97 L 2638.23 433.97 L 2638.23 402.77 L 2663.63 402.77 L 2663.63 391.94 L 2638.23 391.94 L 2638.23 368.8 L 2663.63 368.8 L 2663.63 357.97 L 2638.23 357.97 L 2638.23 334.79 L 2663.63 334.79 L 2663.63 323.96 L 2638.23 323.96 L 2638.23 300.78 L 2663.63 300.78 L 2663.63 289.94 L 2638.23 289.94 L 2638.23 266.8 L 2663.63 266.8 L 2663.63 255.97 L 2638.23 255.97 L 2638.23 224.77 L 2605.78 224.77 L 2605.78 199.37 L 2594.95 199.37 L 2594.95 224.77 L 2571.76 224.77 L 2571.76 199.37 L 2560.92 199.37 L 2560.92 224.77 L 2537.75 224.77 L 2537.75 199.37 L 2526.91 199.37 L 2526.91 224.77 L 2503.73 224.77 L 2503.73 199.37 L 2492.9 199.37 L 2492.9 224.77 L 2469.77 224.77 L 2469.77 199.37 Z M 2439.86 235.6 L 2627.4 235.6 L 2627.4 423.14 L 2439.86 423.14 Z" fill="#d86613" stroke="none" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-55"><rect x="2378.37" y="454.42" width="303.16" height="78.32" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 301px; height: 1px; padding-top: 494px; margin-left: 2379px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 32px">Instance 1</font></div></div></div></foreignObject><text x="2530" y="497" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Instance 1</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-56"><rect x="2811" y="198.1" width="260" height="260" fill="none" stroke="none" pointer-events="all"/><path d="M 2866.31 198.1 L 2866.31 223.5 L 2836.4 223.5 L 2836.4 254.7 L 2811 254.7 L 2811 265.53 L 2836.4 265.53 L 2836.4 288.67 L 2811 288.67 L 2811 299.51 L 2836.4 299.51 L 2836.4 322.69 L 2811 322.69 L 2811 333.52 L 2836.4 333.52 L 2836.4 356.7 L 2811 356.7 L 2811 367.53 L 2836.4 367.53 L 2836.4 390.67 L 2811 390.67 L 2811 401.5 L 2836.4 401.5 L 2836.4 432.7 L 2866.31 432.7 L 2866.31 458.1 L 2877.14 458.1 L 2877.14 432.7 L 2900.27 432.7 L 2900.27 458.1 L 2911.1 458.1 L 2911.1 432.7 L 2934.28 432.7 L 2934.28 458.1 L 2945.12 458.1 L 2945.12 432.7 L 2968.29 432.7 L 2968.29 458.1 L 2979.13 458.1 L 2979.13 432.7 L 3002.32 432.7 L 3002.32 458.1 L 3013.15 458.1 L 3013.15 432.7 L 3045.6 432.7 L 3045.6 401.5 L 3071 401.5 L 3071 390.67 L 3045.6 390.67 L 3045.6 367.53 L 3071 367.53 L 3071 356.7 L 3045.6 356.7 L 3045.6 333.52 L 3071 333.52 L 3071 322.69 L 3045.6 322.69 L 3045.6 299.51 L 3071 299.51 L 3071 288.67 L 3045.6 288.67 L 3045.6 265.53 L 3071 265.53 L 3071 254.7 L 3045.6 254.7 L 3045.6 223.5 L 3013.15 223.5 L 3013.15 198.1 L 3002.32 198.1 L 3002.32 223.5 L 2979.13 223.5 L 2979.13 198.1 L 2968.29 198.1 L 2968.29 223.5 L 2945.12 223.5 L 2945.12 198.1 L 2934.28 198.1 L 2934.28 223.5 L 2911.1 223.5 L 2911.1 198.1 L 2900.27 198.1 L 2900.27 223.5 L 2877.14 223.5 L 2877.14 198.1 Z M 2847.23 234.33 L 3034.77 234.33 L 3034.77 421.87 L 2847.23 421.87 Z" fill="#d86613" stroke="none" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-57"><rect x="2782.58" y="454.42" width="303.16" height="78.32" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 301px; height: 1px; padding-top: 494px; margin-left: 2784px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 32px">Instance N</font></div></div></div></foreignObject><text x="2934" y="497" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Instance N</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-59"><rect x="2353.1" y="102" width="64" height="64" fill="#d86613" stroke="#d86613" stroke-width="3" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-60"><rect x="2361.1" y="110" width="48" height="48" fill="none" stroke="none" pointer-events="all"/><path d="M 2371.31 110 L 2371.31 114.69 L 2365.79 114.69 L 2365.79 120.45 L 2361.1 120.45 L 2361.1 122.45 L 2365.79 122.45 L 2365.79 126.72 L 2361.1 126.72 L 2361.1 128.72 L 2365.79 128.72 L 2365.79 133 L 2361.1 133 L 2361.1 135 L 2365.79 135 L 2365.79 139.28 L 2361.1 139.28 L 2361.1 141.28 L 2365.79 141.28 L 2365.79 145.55 L 2361.1 145.55 L 2361.1 147.55 L 2365.79 147.55 L 2365.79 153.31 L 2371.31 153.31 L 2371.31 158 L 2373.31 158 L 2373.31 153.31 L 2377.58 153.31 L 2377.58 158 L 2379.58 158 L 2379.58 153.31 L 2383.86 153.31 L 2383.86 158 L 2385.86 158 L 2385.86 153.31 L 2390.14 153.31 L 2390.14 158 L 2392.14 158 L 2392.14 153.31 L 2396.42 153.31 L 2396.42 158 L 2398.42 158 L 2398.42 153.31 L 2404.41 153.31 L 2404.41 147.55 L 2409.1 147.55 L 2409.1 145.55 L 2404.41 145.55 L 2404.41 141.28 L 2409.1 141.28 L 2409.1 139.28 L 2404.41 139.28 L 2404.41 135 L 2409.1 135 L 2409.1 133 L 2404.41 133 L 2404.41 128.72 L 2409.1 128.72 L 2409.1 126.72 L 2404.41 126.72 L 2404.41 122.45 L 2409.1 122.45 L 2409.1 120.45 L 2404.41 120.45 L 2404.41 114.69 L 2398.42 114.69 L 2398.42 110 L 2396.42 110 L 2396.42 114.69 L 2392.14 114.69 L 2392.14 110 L 2390.14 110 L 2390.14 114.69 L 2385.86 114.69 L 2385.86 110 L 2383.86 110 L 2383.86 114.69 L 2379.58 114.69 L 2379.58 110 L 2377.58 110 L 2377.58 114.69 L 2373.31 114.69 L 2373.31 110 Z M 2367.79 116.69 L 2402.41 116.69 L 2402.41 151.31 L 2367.79 151.31 Z" fill="#ffffff" stroke="none" pointer-events="all"/></g><g id="cell-Na90MfbzHcX0U7akbqYx-61"><rect x="709.42" y="472" width="303.16" height="78.32" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 301px; height: 1px; padding-top: 511px; margin-left: 710px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 32px">AWS Step Functions</font></div></div></div></foreignObject><text x="861" y="515" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">AWS Step Functions</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-62"><rect x="472.57" y="142" width="260" height="70" fill="none" stroke="none" transform="rotate(-90,602.57,177)" pointer-events="all"/><g transform="translate(-0.5 -0.5)rotate(-90 602.5699999999997 177)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 258px; height: 1px; padding-top: 177px; margin-left: 474px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 30px">Create new activity task</font></div></div></div></foreignObject><text x="603" y="181" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Create new activity task</text></switch></g></g><g id="cell-Na90MfbzHcX0U7akbqYx-63"><rect x="982.06" y="132" width="263.15" height="70" fill="none" stroke="none" transform="rotate(-90,1113.64,167)" pointer-events="all"/><g transform="translate(-0.5 -0.5)rotate(-90 1113.6350000000002 167)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="https://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 261px; height: 1px; padding-top: 167px; margin-left: 983px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><font style="font-size: 30px">Pulls activity tasks</font></div></div></div></foreignObject><text x="1114" y="171" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Pulls activity tasks</text></switch></g></g></g><switch><g requiredFeatures="https://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>
@stepfunctions.svg

The solution include the following steps:

  1. The developer define spark-job activity task in your state machine template using Amazon State Language, which includes Apache Livy host name and Apache Spark parameters (ClassName, NumExecutors, ExecutorCores etc.).
  2. Trigger the AWS Step Function state machine by other external events, like CloudWatch Event or S3 object creation.
  3. AWS Step Function referenced on activity Arn create new activity task and pass Apache Spark parameters as input state.
  4. On Amazon EMR master instance running activity worker that polls activity task and interactive with Apache Spark through Apache Livy based on input state. Every N seconds application synchronize Apache Spark job state and send heartbeat to AWS Step Function.

Following sample demonstrate usage AWS Step Functions custom Apache Spark activity.

{
  "Comment": "Spark ETL State Machine",
  "StartAt": "SparkPi",
  "TimeoutSeconds": 300,
  "States": {
    "SparkPi": {
      "Type": "Task",
      "Resource": "arn:aws:states:us-east-1:123456789012:activity:example.spark-job",
      "Parameters": {
        "LivyHost.$": "$.SparkClusterPublicDNS",
        "LivyPort": 8998,
        "Parameters": {
          "Name": "Spark Pi",
          "ClassName": "org.apache.spark.examples.SparkPi",
          "NumExecutors": 1,
          "DriverMemory": "512m",
          "ExecutorMemory": "512m",
          "ExecutorCores": 1,
          "Args": [
            "10"
          ]
        }
      },
      "End": true
    }  
  }
}

Links

About

Deployment/Orchestration of Apache Spark applications on Amazon EMR.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published