<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-25952682</atom:id><lastBuildDate>Thu, 29 Jan 2026 12:19:40 +0000</lastBuildDate><category>Java</category><category>Google</category><category>Microsoft</category><category>programming</category><category>Yahoo</category><category>Cloud</category><category>Web</category><category>Windows Live</category><category>search</category><category>software</category><category>&quot;Google App Engine&quot;</category><category>&quot;Google Cloud Platform&quot;</category><category>Office</category><category>azure</category><category>Tutorial</category><category>browser</category><category>code</category><category>containers</category><category>javascript</category><category>&quot;Google Cloud Storage&quot;</category><category>ADF</category><category>Big Data</category><category>Database</category><category>Design Patterns</category><category>Docker</category><category>Firefox</category><category>Flickr</category><category>Hadoop</category><category>India</category><category>Threads</category><category>Twitter</category><category>&quot;Google Cloud Datastore&quot;</category><category>Angular JS</category><category>Apache</category><category>Concurrency</category><category>Error</category><category>GCP</category><category>Gmail</category><category>HTML</category><category>IE</category><category>JDeveloper</category><category>JSP</category><category>Java 7</category><category>Linux</category><category>Open Source</category><category>Oracle</category><category>Outlook</category><category>REST</category><category>Testing</category><category>Unix</category><category>YouTube</category><category>azure functions</category><category>chrome</category><category>data lake</category><category>email</category><category>git</category><category>kubernetes</category><category>picasa</category><category>&quot;Big Query&quot;</category><category>&quot;azure data lake analytics&quot;</category><category>&quot;azure data lake storage Gen 2&quot;</category><category>&quot;azure data lake storage&quot;</category><category>365</category><category>AJAX</category><category>AOL</category><category>AP</category><category>API</category><category>Airflow</category><category>Android</category><category>BI</category><category>Beam</category><category>C#</category><category>CI/CD</category><category>Cluster</category><category>Collections</category><category>Computing</category><category>DWR</category><category>Dataflow</category><category>Decorator</category><category>Design</category><category>E-Business Suite</category><category>Energy</category><category>Exception</category><category>GCS</category><category>Garbage Collection</category><category>HDFS</category><category>HTML5</category><category>Heap Dump</category><category>Hyperion</category><category>Jenkins</category><category>Memory Analysis</category><category>Migration</category><category>PL/SQL</category><category>Reliance</category><category>SCM</category><category>SQL</category><category>Shell Scripting</category><category>Sun</category><category>Synchronization</category><category>Tag Library</category><category>Tips</category><category>UTF-8</category><category>Utility</category><category>Vista</category><category>Web Services</category><category>Weblogic</category><category>Windows 8</category><category>Writer</category><category>algorithm</category><category>analytics</category><category>application</category><category>azure logic apps</category><category>bitbucket</category><category>blogger</category><category>blogs</category><category>certification</category><category>coding</category><category>configuration</category><category>contract testing</category><category>cuil</category><category>curl</category><category>data structures</category><category>eclipse</category><category>editing</category><category>encoding</category><category>example</category><category>facebook</category><category>file</category><category>fonts</category><category>frameworks</category><category>glassfish</category><category>gtalk</category><category>inner class</category><category>internals</category><category>istio</category><category>jquery</category><category>mobile</category><category>nokia</category><category>objects</category><category>online</category><category>orkut</category><category>photography</category><category>privacy</category><category>repository</category><category>server</category><category>source control</category><category>spark</category><category>storage</category><category>study</category><category>version</category><category>versioning</category><title>Running Commentary</title><description></description><link>http://opreview.blogspot.com/</link><managingEditor>noreply@blogger.com (Waterfox)</managingEditor><generator>Blogger</generator><openSearch:totalResults>103</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-1876179339268374276</guid><pubDate>Tue, 24 Dec 2024 20:04:00 +0000</pubDate><atom:updated>2024-12-24T12:04:58.585-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">data lake</category><title>A Dive in Data Lake</title><description>&lt;iframe src=&quot;https://docs.google.com/presentation/d/e/2PACX-1vRpMUeSp0wTki5BvMB8LSS-BLbjODFPWeGPSi0RPCnIAtV4bbZrjmLb_R4CXePmSKencxSw7cWIGdIn/embed?start=false&amp;loop=false&amp;delayms=3000&quot; frameborder=&quot;0&quot; width=&quot;960&quot; height=&quot;569&quot; allowfullscreen=&quot;true&quot; mozallowfullscreen=&quot;true&quot; webkitallowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;</description><link>http://opreview.blogspot.com/2024/12/a-dive-in-data-lake.html</link><author>noreply@blogger.com (Waterfox)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-7182052165600156503</guid><pubDate>Wed, 07 Jun 2023 17:59:00 +0000</pubDate><atom:updated>2023-06-07T10:59:27.276-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">contract testing</category><category domain="http://www.blogger.com/atom/ns#">software</category><category domain="http://www.blogger.com/atom/ns#">Testing</category><title>Contract Testing</title><description>&lt;p&gt;&lt;span style=&quot;background-color: white; color: var(--m-bolt-headline); font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-size: var(--bolt-type-font-size-large); font-weight: var(--bolt-type-font-weight-bold);&quot;&gt;Why and what is contract testing?&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: calc(var(--bolt-spacing-y-xsmall) - var(--bolt-spacing-y-medium)); padding: 0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: calc(var(--bolt-spacing-y-xsmall) - var(--bolt-spacing-y-medium)); padding: 0px;&quot;&gt;The distributed nature of microservices, combined with the sheer number that live within an application, make it much harder for developers to perform the integration tests that were a straightforward, routine part of monolithic app development.&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;Contract testing is a technique for&lt;b&gt; testing an integration point by checking each application in&amp;nbsp;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;isolation&lt;/span&gt;&lt;/b&gt;&amp;nbsp;to ensure the messages it sends or receives conform to a shared understanding that is documented in a &quot;contract&quot;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;Consumer-driven contract testing is a type of contract testing that ensures that a provider is compatible with the expectations that the consumer has of it. This involves checking that the provider accepts the expected requests, and that it returns the expected responses.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;Consumer contract testing provides the following benefits:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: 0px; margin-left: var(--bolt-spacing-x-medium); margin-right: 0px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;Contract tests provide a mechanism to explicitly verify that a provider microservice meets a consumer’s contract/needs.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;These HTTP requests and responses are used in the mock HTTP server to mock the service provider. The interactions are then used to generate the contract between a service consumer and a service provider.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;If the provider returns something unexpected, Pact marks the interaction as a failure, and the contract test fails.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;A consumer’s contract test is made available to the provider to verify.&amp;nbsp;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;By testing each side of an integration point using a simulated version of the other microservice, we get two sets of tests, one to define the interaction required and the other (playback) to verify the provider is meeting the needs defined in the consumer contract.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style=&quot;color: #151619; font-family: Open Sans, -apple-system, system-ui, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #151619; font-family: Open Sans, -apple-system, system-ui, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;Contract testing for microservices is not without challenges.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;The main challenge is that you&#39;ll need to run many individual tests to evaluate all microservices within your application. In this sense, contract testing is trickier to orchestrate than end-to-end integration testing. Integration testing only requires one testing environment and one set of tests. Contract testing requires teams to run a long series of tests, each for a different pair of microservices.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;Another major limitation of contract testing revolves around the use of mocks. Although a mock is a reliable way of mimicking microservice behavior without running a microservice, there&#39;s no guarantee that the actual microservice will behave in the same way when in production. Due to the nature of the instances spun up, integration testing isn&#39;t subject to this same limitation.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin-bottom: var(--bolt-spacing-y-medium); margin-left: 0px; margin-right: 0px; margin-top: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background-color: white; box-sizing: border-box; color: #151619; font-family: &amp;quot;Open Sans&amp;quot;, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Fira Sans&amp;quot;, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal; font-size: 16px; margin: 0px; padding: 0px;&quot;&gt;&lt;span style=&quot;-webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); box-sizing: border-box; font-feature-settings: &amp;quot;kern&amp;quot;; font-kerning: normal;&quot;&gt;Finally, teams must be sure to keep contracts up to date. The contract testing process needs to loop in each development team and its members so that they can help to define new contract requirements whenever they make changes to a microservice&#39;s functionality or behavior. Otherwise, tests will become based on contracts that no longer accurately reflect the desired behavior of a microservice.&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><link>http://opreview.blogspot.com/2023/06/contract-testing.html</link><author>noreply@blogger.com (Waterfox)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-8051381621483354834</guid><pubDate>Tue, 14 Jun 2022 04:47:00 +0000</pubDate><atom:updated>2022-06-13T21:49:14.823-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Cloud</category><category domain="http://www.blogger.com/atom/ns#">containers</category><category domain="http://www.blogger.com/atom/ns#">Docker</category><title>A very high level introduction to Docker</title><description>&lt;p&gt;&amp;nbsp;This is the powerpoint presentation I used when giving a session to my team about Docker. Tried to start with fundamental concepts and go up to using Docker Compose.&lt;/p&gt;

&lt;iframe allowfullscreen=&quot;true&quot; frameborder=&quot;0&quot; height=&quot;749&quot; mozallowfullscreen=&quot;true&quot; src=&quot;https://docs.google.com/presentation/d/e/2PACX-1vRavXqzuoYXXyWHy7OxcIUGlRDl_qoQTOAsFe-Y1i86CKQ1ARvL4o7uva1mUBhua-Y1NsF6Ck2ZkRG9/embed?start=false&amp;amp;loop=false&amp;amp;delayms=5000&quot; webkitallowfullscreen=&quot;true&quot; width=&quot;1280&quot;&gt;&lt;/iframe&gt;</description><link>http://opreview.blogspot.com/2022/06/a-very-high-level-introduction-to-docker.html</link><author>noreply@blogger.com (Waterfox)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-7873048698560907768</guid><pubDate>Mon, 17 Jan 2022 04:34:00 +0000</pubDate><atom:updated>2022-01-16T20:34:14.028-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">azure</category><category domain="http://www.blogger.com/atom/ns#">azure functions</category><category domain="http://www.blogger.com/atom/ns#">Java</category><title>Example of Azure Event Trigger Function implemented in Java</title><description>&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Roboto; font-size: medium;&quot;&gt;There are so few examples of Azure Functions implemented in Java and even official documentation is a little confusing, so I decided to write my own post explaining some of the points.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;So here is my function class:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 11.3pt;&quot;&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;public class &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;EventHubTriggerFunction &lt;/span&gt;{&lt;br /&gt;    &lt;span style=&quot;color: #8c8c8c; font-style: italic;&quot;&gt;/**&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #8c8c8c; font-style: italic;&quot;&gt;     * This function will be invoked when an event is received from Event Hub.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #8c8c8c; font-style: italic;&quot;&gt;     */&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #8c8c8c; font-style: italic;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #9e880d;&quot;&gt;@FunctionName&lt;/span&gt;(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;EventHubTrigger-Java&quot;&lt;/span&gt;)&lt;br /&gt;    &lt;span style=&quot;color: #0033b3;&quot;&gt;public void &lt;/span&gt;&lt;span style=&quot;color: #00627a;&quot;&gt;run&lt;/span&gt;(&lt;br /&gt;        &lt;span style=&quot;color: #9e880d;&quot;&gt;@EventHubTrigger&lt;/span&gt;(name = &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;message&quot;&lt;/span&gt;,&lt;br /&gt;            eventHubName = &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;my-event-hubs&quot;&lt;/span&gt;,&lt;br /&gt;            connection = &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;EventHubConnectionString&quot;&lt;/span&gt;,&lt;br /&gt;            consumerGroup = &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;$Default&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #067d17;&quot;&gt;            &lt;/span&gt;) &lt;span style=&quot;color: black;&quot;&gt;String &lt;/span&gt;message,&lt;br /&gt;        &lt;span style=&quot;color: #0033b3;&quot;&gt;final &lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;ExecutionContext &lt;/span&gt;context&lt;br /&gt;    ) {&lt;br /&gt;        context.getLogger().info(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;Java Event Hub trigger function executed.&quot;&lt;/span&gt;);&lt;br /&gt;        context.getLogger().info(&lt;span style=&quot;color: #067d17;&quot;&gt;&quot;Message:&quot; &lt;/span&gt;+ message);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-size: 11.3pt;&quot;&gt;&lt;span style=&quot;color: black; font-size: medium; white-space: normal;&quot;&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;The noteworthy thing in this snippet are the annotation attributes.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-size: 11.3pt;&quot;&gt;&lt;span style=&quot;color: black; font-size: medium; white-space: normal;&quot;&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;&lt;b&gt;name&lt;/b&gt;: Any name that can be given to the trigger.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-size: 11.3pt;&quot;&gt;&lt;span style=&quot;color: black; font-size: medium; white-space: normal;&quot;&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;&lt;b&gt;eventHubName&lt;/b&gt;: Name of the event hubs instance that will be used to receieve messages.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-size: 11.3pt;&quot;&gt;&lt;span style=&quot;color: black; font-size: medium; white-space: normal;&quot;&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;&lt;b&gt;connection&lt;/b&gt;: Name of the property which stores Event Hubs Namespace (not the Event Hubs instance) connection string. What does this mean? It means that we don&#39;t have to give the connection string here, but define the conection string in local.settings.json (when running locally) or in Configuration page in the portal.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-size: 11.3pt;&quot;&gt;&lt;span style=&quot;color: black; font-size: medium; white-space: normal;&quot;&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;Here is the local.settings.json file. &#39;EventHubConnectionString&#39; is the key that has been given in the connection attribute above.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 11.3pt;&quot;&gt;{&lt;br /&gt;  &lt;span style=&quot;color: #871094;&quot;&gt;&quot;IsEncrypted&quot;&lt;/span&gt;: &lt;span style=&quot;color: #0033b3;&quot;&gt;false&lt;/span&gt;,&lt;br /&gt;  &lt;span style=&quot;color: #871094;&quot;&gt;&quot;Values&quot;&lt;/span&gt;: {&lt;br /&gt;    &lt;span style=&quot;color: #871094;&quot;&gt;&quot;AzureWebJobsStorage&quot;&lt;/span&gt;: &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;&quot;&lt;/span&gt;,&lt;br /&gt;    &lt;span style=&quot;color: #871094;&quot;&gt;&quot;FUNCTIONS_WORKER_RUNTIME&quot;&lt;/span&gt;: &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;java&quot;&lt;/span&gt;,&lt;br /&gt;&lt;b&gt;    &lt;span style=&quot;color: #871094;&quot;&gt;&quot;EventHubConnectionString&quot;&lt;/span&gt;: &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;Endpoint=sb://eventhubs.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=accesskeystring&quot;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #067d17;&quot;&gt;  &lt;/span&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 11.3pt;&quot;&gt;}&lt;span style=&quot;color: black; font-family: Times; font-size: medium; white-space: normal;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-size: 11.3pt;&quot;&gt;&lt;span style=&quot;color: black; font-size: medium; white-space: normal;&quot;&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;This same key/value has to be added in the function app configuration on the portal:&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-size: 11.3pt;&quot;&gt;&lt;span style=&quot;color: black; font-size: medium; white-space: normal;&quot;&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; font-family: Times; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7kgLLWCOH8gEW7UYnUMDl0D1zIp_1ikR5_tf3gKKvU73M4GXiapVfiOke4-wEEMikvJIg-sKgPu_s12Ce7lvLdYEdzhb5phX-h9BJAUMs_-8V5VhFGHTIAloQ4XKcnVSvAP6gZg/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;658&quot; data-original-width=&quot;1594&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7kgLLWCOH8gEW7UYnUMDl0D1zIp_1ikR5_tf3gKKvU73M4GXiapVfiOke4-wEEMikvJIg-sKgPu_s12Ce7lvLdYEdzhb5phX-h9BJAUMs_-8V5VhFGHTIAloQ4XKcnVSvAP6gZg/s16000/image.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;By default the EventHub Trigger assumes that the message is in JSON format and it will give following error:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-size: 11.3pt;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Exception while executing function: Functions.EventHubExample. Microsoft.Azure.WebJobs.Host: Exception binding parameter message. &lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white; color: #080808; font-size: 11.3pt;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Microsoft.Azure.WebJobs.Host: Binding parameters to complex objects (such as Object) uses JSON.NET serialization.&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;To get rid of this, either the message should be a valid JSON or we need to specify the &#39;dataType&#39; parameter for the trigger:&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;background-color: white;&quot;&gt;&lt;pre style=&quot;color: #080808; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 11.3pt;&quot;&gt;&lt;span style=&quot;color: #0033b3;&quot;&gt;public void &lt;/span&gt;&lt;span style=&quot;color: #00627a;&quot;&gt;run&lt;/span&gt;(&lt;br /&gt;    &lt;span style=&quot;color: #9e880d;&quot;&gt;@EventHubTrigger&lt;/span&gt;(name = &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;message&quot;&lt;/span&gt;,&lt;br /&gt;        eventHubName = &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;my-event-hubs&quot;&lt;/span&gt;,&lt;br /&gt;        connection = &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;EventHubConnectionString&quot;&lt;/span&gt;,&lt;br /&gt;        consumerGroup = &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;$Default&quot;&lt;/span&gt;,&lt;br /&gt;        &lt;b&gt;dataType = &lt;/b&gt;&lt;span style=&quot;color: #067d17;&quot;&gt;&lt;b&gt;&quot;string&quot;&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #067d17;&quot;&gt;        &lt;/span&gt;) &lt;span style=&quot;color: black;&quot;&gt;String &lt;/span&gt;message&lt;/pre&gt;&lt;pre style=&quot;color: #080808; font-size: 11.3pt;&quot;&gt;&lt;pre style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: Times;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;color: black;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;The behavior of trigger is controlled by certain attributes. The various runtime attributes and their default values are mentioned &lt;a href=&quot;https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-hubs#hostjson-settings&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;. We can override these values in our host.json file:&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;color: black;&quot;&gt;&lt;pre style=&quot;color: #080808; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 11.3pt;&quot;&gt;{&lt;br /&gt;  &lt;span style=&quot;color: #871094;&quot;&gt;&quot;version&quot;&lt;/span&gt;: &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;2.0&quot;&lt;/span&gt;,&lt;br /&gt;  &lt;span style=&quot;color: #871094;&quot;&gt;&quot;extensions&quot;&lt;/span&gt;: {&lt;br /&gt;    &lt;span style=&quot;color: #871094;&quot;&gt;&quot;eventHubs&quot;&lt;/span&gt;: {&lt;br /&gt;      &lt;span style=&quot;color: #871094;&quot;&gt;&quot;batchCheckpointFrequency&quot;&lt;/span&gt;: &lt;span style=&quot;color: #1750eb;&quot;&gt;5&lt;/span&gt;,&lt;br /&gt;      &lt;span style=&quot;color: #871094;&quot;&gt;&quot;eventProcessorOptions&quot;&lt;/span&gt;: {&lt;br /&gt;        &lt;span style=&quot;color: #871094;&quot;&gt;&quot;maxBatchSize&quot;&lt;/span&gt;: &lt;span style=&quot;color: #1750eb;&quot;&gt;1&lt;/span&gt;,&lt;br /&gt;        &lt;span style=&quot;color: #871094;&quot;&gt;&quot;prefetchCount&quot;&lt;/span&gt;: &lt;span style=&quot;color: #1750eb;&quot;&gt;512&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #1750eb;&quot;&gt;      &lt;/span&gt;},&lt;br /&gt;      &lt;span style=&quot;color: #871094;&quot;&gt;&quot;initialOffsetOptions&quot;&lt;/span&gt;: {&lt;br /&gt;        &lt;span style=&quot;color: #871094;&quot;&gt;&quot;type&quot;&lt;/span&gt;: &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;fromStart&quot;&lt;/span&gt;,&lt;br /&gt;        &lt;span style=&quot;color: #871094;&quot;&gt;&quot;enqueuedTimeUtc&quot;&lt;/span&gt;: &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #067d17;&quot;&gt;      &lt;/span&gt;}&lt;br /&gt;    }&lt;br /&gt;  },&lt;br /&gt;  &lt;span style=&quot;color: #871094;&quot;&gt;&quot;extensionBundle&quot;&lt;/span&gt;: {&lt;br /&gt;    &lt;span style=&quot;color: #871094;&quot;&gt;&quot;id&quot;&lt;/span&gt;: &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;Microsoft.Azure.Functions.ExtensionBundle&quot;&lt;/span&gt;,&lt;br /&gt;    &lt;span style=&quot;color: #871094;&quot;&gt;&quot;version&quot;&lt;/span&gt;: &lt;span style=&quot;color: #067d17;&quot;&gt;&quot;[2.*, 3.0.0)&quot;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #067d17;&quot;&gt;  &lt;/span&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;pre style=&quot;color: #080808; font-family: &amp;quot;Droid Sans Mono&amp;quot;, monospace; font-size: 11.3pt;&quot;&gt;&lt;pre style=&quot;color: black; font-size: 15.0667px;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;I think this is all there is to implement and run a simple event hubs trigger function in Java.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style=&quot;color: black; font-size: 15.0667px;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-family: Roboto;&quot;&gt;Source: &lt;a href=&quot;https://github.com/Waterfox83/EventHubTriggerFunction&quot; target=&quot;_blank&quot;&gt;Github&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;</description><link>http://opreview.blogspot.com/2022/01/example-of-azure-event-trigger-function.html</link><author>noreply@blogger.com (Waterfox)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7kgLLWCOH8gEW7UYnUMDl0D1zIp_1ikR5_tf3gKKvU73M4GXiapVfiOke4-wEEMikvJIg-sKgPu_s12Ce7lvLdYEdzhb5phX-h9BJAUMs_-8V5VhFGHTIAloQ4XKcnVSvAP6gZg/s72-c/image.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-4991551542989864447</guid><pubDate>Sun, 05 Dec 2021 18:35:00 +0000</pubDate><atom:updated>2021-12-05T21:20:57.465-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">azure</category><category domain="http://www.blogger.com/atom/ns#">azure functions</category><category domain="http://www.blogger.com/atom/ns#">azure logic apps</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Cloud</category><category domain="http://www.blogger.com/atom/ns#">Java</category><title>How I converted a table in an email to a graph on a website? Hint: Azure Functions and Logic App </title><description>&lt;p&gt;This mini-project started as a necessity.&amp;nbsp;&lt;/p&gt;&lt;p&gt;I get an email like this everyday, which gives daily numbers for different metrics. The problem with such an email is that it is difficult to keep track of or gauge the rate of growth of these metrics. If you want to know how what the previous day&#39;s numbers were you need to go to the previous day&#39;s email.&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi38YlPgrFlIsVYxEJBmgc5aplPNygDfKTZZMxLZo8ssYEeqLmXBpfXszpeJQSqPZDzup9HZAPCwAqLB3yXnPfjKAbGeAm5J20w71rtUR-F0U-hvbe1Ye_xSDkWTidJOqlDDYz2AA/s1568/Screenshot+2021-12-05+at+12.00.04+PM.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1568&quot; data-original-width=&quot;1242&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi38YlPgrFlIsVYxEJBmgc5aplPNygDfKTZZMxLZo8ssYEeqLmXBpfXszpeJQSqPZDzup9HZAPCwAqLB3yXnPfjKAbGeAm5J20w71rtUR-F0U-hvbe1Ye_xSDkWTidJOqlDDYz2AA/s16000/Screenshot+2021-12-05+at+12.00.04+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;The better option any day is to have a graph that shows the values of the metrics every day. Something like this:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLCIuMBb_-1GqnPnEnPe58cmGY6gGwZ1uNaYEXMSEZW4qBCrLpRbWBs5zpXtQ24fqwuylyG9355UIyQzaPFhg0e1utsnWwRdVcz0SawlR1ShnNsmoDC88TLEhdIY4mLckDRpuT8g/s1994/Screenshot+2021-12-05+at+12.09.32+PM.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;808&quot; data-original-width=&quot;1994&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLCIuMBb_-1GqnPnEnPe58cmGY6gGwZ1uNaYEXMSEZW4qBCrLpRbWBs5zpXtQ24fqwuylyG9355UIyQzaPFhg0e1utsnWwRdVcz0SawlR1ShnNsmoDC88TLEhdIY4mLckDRpuT8g/s16000/Screenshot+2021-12-05+at+12.09.32+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;With this goal I set out to make this system but with as less coding and expenses as possible.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First obvious step in the process was to get hold of the email and extract its text. The easiest way to do this is to use Azure Logic App.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is what my logic app looks like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivuPrfm5E9anstw7U1vLjz687NEqdrpIbrhQRDBcKjecp98h7_Jf5N2D1J9QZvHCl0618il4mWk-ZmTCw1exVN87qwFrrhLy7iU1sdXK-B0DPawNkNGajKjMZORz_7jKU3oGXUTQ/s1370/Screenshot+2021-12-05+at+10.57.53+AM.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1370&quot; data-original-width=&quot;1010&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivuPrfm5E9anstw7U1vLjz687NEqdrpIbrhQRDBcKjecp98h7_Jf5N2D1J9QZvHCl0618il4mWk-ZmTCw1exVN87qwFrrhLy7iU1sdXK-B0DPawNkNGajKjMZORz_7jKU3oGXUTQ/s16000/Screenshot+2021-12-05+at+10.57.53+AM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;When any new email arrives in my Outlook 365 account, with a subject that contains &quot;System usage Stats as on&quot;, it passes the body of the email to an Azure function named &#39;EmailTextCleanerFunction&#39; (code below), whose job is to clean any HTML text.&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Azure function returns cleaned-up text, which is then written to a file in the &quot;attachments&quot; folder. The name of the file is &quot;&amp;lt;sender email id&amp;gt;.txt&quot;.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_Ar6MOqT6hgqx5zD1Sctg3MdUvYiKWL21c4XlGjnADeSpZmxgM-r0-O82rM7yyJm5vuMBSyfZ0XrLgH6GWRcQD_md0e7HqUY1fNRe60JbJ7QNCpRfxksmgTvPortn6ndCyHF3Vw/&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;620&quot; data-original-width=&quot;1652&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_Ar6MOqT6hgqx5zD1Sctg3MdUvYiKWL21c4XlGjnADeSpZmxgM-r0-O82rM7yyJm5vuMBSyfZ0XrLgH6GWRcQD_md0e7HqUY1fNRe60JbJ7QNCpRfxksmgTvPortn6ndCyHF3Vw/s16000/Screenshot+2021-12-05+at+11.29.41+AM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Congratulations! We have crossed our first hurdle. We have got our source data neatly written in a text file.&lt;br /&gt;&lt;p&gt;Before we proceed further, here is our EmailTextCleanerFunction.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7A2aYbB81gdLYSeFBwBjEJjItAZnf7AtVHwpr9AObbefWl0EehEbz2ckHThhCpXD8OsdSUmjwsZZC75NCBWynObqjaoEYVXMR6U6TASt1cjKKrLR-Pr1J3hrXvYV00JNE0au_Ug/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1194&quot; data-original-width=&quot;1324&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7A2aYbB81gdLYSeFBwBjEJjItAZnf7AtVHwpr9AObbefWl0EehEbz2ckHThhCpXD8OsdSUmjwsZZC75NCBWynObqjaoEYVXMR6U6TASt1cjKKrLR-Pr1J3hrXvYV00JNE0au_Ug/s16000/image.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Now that we have the email body written in a file, we need to start our next step: actually reading the text and extracting the data to keep it in a form that we can use to create the graph.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And this has to be done every time a file is written in the &#39;attachments&#39; folder so we create a new Blob Trigger function, which gets triggered whenever a new file drops in this folder.&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;This blob trigger function, named very simply BlobTriggerFunction, lives in EmailBodyProcessorFunctionApp. There is another function named &#39;HttpTriggerFunction&#39; as well, we will talk about it later.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL7BqZon650uJqgZtr7QztJf7zBHxwKtjwYsULj7I4YTyaPoC6GjKF9RxmJhEhxzRX-2BYxADCXWuqrRmQyBBi6oq9DfqdnWBryR_C5BBSt98xC9I5Yf-ukC3hGyVPKjMyT1M-0g/&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;688&quot; data-original-width=&quot;2506&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL7BqZon650uJqgZtr7QztJf7zBHxwKtjwYsULj7I4YTyaPoC6GjKF9RxmJhEhxzRX-2BYxADCXWuqrRmQyBBi6oq9DfqdnWBryR_C5BBSt98xC9I5Yf-ukC3hGyVPKjMyT1M-0g/s16000/image.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Here is the function &lt;a href=&quot;https://github.com/Waterfox83/EmailTransformationAzureFunction/blob/main/src/main/java/org/example/functions/BlobTriggerFunction.java&quot; target=&quot;_blank&quot;&gt;definition&lt;/a&gt;. In essence, this function is the heart of the whole system. It reads the text file, extracts the dates, metrics, and values, and writes all of this in a file named &quot;&amp;lt;metrics&amp;gt;.txt&quot; in a folder named &quot;data-files&quot;.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Following values need to be set up in the application insights to ensure the function runs properly. Just Azure things!&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKRzukpaBNw_7q4DLuyCGDHMC9v5ThpaOc_s3CxI6atSYuVvYuRJuuUtRq4kwiyADEXnaQev7k3JbLbIRISmIqDbZSolO9jDN3otO9YFCKp2hmpTn5OOrm4mn3psPO9MEdhIOlLg/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;128&quot; data-original-width=&quot;890&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKRzukpaBNw_7q4DLuyCGDHMC9v5ThpaOc_s3CxI6atSYuVvYuRJuuUtRq4kwiyADEXnaQev7k3JbLbIRISmIqDbZSolO9jDN3otO9YFCKp2hmpTn5OOrm4mn3psPO9MEdhIOlLg/s16000/image.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Instead of writing the data in files, we could have used a database. But obviously, files are much cheaper so I used the files.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Here are all the different files in the &quot;data-files&quot; folder:&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_p0oZAiyRcaD9YrfFISJkwKAiALw2Jtr9LHpJcSfs8ITfjJ-hUd0i-_41TG2TsXgMo7v8sF5aXwF3WPZHDnhrXr2NPlR8rCymiQfkt_933BLpKo80w9wsxylPSlO1613TqN5kgg/s1652/Screenshot+2021-12-05+at+11.32.58+AM.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1646&quot; data-original-width=&quot;1652&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_p0oZAiyRcaD9YrfFISJkwKAiALw2Jtr9LHpJcSfs8ITfjJ-hUd0i-_41TG2TsXgMo7v8sF5aXwF3WPZHDnhrXr2NPlR8rCymiQfkt_933BLpKo80w9wsxylPSlO1613TqN5kgg/s16000/Screenshot+2021-12-05+at+11.32.58+AM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;As I said earlier, we need the data in a format that can be used to plot the date-wise chart. So we have to write the values along with the dates.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYoX8O1pi-6wD8J5VwHtB1zjB_QWJ4udTN-8cly7yJmBSbOdYc0F-tR6zkPKOLCkCb2iukQlxhhsijg_XkV5H8Fp5AmD47Sc8qBCTOhDi8NoHzns-dIzV2yMZmyRGIbtOEPskUyg/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1390&quot; data-original-width=&quot;868&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYoX8O1pi-6wD8J5VwHtB1zjB_QWJ4udTN-8cly7yJmBSbOdYc0F-tR6zkPKOLCkCb2iukQlxhhsijg_XkV5H8Fp5AmD47Sc8qBCTOhDi8NoHzns-dIzV2yMZmyRGIbtOEPskUyg/s16000/image.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Now we have our data stored in a datewise format in different files so anytime we want the data for a specific metric, we need to just read the file. And this is where the HttpTriggerFunction comes into the picture.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;This is, as the name suggests, an &lt;a href=&quot;https://github.com/Waterfox83/EmailTransformationAzureFunction/blob/main/src/main/java/org/example/functions/HttpTriggerFunction.java&quot;&gt;HttpTriggerFunction&lt;/a&gt; which, when gets a GET request for a specific metric, returns the data read from the file. Our HTML file actually makes use of these GET requests to render the data as a chart.&lt;/div&gt;&lt;br /&gt;This brings us to the last piece of the puzzle, the front end. A simple JS library (CanvasJS) in a static HTML file is hosted as a &#39;static website&#39; in Azure Blob Storage.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF_xOo-IToLO92CTqOjWYNZECApdULkgsQgVQgwQhOBSRLEE6AOz2IetwuNNr-IcXDhd4cEnCpdvzJ6rRYJ26b9lqkWoPhVsqDQOMpX8KffPu9DB65kOp77Sk0z7PkeNnn6n4Bhg/s1126/Screenshot+2021-12-06+at+10.47.35+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;870&quot; data-original-width=&quot;1126&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF_xOo-IToLO92CTqOjWYNZECApdULkgsQgVQgwQhOBSRLEE6AOz2IetwuNNr-IcXDhd4cEnCpdvzJ6rRYJ26b9lqkWoPhVsqDQOMpX8KffPu9DB65kOp77Sk0z7PkeNnn6n4Bhg/s16000/Screenshot+2021-12-06+at+10.47.35+AM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;Every time we select a metric in the dropdown in the HTML file, it sends an API call to /api/HttpTriggerFunction?name=&amp;lt;metric&amp;gt; and the data is returned to be displayed by the JS library. Actually, I set the format of the data in the files according to what was needed by the library.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;So this is all that there is to it!&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;</description><link>http://opreview.blogspot.com/2021/12/how-i-converted-table-in-email-to-graph.html</link><author>noreply@blogger.com (Waterfox)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi38YlPgrFlIsVYxEJBmgc5aplPNygDfKTZZMxLZo8ssYEeqLmXBpfXszpeJQSqPZDzup9HZAPCwAqLB3yXnPfjKAbGeAm5J20w71rtUR-F0U-hvbe1Ye_xSDkWTidJOqlDDYz2AA/s72-c/Screenshot+2021-12-05+at+12.00.04+PM.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-116535572347971991</guid><pubDate>Mon, 17 May 2021 09:38:00 +0000</pubDate><atom:updated>2021-05-17T02:38:32.148-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">365</category><category domain="http://www.blogger.com/atom/ns#">Design</category><category domain="http://www.blogger.com/atom/ns#">fonts</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><title>See and compare Microsoft&#39;s new Default Font candidates</title><description>&lt;p&gt;If like me you wanted to see Microsoft&#39;s five new default font candidates, &lt;a href=&quot;https://www.microsoft.com/en-us/microsoft-365/blog/2021/04/28/beyond-calibri-finding-microsofts-next-default-font/&quot; target=&quot;_blank&quot;&gt;one of which is supposed to replace Calibri&lt;/a&gt;, but don&#39;t have access to Microsoft 365 (which is the only place these fonts are currently available), you have come to the right place.&lt;/p&gt;&lt;p&gt;Browse through the following screenshots and you will have a decent idea of what each font will look and feel like in real-life conditions.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjak95fCwLfc7-zHlvUo3kzrJmKzlUJ26SQNNBBoWgkN7wpLUNfLZNMchPtPBweJ3_9DfCacvgSDVyjfei9LqW819m0J1EMYBkW3S_szC6r140Ku282oHGiUzyHzzuIM3sLsgvr7w/s1254/Screenshot+2021-05-17+at+2.39.54+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1058&quot; data-original-width=&quot;1254&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjak95fCwLfc7-zHlvUo3kzrJmKzlUJ26SQNNBBoWgkN7wpLUNfLZNMchPtPBweJ3_9DfCacvgSDVyjfei9LqW819m0J1EMYBkW3S_szC6r140Ku282oHGiUzyHzzuIM3sLsgvr7w/s16000/Screenshot+2021-05-17+at+2.39.54+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNxtu2MAGvV_9t9TGdMV2Nu6uIYT3bK25iDrXkfEczrAkXbv196T6QWzA4ME8CJvcINJJpqyoz-MwzcEB_hc4VjrArYA-hKekaJFb8GogB2uXLdani0Ykpb5gM3uL8OLQ_KwnpqA/s1254/Screenshot+2021-05-17+at+2.40.12+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;920&quot; data-original-width=&quot;1254&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNxtu2MAGvV_9t9TGdMV2Nu6uIYT3bK25iDrXkfEczrAkXbv196T6QWzA4ME8CJvcINJJpqyoz-MwzcEB_hc4VjrArYA-hKekaJFb8GogB2uXLdani0Ykpb5gM3uL8OLQ_KwnpqA/s16000/Screenshot+2021-05-17+at+2.40.12+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5h4W7T7UB7F8xNxPwnhtsaAwLrx5sICK_Izh4561yvhhqGXwBnV86sCmNyWgkazrC8ysx3m6jpMuZvC3UwNWLOcG8I4iWQyv5EnFgP9UchsT2eWt-jbSGoQe5sxDHSqNhhN4LIA/s1254/Screenshot+2021-05-17+at+2.40.40+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;918&quot; data-original-width=&quot;1254&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5h4W7T7UB7F8xNxPwnhtsaAwLrx5sICK_Izh4561yvhhqGXwBnV86sCmNyWgkazrC8ysx3m6jpMuZvC3UwNWLOcG8I4iWQyv5EnFgP9UchsT2eWt-jbSGoQe5sxDHSqNhhN4LIA/s16000/Screenshot+2021-05-17+at+2.40.40+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcgOE40CkNWcuS6nlK6BSY3NgIVQZxqENJYA7ctghJDTK5qXF_iYcJwn3bsSB2G7vtjCMTCPHh6jFB8nH553W2Q01O0u3yNdaecaTC4umYk221CG4iSzJu1DwXbLE7TvCxVzEHMg/s1254/Screenshot+2021-05-17+at+2.41.01+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;956&quot; data-original-width=&quot;1254&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcgOE40CkNWcuS6nlK6BSY3NgIVQZxqENJYA7ctghJDTK5qXF_iYcJwn3bsSB2G7vtjCMTCPHh6jFB8nH553W2Q01O0u3yNdaecaTC4umYk221CG4iSzJu1DwXbLE7TvCxVzEHMg/s16000/Screenshot+2021-05-17+at+2.41.01+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgWxDkfTOorL44jzH37zXHG1OQdwKq-v4SF1g5N9agHATT_mJuN-Y05RvitcnF1a20HN2fLZOuwnQQywvXZjubwwwUmNgCC4Z8OaphZ30SdttaHkOwG1IKMCYgdP3_Dn0oAfWqLg/s1254/Screenshot+2021-05-17+at+2.41.17+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;956&quot; data-original-width=&quot;1254&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgWxDkfTOorL44jzH37zXHG1OQdwKq-v4SF1g5N9agHATT_mJuN-Y05RvitcnF1a20HN2fLZOuwnQQywvXZjubwwwUmNgCC4Z8OaphZ30SdttaHkOwG1IKMCYgdP3_Dn0oAfWqLg/s16000/Screenshot+2021-05-17+at+2.41.17+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8gBDcVU0mPHYyVpj2HRMFlMqtR6AzEfy1TVWVcZNLWYrK3hNsLyLko6b0MTb68j7_8Cu9ImXFmPrHtXO1boCxYxkSBk6Aqn_E2yl71yM_0vXTRDCT6BbBwrlvjwfmAHUejdM0Wg/s1464/Screenshot+2021-05-17+at+2.44.36+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1464&quot; data-original-width=&quot;1032&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8gBDcVU0mPHYyVpj2HRMFlMqtR6AzEfy1TVWVcZNLWYrK3hNsLyLko6b0MTb68j7_8Cu9ImXFmPrHtXO1boCxYxkSBk6Aqn_E2yl71yM_0vXTRDCT6BbBwrlvjwfmAHUejdM0Wg/s16000/Screenshot+2021-05-17+at+2.44.36+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjziar-PQyyTSI003udYg5hJOdOxJdkJRWmQ9mbdkqCvMkZ1tC8mcgTTX_gBDONwd-H4QfKzg14BnrXCyv-Y4w3B5IJgPt-8k8fo9FZfd4kwD0skTGLSPbxBw1WvSZgqyZw1ZO_Rw/s1418/Screenshot+2021-05-17+at+2.45.11+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1418&quot; data-original-width=&quot;1040&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjziar-PQyyTSI003udYg5hJOdOxJdkJRWmQ9mbdkqCvMkZ1tC8mcgTTX_gBDONwd-H4QfKzg14BnrXCyv-Y4w3B5IJgPt-8k8fo9FZfd4kwD0skTGLSPbxBw1WvSZgqyZw1ZO_Rw/s16000/Screenshot+2021-05-17+at+2.45.11+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrbSFuNVbi2ZzM9QlYK6zEjG8TTKb_mMTiJLoyeBuu01n5bhlz6u_ywQBqG6YXEc8eyAbTFPgKPzoMJ9qS0kD7WwYO7MTwK2_KLbEc-B8-vTQPSr7CESl82s75SEAywf-N0YwzTQ/s1484/Screenshot+2021-05-17+at+2.45.25+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1484&quot; data-original-width=&quot;1034&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrbSFuNVbi2ZzM9QlYK6zEjG8TTKb_mMTiJLoyeBuu01n5bhlz6u_ywQBqG6YXEc8eyAbTFPgKPzoMJ9qS0kD7WwYO7MTwK2_KLbEc-B8-vTQPSr7CESl82s75SEAywf-N0YwzTQ/s16000/Screenshot+2021-05-17+at+2.45.25+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyVYJeCZOY5g0PiL3BWytmFdkjuU6X-gI-HFaxo9ZCjZOkfWbvfP9akq4QZmKG6z7JksGcZtvPrDIWrN-jVCprs2AeUxiyVd2I1IRJuGEfS8g32a-p1w7jF2W1PBFIeTlUh9ZARA/s616/Screenshot+2021-05-17+at+2.45.37+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;422&quot; data-original-width=&quot;616&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyVYJeCZOY5g0PiL3BWytmFdkjuU6X-gI-HFaxo9ZCjZOkfWbvfP9akq4QZmKG6z7JksGcZtvPrDIWrN-jVCprs2AeUxiyVd2I1IRJuGEfS8g32a-p1w7jF2W1PBFIeTlUh9ZARA/s16000/Screenshot+2021-05-17+at+2.45.37+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5KUzw9cXMVzukmdwaaI6UZOi7mMs8U-Wx5JpU21vboLZ81n9cOgOXcS8e7vXKgWfRHWNWjhcoakh7OgOFepfQn-uXCUcI9nl-O9bNX5Z3GlSVB34oLMG68gPcFDTaglwyxlsGqw/s1314/Screenshot+2021-05-17+at+2.46.08+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1314&quot; data-original-width=&quot;1158&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5KUzw9cXMVzukmdwaaI6UZOi7mMs8U-Wx5JpU21vboLZ81n9cOgOXcS8e7vXKgWfRHWNWjhcoakh7OgOFepfQn-uXCUcI9nl-O9bNX5Z3GlSVB34oLMG68gPcFDTaglwyxlsGqw/s16000/Screenshot+2021-05-17+at+2.46.08+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh06k5IeA76O8xM50PWGtR8E3Hf2i7v5I1e-oGHrSLk4d_OgzNfi_BYASw-JbBZnIblPssdIOObbB8F5rx1xMWqBvo6YZR9a5TCNfscGGFPeCtRWgsKablZRt71DL0Vw4L8eIDNOw/s1370/Screenshot+2021-05-17+at+2.46.22+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1370&quot; data-original-width=&quot;1116&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh06k5IeA76O8xM50PWGtR8E3Hf2i7v5I1e-oGHrSLk4d_OgzNfi_BYASw-JbBZnIblPssdIOObbB8F5rx1xMWqBvo6YZR9a5TCNfscGGFPeCtRWgsKablZRt71DL0Vw4L8eIDNOw/s16000/Screenshot+2021-05-17+at+2.46.22+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4rJd6UG0ROb5dRCSKD1kXcL3XkcFswkVzhEWWJa9GLbNCUgMYInrWYIm-DjefIQq1ICoG2lwKdqQw_A9UOYxkULEiteWnd8m6aSUoqedkCfDxUF-y8osvxRADKu9q23gZxsJNPg/s1174/Screenshot+2021-05-17+at+2.46.36+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1174&quot; data-original-width=&quot;1080&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4rJd6UG0ROb5dRCSKD1kXcL3XkcFswkVzhEWWJa9GLbNCUgMYInrWYIm-DjefIQq1ICoG2lwKdqQw_A9UOYxkULEiteWnd8m6aSUoqedkCfDxUF-y8osvxRADKu9q23gZxsJNPg/s16000/Screenshot+2021-05-17+at+2.46.36+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;How do these fonts look in Powerpoint slides?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxwJmgHf3ewn-IKLhYaAC1XwSisIx-VVbL0tgkDRPAy2TW7PLAN6n-l9qDMQgpftiNGj8s6legYH7WwaKQZ0kUwCujG8spPr2VZgoDFQKO9xsxf4rJ4Y3dLrLby39QRYC9Oxa7Nw/s1896/Screenshot+2021-05-17+at+3.02.58+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1070&quot; data-original-width=&quot;1896&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxwJmgHf3ewn-IKLhYaAC1XwSisIx-VVbL0tgkDRPAy2TW7PLAN6n-l9qDMQgpftiNGj8s6legYH7WwaKQZ0kUwCujG8spPr2VZgoDFQKO9xsxf4rJ4Y3dLrLby39QRYC9Oxa7Nw/s16000/Screenshot+2021-05-17+at+3.02.58+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNyhA-en9Ms7E3eKy_2aHONw2Xq1hjhLk7Q9PTNFKC2-xGz9JfjTvRhpSPJCh59jcCygX75mbBRNvRemNTSbg-OcA6SHePUqnVNJKJMxaz1fcVbfzJH4j8mE0ffBzBj2LeK0xO-w/s1898/Screenshot+2021-05-17+at+3.03.18+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1072&quot; data-original-width=&quot;1898&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNyhA-en9Ms7E3eKy_2aHONw2Xq1hjhLk7Q9PTNFKC2-xGz9JfjTvRhpSPJCh59jcCygX75mbBRNvRemNTSbg-OcA6SHePUqnVNJKJMxaz1fcVbfzJH4j8mE0ffBzBj2LeK0xO-w/s16000/Screenshot+2021-05-17+at+3.03.18+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR2-3AHBjt5gULfyhrRrqIHKKmmFelVJHc9OcGhRacIA1JUtvLLV9wfVUEkluvnLwOo9CqdPTq1u33YJZxuSbQXvu1L31ViKU-cCUOm8Kqg37AUFAifZGStEod6y2J6hBiqv7zJg/s1896/Screenshot+2021-05-17+at+3.03.33+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1070&quot; data-original-width=&quot;1896&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR2-3AHBjt5gULfyhrRrqIHKKmmFelVJHc9OcGhRacIA1JUtvLLV9wfVUEkluvnLwOo9CqdPTq1u33YJZxuSbQXvu1L31ViKU-cCUOm8Kqg37AUFAifZGStEod6y2J6hBiqv7zJg/s16000/Screenshot+2021-05-17+at+3.03.33+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPVvPAFmOGarqY114tUNbUGJaBPbvCrML88J5QtL8m1Wo54SWhhfcNQtin1v6PtcJaoQ_FLX15_UkL2gDV2jiHoajJVlHmJ2OmOybYVyeSDxgKYVnOYYlNkpJQRiGaHzxPnbVfrg/s1896/Screenshot+2021-05-17+at+3.03.50+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1070&quot; data-original-width=&quot;1896&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPVvPAFmOGarqY114tUNbUGJaBPbvCrML88J5QtL8m1Wo54SWhhfcNQtin1v6PtcJaoQ_FLX15_UkL2gDV2jiHoajJVlHmJ2OmOybYVyeSDxgKYVnOYYlNkpJQRiGaHzxPnbVfrg/s16000/Screenshot+2021-05-17+at+3.03.50+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVmDvZhudDYCj0Q7vKbruIpOKl7VoN7gB0XNdqfZvWB6mOWXIfXF8M6bpr9NXbczPLgz3qrUjFMJx3U14z_vPyxIRoS-hc9EkfB60zqtYsdJ816EJZqrVEf2L172mhOrc00ngy_g/s1896/Screenshot+2021-05-17+at+3.04.02+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1068&quot; data-original-width=&quot;1896&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVmDvZhudDYCj0Q7vKbruIpOKl7VoN7gB0XNdqfZvWB6mOWXIfXF8M6bpr9NXbczPLgz3qrUjFMJx3U14z_vPyxIRoS-hc9EkfB60zqtYsdJ816EJZqrVEf2L172mhOrc00ngy_g/s16000/Screenshot+2021-05-17+at+3.04.02+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;p&gt;Now that you have seen everything, what do you think? It&#39;s ok if you are unable to decide at once. Take your time and once you are done and have selected a winner, head over to this &lt;a href=&quot;https://twitter.com/Microsoft/status/1387421368581455874&quot; target=&quot;_blank&quot;&gt;Twitter post&lt;/a&gt; and tell Microsoft which one you like. And tell me also in the comments.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;</description><link>http://opreview.blogspot.com/2021/05/see-and-compare-microsofts-new-default.html</link><author>noreply@blogger.com (Waterfox)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjak95fCwLfc7-zHlvUo3kzrJmKzlUJ26SQNNBBoWgkN7wpLUNfLZNMchPtPBweJ3_9DfCacvgSDVyjfei9LqW819m0J1EMYBkW3S_szC6r140Ku282oHGiUzyHzzuIM3sLsgvr7w/s72-c/Screenshot+2021-05-17+at+2.39.54+PM.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-1867322935366572037</guid><pubDate>Tue, 09 Feb 2021 09:25:00 +0000</pubDate><atom:updated>2021-02-09T01:25:04.809-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Concurrency</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Threads</category><title>CyclicBarrier Example in Java</title><description>&lt;p&gt;Here is a simple example of how and when to use CyclicBarrier in Java.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;


&lt;script src=&quot;https://gist.github.com/Waterfox83/0e21e88b5178fdfe53c06cf7b7129473.js&quot;&gt;&lt;/script&gt;</description><link>http://opreview.blogspot.com/2021/02/cyclicbarrier-example-in-java.html</link><author>noreply@blogger.com (Waterfox)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-370933535105399550</guid><pubDate>Tue, 09 Feb 2021 08:39:00 +0000</pubDate><atom:updated>2021-02-09T00:39:18.732-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Concurrency</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Threads</category><title>CountDownLatch Example in Java</title><description>Here is a simple example of how and when to use CountDownLatch in Java.&lt;script src=&quot;https://gist.github.com/Waterfox83/ccf3a9fb35ea600e2e7dd9d0273928c2.js&quot;&gt;&lt;/script&gt;</description><link>http://opreview.blogspot.com/2021/02/countdownlatch-example-in-java.html</link><author>noreply@blogger.com (Waterfox)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-3459265441259923913</guid><pubDate>Thu, 05 Nov 2020 10:46:00 +0000</pubDate><atom:updated>2020-11-05T03:46:10.140-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">&quot;azure data lake analytics&quot;</category><category domain="http://www.blogger.com/atom/ns#">&quot;azure data lake storage Gen 2&quot;</category><category domain="http://www.blogger.com/atom/ns#">&quot;azure data lake storage&quot;</category><category domain="http://www.blogger.com/atom/ns#">analytics</category><category domain="http://www.blogger.com/atom/ns#">azure</category><category domain="http://www.blogger.com/atom/ns#">Big Data</category><category domain="http://www.blogger.com/atom/ns#">data lake</category><category domain="http://www.blogger.com/atom/ns#">storage</category><title>Azure Data Lake Analytics: In short</title><description>&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqdoUzaW-Z8oSEF-a51TzlUwzsrQIRPc9BcJH7sMS-xkiJbHQSHh415y5uHXkDTlu_wcdY90qSiwoMKnoMmaekF8tFarJobne3yo2klo6kh0aHnLvKcSgsgo0hEYhfeusu__Knvw/s512/Azure-Data-Lake.png&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;512&quot; data-original-width=&quot;512&quot; height=&quot;117&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqdoUzaW-Z8oSEF-a51TzlUwzsrQIRPc9BcJH7sMS-xkiJbHQSHh415y5uHXkDTlu_wcdY90qSiwoMKnoMmaekF8tFarJobne3yo2klo6kh0aHnLvKcSgsgo0hEYhfeusu__Knvw/w117-h117/Azure-Data-Lake.png&quot; width=&quot;117&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: large;&quot;&gt;&lt;span&gt;Azure is a great cloud platform but its services have mostly terrible names and confusing, often heavily overlapping features between them.&lt;br /&gt; &lt;/span&gt;&lt;span&gt;And so another one in this series of confusing services is Azure Data Lake. I have tried to make sense of this service and what it does!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #2f5496; font-family: inherit; font-size: 16pt;&quot;&gt;Azure Data Lake&lt;/span&gt;&lt;span style=&quot;font-family: inherit; font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: inherit; font-size: 12pt;&quot;&gt;Azure Data Lake has two components, which are very tightly integrated:&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;font-size: 12pt; margin: 0cm 0cm 0cm 36pt; text-indent: -18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;a.&lt;span style=&quot;font-size: 7pt; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;Azure Data Lake Analytics (ADLA)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;font-size: 12pt; margin: 0cm 0cm 0cm 36pt; text-indent: -18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: inherit;&quot;&gt;b.&lt;span style=&quot;font-size: 7pt; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Azure Data Lake Storage (ADLS)&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;ADLA gives us the ability to run analytical jobs (query, extract, aggregate, transform output etc.) on data, which is stored in ADLS, in form of files.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Below ‘temp’ is the name of ADLA account. As we can see ‘tempdl’ is the name of associated ADLS account, which acts as the data source for this ADLA account.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIzGDD1f771oRdt9ADa4S1Tzm3gTBo7EF-Gwn6NCZ17GLjGFdFaReYZYS2ZbBa2gIjSCrUzkOEBOjSy1-ORt-kFz5kvFp6JPJJ7odbB0LTiuF_1bkDiCfX7D2HBMvHVbKNN1-kPA/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1193&quot; data-original-width=&quot;2635&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIzGDD1f771oRdt9ADa4S1Tzm3gTBo7EF-Gwn6NCZ17GLjGFdFaReYZYS2ZbBa2gIjSCrUzkOEBOjSy1-ORt-kFz5kvFp6JPJJ7odbB0LTiuF_1bkDiCfX7D2HBMvHVbKNN1-kPA/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;As we can see below, the ‘tempdl’ has got following data stored in form of files.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSZAGQHs7nDrmbfNdd0Gq8voHmfslxNGYvT6VoenR-2Dx4P_U-uL9Fpj5PyUke51owHE1vxtBqfd4WBiOo5EawuYw4chssJLZ74_L7mwSgK-tWWZZ8cbXo41OG5DBu2bAiHsAiFg/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;820&quot; data-original-width=&quot;2880&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSZAGQHs7nDrmbfNdd0Gq8voHmfslxNGYvT6VoenR-2Dx4P_U-uL9Fpj5PyUke51owHE1vxtBqfd4WBiOo5EawuYw4chssJLZ74_L7mwSgK-tWWZZ8cbXo41OG5DBu2bAiHsAiFg/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;ADLA lets us query, transform and do other operations on this data using USQL (properietary language, a combination of SQL and C#) and save the result data again in form of files in the ADLS account.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;How does ADLA do that?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;In form of jobs. Below we can see a job named ‘Query a TSV file’, which is a U-SQL type job.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMn6IRIStHgbXjtbRsvjCjj8vDHoAOFHkW35B4llnkJPghmboYQ6eE2ohDr1i4GjUOq9J6PNzbw0qeEr8qlxYTWnx832wBF8LXn-UerdjDw1Zc8rZMyplYROQaZBNcBXOE4vo27Q/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;830&quot; data-original-width=&quot;2880&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMn6IRIStHgbXjtbRsvjCjj8vDHoAOFHkW35B4llnkJPghmboYQ6eE2ohDr1i4GjUOq9J6PNzbw0qeEr8qlxYTWnx832wBF8LXn-UerdjDw1Zc8rZMyplYROQaZBNcBXOE4vo27Q/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Below we see details of the above-mentioned job.&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9twRso5r8aVq6Yd2CMuF3QfD9ILFCxn8wkiALpKyQwiu7ojcziDYMJhWX4PlZMJKy4i6RMnuc0S4s0FyTgGwDxovkr_wHOpshSTp1tZA-EBF-jBdSAQY4IZyAnbfKWelB4lZV6Q/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1206&quot; data-original-width=&quot;2607&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9twRso5r8aVq6Yd2CMuF3QfD9ILFCxn8wkiALpKyQwiu7ojcziDYMJhWX4PlZMJKy4i6RMnuc0S4s0FyTgGwDxovkr_wHOpshSTp1tZA-EBF-jBdSAQY4IZyAnbfKWelB4lZV6Q/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Below is the U-SQL script used to do this task of querying the file named ‘SearchLog.tsv’.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCAC8R24o_CN69AG1VUXfmqYQtXEmA_oRYVqkct9F0tlVqUmYTFVJ-KkkxWdKN9SPfs378ZIyLThjK4ovuQsjrTG6yL3p8h5MLvNGtUmjkz2k68nUZttERjENoNKSiL1SU6Xt2Tg/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;780&quot; data-original-width=&quot;2880&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCAC8R24o_CN69AG1VUXfmqYQtXEmA_oRYVqkct9F0tlVqUmYTFVJ-KkkxWdKN9SPfs378ZIyLThjK4ovuQsjrTG6yL3p8h5MLvNGtUmjkz2k68nUZttERjENoNKSiL1SU6Xt2Tg/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;As mentioned in the script above, the output of the query is written to SearchLog_output.tsv file.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS2p3c_xCUApEsBkMwAEYkgP1npwD7Mm14d36SQwj0ZMoQTETZ76GOCnuuhdQy5DoOuLChOZU6Fccas-6RIHpLj0LqME6kDA7S7FOiwZHvJgu531UEhxxM1VCmoJzrT3NDkzgaBA/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;440&quot; data-original-width=&quot;2880&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgS2p3c_xCUApEsBkMwAEYkgP1npwD7Mm14d36SQwj0ZMoQTETZ76GOCnuuhdQy5DoOuLChOZU6Fccas-6RIHpLj0LqME6kDA7S7FOiwZHvJgu531UEhxxM1VCmoJzrT3NDkzgaBA/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Here is what the output file looks like:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNlIo1U9DmktZs1hBjoxL6xm3mE0pnyyNZq9aK00jigtEA3pOoLBY9wjF1IAwz85K-_AXCQIBffwuVCRJVTdQcEKQfGeaxlaXzobWnF0KcDMyKnz-FXDa1HC8Q81XdIwnOKr1iIg/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1155&quot; data-original-width=&quot;2721&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNlIo1U9DmktZs1hBjoxL6xm3mE0pnyyNZq9aK00jigtEA3pOoLBY9wjF1IAwz85K-_AXCQIBffwuVCRJVTdQcEKQfGeaxlaXzobWnF0KcDMyKnz-FXDa1HC8Q81XdIwnOKr1iIg/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;For any job there are four stages:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: inherit; margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRUlvRrsRvdyWPL-c525xuMsCJykdimjbsu-hNOp_2UCxumI4fJEVcsNvCgnl-uTkQ8jVIh-vfllpN49Ic9igUkQ9wAs64-ABCc4G6sGo_9KakFwuWNSh9zs-4CbY4ZxkgxvXL6w/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;240&quot; data-original-width=&quot;662&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRUlvRrsRvdyWPL-c525xuMsCJykdimjbsu-hNOp_2UCxumI4fJEVcsNvCgnl-uTkQ8jVIh-vfllpN49Ic9igUkQ9wAs64-ABCc4G6sGo_9KakFwuWNSh9zs-4CbY4ZxkgxvXL6w/s16000/image.png&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;font-size: 12pt; margin: 0cm 0cm 0cm 36pt; text-indent: -18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;a.&lt;span style=&quot;font-size: 7pt; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;Preparing: the script is compiled, and execution plan is created&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;font-size: 12pt; margin: 0cm 0cm 0cm 36pt; text-indent: -18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;b.&lt;span style=&quot;font-size: 7pt; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;Queued: Resources are collected&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;font-size: 12pt; margin: 0cm 0cm 0cm 36pt; text-indent: -18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;c.&lt;span style=&quot;font-size: 7pt; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;Running: Actual execution happens.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;font-size: 12pt; margin: 0cm 0cm 0cm 36pt; text-indent: -18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;d.&lt;span style=&quot;font-size: 7pt; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;Done: Any cleanup tasks are executed&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;break-after: avoid; color: #2f5496; font-size: 13pt; font-weight: normal; margin: 2pt 0cm 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;More U-SQL concepts&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: 12pt;&quot;&gt;Following script does data filtering on a file:&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-family: Cambria, serif; font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoTableGrid&quot; style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 450.5pt;&quot; valign=&quot;top&quot; width=&quot;601&quot;&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;color: #cd3131; font-family: Menlo; font-size: 9pt;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;searchlog&amp;nbsp;=&amp;nbsp;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;EXTRACT&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;UserId&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;Start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;DateTime&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;Region&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;Query&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;Duration&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;Urls&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;ClickedUrls&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a31515; font-family: Menlo; font-size: 9pt;&quot;&gt;&quot;/Samples/Data/SearchLog.tsv&quot;&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;USING&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;Extractors.Tsv();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;color: #cd3131; font-family: Menlo; font-size: 9pt;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;filter&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;SELECT&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;UserId,&amp;nbsp;Region,&amp;nbsp;Query,&amp;nbsp;Duration,&amp;nbsp;Urls&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #cd3131; font-family: Menlo; font-size: 9pt;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;searchlog&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;WHERE&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;Duration&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #09885a; font-family: Menlo; font-size: 9pt;&quot;&gt;500&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;OUTPUT&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #cd3131; font-family: Menlo; font-size: 9pt;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;filter&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;TO&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a31515; font-family: Menlo; font-size: 9pt;&quot;&gt;&quot;/Samples/Output/LongDurationSearches.tsv&quot;&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;USING&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;Outputters.Tsv();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-family: Cambria, serif; font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Note that the language is case sensitive, unlike SQL.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;break-after: avoid; color: #2f5496; font-size: 13pt; font-weight: normal; margin: 2pt 0cm 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Catalog, Databases and Tables&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;Whenever we create a new ADLS account, we get a U-SQL Catalog, which has got one or more databases. It has one Master database by default and many user-created databases.&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihSAQBiduIHCU8mLzqG_SSxsufMDj3LhZSIvYpim5B1z7r1Awq6ZkSXplKfQa2EfKnHzlIiEaTWhwekkFt85GgQrzpNqkNPwSiViLwRD0sbHfl2q8dR_Fbpg4XYj0EhZNZ_Q7QPw/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1006&quot; data-original-width=&quot;2880&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihSAQBiduIHCU8mLzqG_SSxsufMDj3LhZSIvYpim5B1z7r1Awq6ZkSXplKfQa2EfKnHzlIiEaTWhwekkFt85GgQrzpNqkNPwSiViLwRD0sbHfl2q8dR_Fbpg4XYj0EhZNZ_Q7QPw/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Data is stored in Tables. There is also concept of Views, Stored Procedures etc.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Below script creates a new database and table:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-family: Cambria, serif; font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoTableGrid&quot; style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 450.5pt;&quot; valign=&quot;top&quot; width=&quot;601&quot;&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;color: green; font-family: Menlo; font-size: 9pt;&quot;&gt;//Create&amp;nbsp;Database&amp;nbsp;SampleDBTutorials&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;DATABASE&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;IF&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;NOT&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;EXISTS&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;SampleDBTutorials;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;color: green; font-family: Menlo; font-size: 9pt;&quot;&gt;//Create&amp;nbsp;Table&amp;nbsp;OlympicAthletes&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;TABLE&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;IF&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;NOT&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;EXISTS&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;SampleDBTutorials.dbo.SearchLog&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: green; font-family: Menlo; font-size: 9pt;&quot;&gt;//Define&amp;nbsp;schema&amp;nbsp;of&amp;nbsp;table&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UserId&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;,&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;DateTime&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;,&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Region&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;,&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Query&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;,&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Duration&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;,&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Urls&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;,&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ClickedUrls&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;INDEX&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;idx1&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: green; font-family: Menlo; font-size: 9pt;&quot;&gt;//Name&amp;nbsp;of&amp;nbsp;index&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;CLUSTERED&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;(Region&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;ASC&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: green; font-family: Menlo; font-size: 9pt;&quot;&gt;//Column&amp;nbsp;to&amp;nbsp;cluster&amp;nbsp;by&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;DISTRIBUTED&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;BY&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;HASH&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;(Region)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: green; font-family: Menlo; font-size: 9pt;&quot;&gt;//Column&amp;nbsp;to&amp;nbsp;partition&amp;nbsp;by&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-family: Cambria, serif; font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;As we can see below, running a job with above script produces no data files.&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjj_0c7D9lNjhu0Ryp8uzXxQ_b9DtUq0dGWdXkTwPh_JKyBlr4GRrwRQUhUYYSu0jcD7wz6g7G0Q4Bs_8cxr8sQ4ZpgI_SZGfy6O-i7wCEQGKTiptfJ_KvMYsRIyh-DTrRQ6ag0g/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;496&quot; data-original-width=&quot;2880&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjj_0c7D9lNjhu0Ryp8uzXxQ_b9DtUq0dGWdXkTwPh_JKyBlr4GRrwRQUhUYYSu0jcD7wz6g7G0Q4Bs_8cxr8sQ4ZpgI_SZGfy6O-i7wCEQGKTiptfJ_KvMYsRIyh-DTrRQ6ag0g/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Following script populates this newly created table using the data from SearchLog.tsv file:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoTableGrid&quot; style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 450.5pt;&quot; valign=&quot;top&quot; width=&quot;601&quot;&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: green; font-size: 9pt;&quot;&gt;//Read&amp;nbsp;some&amp;nbsp;data&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: #cd3131; font-size: 9pt;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;searchlog&amp;nbsp;=&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-size: 9pt;&quot;&gt;EXTRACT&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;UserId&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-size: 9pt;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;,&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-size: 9pt;&quot;&gt;DateTime&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;,&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Region&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-size: 9pt;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;,&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Query&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-size: 9pt;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;,&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Duration&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-size: 9pt;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;,&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Urls&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-size: 9pt;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;,&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ClickedUrls&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-size: 9pt;&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-size: 9pt;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a31515; font-size: 9pt;&quot;&gt;@&quot;/Samples/Data/SearchLog.tsv&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-size: 9pt;&quot;&gt;USING&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;Extractors.Tsv();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: green; font-size: 9pt;&quot;&gt;//Insert&amp;nbsp;it&amp;nbsp;into&amp;nbsp;a&amp;nbsp;previously&amp;nbsp;created&amp;nbsp;table&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: blue; font-size: 9pt;&quot;&gt;INSERT&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-size: 9pt;&quot;&gt;INTO&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;SampleDBTutorials.dbo.SearchLog&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: blue; font-size: 9pt;&quot;&gt;SELECT&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;*&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: blue; font-size: 9pt;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #cd3131; font-size: 9pt;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;searchlog&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: blue; font-size: 9pt;&quot;&gt;WHERE&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&amp;nbsp;Duration&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #09885a; font-size: 9pt;&quot;&gt;500&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;Below is the Job Graph, along with Heat Map on the basis of ‘Written’ data. Heat Map highlights the step in the graph which has maximum value for given parameter.&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrK2aQ1R599tT3iSdcLxTIEDNt9CuRt8f7No9ma0gOoKHdc2Tukm7D1NyYfdnWaUVFplOEM5_XbaUUyTN0Bg1D5K7Jtrc5haxZPrEpohu-a8AllcHc4d_hjPO2WxNuqwYrSPvvZw/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1173&quot; data-original-width=&quot;2681&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrK2aQ1R599tT3iSdcLxTIEDNt9CuRt8f7No9ma0gOoKHdc2Tukm7D1NyYfdnWaUVFplOEM5_XbaUUyTN0Bg1D5K7Jtrc5haxZPrEpohu-a8AllcHc4d_hjPO2WxNuqwYrSPvvZw/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Note that output in this scenario is not a file, but a table.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_zwcjFhK22KqExu57hBJvDlfOMrdo_1S457xvoWHAILT7ccsWVmzgfkswvOcl71YYQZLgE-ycdmFUzbf0uOZN3nNFFO8T9kUkCVqxbRLApPO07ahYsYujB0Vud0lEXuCUtolyWQ/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;390&quot; data-original-width=&quot;2880&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_zwcjFhK22KqExu57hBJvDlfOMrdo_1S457xvoWHAILT7ccsWVmzgfkswvOcl71YYQZLgE-ycdmFUzbf0uOZN3nNFFO8T9kUkCVqxbRLApPO07ahYsYujB0Vud0lEXuCUtolyWQ/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;But this table can’t be queried by just clicking on it. We need another job with a U-SQL query to view the data.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWT7UqFKUD3QTz1W9NF22HKVI417rGcO-SplH9Nyj1EGZ_2FcUiPSTtCiRXZbT31XMttUPAfXqFss0MKBtXhq_kHFLMrjDKsoTSpSiM2oJECr2lf7CFPHwWru_VjRbUglB95Ie4w/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1082&quot; data-original-width=&quot;2880&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWT7UqFKUD3QTz1W9NF22HKVI417rGcO-SplH9Nyj1EGZ_2FcUiPSTtCiRXZbT31XMttUPAfXqFss0MKBtXhq_kHFLMrjDKsoTSpSiM2oJECr2lf7CFPHwWru_VjRbUglB95Ie4w/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Following query queries the table and writes data to a file:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-family: Cambria, serif; font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoTableGrid&quot; style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 450.5pt;&quot; valign=&quot;top&quot; width=&quot;601&quot;&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;color: green; font-family: Menlo; font-size: 9pt;&quot;&gt;//Read&amp;nbsp;from&amp;nbsp;SearchLog&amp;nbsp;table&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;color: #cd3131; font-family: Menlo; font-size: 9pt;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;athletes&amp;nbsp;=&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;SELECT&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;*&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;SampleDBTutorials.dbo.SearchLog;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;color: green; font-family: Menlo; font-size: 9pt;&quot;&gt;//Write&amp;nbsp;it&amp;nbsp;to&amp;nbsp;a&amp;nbsp;file&amp;nbsp;so&amp;nbsp;we&amp;nbsp;can&amp;nbsp;look&amp;nbsp;at&amp;nbsp;it&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;OUTPUT&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #cd3131; font-family: Menlo; font-size: 9pt;&quot;&gt;@&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;athletes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;TO&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #a31515; font-family: Menlo; font-size: 9pt;&quot;&gt;@&quot;/Samples/Output/SearchLog_output.tsv&quot;&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: rgb(255, 255, 254); font-family: Cambria, serif; font-size: 12pt; line-height: 13.5pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;color: blue; font-family: Menlo; font-size: 9pt;&quot;&gt;USING&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 9pt;&quot;&gt;&amp;nbsp;Outputters.Tsv();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Here is the output file:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3cdL3Z38UmSNKiHJgUTgphTp1O3nfVoX6tZGXqBnLAtKCwsjHWcDp-HOwayzeYb-HnDjNuOes61WRTqMMxrIn23NOmmbJr-PIdP5JvtOcoaGAia95Y1K5hdsDCOj5QpHLoA0tOg/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;916&quot; data-original-width=&quot;2880&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3cdL3Z38UmSNKiHJgUTgphTp1O3nfVoX6tZGXqBnLAtKCwsjHWcDp-HOwayzeYb-HnDjNuOes61WRTqMMxrIn23NOmmbJr-PIdP5JvtOcoaGAia95Y1K5hdsDCOj5QpHLoA0tOg/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;As we can see the analytics works very closely with the storage account. Great thing is that the data lake storage can store data files of any size and any number of files can be stored. Also, as we saw, structured (tables) and unstructured or semi-structured data can be stored in the ADLS and ADLA has capability to work on it.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 style=&quot;break-after: avoid; color: #2f5496; font-size: 13pt; font-weight: normal; margin: 2pt 0cm 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Azure Data Lake Storage Gen 2&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;ADLS Gen 2 is not a separate service but is built on top of Blob Storage only.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Blob Storage stores data in blobs and doesn’t really have folders. ADLS stores data hierarchically in folders (which are first class citizens). ADLS Gen2 assimilates hierachical storage as well as other features of ADLS (made for analytical/Big Data services, large amount of any type of data etc.) with Blob Storage (massive availability, partner eco-system etc.). For any data/file stored in Gen 2, we can get two endpoints, one as an object store and other as a file store.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKbERzEMJViWO0T3RK3u1vbH56KOwV94Ovklt-gDgLqDoRFhV7qTXHZrC_n7-bqE5pYteWTM7L0BgneHxMNJGtzqTuW_n1x4GXftMxM8eBLbQ4LQeL3_B1xH78vM6lwjC_4-HeQ/&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;938&quot; data-original-width=&quot;1534&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyKbERzEMJViWO0T3RK3u1vbH56KOwV94Ovklt-gDgLqDoRFhV7qTXHZrC_n7-bqE5pYteWTM7L0BgneHxMNJGtzqTuW_n1x4GXftMxM8eBLbQ4LQeL3_B1xH78vM6lwjC_4-HeQ/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-size: 12pt; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-size: 12pt; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-size: 12pt; text-align: left;&quot;&gt;ADLA doesn’t work with Gen 2 yet. A list of&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://docs.microsoft.com/en-in/azure/storage/blobs/data-lake-storage-migrate-gen1-to-gen2#gen1-vs-gen2-capabilities&quot; style=&quot;color: #954f72; font-size: 12pt; text-align: left;&quot;&gt;&lt;span lang=&quot;EN-US&quot;&gt;Gen 1 vs Gen 2 capabilities&lt;/span&gt;&lt;/a&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-size: 12pt; text-align: left;&quot;&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-family: Cambria, serif; font-size: 12pt; margin: 0cm;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description><link>http://opreview.blogspot.com/2020/11/azure-data-lake-analytics-in-short.html</link><author>noreply@blogger.com (Waterfox)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqdoUzaW-Z8oSEF-a51TzlUwzsrQIRPc9BcJH7sMS-xkiJbHQSHh415y5uHXkDTlu_wcdY90qSiwoMKnoMmaekF8tFarJobne3yo2klo6kh0aHnLvKcSgsgo0hEYhfeusu__Knvw/s72-w117-h117-c/Azure-Data-Lake.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-8352466332329146907</guid><pubDate>Sun, 11 Oct 2020 12:40:00 +0000</pubDate><atom:updated>2020-10-11T05:40:57.341-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">azure</category><category domain="http://www.blogger.com/atom/ns#">certification</category><category domain="http://www.blogger.com/atom/ns#">Microsoft</category><category domain="http://www.blogger.com/atom/ns#">study</category><title>AZ-900 Microsoft Azure Fundamentals : Study Notes</title><description>&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;List of resources to prepare for AZ 900 certification:&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;1. &lt;a href=&quot;https://www.youtube.com/playlist?list=PLYGZ9Q0oTOHfsI-3IAhvyc09ssPDfoePv&quot; target=&quot;_blank&quot;&gt;Tim Warner&#39;s video playlist&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;2. Andrew Brown&#39;s &lt;a href=&quot;https://www.youtube.com/watch?v=NKEFWyqJ5XA&amp;amp;t=9810s&quot; target=&quot;_blank&quot;&gt;3-hour video&lt;/a&gt; (broken into individual videos for every topic)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;3. My &lt;a href=&quot;https://docs.microsoft.com/en-us/users/abhishekasthana-4645/collections/yp0rf8x4mdg1yj&quot; target=&quot;_blank&quot;&gt;collection&lt;/a&gt; of Microsoft documentation links&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;And below are my own study notes,&amp;nbsp; created from all of the above. Happy preparing.&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717; font-size: 18pt;&quot;&gt;Availability Options&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;background: white; margin: 0cm;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs4qGhffQF1HzHN2wL-rJa3xaOHp0BBFOBJjDvjAdAkaEfDRkqPF04agBPk0JI9oiFn0KC0hqBPax-H8HWhrCv4wFl2HfaFWvuFyqSaqMBuJabUA7-Jl1xhp1t_mpKPJWi2TtKkA/s904/Picture+1.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;310&quot; data-original-width=&quot;904&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs4qGhffQF1HzHN2wL-rJa3xaOHp0BBFOBJjDvjAdAkaEfDRkqPF04agBPk0JI9oiFn0KC0hqBPax-H8HWhrCv4wFl2HfaFWvuFyqSaqMBuJabUA7-Jl1xhp1t_mpKPJWi2TtKkA/s16000/Picture+1.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;background: yellow;&quot;&gt;An&amp;nbsp;&lt;b&gt;Azure geography is a discrete market,&lt;/b&gt;&lt;/span&gt;&amp;nbsp;typically containing at least one or more regions, that preserves data residency and compliance boundaries.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;background: yellow;&quot;&gt;An&amp;nbsp;&lt;b&gt;Azure region is a set of datacenters&lt;/b&gt;&lt;/span&gt;, deployed close by and connected through a dedicated regional low-latency network. &amp;nbsp;Each Azure region is paired with another region within the same geography (such as US, Europe, or Asia) at least 300 miles away, which together make a&amp;nbsp;&lt;a href=&quot;https://docs.microsoft.com/en-us/azure/best-practices-availability-paired-regions&quot; style=&quot;color: #0563c1;&quot; target=&quot;az-portal&quot;&gt;&lt;b&gt;region pair&amp;nbsp;&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Examples of geographies and corresponding regions:&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoTableGrid&quot; style=&quot;border-collapse: collapse; border: none;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;background: rgb(68, 114, 196); border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 106.1pt;&quot; valign=&quot;top&quot; width=&quot;141&quot;&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Geography&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;background: rgb(68, 114, 196); border-bottom: 1pt solid windowtext; border-image: initial; border-left: none; border-right: 1pt solid windowtext; border-top: 1pt solid windowtext; padding: 0cm 5.4pt; width: 344.7pt;&quot; valign=&quot;top&quot; width=&quot;460&quot;&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Regions (Location of datacenters)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;border-bottom: 1pt solid windowtext; border-image: initial; border-left: 1pt solid windowtext; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 106.1pt;&quot; valign=&quot;top&quot; width=&quot;141&quot;&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;India&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 344.7pt;&quot; valign=&quot;top&quot; width=&quot;460&quot;&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Central India (Pune), South India (Chennai), West India (Mumbai)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;border-bottom: 1pt solid windowtext; border-image: initial; border-left: 1pt solid windowtext; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 106.1pt;&quot; valign=&quot;top&quot; width=&quot;141&quot;&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Europe&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 344.7pt;&quot; valign=&quot;top&quot; width=&quot;460&quot;&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;North Europe (Ireland), West Europe (Netherlands)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;border-bottom: 1pt solid windowtext; border-image: initial; border-left: 1pt solid windowtext; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 106.1pt;&quot; valign=&quot;top&quot; width=&quot;141&quot;&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;UK&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 344.7pt;&quot; valign=&quot;top&quot; width=&quot;460&quot;&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;UK South (London), UK West (Cardiff)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: inherit; margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTPw5HCvHXKnJrw_uRo7UaEsaZcvvozCzrbA5dK8oh0mXKBsJkCuCf_AupXa3zQdZq2hRzChNti4VhYG-Ema531Uq7jJH8INa1Q1nNcReN8ZkrZimDZkKPULcqktWkJZutcQ3mjA/s904/Picture+2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;432&quot; data-original-width=&quot;904&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTPw5HCvHXKnJrw_uRo7UaEsaZcvvozCzrbA5dK8oh0mXKBsJkCuCf_AupXa3zQdZq2hRzChNti4VhYG-Ema531Uq7jJH8INa1Q1nNcReN8ZkrZimDZkKPULcqktWkJZutcQ3mjA/s16000/Picture+2.png&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background: yellow;&quot;&gt;Azure Availability Zones are unique physical locations (different datacenter buildings) within an Azure region&lt;/span&gt;&lt;/b&gt;. Each zone is made up of one or more datacenters equipped with independent power, cooling, and networking.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg30hP6cEGg7UtoXSRghh54LAt_pnS62V7mYMrA2sKOPHONF-OzOkyQMZXD2WF1hhDRV_CcV9P27HiAy2F45ZlNbjBjUPDLJfWJfmp2edDSj2RjnhrYmnzPqtSwbhNgArPKgt46eQ/s904/Picture+3.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;214&quot; data-original-width=&quot;904&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg30hP6cEGg7UtoXSRghh54LAt_pnS62V7mYMrA2sKOPHONF-OzOkyQMZXD2WF1hhDRV_CcV9P27HiAy2F45ZlNbjBjUPDLJfWJfmp2edDSj2RjnhrYmnzPqtSwbhNgArPKgt46eQ/s16000/Picture+3.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Service types:&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0cm; margin-top: 0cm;&quot; type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Foundational&amp;nbsp;–&amp;nbsp;&lt;/b&gt;Available in all recommended and alternate regions when the region.&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Mainstream&amp;nbsp;–&amp;nbsp;&lt;/b&gt;Available in all recommended regions, demand-driven in alternate regions.&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Specialized&amp;nbsp;–&amp;nbsp;&lt;/b&gt;Targeted service offerings, often industry-focused or backed by customized/specialized hardware. Demand-driven availability across regions.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Availability sets&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Availability sets&lt;/b&gt;&amp;nbsp;are a way for you to ensure your application remains online if a high-impact maintenance event is required, or if a hardware failure occurs.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Availability sets are made up of&amp;nbsp;&lt;b&gt;Update domains (UD)&lt;/b&gt;&amp;nbsp;and&amp;nbsp;&lt;b&gt;Fault domains (FD)&lt;/b&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDGhbGBpYP2l90xdYqylmMw8neQsZGq0Ydyph16piwNkN1vMBm5-HuGKVJ6T5etupG7E514yNHI-H26bkXQKMcdz1PCYJlp7NSp0-9S2lRlln7oSoLv0K3YmIuoIVhXezWKQ-wfA/s740/Picture+4.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;364&quot; data-original-width=&quot;740&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDGhbGBpYP2l90xdYqylmMw8neQsZGq0Ydyph16piwNkN1vMBm5-HuGKVJ6T5etupG7E514yNHI-H26bkXQKMcdz1PCYJlp7NSp0-9S2lRlln7oSoLv0K3YmIuoIVhXezWKQ-wfA/s16000/Picture+4.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0cm; margin-top: 0cm;&quot; type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;color: #70ad47; font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;&lt;span color=&quot;windowtext&quot;&gt;Update domains&lt;/span&gt;&lt;/b&gt;&lt;span color=&quot;windowtext&quot;&gt;. When a maintenance event occurs (such as a performance update or critical security patch applied to the host), the update is sequenced through update domains.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0cm 36pt;&quot;&gt;&lt;span style=&quot;color: #5b9bd5;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Sequencing updates using update domains ensures that the entire datacenter isn&#39;t unavailable during platform updates and patching.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0cm 36pt;&quot;&gt;&lt;span style=&quot;color: #70ad47;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Update domains are a logical section of the datacenter, and they are implemented with software and logic.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0cm 36pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;It could be that when any update is started, it is like U0-&amp;gt;U1-&amp;gt;U2-&amp;gt;….-&amp;gt;Un. When one update domain is being updated then others are working normally.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0cm 36pt;&quot;&gt;&lt;span style=&quot;color: #70ad47;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0cm; margin-top: 0cm;&quot; type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;color: #70ad47; font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;&lt;span color=&quot;windowtext&quot;&gt;Fault domains&lt;/span&gt;&lt;/b&gt;&lt;span color=&quot;windowtext&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5b9bd5;&quot;&gt;Fault domains provide for the physical separation of your workload across different hardware in the datacenter.&lt;/span&gt;&lt;span color=&quot;windowtext&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0cm 36pt;&quot;&gt;&lt;span style=&quot;color: #70ad47;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Virtual machines in the same fault domain share a common power source and physical network switch.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0cm 36pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;In the event the hardware that supports a server rack becomes unavailable, only that rack of servers would be affected by the outage.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm 0cm 0cm 36pt;&quot;&gt;&lt;span style=&quot;color: #70ad47;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuB1MLswqBzL_w8rP9Cydtg2JfwQ3-XXzPC0O9gGswfTA6_7xDKcYg9WqtlCl8we0axGDU_0EpNWtPmKyx0fYQzQ1sbOc1rQGTBCfXSvJ2mrDzsfV2gwnSDV6UfLMgnv8DdRZH_g/s576/Picture+5.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;576&quot; data-original-width=&quot;532&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuB1MLswqBzL_w8rP9Cydtg2JfwQ3-XXzPC0O9gGswfTA6_7xDKcYg9WqtlCl8we0axGDU_0EpNWtPmKyx0fYQzQ1sbOc1rQGTBCfXSvJ2mrDzsfV2gwnSDV6UfLMgnv8DdRZH_g/s320/Picture+5.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;margin: 0cm; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Maximum Fault Domains are 3, Maximum Update domains can be 20.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717; font-size: 18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Azure Management Tools&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoListParagraph&quot; style=&quot;margin: 0cm 0cm 0cm 36pt; text-indent: -18pt;&quot;&gt;&lt;/p&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;div&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Azure Portal&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;div&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;Azure CLI – Cross-platform command-line tool. Can be installed on MacOS using Homebrew&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;brew update &amp;amp;&amp;amp; brew install azure-cli&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Azure Powershell – Can be installed on Windows Powershell or Powershell Core (cross-platform version of Powershell, can be installed on Linux and MacOS)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Azure Cloud Shell&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Azure REST API&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #171717; font-size: 18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;color: #171717; font-size: 18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Azure Policy&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Azure Policy is a tool to create, manage, assign policies that control and enforce the properties of resources.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;background: white;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Imagine we allow anyone in our organization to create virtual machines (VMs) with not more than 4 CPUs.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;background: white;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Once the policy is implemented, Azure Policy will&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;margin: 0cm 0cm 0cm 36pt; text-indent: -18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;1.&lt;span style=&quot;font-size: 7pt; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background: white;&quot;&gt;stop anyone from creating a new VM outside the list of allowed stock-keeping units (SKUs).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;margin: 0cm 0cm 0cm 36pt; text-indent: -18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;2.&lt;span style=&quot;font-size: 7pt; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background: white;&quot;&gt;If you try to&amp;nbsp;&lt;i&gt;update&lt;/i&gt;&amp;nbsp;an existing VM, it will be checked against policy.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;margin: 0cm 0cm 0cm 36pt; text-indent: -18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;3.&lt;span style=&quot;font-size: 7pt; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background: white;&quot;&gt;Finally, Azure Policy will audit all the existing VMs in our organization to ensure our policy is enforced. It can audit non-compliant resources, alter the resource properties, or stop the resource from being created.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;background: white;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background: white;&quot;&gt;Initiatives&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background: white;&quot;&gt;: An&amp;nbsp;&lt;i&gt;initiative definition&lt;/i&gt;&amp;nbsp;is a set or group of policy definitions to help track your compliance state for a larger goal.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;background: white;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717; font-size: 18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Azure RBAC&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;background: white;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;background: white;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Azure role-based access control (Azure RBAC) helps you manage who has access to Azure resources, what they can do with those resources, and what areas they have access to.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;background: white;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;background: white;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Key points:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;margin: 0cm 0cm 0cm 36pt; text-indent: -18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;-&lt;span style=&quot;font-size: 7pt; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background: white;&quot;&gt;Security Principal&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;margin: 0cm 0cm 0cm 36pt; text-indent: -18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;-&lt;span style=&quot;font-size: 7pt; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background: white;&quot;&gt;Role Definition&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;margin: 0cm 0cm 0cm 36pt; text-indent: -18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;-&lt;span style=&quot;font-size: 7pt; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background: white;&quot;&gt;Scope (Management Groups, Subscriptions, Resource Groups)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;margin: 0cm 0cm 0cm 36pt; text-indent: -18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;-&lt;span style=&quot;font-size: 7pt; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background: white;&quot;&gt;Role Assignments/Deny Assignments&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;background: white;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717; font-size: 18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Azure Blueprints&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Blueprints are a declarative way to orchestrate the deployment of various resource templates and other artifacts such as:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0cm; margin-top: 0cm;&quot; type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Role Assignments&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Policy Assignments&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Azure Resource Manager templates (ARM templates)&lt;/span&gt;&lt;/li&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;font-size: 12pt; margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Resource Groups&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717; font-size: 18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Resource Locks/Management Locks&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Delete: Users can read/update resource but can’t delete it.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Read Only: Read Only&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Need Owner or User Access Admin to create or delete these locks&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Locks are inherited, meaning if you set a lock at resource group, it is applied to all the resources of the group.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717; font-size: 18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Azure Network Security Group (NSG)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Once inside a virtual network (VNet), it&#39;s crucial that you limit communication between resources to only what is required.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;For communication between virtual machines,&amp;nbsp;&lt;i&gt;Network Security Groups&lt;/i&gt;&amp;nbsp;(NSGs) are a critical piece to restrict unnecessary communication.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Network Security Groups allow you to filter network traffic to and from Azure resources in an Azure virtual network. An NSG can contain multiple inbound and outbound security rules that enable you to filter traffic to and from resources by source and destination IP address, port, and protocol.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;They provide a list of allowed and denied communication to and from network interfaces and subnets, and are fully customizable.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717; font-size: 18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;CIA Security Principle&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Confidentiality: Least privilege principle&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Integrity: prevent unauthorized changes&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Availability: services always available to authorized users&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717; font-size: 18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Azure Advisor vs Azure Monitor&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Advisor suggests best practices to optimize costs, improve reliability, operational excellence, security and performance.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Monitor is a one stop shop for searching and viewing logs and analysing metrics.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717; font-size: 18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Service Health&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Dashboard that tells about health of services in regions across the world. Also mentions planned maintenance events and gives RCA for any issues.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Also health of individual resources can be checked.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717; font-size: 18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Service Trust Portal vs Trust Center vs Compliance Manager&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;STP: Where compliance managers/officers go to check Azure’s audit reports.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Trust Center: Where one can read Microsoft’s privacy policies, Data collection policies etc.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717; font-size: 18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Security Center vs Sentinel&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Azure Security Center plays a vital role in “Collect” and “Detect” roles. While Azure Sentinel in addition to the first two roles also designed to perform “Investigate” and “Respond” roles.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;ASC helps to setup azure and hybrid environment as securely as possible.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Sentinel has lot many connectors so it can get data from ASC and other 3&lt;sup&gt;rd&lt;/sup&gt;&amp;nbsp;party security tools also. It is a tool for infosec professionals.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Azure DDoS&lt;/b&gt;&amp;nbsp;protection, combined with application design best practices, provides defense against DDoS attacks.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Every property in Azure is protected by Azure&#39;s infrastructure DDoS (Basic) Protection.&amp;nbsp;Azure DDoS protection Standard provides additional mitigation capabilities over the Basic service tier that are tuned specifically to Azure Virtual Network resources.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg04NfHtNFjRhOF1HtIsAHkkYeNOrB8WHIJdR_ndGS4RRP_wikL8lPh4IIfusVd4gZB3OkicRcBJjs47qeJG7J2K7v70xJ4XhSkxOURl0uNHYM8Ou4HtreO1PHW4AbI708ogMRaNw/s904/Picture+6.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;400&quot; data-original-width=&quot;904&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg04NfHtNFjRhOF1HtIsAHkkYeNOrB8WHIJdR_ndGS4RRP_wikL8lPh4IIfusVd4gZB3OkicRcBJjs47qeJG7J2K7v70xJ4XhSkxOURl0uNHYM8Ou4HtreO1PHW4AbI708ogMRaNw/s16000/Picture+6.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #171717; font-size: 18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Network Resources&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;VNets can be connected to each other using vNet Peering or VPN Gateways.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;VPN Gateways can be used to connect onprem resources to Azure network or two different azure networks. Only one VPN Gateway per vnet, so obviously one VPN Gateway can have multiple connections.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Load Balancer: Can be used to distribute traffic in, out and within a vnet. Public LB can be used to let the traffic coming from internet. Private LB manages traffic between resources in the vnet.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg09q6vFqvDYIsaVSgwwPUch7-klowgYkxfhRDqZOexWtfb1a1v5U95dch8MTd-kCOkFaq9Iv4ScyfS5cCdjXg7Ow02e9Qyx4PPmJEpSh7_0xIfT_uEHoyIvvr-5CAH89AN9083ww/s904/Picture+7.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;466&quot; data-original-width=&quot;904&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg09q6vFqvDYIsaVSgwwPUch7-klowgYkxfhRDqZOexWtfb1a1v5U95dch8MTd-kCOkFaq9Iv4ScyfS5cCdjXg7Ow02e9Qyx4PPmJEpSh7_0xIfT_uEHoyIvvr-5CAH89AN9083ww/s16000/Picture+7.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Application Gateway does traffic distribution for internet applications only.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Traffic Manager uses DNS closest to user.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Points to remember&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;margin: 0cm;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;margin: 0cm 0cm 0cm 36pt; text-indent: -18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;-&lt;span style=&quot;font-size: 7pt; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Tags are not inherited&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;margin: 0cm 0cm 0cm 36pt; text-indent: -18pt;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;-&lt;span style=&quot;font-size: 7pt; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Permissions are inherited&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;</description><link>http://opreview.blogspot.com/2020/10/az-900-microsoft-azure-fundamentals.html</link><author>noreply@blogger.com (Waterfox)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs4qGhffQF1HzHN2wL-rJa3xaOHp0BBFOBJjDvjAdAkaEfDRkqPF04agBPk0JI9oiFn0KC0hqBPax-H8HWhrCv4wFl2HfaFWvuFyqSaqMBuJabUA7-Jl1xhp1t_mpKPJWi2TtKkA/s72-c/Picture+1.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-984759564699354692</guid><pubDate>Wed, 08 Apr 2020 05:20:00 +0000</pubDate><atom:updated>2020-04-08T00:05:39.158-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Airflow</category><category domain="http://www.blogger.com/atom/ns#">example</category><category domain="http://www.blogger.com/atom/ns#">REST</category><title>Example of Using SimpleHttpOperator to make POST call</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Airflow has SimpleHttpOperator which can be used to invoke REST APIs. However using this operator is not exactly straightforward.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Airflow needs to be told about the connection parameters and all the other information that is needed to connect to external system. For this we need to create Connections. Open &#39;Connections&#39; page through Admin-&amp;gt;Connections link.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIJxw9l-F8-3ofyI3R8x97ddvPS18nbt0Hu-5huQ1eU74omvJGJPgwEwvSI7clhJleOOGjFPlR8oRdMsuXrDgzKxX6afygyLkW31CU9tnhEadyZYuqYeJjU7P1QjJ3PZWGfH615w/s1600/Screenshot+2020-04-08+at+10.32.16+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1180&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIJxw9l-F8-3ofyI3R8x97ddvPS18nbt0Hu-5huQ1eU74omvJGJPgwEwvSI7clhJleOOGjFPlR8oRdMsuXrDgzKxX6afygyLkW31CU9tnhEadyZYuqYeJjU7P1QjJ3PZWGfH615w/s1600/Screenshot+2020-04-08+at+10.32.16+AM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Expand the dropdown to see the various types of connection options available. For a REST call, create an HTTP connection. Give the host URL and any other details if required.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Now when we write our task using SimpleHttpOperator we will need to refer to the connection that was just created. The task below is making a post call to&amp;nbsp;&lt;a href=&quot;https://reqres.in/api/users&quot;&gt;https://reqres.in/api/users&lt;/a&gt;&amp;nbsp;API and passing it some data in JSON format.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;myHttpTask = SimpleHttpOperator(&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp;task_id=&#39;get_op&#39;,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp;method=&#39;POST&#39;,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp;http_conn_id=&#39;dcro&#39;,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp;data=json.dumps({&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&quot;name&quot;:&quot;Morpheus&quot;,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp;&quot;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;job&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&quot;:&quot;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;Leader&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp;}),&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp;endpoint=&#39;api/users&#39;,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp;headers={&quot;Content-Type&quot;: &quot;application/json&quot;},&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp;dag=dag)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Learn more about connections here:&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://airflow.apache.org/docs/stable/howto/connection/index.html&quot;&gt;https://airflow.apache.org/docs/stable/howto/connection/index.html&lt;/a&gt;&lt;/div&gt;
</description><link>http://opreview.blogspot.com/2020/04/example-of-using-simplehttpoperator-to.html</link><author>noreply@blogger.com (Waterfox)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIJxw9l-F8-3ofyI3R8x97ddvPS18nbt0Hu-5huQ1eU74omvJGJPgwEwvSI7clhJleOOGjFPlR8oRdMsuXrDgzKxX6afygyLkW31CU9tnhEadyZYuqYeJjU7P1QjJ3PZWGfH615w/s72-c/Screenshot+2020-04-08+at+10.32.16+AM.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-3955404913346822630</guid><pubDate>Thu, 02 Jan 2020 05:48:00 +0000</pubDate><atom:updated>2020-01-01T21:48:59.102-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">application</category><category domain="http://www.blogger.com/atom/ns#">configuration</category><category domain="http://www.blogger.com/atom/ns#">istio</category><category domain="http://www.blogger.com/atom/ns#">kubernetes</category><title>How to set Trace Sampling rate for Jaeger in Istio?</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
The default trace sampling rate for Jaeger in Istio is 1%, meaning, to get a single trace in Jaeger you need to send at least 100 requests to your application. This is good for a production environment but in dev or QA you would want a better sampling rate.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, Istio doesn&#39;t give any UI or dashboard to view/edit lots of settings and options which it uses. The documentation related to this is also hard to find.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
If you are installing using &lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;istioctl&lt;/span&gt;&lt;/span&gt; then keep an eye for &#39;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;values.pilot.traceSampling&lt;/span&gt;&lt;/span&gt;&#39; option. See more details about this and other options here.&lt;/div&gt;
&lt;br /&gt;
If istio is already installed and running, we need to edit the &#39;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;istio-pilot&lt;/span&gt;&lt;/span&gt;&#39; deployment and change the &lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;PILOT_TRACE_SAMPLING&lt;/span&gt;&lt;/span&gt; environment variable by running below command:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ kubectl -n istio-system edit deploy istio-pilot&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
This opens vim (or whatever your default text editor) window with the deployment config file and lets you edit the value (which ranges from 0.0 to 100.0)&lt;br /&gt;
&lt;br /&gt;
Just make the change and save the file and the changes take effect almost immediately.&lt;/div&gt;
</description><link>http://opreview.blogspot.com/2020/01/how-to-set-trace-sampling-rate-for.html</link><author>noreply@blogger.com (Waterfox)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-2279918814013215852</guid><pubDate>Sat, 18 May 2019 19:22:00 +0000</pubDate><atom:updated>2019-05-18T12:22:14.594-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">azure</category><category domain="http://www.blogger.com/atom/ns#">Cloud</category><category domain="http://www.blogger.com/atom/ns#">containers</category><category domain="http://www.blogger.com/atom/ns#">kubernetes</category><title>How to deploy a Web App on Kubernetes cluster using Azure Kubernetes Service</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;I deployed my webapp on Azure and found that the ease and simplicity of deploying and managing an Azure Webapp Service does not come cheap!&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;So next best option was to deploy it on Kubernetes using Azure Kubernetes Service. It involves a few more steps than webapp service, but then it is cheaper and if I want to move it to Google Container Engine, I don&#39;t have to break into sweat.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;So here are the steps I followed:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Created a new Resource Group named firstResourceGroup.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;az group create --name&amp;nbsp;firstResourceGroup --location eastus&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Created new ACR in this new resource group. Let&#39;s call it &#39;firstContainerRegistry&#39;.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;az acr create --resource-group&amp;nbsp;firstResourceGroup --name firstContainerRegistry --sku Basic&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;background-color: white; font-variant-ligatures: normal; orphans: 2; widows: 2;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;On successful completion, the output is like this:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &quot;adminUserEnabled&quot;: false,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &quot;creationDate&quot;: &quot;2019-04-24T05:03:32.564208+00:00&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &quot;id&quot;: &quot;/subscriptions/1900743b-c1ab-48cd-9951-eb03f5c2378d/resourceGroups/firstResourceGroup/providers/Microsoft.ContainerRegistry/registries/firstContainerRegistry&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &quot;location&quot;: &quot;southindia&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &quot;loginServer&quot;: &quot;firstcontainerregistry.azurecr.io&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &quot;name&quot;: &quot;firstContainerRegistry&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &quot;networkRuleSet&quot;: null,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &quot;provisioningState&quot;: &quot;Succeeded&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &quot;resourceGroup&quot;: &quot;firstResourceGroup&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &quot;sku&quot;: {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;name&quot;: &quot;Basic&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;tier&quot;: &quot;Basic&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; },&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &quot;status&quot;: null,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &quot;storageAccount&quot;: null,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &quot;tags&quot;: {},&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &quot;type&quot;: &quot;Microsoft.ContainerRegistry/registries&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Note the &#39;loginServer&#39; from above output: &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;firstcontainerregistry.azurecr.io.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;We will need it in next step.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Created docker image of the app by running this command:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;docker build --tag waterfox83/personastore-flask-webapp:v1.0.0 .&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;(We have already pushed this image to docker hub using this command:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;docker push waterfox83/personastore-flask-webapp:v1.0.0&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;To use the&amp;nbsp;&lt;i&gt;personastore-flask-webapp&lt;/i&gt;&amp;nbsp;container image with ACR, the image needs to be tagged with the login server address of our container registry. This tag is used for routing when pushing container images to an image registry.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;docker tag &lt;existing image=&quot;&quot; name=&quot;&quot;&gt; &lt;new image=&quot;&quot; name=&quot;&quot;&gt;&lt;/new&gt;&lt;/existing&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #dca10d; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;docker tag waterfox83/personastore-flask-webapp:v1.0.0 &lt;a href=&quot;http://firstcontainerregistry.azurecr.io/personastore-flask-webapp:v1&quot;&gt;firstcontainerregistry.azurecr.io/personastore-flask-webapp:v1&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Pushed this image to ACR (the ACR url helps understand the destination registry)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #dca10d; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;docker push&amp;nbsp;&lt;a href=&quot;http://firstcontainerregistry.azurecr.io/personastore-flask-webapp:v1&quot;&gt;firstcontainerregistry.azurecr.io/personastore-flask-webapp:v1&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;So till now, we have created a new Container Registry and put our image in the registry by tagging it with ACR URL and pushing it.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Now we need to actually create a Kubernetes cluster. This is not a one step process unfortunately and we need to take care of the access rights first. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;To access images stored in ACR, we have to grant the AKS service principal the correct rights to pull images from ACR. Below command gives resourceID of the ACR:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;az acr show --resource-group firstResourceGroup --name firstContainerRegistry --query &quot;id&quot; --output tsv&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;and it looks like this:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;/subscriptions/1900743b-c1ab-48cd-9951-eb03f5c2378d/resourceGroups/firstResourceGroup/providers/Microsoft.ContainerRegistry/registries/firstContainerRegistry&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Now we create a service principal:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;az ad sp create-for-rbac --skip-assignment&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;appId&quot;&lt;/b&gt;: &quot;3e6c413a-4893-437d-9535-ce1d288de5ff&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;displayName&quot;&lt;/b&gt;: &quot;azure-cli-2019-04-24-05-43-54&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;name&quot;&lt;/b&gt;: &quot;http://azure-cli-2019-04-24-05-43-54&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;password&quot;&lt;/b&gt;: &quot;dbc48ad3-ee7c-4e82-b89e-c6d29be23643&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;tenant&quot;&lt;/b&gt;: &quot;83faf872-71d4-4def-ba45-29da8b57c092&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;To grant the correct access for the AKS cluster to pull images stored in ACR, assign the &#39;AcrPull&#39; role to this service principal&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&amp;nbsp;for this ACR (notice we are using the resourceId of the &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;firstContainerRegistry&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt; we found above):&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;az role assignment create --assignee 3e6c413a-4893-437d-9535-ce1d288de5ff --scope /subscriptions/1900743b-c1ab-48cd-9951-eb03f5c2378d/resourceGroups/firstResourceGroup/providers/Microsoft.ContainerRegistry/registries/firstContainerRegistry --role acrpull&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;and output should be like this:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;canDelegate&quot;&lt;/b&gt;: null,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;id&quot;&lt;/b&gt;: &quot;/subscriptions/1900743b-c1ab-48cd-9951-eb03f5c2378d/resourceGroups/firstResourceGroup/providers/Microsoft.ContainerRegistry/registries/firstContainerRegistry/providers/Microsoft.Authorization/roleAssignments/193c6b05-bf4e-4bf5-9180-0f0bec0432be&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;name&quot;&lt;/b&gt;: &quot;193c6b05-bf4e-4bf5-9180-0f0bec0432be&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;principalId&quot;&lt;/b&gt;: &quot;a87797f5-924e-418a-b668-b3ee5ab6e119&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;resourceGroup&quot;&lt;/b&gt;: &quot;firstResourceGroup&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;roleDefinitionId&quot;&lt;/b&gt;: &quot;/subscriptions/1900743b-c1ab-48cd-9951-eb03f5c2378d/providers/Microsoft.Authorization/roleDefinitions/7f951dda-4ed3-4680-a7ca-43fe172d538d&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;scope&quot;&lt;/b&gt;: &quot;/subscriptions/1900743b-c1ab-48cd-9951-eb03f5c2378d/resourceGroups/firstResourceGroup/providers/Microsoft.ContainerRegistry/registries/firstContainerRegistry&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;type&quot;&lt;/b&gt;: &quot;Microsoft.Authorization/roleAssignments&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Finally we create actual cluster:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;az aks create \&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; --resource-group firstResourceGroup \&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; --name firstCluster \&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; --node-count 1 \&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; --service-principal &lt;appid&gt; \&lt;/appid&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; --client-secret &lt;password&gt; \&lt;/password&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; --generate-ssh-keys&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;(Replace appId and password with values received when creating service principal)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;aadProfile&quot;&lt;/b&gt;: null,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;addonProfiles&quot;&lt;/b&gt;: null,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;agentPoolProfiles&quot;&lt;/b&gt;: [&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;count&quot;&lt;/b&gt;: 1,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;maxPods&quot;&lt;/b&gt;: 110,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;name&quot;&lt;/b&gt;: &quot;nodepool1&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;osDiskSizeGb&quot;&lt;/b&gt;: 100,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;osType&quot;&lt;/b&gt;: &quot;Linux&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;storageProfile&quot;&lt;/b&gt;: &quot;ManagedDisks&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;vmSize&quot;&lt;/b&gt;: &quot;Standard_DS2_v2&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;vnetSubnetId&quot;&lt;/b&gt;: null&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; ],&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;dnsPrefix&quot;&lt;/b&gt;: &quot;firstCluste-firstResourceGroup-190074&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;enableRbac&quot;&lt;/b&gt;: true,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;fqdn&quot;&lt;/b&gt;: &quot;firstcluste-firstResourceGroup-190074-2c0deb43.hcp.southindia.azmk8s.io&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;id&quot;&lt;/b&gt;: &quot;/subscriptions/1900743b-c1ab-48cd-9951-eb03f5c2378d/resourcegroups/firstResourceGroup/providers/Microsoft.ContainerService/managedClusters/firstCluster&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;kubernetesVersion&quot;&lt;/b&gt;: &quot;1.11.9&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;linuxProfile&quot;&lt;/b&gt;: {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;adminUsername&quot;&lt;/b&gt;: &quot;azureuser&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;ssh&quot;&lt;/b&gt;: {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;publicKeys&quot;&lt;/b&gt;: [&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;keyData&quot;&lt;/b&gt;: &quot;ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDXgw/bZ5spvfVtXGIXHYO8Bm751vQEym+mMyZ2WIco27nY6vSD3oYnZtTBXlaWz87M9IKMhhM/US53f2sdebvqzhkRGM/e8PfkujDh4vAe6h1EPkBrTjuQp/+NJsLoeai4reKBsuSdneV0LKQ2kluJBavCk1xz3NI+jQfqDEIAMZVIB8k+Zt6EmsdujMcg66H+MMKV5zovkeWKalOUPhBGT4bYEH8zs94/k2cPLJstOJfzswzI2VJrgkcG50beSwSWKwU9x1AXaMbcj6p+ZAi27359OF1/wUULhZeRdKxeLJu&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ]&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; },&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;location&quot;&lt;/b&gt;: &quot;southindia&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;name&quot;&lt;/b&gt;: &quot;firstCluster&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;networkProfile&quot;&lt;/b&gt;: {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;dnsServiceIp&quot;&lt;/b&gt;: &quot;10.0.0.10&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;dockerBridgeCidr&quot;&lt;/b&gt;: &quot;172.17.0.1/16&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;networkPlugin&quot;&lt;/b&gt;: &quot;kubenet&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;networkPolicy&quot;&lt;/b&gt;: null,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;podCidr&quot;&lt;/b&gt;: &quot;10.244.0.0/16&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;serviceCidr&quot;&lt;/b&gt;: &quot;10.0.0.0/16&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; },&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;nodeResourceGroup&quot;&lt;/b&gt;: &quot;MC_firstResourceGroup_firstCluster_southindia&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;provisioningState&quot;&lt;/b&gt;: &quot;Succeeded&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;resourceGroup&quot;&lt;/b&gt;: &quot;firstResourceGroup&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;servicePrincipalProfile&quot;&lt;/b&gt;: {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;clientId&quot;&lt;/b&gt;: &quot;3e6c786a-4893-437d-9535-ce1d288de5ff&quot;,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&quot;secret&quot;&lt;/b&gt;: null&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; },&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;tags&quot;&lt;/b&gt;: null,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &lt;b&gt;&quot;type&quot;&lt;/b&gt;: &quot;Microsoft.ContainerService/ManagedClusters&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Cluster has got created. Now we need to be able to connect to it using kubectl.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;az aks get-credentials --resource-group firstResourceGroup --name firstCluster&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Added kubernetes deployment yaml and created deployment.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: x-small;&quot;&gt;kubectl apply -f kubernetes-deployment.yaml&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;And that&#39;s it. The app will be deployed and be available on the external IP!&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://opreview.blogspot.com/2019/05/how-to-deploy-web-app-on-kubernetes.html</link><author>noreply@blogger.com (Waterfox)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-1704831602370244959</guid><pubDate>Fri, 22 Feb 2019 09:28:00 +0000</pubDate><atom:updated>2019-05-15T11:08:37.413-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Big Data</category><category domain="http://www.blogger.com/atom/ns#">Hadoop</category><category domain="http://www.blogger.com/atom/ns#">HDFS</category><title>Hadoop for beginners, by a beginner (Part 2) - Hadoop Architecture explained easy</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
If you have gone through &lt;a href=&quot;https://opreview.blogspot.com/2016/03/starting-hadoop-by-beginner-for-all.html&quot; target=&quot;_blank&quot;&gt;part 1&lt;/a&gt; of this series, you have used Cloudera&#39;s Hadoop Quickstart VM to setup a working instance of Hadoop and have running instance of various Hadoop services. Now it is a good time to go back to a little theory and see how different pieces fit with each other.&lt;br /&gt;
&lt;br /&gt;
HortonWorks, another Hadoop distributor, has got an &lt;a href=&quot;http://hortonworks.com/hadoop/&quot; target=&quot;_blank&quot;&gt;excellent tutorial for Hadoop&lt;/a&gt; and each of its accompanying services, which you see in below image (taken from the above URL). You can go to this page and read about Hadoop in detail.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnpH7QV0Ce3frRerIurHC6WTxg0S86WHhgFyrvOwOnyO-u_TAYImcwr2raCP8n2OF_oDmZ8zfOHXt3rcr4aW5lfvhyphenhyphenonysLFz78gegkSZunrqfw-ghZbsvng4Endsl1VpBkebe2w/s1600/hadoop_architecture.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnpH7QV0Ce3frRerIurHC6WTxg0S86WHhgFyrvOwOnyO-u_TAYImcwr2raCP8n2OF_oDmZ8zfOHXt3rcr4aW5lfvhyphenhyphenonysLFz78gegkSZunrqfw-ghZbsvng4Endsl1VpBkebe2w/s1600/hadoop_architecture.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
However I am going to summarize and simplify some of the content and definitions which make it easy for a beginner to quickly understand and proceed.&lt;br /&gt;
&lt;br /&gt;
OK, so this is the definition of Hadoop on HortonWorks site:&lt;i&gt;&amp;nbsp;Apache Hadoop® is an open source framework for distributed storage and processing of large sets of data on commodity hardware.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
You will agree that biggest challenges in any computing are very basic: storage and processing. Processing could be any operation that you do on the data. It could be merely counting the words in text files or finding more complex patterns in them. And since you can&#39;t do all the processing with your data kept in RAM all the time, you need to store it on HDD.&lt;br /&gt;
&lt;br /&gt;
Hadoop uses &#39;commodity hardware&#39; for both these purposes. The usual machines used as &#39;commodity hardware&#39; have generally better configuration than your average laptop which has 8 GB RAM, 5-7 core processors and 500 GB HDD. But the non-commodity hardware which Hadoop clusters tend to compete with, are something like this: &lt;a href=&quot;https://www.oracle.com/engineered-systems/exadata/features.html&quot; target=&quot;_blank&quot;&gt;Oracle Exadata and Exalogic machines&lt;/a&gt;&amp;nbsp;having TBs of RAM and hundreds of processors. These are extremely well engineered machines with software and hardware carefully designed to complement each other, and they cost a bomb!&lt;br /&gt;
&lt;br /&gt;
Such machines are an example of what is called &#39;vertical scaling&#39;: increasing RAM, processing power and storage. Hadoop clusters which simply add more and more machines are examples of &#39;horizontal scaling&#39; and since there is virtually no limit of how many machines you can add to a cluster, there is no limit to the processing power and storage capacity you can achieve!&lt;br /&gt;
&lt;br /&gt;
(Theoretically even Exadata machines can be clustered to create a super powerful cluster but it will be so costly that it won&#39;t be economically viable. Just imagine having a cluster where each machine costs a million dollars!)&lt;br /&gt;
&lt;br /&gt;
Let&#39;s go back to the architecture diagram shown above.&lt;br /&gt;
&lt;br /&gt;
As is very clear Data Management and Data Access modules form the core of Hadoop and are responsible for storage and processing of the data. &lt;a href=&quot;http://hortonworks.com/hadoop/hdfs/&quot; target=&quot;_blank&quot;&gt;HDFS (Hadoop Distributed File System)&lt;/a&gt; and &lt;a href=&quot;http://hortonworks.com/hadoop/yarn/&quot; target=&quot;_blank&quot;&gt;YARN (Yet Another Resource Negotiator)&lt;/a&gt; form the crux of it. &amp;nbsp;HortonWorks site actually explains these technologies quite comprehensively so read it.&lt;br /&gt;
&lt;br /&gt;
OK if you are reading this now you probably know how does HDFS work. Let&#39;s just see how it &lt;i&gt;looks &lt;/i&gt;like. Go to Hue web UI. Click on &#39;File Browser&#39;. What you see is the directory structure of the HDFS, which looks and behaves much like your local file system. &amp;nbsp;You can create and delete directories and files, change directories and alter permissions for them, just like files on your local files.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpZcpQ7PCtzxr4QNNXlXeave65NpqvTeKQESCEpM54CYc8wFQOTvObc_TfLKc3Iqr1k2ObnpMUuS-oIucMka8T4hET-9PgreSmSPnqR3uGqmqFQy3XO5khPUqda526sDfVHEoDxw/s1600/hdfs.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;362&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpZcpQ7PCtzxr4QNNXlXeave65NpqvTeKQESCEpM54CYc8wFQOTvObc_TfLKc3Iqr1k2ObnpMUuS-oIucMka8T4hET-9PgreSmSPnqR3uGqmqFQy3XO5khPUqda526sDfVHEoDxw/s640/hdfs.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
You can do all of this on terminal using shell commands as well.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;hadoop fs -mkdir newDirectory //create a new directory on HDFS&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;hadoop fs -put /home/someFile /user/cloudera/newDirectory //copy a file from your local file system to HDFS directory&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;hadoop fs -get /user/cloudera/newDirectory&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;/home/someFile //download a file from HDFS directory to local file system.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;There are lot many commands which you can check &lt;a href=&quot;http://princetonits.com/blog/technology/33-frequently-used-hdfs-shell-commands/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;show about=&quot;&quot; and=&quot;&quot; hdfs=&quot;&quot; hue=&quot;&quot; it=&quot;&quot; of=&quot;&quot; on=&quot;&quot; snapshots=&quot;&quot; talk=&quot;&quot;&gt;&lt;/show&gt;&lt;/div&gt;
</description><link>http://opreview.blogspot.com/2019/02/hadoop-for-beginners-by-beginner-part-2.html</link><author>noreply@blogger.com (Waterfox)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnpH7QV0Ce3frRerIurHC6WTxg0S86WHhgFyrvOwOnyO-u_TAYImcwr2raCP8n2OF_oDmZ8zfOHXt3rcr4aW5lfvhyphenhyphenonysLFz78gegkSZunrqfw-ghZbsvng4Endsl1VpBkebe2w/s72-c/hadoop_architecture.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-4397788761847184856</guid><pubDate>Fri, 22 Feb 2019 09:27:00 +0000</pubDate><atom:updated>2019-03-09T00:29:18.164-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">&quot;Google Cloud Datastore&quot;</category><category domain="http://www.blogger.com/atom/ns#">&quot;Google Cloud Platform&quot;</category><category domain="http://www.blogger.com/atom/ns#">Database</category><category domain="http://www.blogger.com/atom/ns#">Dataflow</category><title>How to delete all records from a Google Cloud Datastore Entity?</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; padding: 0px; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Google has recently given a new feature known as &#39;Dataflow Templates&#39; which have got a number of tasks that you can do without writing any code.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Click the link on top of Dataflow page:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyrercNkIpbfep5rAFWs5jFKbIcy65I7qyJ0f91jqEARNEt4qEVuzkL4-aqStBBgM3PUqcKmFfUkWAW3oWDscr2ANYVeiYMWkVFsmM728xWq1Sljf5BU2qE7LubRfzIJlQ5fj7LQ/s1600/image2019-2-21_12-12-25.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;194&quot; data-original-width=&quot;1156&quot; height=&quot;66&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyrercNkIpbfep5rAFWs5jFKbIcy65I7qyJ0f91jqEARNEt4qEVuzkL4-aqStBBgM3PUqcKmFfUkWAW3oWDscr2ANYVeiYMWkVFsmM728xWq1Sljf5BU2qE7LubRfzIJlQ5fj7LQ/s400/image2019-2-21_12-12-25.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span class=&quot;confluence-embedded-file-wrapper confluence-embedded-manual-size&quot; style=&quot;display: inline-block; max-width: none; position: relative;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;You can select task from the list of available options:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQOFqWd7ptyRXFiUzTUQCtMGIzHaM4itEJX-mFVpj1Tz3FatwILCp7iPpnSMBHRXu4fIZsqk3BnY1H9PUwJccEywDprzRl6PA_zQ7XewmLSm0UgCMlykOJ1hdFOO-m5xJMyeg2DA/s1600/Screenshot+2019-02-21+at+12.13.43+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1336&quot; data-original-width=&quot;992&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQOFqWd7ptyRXFiUzTUQCtMGIzHaM4itEJX-mFVpj1Tz3FatwILCp7iPpnSMBHRXu4fIZsqk3BnY1H9PUwJccEywDprzRl6PA_zQ7XewmLSm0UgCMlykOJ1hdFOO-m5xJMyeg2DA/s640/Screenshot+2019-02-21+at+12.13.43+PM.png&quot; width=&quot;475&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span class=&quot;confluence-embedded-file-wrapper confluence-embedded-manual-size&quot; style=&quot;display: inline-block; max-width: none; position: relative;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Select &#39;Bulk Delete Entities in Cloud Datastore&#39; from the list.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrJmQCw1OkJfwjcwxkyWfU8ECVIfpS5S3L8sRyXSXdqat6DzIWpCjmJEsFGvnKGB-bxCjsFEoT6-wKpcaBMCIQ1W69hucae_-kZmMlVNm9PxPuStjsgiBupJtNBvceeV8xTgBkaw/s1600/image2019-2-21_12-15-38.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1302&quot; data-original-width=&quot;974&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrJmQCw1OkJfwjcwxkyWfU8ECVIfpS5S3L8sRyXSXdqat6DzIWpCjmJEsFGvnKGB-bxCjsFEoT6-wKpcaBMCIQ1W69hucae_-kZmMlVNm9PxPuStjsgiBupJtNBvceeV8xTgBkaw/s400/image2019-2-21_12-15-38.png&quot; width=&quot;298&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span class=&quot;confluence-embedded-file-wrapper confluence-embedded-manual-size&quot; style=&quot;display: inline-block; max-width: none; position: relative;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Fill in the required parameters. Instead of table name, it asks for GQL query. For selecting all the entities in a table give &quot;select * from &lt;tablename&gt;&quot;&lt;servicename&gt;&lt;tablename&gt;.&lt;/tablename&gt;&lt;/servicename&gt;&lt;/tablename&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h4 id=&quot;HowtodeleteallrecordsfromaDatastoreEntity-IMPORTANT:Intheoptionalparameters,youshouldspecifythenamespace/tenantforwhichyouwanttodeletetheentities.NotspecifyingnamespacewilldeleteALLtherecordsfromtheselectedtableacrossthetenants.&quot; style=&quot;background-color: white; color: #333333; font-size: 14px; line-height: 1.42857; margin: 20px 0px 0px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;
IMPORTANT: In the optional parameters, you should specify the namespace/tenant for which you want to delete the entities.&amp;nbsp;&lt;span style=&quot;color: red;&quot;&gt;Not specifying namespace will delete ALL the records from the selected table across the tenants&lt;/span&gt;.&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Once done, press &#39;Run Job&#39;. Dataflow will launch and do the cleanup.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMiEiV8TH6VgSbOKqBkyyA0pQfKsv8L9b2DVZmAD-jJyoB3UocC7abusN9izl_SVrWs2QnQYcody6idTwq4ru-UiS182uNwvP3BYlQTqvoNTCOymhFT8gB7yJnG4NB4ZpL-k_vuw/s1600/image2019-2-21_12-21-12.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;774&quot; data-original-width=&quot;574&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMiEiV8TH6VgSbOKqBkyyA0pQfKsv8L9b2DVZmAD-jJyoB3UocC7abusN9izl_SVrWs2QnQYcody6idTwq4ru-UiS182uNwvP3BYlQTqvoNTCOymhFT8gB7yJnG4NB4ZpL-k_vuw/s400/image2019-2-21_12-21-12.png&quot; width=&quot;296&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span class=&quot;confluence-embedded-file-wrapper confluence-embedded-manual-size&quot; style=&quot;display: inline-block; max-width: none; position: relative;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;You can read documentation&amp;nbsp;&lt;a class=&quot;external-link&quot; href=&quot;https://cloud.google.com/dataflow/docs/guides/templates/provided-templates&quot; rel=&quot;nofollow&quot; style=&quot;color: #3572b0;&quot;&gt;here&lt;/a&gt;. Source code of all templates is also on&amp;nbsp;&lt;a class=&quot;external-link&quot; href=&quot;https://github.com/GoogleCloudPlatform/DataflowTemplates/tree/master/src/main/java/com/google/cloud/teleport/templates&quot; rel=&quot;nofollow&quot; style=&quot;color: #3572b0;&quot;&gt;github&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://opreview.blogspot.com/2019/02/google-has-recently-given-new-feature.html</link><author>noreply@blogger.com (Waterfox)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyrercNkIpbfep5rAFWs5jFKbIcy65I7qyJ0f91jqEARNEt4qEVuzkL4-aqStBBgM3PUqcKmFfUkWAW3oWDscr2ANYVeiYMWkVFsmM728xWq1Sljf5BU2qE7LubRfzIJlQ5fj7LQ/s72-c/image2019-2-21_12-12-25.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-9146303403894240573</guid><pubDate>Fri, 22 Feb 2019 09:16:00 +0000</pubDate><atom:updated>2019-03-08T22:52:30.047-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">&quot;Google App Engine&quot;</category><category domain="http://www.blogger.com/atom/ns#">containers</category><category domain="http://www.blogger.com/atom/ns#">Docker</category><category domain="http://www.blogger.com/atom/ns#">Google</category><category domain="http://www.blogger.com/atom/ns#">Heap Dump</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Memory Analysis</category><title>How to get heapdump for any microservice running in Docker container in Google App Engine</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Getting heapdump for our services is very important for doing any memory profiling to debug any leaks or performance issues. Unfortunately it is not that straight forward. Fortunately, it is not impossible either!&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;We need to SSH in the container in which our service is running. Go to App Engine → Instances page and select your service from the &#39;services&#39; dropdown.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span class=&quot;confluence-embedded-file-wrapper confluence-embedded-manual-size&quot; style=&quot;display: inline-block; max-width: none; position: relative;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZCblaigwdZsWxOibs_L1la4fOwb5OMLs0dsmDskrp88KtBJQL0TxN58ujUnYFaXmELzp9jk0ekWqIiKLVsikCYFWjSs_ObmdqdzfPibZwPiv4j-4NiMYPCh3aOndafhgQMdaKOQ/s1600/image2019-2-21_12-27-35.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1182&quot; data-original-width=&quot;1550&quot; height=&quot;305&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZCblaigwdZsWxOibs_L1la4fOwb5OMLs0dsmDskrp88KtBJQL0TxN58ujUnYFaXmELzp9jk0ekWqIiKLVsikCYFWjSs_ObmdqdzfPibZwPiv4j-4NiMYPCh3aOndafhgQMdaKOQ/s400/image2019-2-21_12-27-35.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;SSH into any of the instances:&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibMmctU83Bf8P5EKrMnQHqi7xbHG6h8a9o_I6cWIdxFMh0Yp2ujk762eBfQeatm67EHzARnjJ-XHzSXfVE9etfPv3kzsooxd9iPX0LyeHZDgR8jCTBndeSFWBXUwd6tYpyewN-nQ/s1600/image2019-2-21_12-28-37.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;330&quot; data-original-width=&quot;1600&quot; height=&quot;131&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibMmctU83Bf8P5EKrMnQHqi7xbHG6h8a9o_I6cWIdxFMh0Yp2ujk762eBfQeatm67EHzARnjJ-XHzSXfVE9etfPv3kzsooxd9iPX0LyeHZDgR8jCTBndeSFWBXUwd6tYpyewN-nQ/s640/image2019-2-21_12-28-37.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span class=&quot;confluence-embedded-file-wrapper confluence-embedded-manual-size&quot; style=&quot;display: inline-block; max-width: none; position: relative;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Ignore this and SSH into VM.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbFrSkwOCQsEmKjFciv4K_sHtH47NpHkVOEt7ZXs9vuKeX2BcgW1MVvJb4F3P7WI-mQXB7gtDFZFLpiQpOc83CRJC5MR8kGT1eWSXI1jmoVPhEYVXN3rt-J0av5XGJK_2ajFSLkQ/s1600/image2019-2-21_12-29-14.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;492&quot; data-original-width=&quot;1056&quot; height=&quot;296&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbFrSkwOCQsEmKjFciv4K_sHtH47NpHkVOEt7ZXs9vuKeX2BcgW1MVvJb4F3P7WI-mQXB7gtDFZFLpiQpOc83CRJC5MR8kGT1eWSXI1jmoVPhEYVXN3rt-J0av5XGJK_2ajFSLkQ/s640/image2019-2-21_12-29-14.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span class=&quot;confluence-embedded-file-wrapper confluence-embedded-manual-size&quot; style=&quot;display: inline-block; max-width: none; position: relative;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Once you SSH, you should be able to see cloud shell as below. If you are logging in for the first time, there may be some questions asking for SSH key. You can leave the key blank and continue.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0jQgSqYyCnL6RPTwosw34vFZEUvS5vtzWSwoBl6DlM_2BpVCBV5sRH_MLjp7OJZMNgnzxbl3qUKFq6bCHFZNzTZrF8slID2EJtya320UvI9CHireim5EaZ8Odpsii-BGmcXbPEg/s1600/image2019-2-21_12-30-42.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1200&quot; data-original-width=&quot;1600&quot; height=&quot;476&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0jQgSqYyCnL6RPTwosw34vFZEUvS5vtzWSwoBl6DlM_2BpVCBV5sRH_MLjp7OJZMNgnzxbl3qUKFq6bCHFZNzTZrF8slID2EJtya320UvI9CHireim5EaZ8Odpsii-BGmcXbPEg/s640/image2019-2-21_12-30-42.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;This shell is the Linux VM on which our docker image is running. We need to find out more details about it before we can do anything with it.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;arial&amp;quot; , sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm53XBDtK5h1WqX8bSnMeIdeHUDcxzEOSfjZe0cOevOgReUxNfqd2asDxIVaGBeikJq_Hu8LzrKgr6eBiDVkBFkQab6_Ijkj-T7kK8hGiDuP3-QjG4btYB4uRzXkec4gSwJad7nQ/s1600/image2019-2-21_12-33-23.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;632&quot; data-original-width=&quot;1600&quot; height=&quot;251&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm53XBDtK5h1WqX8bSnMeIdeHUDcxzEOSfjZe0cOevOgReUxNfqd2asDxIVaGBeikJq_Hu8LzrKgr6eBiDVkBFkQab6_Ijkj-T7kK8hGiDuP3-QjG4btYB4uRzXkec4gSwJad7nQ/s640/image2019-2-21_12-33-23.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;There are a bunch of images running. We are interested in the first one (&#39;us.gcr.io/.....&#39;) running in a container named &#39;gaeapp&#39;. Now we need to go inside this docker container running our service. Below command executes &#39;/bin/bash&#39; command in the container and we get a bash shell inside container. (Call it VMception!)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span class=&quot;confluence-embedded-file-wrapper confluence-embedded-manual-size&quot; style=&quot;display: inline-block; max-width: none; position: relative;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_-HSw70QopiL0e6Ox8qqiNepPc3kK0RzwQcV4XEQOH1A4bogKbrskRNT393-6UV-JAZEJcBqFLFL-F-kjfpOUq6RvhNFk7EBLt730nWUiuTKBbMnHNrdwd3L9FvU3XUgHlUkGoQ/s1600/image2019-2-21_12-37-17.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;128&quot; data-original-width=&quot;1386&quot; height=&quot;57&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_-HSw70QopiL0e6Ox8qqiNepPc3kK0RzwQcV4XEQOH1A4bogKbrskRNT393-6UV-JAZEJcBqFLFL-F-kjfpOUq6RvhNFk7EBLt730nWUiuTKBbMnHNrdwd3L9FvU3XUgHlUkGoQ/s640/image2019-2-21_12-37-17.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Create a directory here to be able to store the dump in and give it all access.&lt;/span&gt;&lt;/div&gt;
&lt;blockquote style=&quot;background-color: white; border-left: 1px solid rgb(204, 204, 204); color: #707070; font-family: Arial, sans-serif; font-size: 14px; margin: 10px 0px 0px 19px; padding: 10px 20px;&quot;&gt;
&lt;pre style=&quot;font-family: ConfluenceInstalledFont, monospace; padding: 0px;&quot;&gt;mkdir dump_dir.&lt;/pre&gt;
&lt;pre style=&quot;font-family: ConfluenceInstalledFont, monospace; margin-top: 10px; padding: 0px;&quot;&gt;chmod 777 dump_dir&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;We will use it later.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Now in this VM we can check the processes running and the users running those. Give &#39;top&#39; command on the shell and you see this:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span class=&quot;confluence-embedded-file-wrapper confluence-embedded-manual-size&quot; style=&quot;display: inline-block; max-width: none; position: relative;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;As we can see &#39;jetty&#39; user is running a java process. This is what we are interested in. We would now try to get heapdump of this process. For this we need to connect as the user &#39;jetty&#39;. Currently we are logged in as user &#39;root&#39; and we can&#39;t take the dump. Press Ctrl+C to exit this screen and get back to the shell.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;blockquote style=&quot;background-color: white; border-left: 1px solid rgb(204, 204, 204); color: #707070; font-size: 14px; margin: 10px 0px 0px 19px; padding: 10px 20px;&quot;&gt;
&lt;pre style=&quot;font-family: ConfluenceInstalledFont, monospace; padding: 0px;&quot;&gt;su - jetty&lt;/pre&gt;
&lt;pre style=&quot;font-family: ConfluenceInstalledFont, monospace; margin-top: 10px; padding: 0px;&quot;&gt;/bin/bash&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;We get to the shell now as &#39;jetty&#39;.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span class=&quot;confluence-embedded-file-wrapper confluence-embedded-manual-size&quot; style=&quot;display: inline-block; max-width: none; position: relative;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTV__mnM-YHTeyiZ8IzHtnqMI8gYIO4XL_8wUFvsDvUQ0uh2HwtTlaDjTj4e9Lc7cmXvYVGGnAXgflHcKwaq1Z0gbfcBneKUCVOphqmfzWL6ZqkKmrXVP0gKd2cCnLdYjNEznbKA/s1600/image2019-2-21_15-14-17.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;152&quot; data-original-width=&quot;866&quot; height=&quot;70&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTV__mnM-YHTeyiZ8IzHtnqMI8gYIO4XL_8wUFvsDvUQ0uh2HwtTlaDjTj4e9Lc7cmXvYVGGnAXgflHcKwaq1Z0gbfcBneKUCVOphqmfzWL6ZqkKmrXVP0gKd2cCnLdYjNEznbKA/s400/image2019-2-21_15-14-17.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Goto the directory we created earlier.&lt;/span&gt;&lt;/div&gt;
&lt;blockquote style=&quot;background-color: white; border-left: 1px solid rgb(204, 204, 204); color: #707070; font-family: Arial, sans-serif; font-size: 14px; margin: 10px 0px 0px 19px; padding: 10px 20px;&quot;&gt;
&lt;pre style=&quot;font-family: ConfluenceInstalledFont, monospace; padding: 0px;&quot;&gt;cd jda/scripts/dump_dir&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;All set to take the dump! Here we need to give the PID of the java process we found above (50 in this example)&lt;/span&gt;&lt;/div&gt;
&lt;blockquote style=&quot;background-color: white; border-left: 1px solid rgb(204, 204, 204); color: #707070; font-family: Arial, sans-serif; font-size: 14px; margin: 10px 0px 0px 19px; padding: 10px 20px;&quot;&gt;
&lt;pre style=&quot;font-family: ConfluenceInstalledFont, monospace; padding: 0px;&quot;&gt;jmap -dump:live,file=dump_dir/&lt;filename .prof=&quot;&quot;&gt; 50&lt;/filename&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;If all is well, you should be able to get the hprof file created in this directory.&amp;nbsp;&lt;strong&gt;Stage 1 is now over&lt;/strong&gt;. Stage 2 is getting this file to your VM.&lt;/span&gt;&lt;/div&gt;
&lt;blockquote style=&quot;background-color: white; border-left: 1px solid rgb(204, 204, 204); color: #707070; font-family: Arial, sans-serif; font-size: 14px; margin: 10px 0px 0px 19px; padding: 10px 20px;&quot;&gt;
&lt;div style=&quot;padding: 0px;&quot;&gt;
Write &#39;exit&#39; on the bash shell to exit from the bash shell of jetty user.&lt;/div&gt;
&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
Write &#39;exit&#39; again on the prompt to exit from the jetty user.&lt;/div&gt;
&lt;div style=&quot;margin-top: 10px; padding: 0px;&quot;&gt;
Write &#39;exit&#39; again on the bash shell to exit from the root user and from the docker.&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Now you are on the VM where you logged first. Copy the file to this vm file system from the docker file system and give it all access.&lt;/span&gt;&lt;/div&gt;
&lt;blockquote style=&quot;background-color: white; border-left: 1px solid rgb(204, 204, 204); color: #707070; font-family: Arial, sans-serif; font-size: 14px; margin: 10px 0px 0px 19px; padding: 10px 20px;&quot;&gt;
&lt;pre style=&quot;font-family: ConfluenceInstalledFont, monospace; padding: 0px;&quot;&gt;docker cp gaeapp:/jda/scripts/dump_dir/&lt;filename .prof=&quot;&quot;&gt; .&lt;/filename&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: ConfluenceInstalledFont, monospace; margin-top: 10px; padding: 0px;&quot;&gt;chmod 777 filename.prof&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;strong&gt;Stage 2 is now over&lt;/strong&gt;. Stage 3 is now getting this file to your local machine. (I know, this seems like a never ending process but please stay with me!)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;On a shell on your local machine give following commands. Second command is optional if you have already a default project configured.&lt;/span&gt;&lt;/div&gt;
&lt;blockquote style=&quot;background-color: white; border-left: 1px solid rgb(204, 204, 204); color: #707070; font-family: Arial, sans-serif; font-size: 14px; margin: 10px 0px 0px 19px; padding: 10px 20px;&quot;&gt;
&lt;pre style=&quot;font-family: ConfluenceInstalledFont, monospace; padding: 0px;&quot;&gt;gcloud auth login&lt;/pre&gt;
&lt;pre style=&quot;font-family: ConfluenceInstalledFont, monospace; margin-top: 10px; padding: 0px;&quot;&gt;gcloud init&lt;/pre&gt;
&lt;pre class=&quot;p1&quot; style=&quot;font-family: ConfluenceInstalledFont, monospace; margin-top: 10px; padding: 0px;&quot;&gt;gcloud app instances scp --service &lt;service name=&quot;&quot;&gt; --version &lt;deployed no.=&quot;&quot; version=&quot;&quot;&gt; &lt;a class=&quot;external-link&quot; href=&quot;http://aef-metadata--service-v171-qhl0/home/abhishek_asthana/ankit_hprof.bin&quot; rel=&quot;nofollow&quot; style=&quot;color: #3572b0; text-decoration-line: none;&quot;&gt;&lt;instance name=&quot;&quot;&gt;:&lt;path on=&quot;&quot; vm=&quot;&quot;&gt;/&amp;lt;&lt;/path&gt;&lt;/instance&gt;&lt;/a&gt;filename&amp;gt; &lt;/deployed&gt;&lt;/service&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;For example, in my case above command looks like this:&lt;/span&gt;&lt;/div&gt;
&lt;blockquote style=&quot;background-color: white; border-left: 1px solid rgb(204, 204, 204); color: #707070; font-size: 14px; margin: 10px 0px 0px 19px; padding: 10px 20px;&quot;&gt;
&lt;pre style=&quot;font-family: ConfluenceInstalledFont, monospace; padding: 0px;&quot;&gt;gcloud app instances scp --service metadata-service --version v171 &lt;a class=&quot;external-link&quot; href=&quot;http://aef-metadata--service-v171-qhl0/home/abhishek_asthana/ankit_hprof.bin&quot; rel=&quot;nofollow&quot; style=&quot;color: #3572b0; text-decoration-line: none;&quot;&gt;aef-metadata--service-v171-qhl0:/home/abhishek_asthana/dump_hprof.bin&lt;/a&gt; dump.hprof&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-size: 14px; margin-top: 10px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;strong&gt;And with this Stage 3 is also over&lt;/strong&gt;. You have finally got the hprof file on your machine and can now use any memory profiler for analysis.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://opreview.blogspot.com/2019/02/how-to-get-heapdump-for-any.html</link><author>noreply@blogger.com (Waterfox)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZCblaigwdZsWxOibs_L1la4fOwb5OMLs0dsmDskrp88KtBJQL0TxN58ujUnYFaXmELzp9jk0ekWqIiKLVsikCYFWjSs_ObmdqdzfPibZwPiv4j-4NiMYPCh3aOndafhgQMdaKOQ/s72-c/image2019-2-21_12-27-35.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-3685232988343262179</guid><pubDate>Sun, 01 Jul 2018 18:00:00 +0000</pubDate><atom:updated>2018-07-01T11:08:58.749-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Apache</category><category domain="http://www.blogger.com/atom/ns#">Beam</category><category domain="http://www.blogger.com/atom/ns#">Hadoop</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">spark</category><category domain="http://www.blogger.com/atom/ns#">Tutorial</category><title>Running Apache Beam pipeline using Spark Runner on a local standalone Spark Cluster</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
The best thing about Apache Beam (&lt;b&gt;B&lt;/b&gt;atch + Str&lt;b&gt;eam&lt;/b&gt;) is that multiple runners can be plugged in and same pipeline can be run using Spark, Flink or Google Cloud Dataflow.&lt;br /&gt;
&lt;br /&gt;
If you are a beginner like me and want to run a simple pipeline using Spark Runner then whole setup may be tad daunting.&lt;br /&gt;
&lt;br /&gt;
Start with Beam&#39;s &lt;a href=&quot;https://beam.apache.org/get-started/quickstart-java/&quot; target=&quot;_blank&quot;&gt;WordCount examples&lt;/a&gt;&amp;nbsp;which help you quickstart with running pipelines using different types of runners. There are code snippets for running the same pipeline using different types of runners but here the code is running on your local system using Spark libraries which is good for testing and debugging pipeline. If you want to run the pipeline on a Spark cluster you need to do a little more work!&lt;br /&gt;
&lt;br /&gt;
Let&#39;s start by setting up a simple standalone single-node cluster on our local machine. Extending the cluster is as easy as running a command on another machine, which you want to add to cluster.&lt;br /&gt;
&lt;br /&gt;
Start with the obvious: install spark on your machine! (Remember to have Java and Scala downloaded and installed beforehand.)&lt;br /&gt;
&lt;br /&gt;
To setup master and slave nodes, follow these steps:&lt;br /&gt;
&lt;br /&gt;
1. Go to “&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;SPARK_HOME/libexec/conf/&lt;/span&gt;” directory.&lt;br /&gt;
(SPARK_HOME is the complete path to root directory of Apache Spark in your machine.)&lt;br /&gt;
&lt;br /&gt;
2. Edit the&amp;nbsp;spark-env.sh.template file and save it as spark-env.sh.&lt;br /&gt;
Add following line:&amp;nbsp;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;SPARK_MASTER_HOST=&#39;&lt;your ip=&quot;&quot; local=&quot;&quot;&gt;&#39;&lt;/your&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
3. Goto SPARK_HOME/libexec/sbin and execute the following command.&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ ./start-master.sh&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
4. The output of above command will be a log file. Go to the log file and check the port at which spark master webUI is running. For me it is 8080.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisij3p9ptrQbivw48CVQg4KhYfSe0bMv9rS1CucbEjSl_njKWW-wCBXQjW8c_0we15eWBUKdDsIZxZBAOp5G5oWdi9SEIkiD7SR-Mf4h5AoemcyRQdN7BCzhpnz7n6meUXd5K5sA/s1600/Screen+Shot+2018-07-01+at+11.06.09+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;685&quot; data-original-width=&quot;1600&quot; height=&quot;272&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisij3p9ptrQbivw48CVQg4KhYfSe0bMv9rS1CucbEjSl_njKWW-wCBXQjW8c_0we15eWBUKdDsIZxZBAOp5G5oWdi9SEIkiD7SR-Mf4h5AoemcyRQdN7BCzhpnz7n6meUXd5K5sA/s640/Screen+Shot+2018-07-01+at+11.06.09+PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Don&#39;t confuse this with 7077. That is the port at which master will listen for slave nodes.&lt;br /&gt;
&lt;br /&gt;
5. Now we need to setup slave node for above master. On the machine where you want to setup the slave repeat the steps #1 and #2 above. If you are setting the slave on same machine, then no need to do these.&lt;br /&gt;
&lt;br /&gt;
6. &amp;nbsp;Goto SPARK_HOME/libexec/sbin and execute the following command.&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;$ ./start-slave.sh spark://&lt;your .master.ip.address=&quot;&quot;&gt;:7077&lt;/your&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
7. Once again verify the logs. Now if you go to the master&#39;s webUI, you will see your slave listed under &#39;Workers&#39;.&lt;br /&gt;
&lt;br /&gt;
Our cluster is setup and we need to now run the same Beam WordCount examples on this cluster. We need to create a jar (which will be submitted to spark cluster) which bundles our code with required spark libraries. Without these libraries Beam will not accept spark-runner as an eligible runner for the pipeline and will throw an error for this when you run the pipeline.&lt;br /&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;mvn package -Pspark-runner&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 12px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Now submit the job with same parameters as earlier.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;helvetica neue&amp;quot;; font-size: 12px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;br/&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;spark-submit --class org.apache.beam.examples.WordCount --master spark://&lt;your .master.ip.address=&quot;&quot;&gt;:7077 target/word-count-beam-bundled-0.1.jar --runner=SparkRunner --inputFile=pom.xml --output=counts&lt;/your&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 12px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;

While the code is running you can now refresh the master&#39;s webUI and you will see an entry in running applications!&amp;nbsp;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;caret-color: rgb(0, 0, 0); color: black; font-family: inherit; font-size: small;&quot;&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
This should help you start the learning. Any questions or comments, please leave in comments section.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 12px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://opreview.blogspot.com/2018/07/running-apache-beam-pipeline-using.html</link><author>noreply@blogger.com (Waterfox)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisij3p9ptrQbivw48CVQg4KhYfSe0bMv9rS1CucbEjSl_njKWW-wCBXQjW8c_0we15eWBUKdDsIZxZBAOp5G5oWdi9SEIkiD7SR-Mf4h5AoemcyRQdN7BCzhpnz7n6meUXd5K5sA/s72-c/Screen+Shot+2018-07-01+at+11.06.09+PM.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-258429310381264106</guid><pubDate>Sat, 30 Dec 2017 16:14:00 +0000</pubDate><atom:updated>2017-12-30T08:14:41.603-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CI/CD</category><category domain="http://www.blogger.com/atom/ns#">containers</category><category domain="http://www.blogger.com/atom/ns#">Docker</category><category domain="http://www.blogger.com/atom/ns#">Jenkins</category><category domain="http://www.blogger.com/atom/ns#">software</category><title>Running Jenkins inside Docker</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Whether you are a beginner to Jenkins and want to have your setup done quickly or you want to harness the full power of containers by running Jenkins in Docker, this simple step-by-step tutorial is for you.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 17px; font-stretch: normal; line-height: normal; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal; text-align: left;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Running Jenkins in Docker&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;We will pull Jenkins Docker image from Docker repository:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;docker pull jenkins&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Using below command we will map ‘jenkins’ directory in my working directory &lt;/span&gt;&lt;span style=&quot;font-family: Helvetica Neue;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 13px;&quot;&gt;$PWD/jenkins)&lt;/span&gt;&lt;span style=&quot;font-family: Helvetica Neue;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;to&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Menlo; font-size: 13px;&quot;&gt;/var/jenkins_home&lt;/span&gt;&lt;span style=&quot;font-family: Helvetica Neue;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;directory in container and map port 49001 on host to 8080 on container.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;docker run -d -p 49001:8080 -v $PWD/jenkins:/var/jenkins_home:z -t jenkins&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Now to run jenkins, just give &lt;span style=&quot;color: #e4af0a;&quot;&gt;&lt;a href=&quot;http://localhost:49001/&quot;&gt;http://localhost:49001/&lt;/a&gt;&lt;/span&gt;. You can proceed with the setup and management of Jenkins now.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Your entire Jenkins setup has been created in the &#39;jenkins&#39; directory which you mapped earlier. Go ahead and take a look!&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal; margin-bottom: 2px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Packaging app in Docker and pushing to repository&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal; margin-bottom: 2px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal; margin-bottom: 2px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Sometimes you would want to package your app as a Docker image and publish to the Docker Hub (or any other container registry of your choice) as the final step of your build process. If so, follow this step.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: #454545;&quot;&gt;We will use CloudBees Docker Build and Publish Plugin. Go ahead and install it using the &lt;/span&gt;&lt;span style=&quot;color: #073763;&quot;&gt;Manage Jenkins -&amp;gt; Manage Plugins -&amp;gt; Available tab&lt;/span&gt;&lt;span style=&quot;color: #454545;&quot;&gt; in your Jenkins UI.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;To publish to Docker, our jenkins host machine needs to have docker client installed. For this we need to downloaded a different image which is based on Jenkins and also has docker client.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;You can stop the docker container which you started in previous step.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;To create this new image we will use following dockerfile:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;FROM jenkins&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;USER root&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; min-height: 15px;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;RUN mkdir -p /tmp/download &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;curl -L https://get.docker.com/builds/Linux/x86_64/docker-1.13.1.tgz | tar -xz -C /tmp/download &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;rm -rf /tmp/download/docker/dockerd &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;mv /tmp/download/docker/docker* /usr/local/bin/ &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;rm -rf /tmp/download &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;groupadd -g 999 docker &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;usermod -aG staff,docker jenkins&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; min-height: 15px;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;user jenkins&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;We create an image named ‘jenkins-docker’ using the above dockerfile with following command. You can change the image name to whatever you want. The &#39;.&#39; implies that the dockerfile is present in this directory. If your dockerfile is in some other directory please give that path.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;docker build -t jenkins-docker .&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;We now run a container with this image:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;sudo docker run -d -p 49001:8080 -v $PWD/jenkins:/var/jenkins_home:z -v /var/run/docker.sock:/var/run/docker.sock -t jenkins-docker&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; min-height: 15px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;In this command we are mapping the docker socket for docker on our machine with the docker socket in the image.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Once this is done, we add ‘Docker Build and Publish’ step in the build steps. We give the repository name (of Docker Hub) to which we want to publish, and its credentials. Now when the build runs, it packages the app to a Docker image and publishes to Docker Hub.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal; margin-bottom: 2px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Jenkins Job DSL&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;DSL: Domain Specific Language&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Writing a Jenkins job in Groovy instead of doing it from UI. Writing a simple job of getting a Node JS app from github and doing ‘npm install’ using DSL:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;job(‘NodeJS App’) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; min-height: 15px;&quot;&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;&lt;span style=&quot;color: #073763;&quot;&gt;	&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;scm {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;git(‘&lt;a href=&quot;git://github.com/%3Crepo-path%3E&#39;&quot;&gt;git://github.com/&lt;repo-path&gt;&#39;&lt;/repo-path&gt;&lt;/a&gt;) { node -&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;node / gitConfigName(‘UserName’)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;node / gitConfigEmail(‘usermail’)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; min-height: 15px;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;triggers {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;scm(‘H/5 * * * *’) //How many times to run? Every 5 mins&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; min-height: 15px;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;wrappers {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;nodejs(‘nodejs’) //name of NodeJS install in Jenkins&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; min-height: 15px;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;steps {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;shell(“npm install”)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;To setup job DSL, we create a new Freestyle project and add a new build step ‘Process Job DSLs’. There either we can copy the script or if we have specified any repo in Source Code Management, give the path of the Job DSL groovy script.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;If we run the build now, it will fail with error: ‘script not yet approved for use’. To approve, go to ‘In-process Script Approval’ and approve the script. Once this build succeeds, we will see a new Node JS project created (as we specified in the DSL script)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal; margin-bottom: 2px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Jenkins Pipeline DSL&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;For creating a pipeline which pulls code from SCM, runs tests and pushes to Docker, we have forked a project ‘docker-demo’ and altered its Jenkinsfile:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;node {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; def commit_id&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; stage(&#39;Preparation&#39;) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; checkout scm&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; sh &quot;git rev-parse --short HEAD &amp;gt; .git/commit-id&quot; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; commit_id = readFile(&#39;.git/commit-id&#39;).trim()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; stage(&#39;test&#39;) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; nodejs(nodeJSInstallationName: &#39;nodejs&#39;) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; sh &#39;npm install --only=dev&#39;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; sh &#39;npm test&#39;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; stage(&#39;docker build/push&#39;) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; docker.withRegistry(&#39;https://index.docker.io/v1/&#39;, &#39;dockerhub&#39;) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; def app = docker.build(&quot;waterfox83/docker-nodejs-demo:${commit_id}&quot;, &#39;.&#39;).push()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; min-height: 15px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Creating a new ‘Pipeline’ type project with this Jenkinsfile, creates a new project with three stages and pushes the build to docker.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal; margin-bottom: 2px;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;Running Build/Test in Docker Containers&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;If you want that build/test stages of your build pipeline are run in their own containers, you can do that as well. In this example, there is a stage named &#39;test with a DB&#39; which requires mySql to be running. We will change our dockerfile so that a new container with mySql image is created and test is run within that container.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;It is possible to run everything in containers as part of build pipeline. In below jenkinsfile, we have modified the file from previous example and are running everything in containers.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; stage(&#39;test&#39;) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; def myTestContainer = docker.image(&#39;node:4.6&#39;)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; myTestContainer.pull()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; myTestContainer.inside {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; sh &#39;npm install --only=dev&#39;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; sh &#39;npm test&#39;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal; min-height: 15px;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; stage(&#39;test with a DB&#39;) {&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; def mysql = docker.image(&#39;mysql&#39;).run(&quot;-e MYSQL_ALLOW_EMPTY_PASSWORD=yes&quot;)&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; def myTestContainer = docker.image(&#39;node:4.6&#39;)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; myTestContainer.pull()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; myTestContainer.inside(&quot;--link ${mysql.id}:mysql&quot;) { // using linking, mysql will be available at host: mysql, port: 3306&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sh &#39;npm install --only=dev&#39;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sh &#39;npm test&#39;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; }&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; mysql.stop()&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;font-family: Menlo; font-size: 13px; font-stretch: normal; line-height: normal;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 12px; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;color: #073763;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #454545; font-stretch: normal; line-height: normal; min-height: 14px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;I hope this post has helped you in starting with running Jenkins on Docker. &amp;nbsp;If you have any questions/comments please post them in comments. Happy learning!&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://opreview.blogspot.com/2017/12/running-jenkins-inside-docker.html</link><author>noreply@blogger.com (Waterfox)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-2791983802448623594</guid><pubDate>Thu, 10 Aug 2017 10:37:00 +0000</pubDate><atom:updated>2019-12-14T10:17:58.472-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">frameworks</category><category domain="http://www.blogger.com/atom/ns#">programming</category><category domain="http://www.blogger.com/atom/ns#">software</category><category domain="http://www.blogger.com/atom/ns#">Testing</category><title>Introduction to Mutation Testing</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
You have written unit tests, integration tests, acceptance tests and all sorts of tests and code coverage is 99% but still there are bugs! How is that possible? It is possible if your testcases are incorrect and quality of test code is low. With Mutation testing, find out how good are your tests. Know more about this in this presentation!

&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;iframe src=&quot;https://docs.google.com/presentation/d/e/2PACX-1vQQKQRDUkzNokLSsw82rTPEzb2fcMhnBj6RZY95DSZ_MG6WgQIYWEdSVu_KdpKAezHuQLH0ST7IJlsm/embed?start=false&amp;loop=false&amp;delayms=10000&quot; frameborder=&quot;0&quot; width=&quot;599&quot; height=&quot;366&quot; allowfullscreen=&quot;true&quot; mozallowfullscreen=&quot;true&quot; webkitallowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&gt;&lt;/div&gt;
</description><link>http://opreview.blogspot.com/2017/08/introduction-to-mutation-testing.html</link><author>noreply@blogger.com (Waterfox)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-882390637548385556</guid><pubDate>Mon, 22 May 2017 06:52:00 +0000</pubDate><atom:updated>2017-05-22T19:34:30.361-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">&quot;Google App Engine&quot;</category><category domain="http://www.blogger.com/atom/ns#">&quot;Google Cloud Datastore&quot;</category><category domain="http://www.blogger.com/atom/ns#">&quot;Google Cloud Platform&quot;</category><category domain="http://www.blogger.com/atom/ns#">Database</category><title>How to query data using GQL if your Kind name has a dot in it?</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
There is a big chance that your kind (table) name is of the format &lt;module_name&gt;.&lt;kind_name&gt; because there are various tables in your module.&lt;/kind_name&gt;&lt;/module_name&gt;&lt;br /&gt;
&lt;br /&gt;
e.g. I had StoreService.Store and StoreService.Employee as two of the kinds in my service named StoreService.&lt;br /&gt;
&lt;br /&gt;
In Google Cloud Console, if you write a GQL to query to fetch/filter the entities you will get an error:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;SELECT * from StoreService.Store&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; border: 0px; box-sizing: border-box; color: #da4336; font-family: &amp;quot;roboto&amp;quot; , sans-serif; font-size: 12px; margin: 0px; max-width: 100%; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;GQL query error:&amp;nbsp;&lt;/span&gt;&lt;ds-error-link error=&quot;ctrl.queryError&quot; style=&quot;background-color: white; box-sizing: border-box; color: #da4336; font-family: Roboto, sans-serif; font-size: 12px; max-width: 100%;&quot;&gt;&lt;span class=&quot;p6n-datastore-error-link p6n-color-error&quot; ng-if=&quot;error.message&quot; style=&quot;border: 0px; box-sizing: border-box; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; max-width: 100%; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Encountered &quot;.&quot; at line 1, column 27. Was expecting one of: &quot;group&quot;, &quot;limit&quot;, &quot;offset&quot;, &quot;order&quot;, &quot;where&quot;&lt;/span&gt;&lt;/ds-error-link&gt;&lt;br /&gt;
&lt;ds-error-link error=&quot;ctrl.queryError&quot; style=&quot;background-color: white; box-sizing: border-box; color: #da4336; font-family: Roboto, sans-serif; font-size: 12px; max-width: 100%;&quot;&gt;&lt;span class=&quot;p6n-datastore-error-link p6n-color-error&quot; ng-if=&quot;error.message&quot; style=&quot;border: 0px; box-sizing: border-box; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; max-width: 100%; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/ds-error-link&gt;
Enclosing the Kind name in single quotes doesn&#39;t help either:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;SELECT * from &#39;StoreService.Store&#39;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; border: 0px; box-sizing: border-box; color: #da4336; font-family: &amp;quot;roboto&amp;quot; , sans-serif; font-size: 12px; margin: 0px; max-width: 100%; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;GQL query error:&amp;nbsp;&lt;/span&gt;&lt;ds-error-link error=&quot;ctrl.queryError&quot; style=&quot;background-color: white; box-sizing: border-box; color: #da4336; font-family: Roboto, sans-serif; font-size: 12px; max-width: 100%;&quot;&gt;&lt;span class=&quot;p6n-datastore-error-link p6n-color-error&quot; ng-if=&quot;error.message&quot; style=&quot;border: 0px; box-sizing: border-box; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; max-width: 100%; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Encountered &quot;&#39;StoreService.Store&#39;&quot; at line 1, column 15. Was expecting one of: &lt;unquoted_name&gt;, &lt;quoted_name&gt;&lt;/quoted_name&gt;&lt;/unquoted_name&gt;&lt;/span&gt;&lt;/ds-error-link&gt;&lt;br /&gt;
&lt;ds-error-link error=&quot;ctrl.queryError&quot; style=&quot;background-color: white; box-sizing: border-box; color: #da4336; font-family: Roboto, sans-serif; font-size: 12px; max-width: 100%;&quot;&gt;&lt;span class=&quot;p6n-datastore-error-link p6n-color-error&quot; ng-if=&quot;error.message&quot; style=&quot;border: 0px; box-sizing: border-box; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; max-width: 100%; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/ds-error-link&gt;
To do it right, you need to enclose the name in backquotes (that key below ~ in the keyboard)!!!&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;SELECT * from `StoreService.Store`&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
This information is hidden in Datastore documentation &lt;a href=&quot;https://cloud.google.com/datastore/docs/reference/gql_reference#how_to_form_entity_and_property_names&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;. Try finding it!&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://opreview.blogspot.com/2017/05/how-to-query-data-using-gql-if-your.html</link><author>noreply@blogger.com (Waterfox)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-7275942760024039100</guid><pubDate>Thu, 23 Mar 2017 11:36:00 +0000</pubDate><atom:updated>2017-03-23T07:53:19.332-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">&quot;Big Query&quot;</category><category domain="http://www.blogger.com/atom/ns#">&quot;Google App Engine&quot;</category><category domain="http://www.blogger.com/atom/ns#">&quot;Google Cloud Platform&quot;</category><category domain="http://www.blogger.com/atom/ns#">&quot;Google Cloud Storage&quot;</category><category domain="http://www.blogger.com/atom/ns#">Cloud</category><category domain="http://www.blogger.com/atom/ns#">Database</category><category domain="http://www.blogger.com/atom/ns#">Google</category><category domain="http://www.blogger.com/atom/ns#">Migration</category><title>How to transfer data from Cloud Datastore to Big Query in Google Cloud Platform</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
If you are here I am assuming that you are looking to migrate the data from Cloud Datastore to Big Query because you want to do some analysis and are frustrated by limitations imposed by GQL (Google Query Language).&lt;br /&gt;
&lt;br /&gt;
First of all you need to create a backup of the data in datastore. Use the &lt;a href=&quot;https://ah-builtin-python-bundle-dot-jda-pd-slo-sandbox.appspot.com/_ah/datastore_admin&quot; target=&quot;_blank&quot;&gt;Datastore Admin tool&lt;/a&gt; provided by Google to take a backup and store it automatically in the Cloud Storage bucket.&lt;br /&gt;
&lt;br /&gt;
Select all the entities and press &#39;Backup Entities&#39;. Give a backup name, select Google Cloud Storage as backup storage destination and specify a bucket name.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGBIwP_mh3bKpbyOlv5AtJVGUceC3TiXQdQQWTfvW3Osc_79t8HJ3CnsZEHVdszypvFNqnd5As6oNm7FCqN5A_ACt227plyqiF2zAPL44ZGi72qm_KwCdmo26WorTE5gbj3qEnig/s1600/Screen+Shot+2017-03-23+at+4.35.53+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGBIwP_mh3bKpbyOlv5AtJVGUceC3TiXQdQQWTfvW3Osc_79t8HJ3CnsZEHVdszypvFNqnd5As6oNm7FCqN5A_ACt227plyqiF2zAPL44ZGi72qm_KwCdmo26WorTE5gbj3qEnig/s1600/Screen+Shot+2017-03-23+at+4.35.53+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once the backup job is completed, you will see the backup listed. You can select a backup and press &#39;Info&#39; and see the details (Entities are masked in the screenshot below).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb2Shvqgdh_UFLytjNx1c1rhf_OjuF7BDYDwNwei5syyz-IfnkwGPtiCCqQEp0KaWY1P6f3FOi1df63x8XXledVF1hJpBOdXUFCT5v0ZydOdXyJGht3rwTLNFwmA9i5V3WW9mAiQ/s1600/Screen+Shot+2017-03-23+at+4.42.20+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb2Shvqgdh_UFLytjNx1c1rhf_OjuF7BDYDwNwei5syyz-IfnkwGPtiCCqQEp0KaWY1P6f3FOi1df63x8XXledVF1hJpBOdXUFCT5v0ZydOdXyJGht3rwTLNFwmA9i5V3WW9mAiQ/s1600/Screen+Shot+2017-03-23+at+4.42.20+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Go to the bucket mentioned in &#39;Handle&#39; and you will see the file mentioned above. You will also see many more files with similar names, ending with &lt;entityname&gt;.backup_info (e.g. &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;ahRzfmpkYS1wZC1zbG8tc2FuZGJveHJBCxIcX0FFX0RhdGFzdG9yZUFkbWluX09wZXJhdGlvbhix_-4DDAsSFl9BRV9CYWNrdXBfSW5mb3JtYXRpb24YAQw.JobDetailsEntity.backup_info&lt;/span&gt;)&lt;/entityname&gt;&lt;br /&gt;
&lt;br /&gt;
This is the backup file for a specific entity which you will need to specify when creating a table in Big Query.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd3FTNNhUtNI5zuKfz31I60KiXzH3eDLVE77sPTzYkGb6Rm94Kn70JqoZEuMJOw8wj9RdwVyQAF2Si_GnQKtxduTMcye8Yl1vXxOQfgTdSrYOIDaMbxswGSP7qPv1Gu9M1E0NFUg/s1600/Screen+Shot+2017-03-23+at+4.47.38+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd3FTNNhUtNI5zuKfz31I60KiXzH3eDLVE77sPTzYkGb6Rm94Kn70JqoZEuMJOw8wj9RdwVyQAF2Si_GnQKtxduTMcye8Yl1vXxOQfgTdSrYOIDaMbxswGSP7qPv1Gu9M1E0NFUg/s1600/Screen+Shot+2017-03-23+at+4.47.38+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Head over to Big Query and create a new dataset.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB097GTxhiCfpsTU024JO2jG382ZccXMmTQquhXwL9jslRq1pxibtArXHl0dIOgCtToswMBztonB-f2n0JFK-FlJ3pnrDnH1aDsEuNGFvJ25kx6hcQd732ruCZH-ZBOrsUaAEpeQ/s1600/Screen+Shot+2017-03-23+at+4.56.20+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB097GTxhiCfpsTU024JO2jG382ZccXMmTQquhXwL9jslRq1pxibtArXHl0dIOgCtToswMBztonB-f2n0JFK-FlJ3pnrDnH1aDsEuNGFvJ25kx6hcQd732ruCZH-ZBOrsUaAEpeQ/s1600/Screen+Shot+2017-03-23+at+4.56.20+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
In Location field select &#39;Google Cloud Storage&#39; and give the location of backup file for the specific entity. File format is &#39;Cloud Datastore Backup&#39;.&lt;br /&gt;
&lt;br /&gt;
Like the one we found earlier:&amp;nbsp;&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;gs://jda_so__78700310-e2f9-4cf2-8f20-dd325de09a4d_data_bkup/ahRzfmpkYS1wZC1zbG8tc2FuZGJveHJBCxIcX0FFX0RhdGFzdG9yZUFkbWluX09wZXJhdGlvbhix_-4DDAsSFl9BRV9CYWNrdXBfSW5mb3JtYXRpb24YAQw.JobDetailsEntity.backup_info&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Here the bucket name: &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;jda_so__78700310-e2f9-4cf2-8f20-dd325de09a4d_data_bkup&lt;/span&gt; is coming from the &#39;Handle&#39; field in the backup information in the datastore admin and the file name you got in the previous step!&lt;br /&gt;
&lt;br /&gt;
Specify the name of the table you want to create in Big Query in &#39;Destination&#39; field. Press &#39;Create Table&#39; and if everything is correct, the job will complete successfully. &amp;nbsp;Select a table from the left panel and click on Preview to see the data populated. And you are done!&lt;br /&gt;
&lt;br /&gt;
Let me know in comments if you have any questions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://opreview.blogspot.com/2017/03/if-you-are-here-i-am-assuming-that-you.html</link><author>noreply@blogger.com (Waterfox)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGBIwP_mh3bKpbyOlv5AtJVGUceC3TiXQdQQWTfvW3Osc_79t8HJ3CnsZEHVdszypvFNqnd5As6oNm7FCqN5A_ACt227plyqiF2zAPL44ZGi72qm_KwCdmo26WorTE5gbj3qEnig/s72-c/Screen+Shot+2017-03-23+at+4.35.53+PM.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-3813386222081213596</guid><pubDate>Thu, 23 Mar 2017 10:25:00 +0000</pubDate><atom:updated>2017-03-23T03:26:02.994-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">&quot;Google App Engine&quot;</category><category domain="http://www.blogger.com/atom/ns#">&quot;Google Cloud Platform&quot;</category><category domain="http://www.blogger.com/atom/ns#">&quot;Google Cloud Storage&quot;</category><category domain="http://www.blogger.com/atom/ns#">Cloud</category><category domain="http://www.blogger.com/atom/ns#">curl</category><category domain="http://www.blogger.com/atom/ns#">GCP</category><category domain="http://www.blogger.com/atom/ns#">Linux</category><category domain="http://www.blogger.com/atom/ns#">programming</category><category domain="http://www.blogger.com/atom/ns#">Unix</category><title>How to upload to Google Cloud Storage buckets using CURL </title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Signed URLs are pretty nifty feature given by Google Cloud Platform to let anyone access your cloud storage (bucket or any file in the bucket) without need to sign in.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;https://cloud.google.com/storage/docs/access-control/signed-urls&quot; target=&quot;_blank&quot;&gt;Official documentation&lt;/a&gt; gives step by step details as to how to read/write to the bucket using gsutil or through a program. This article will tell you how to upload a file to the bucket using curl so that any client which doesn&#39;t have cloud SDK installed can do this using a simple script.&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;

&lt;div&gt;
This command creates a signed PUT URL for your bucket.&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;div class=&quot;p1&quot;&gt;
&lt;pre style=&quot;background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: &amp;quot;arial&amp;quot;; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;span class=&quot;s1&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt; gsutil signurl -c &#39;text/plain&#39; -m PUT serviceAccount.json gs://test_bucket_location  
&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
Here is my URL:&lt;br /&gt;
&lt;pre style=&quot;background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: &amp;quot;arial&amp;quot;; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt; https://storage.googleapis.com/test_sl?GoogleAccessId=my-project-id@appspot.gserviceaccount.com&amp;amp;Expires=1490266627&amp;amp;Signature=UfKBNHWtjLKSBEcUQUKDeQtSQV6YCleE9hGG%2BCxVEjDOmkDxwkC%2BPtEg63pjDBHyKhVOnhspP1%2FAVSr%2B%2Fty8Ps7MSQ0lM2YHkbPeqjTiUcAfsbdcuXUMbe3p8FysRUFMe2dSikehBJWtbYtjb%2BNCw3L09c7fLFyAoJafIcnoIz7iJGP%2Br6gAUkSnZXgbVjr6wjN%2FIaudXIqAxyz4O6VU%2FIob8RHmfYBD3rYw8oRmZer0g%2BMTDw5Bu3%2BdjbxCriCOkOLWkvlpBGvd71hRP89lxpD%2FwX1N1pzAiRBpmKAhpKrYrq8h4kNLAtTHXYSz5j%2Bzb28UD4YMG52n8UpfyPgFIg%3D%3D  
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
Now this command will upload a text file to the bucket using the signed URL we created:&lt;br /&gt;
&lt;pre style=&quot;background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: &amp;quot;arial&amp;quot;; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt; $ curl -X PUT -H &#39;content-type: text/plain&#39; -d @test_upload.txt https://storage.googleapis.com/test_sl?GoogleAccessId=my-project-id@appspot.gserviceaccount.com&amp;amp;Expires=1490266627&amp;amp;Signature=UfKBNHWtjLKSBEcUQUKDeQtSQV6YCleE9hGG%2BCxVEjDOmkDxwkC%2BPtEg63pjDBHyKhVOnhspP1%2FAVSr%2B%2Fty8Ps7MSQ0lM2YHkbPeqjTiUcAfsbdcuXUMbe3p8FysRUFMe2dSikehBJWtbYtjb%2BNCw3L09c7fLFyAoJafIcnoIz7iJGP%2Br6gAUkSnZXgbVjr6wjN%2FIaudXIqAxyz4O6VU%2FIob8RHmfYBD3rYw8oRmZer0g%2BMTDw5Bu3%2BdjbxCriCOkOLWkvlpBGvd71hRP89lxpD%2FwX1N1pzAiRBpmKAhpKrYrq8h4kNLAtTHXYSz5j%2Bzb28UD4YMG52n8UpfyPgFIg%3D%3D  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
On similar lines, you can create a RESUMABLE URL and then upload file using following command:
&lt;br /&gt;
&lt;pre style=&quot;background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: &amp;quot;arial&amp;quot;; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt; $ curl -v -X &#39;POST&#39; -H &#39;content-type: text/plain&#39; -H &#39;x-goog-resumable:start&#39; &#39;[signed url]&#39; -d &#39;&#39;  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
This command gives &#39;session URI&#39; which is similar to signed url, but longer!

&lt;br /&gt;
&lt;pre style=&quot;background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: &amp;quot;arial&amp;quot;; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;&quot;&gt;&lt;code style=&quot;color: black; word-wrap: normal;&quot;&gt; $ curl -v -X PUT -d @test_upload.txt -H &#39;content-type: text/plain&#39; &#39;[session URI]&#39;  
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

Simple isn&#39;t it!
&lt;/div&gt;
</description><link>http://opreview.blogspot.com/2017/03/how-to-upload-to-google-cloud-storage.html</link><author>noreply@blogger.com (Waterfox)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-6926205279483972586</guid><pubDate>Tue, 27 Sep 2016 18:17:00 +0000</pubDate><atom:updated>2016-09-27T11:17:23.365-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Angular JS</category><category domain="http://www.blogger.com/atom/ns#">javascript</category><category domain="http://www.blogger.com/atom/ns#">programming</category><category domain="http://www.blogger.com/atom/ns#">Tutorial</category><title>Diving Deeper in Angular JS 1.5 : Services and Routing in depth</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;

&lt;iframe src=&quot;https://docs.google.com/presentation/d/1ZNszVB_OMUus8_b65sa52IS3gKtIPeJVAdwqRvES_64/embed?start=false&amp;loop=false&amp;delayms=3000&quot; frameborder=&quot;0&quot; width=&quot;600&quot; height=&quot;366&quot; allowfullscreen=&quot;true&quot; mozallowfullscreen=&quot;true&quot; webkitallowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description><link>http://opreview.blogspot.com/2016/09/diving-deeper-in-angular-js-15-services.html</link><author>noreply@blogger.com (Waterfox)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-3652941466788887191</guid><pubDate>Sat, 24 Sep 2016 03:26:00 +0000</pubDate><atom:updated>2016-09-23T20:26:31.043-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">coding</category><category domain="http://www.blogger.com/atom/ns#">git</category><category domain="http://www.blogger.com/atom/ns#">programming</category><category domain="http://www.blogger.com/atom/ns#">source control</category><title>How to update git remote origin URL</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;OK, whatever way you are passionate about when it comes to updating your remote origin URLs, I have got you covered!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;Option 1: Go to config file in &lt;your location=&quot;&quot; repo=&quot;&quot;&gt;/.git folder.&amp;nbsp;&lt;/your&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; change url field from&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&amp;nbsp; &amp;nbsp; url = ssh://git@&amp;lt;old-url&amp;gt; to url = ssh://git@&amp;lt;new-url&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;Option 2: Go to your repo location, on cmd give git remote set-url origin ssh://git@&amp;lt;new-url&amp;gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;Option 3: Go to your repository in source tree, click on settings, on Remotes tab in repository settings box, you can select the origin and edit.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;tahoma&amp;quot;;&quot;&gt;&lt;span style=&quot;font-size: 13.3333px;&quot;&gt;What is life without options!!&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://opreview.blogspot.com/2016/09/how-to-update-git-remote-origin-url.html</link><author>noreply@blogger.com (Waterfox)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-25952682.post-8521316865895026023</guid><pubDate>Thu, 16 Jun 2016 12:21:00 +0000</pubDate><atom:updated>2016-06-16T05:32:15.881-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Angular JS</category><category domain="http://www.blogger.com/atom/ns#">javascript</category><category domain="http://www.blogger.com/atom/ns#">Web</category><title>Angular JS basics for beginners (with code!)</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;iframe src=&quot;https://docs.google.com/presentation/d/1aIdDNprHFk-4nOicJNScNutZMiSg579P09zpd9-kIsU/embed?start=false&amp;loop=false&amp;delayms=3000&quot; frameborder=&quot;0&quot; width=&quot;600&quot; height=&quot;366&quot; allowfullscreen=&quot;true&quot; mozallowfullscreen=&quot;true&quot; webkitallowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
</description><link>http://opreview.blogspot.com/2016/06/angling-with-angular-js.html</link><author>noreply@blogger.com (Waterfox)</author><thr:total>0</thr:total></item></channel></rss>