Details

Foundations of Data Intensive Applications


Foundations of Data Intensive Applications

Large Scale Data Analytics under the Hood
1. Aufl.

von: Supun Kamburugamuve, Saliya Ekanayake

35,99 €

Verlag: Wiley
Format: PDF
Veröffentl.: 05.08.2021
ISBN/EAN: 9781119713036
Sprache: englisch
Anzahl Seiten: 416

DRM-geschütztes eBook, Sie benötigen z.B. Adobe Digital Editions und eine Adobe ID zum Lesen.

Beschreibungen

<p><b>PEEK “UNDER THE HOOD” OF BIG DATA ANALYTICS</b></p> <p>The world of big data analytics grows ever more complex. And while many people can work superficially with specific frameworks, far fewer understand the fundamental principles of large-scale, distributed data processing systems and how they operate. In Foundations of Data Intensive Applications: Large Scale Data Analytics under the Hood, renowned big-data experts and computer scientists Drs. Supun Kamburugamuve and Saliya Ekanayake deliver a practical guide to applying the principles of big data to software development for optimal performance. <p>The authors discuss foundational components of large-scale data systems and walk readers through the major software design decisions that define performance, application type, and usability. You???ll learn how to recognize problems in your applications resulting in performance and distributed operation issues, diagnose them, and effectively eliminate them by relying on the bedrock big data principles explained within. <p>Moving beyond individual frameworks and APIs for data processing, this book unlocks the theoretical ideas that operate under the hood of every big data processing system. <p>Ideal for data scientists, data architects, dev-ops engineers, and developers, <i>Foundations of Data Intensive Applications: Large Scale Data Analytics under the Hood</i> shows readers how to: <ul><b><li>Identify the foundations of large-scale, distributed data processing systems</li> <li>Make major software design decisions that optimize performance</li> <li>Diagnose performance problems and distributed operation issues</li> <li>Understand state-of-the-art research in big data</li> <li>Explain and use the major big data frameworks and understand what underpins them</li> <li>Use big data analytics in the real world to solve practical problems</li></b></ul>
<p>Introduction xxvii</p> <p><b>Chapter 1 Data Intensive Applications 1</b></p> <p>Anatomy of a Data-Intensive Application 1</p> <p>A Histogram Example 2</p> <p>Program 2</p> <p>Process Management 3</p> <p>Communication 4</p> <p>Execution 5</p> <p>Data Structures 6</p> <p>Putting It Together 6</p> <p>Application 6</p> <p>Resource Management 6</p> <p>Messaging 7</p> <p>Data Structures 7</p> <p>Tasks and Execution 8</p> <p>Fault Tolerance 8</p> <p>Remote Execution 8</p> <p>Parallel Applications 9</p> <p>Serial Applications 9</p> <p>Lloyd’s K-Means Algorithm 9</p> <p>Parallelizing Algorithms 11</p> <p>Decomposition 11</p> <p>Task Assignment 12</p> <p>Orchestration 12</p> <p>Mapping 13</p> <p>K-Means</p> <p>Algorithm 13</p> <p>Parallel and Distributed Computing 15</p> <p>Memory Abstractions 16</p> <p>Shared Memory 16</p> <p>Distributed Memory 18</p> <p>Hybrid (Shared + Distributed) Memory 20</p> <p>Partitioned Global Address Space Memory 21</p> <p>Application Classes and Frameworks 22</p> <p>Parallel Interaction Patterns 22</p> <p>Pleasingly Parallel 23</p> <p>Dataflow 23</p> <p>Iterative 23</p> <p>Irregular 23</p> <p>Data Abstractions 24</p> <p>Data-Intensive</p> <p>Frameworks 24</p> <p>Components 24</p> <p>Workflows 25</p> <p>An Example 25</p> <p>What Makes It Difficult? 26</p> <p>Developing Applications 27</p> <p>Concurrency 27</p> <p>Data Partitioning 28</p> <p>Debugging 28</p> <p>Diverse Environments 28</p> <p>Computer Networks 29</p> <p>Synchronization 29</p> <p>Thread Synchronization 29</p> <p>Data Synchronization 30</p> <p>Ordering of Events 31</p> <p>Faults 31</p> <p>Consensus 31</p> <p>Summary 32</p> <p>References 32</p> <p><b>Chapter 2 Data and Storage 35</b></p> <p>Storage Systems 35</p> <p>Storage for Distributed Systems 36</p> <p>Direct-Attached Storage 37</p> <p>Storage Area Network 37</p> <p>Network-Attached Storage 38</p> <p>DAS or SAN or NAS? 38</p> <p>Storage Abstractions 39</p> <p>Block Storage 39</p> <p>File Systems 40</p> <p>Object Storage 41</p> <p>Data Formats 41</p> <p>XML 42</p> <p>JSON 43</p> <p>CSV 44</p> <p>Apache Parquet 45</p> <p>Apache Avro 47</p> <p>Avro Data Definitions (Schema) 48</p> <p>Code Generation 49</p> <p>Without Code Generation 49</p> <p>Avro File 49</p> <p>Schema Evolution 49</p> <p>Protocol Buffers, Flat Buffers, and Thrift 50</p> <p>Data Replication 51</p> <p>Synchronous and Asynchronous Replication 52</p> <p>Single-Leader and Multileader Replication 52</p> <p>Data Locality 53</p> <p>Disadvantages of Replication 54</p> <p>Data Partitioning 54</p> <p>Vertical Partitioning 55</p> <p>Horizontal Partitioning (Sharding) 55</p> <p>Hybrid Partitioning 56</p> <p>Considerations for Partitioning 57</p> <p>NoSQL Databases 58</p> <p>Data Models 58</p> <p>Key-Value Databases 58</p> <p>Document Databases 59</p> <p>Wide Column Databases 59</p> <p>Graph Databases 59</p> <p>CAP Theorem 60</p> <p>Message Queuing 61</p> <p>Message Processing Guarantees 63</p> <p>Durability of Messages 64</p> <p>Acknowledgments 64</p> <p>Storage First Brokers and Transient Brokers 65</p> <p>Summary 66</p> <p>References 66</p> <p><b>Chapter 3 Computing Resources 69</b></p> <p>A Demonstration 71</p> <p>Computer Clusters 72</p> <p>Anatomy of a Computer Cluster 73</p> <p>Data Analytics in Clusters 74</p> <p>Dedicated Clusters 76</p> <p>Classic Parallel Systems 76</p> <p>Big Data Systems 77</p> <p>Shared Clusters 79</p> <p>OpenMPI on a Slurm Cluster 79</p> <p>Spark on a Yarn Cluster 80</p> <p>Distributed Application Life Cycle 80</p> <p>Life Cycle Steps 80</p> <p>Step 1: Preparation of the Job Package 81</p> <p>Step 2: Resource Acquisition 81</p> <p>Step 3: Distributing the Application (Job) Artifacts 81</p> <p>Step 4: Bootstrapping the Distributed Environment 82</p> <p>Step 5: Monitoring 82</p> <p>Step 6: Termination 83</p> <p>Computing Resources 83</p> <p>Data Centers 83</p> <p>Physical Machines 85</p> <p>Network 85</p> <p>Virtual Machines 87</p> <p>Containers 87</p> <p>Processor, Random Access Memory, and Cache 88</p> <p>Cache 89</p> <p>Multiple Processors in a Computer 90</p> <p>Nonuniform Memory Access 90</p> <p>Uniform Memory Access 91</p> <p>Hard Disk 92</p> <p>GPUs 92</p> <p>Mapping Resources to Applications 92</p> <p>Cluster Resource Managers 93</p> <p>Kubernetes 94</p> <p>Kubernetes Architecture 94</p> <p>Kubernetes Application Concepts 96</p> <p>Data-Intensive Applications on Kubernetes 96</p> <p>Slurm 98</p> <p>Yarn 99</p> <p>Job Scheduling 99</p> <p>Scheduling Policy 101</p> <p>Objective Functions 101</p> <p>Throughput and Latency 101</p> <p>Priorities 102</p> <p>Lowering Distance Among the Processes 102</p> <p>Data Locality 102</p> <p>Completion Deadline 102</p> <p>Algorithms 103</p> <p>First in First Out 103</p> <p>Gang Scheduling 103</p> <p>List Scheduling 103</p> <p>Backfill Scheduling 104</p> <p>Summary 104</p> <p>References 104</p> <p><b>Chapter 4 Data Structures 107</b></p> <p>Virtual Memory 108</p> <p>Paging and TLB 109</p> <p>Cache 111</p> <p>The Need for Data Structures 112</p> <p>Cache and Memory Layout 112</p> <p>Memory Fragmentation 114</p> <p>Data Transfer 115</p> <p>Data Transfer Between Frameworks 115</p> <p>Cross-Language Data Transfer 115</p> <p>Object and Text Data 116</p> <p>Serialization 116</p> <p>Vectors and Matrices 117</p> <p>1D Vectors 118</p> <p>Matrices 118</p> <p>Row-Major and Column-Major Formats 119</p> <p><i>N</i>-Dimensional Arrays/Tensors 122</p> <p>NumPy 123</p> <p>Memory Representation 125</p> <p>K-means with NumPy 126</p> <p>Sparse Matrices 127</p> <p>Table 128</p> <p>Table Formats 129</p> <p>Column Data Format 129</p> <p>Row Data Format 130</p> <p>Apache Arrow 130</p> <p>Arrow Data Format 131</p> <p>Primitive Types 131</p> <p>Variable-Length Data 132</p> <p>Arrow Serialization 133</p> <p>Arrow Example 133</p> <p>Pandas DataFrame 134</p> <p>Column vs. Row Tables 136</p> <p>Summary 136</p> <p>References 136</p> <p><b>Chapter 5 Programming Models 139</b></p> <p>Introduction 139</p> <p>Parallel Programming Models 140</p> <p>Parallel Process Interaction 140</p> <p>Problem Decomposition 140</p> <p>Data Structures 140</p> <p>Data Structures and Operations 141</p> <p>Data Types 141</p> <p>Local Operations 143</p> <p>Distributed Operations 143</p> <p>Array 144</p> <p>Tensor 145</p> <p>Indexing 145</p> <p>Slicing 146</p> <p>Broadcasting 146</p> <p>Table 146</p> <p>Graph Data 148</p> <p>Message Passing Model 150</p> <p>Model 151</p> <p>Message Passing Frameworks 151</p> <p>Message Passing Interface 151</p> <p>Bulk Synchronous Parallel 153</p> <p>K-Means 154</p> <p>Distributed Data Model 157</p> <p>Eager Model 157</p> <p>Dataflow Model 158</p> <p>Data Frames, Datasets, and Tables 159</p> <p>Input and Output 160</p> <p>Task Graphs (Dataflow Graphs) 160</p> <p>Model 161</p> <p>User Program to Task Graph 161</p> <p>Tasks and Functions 162</p> <p>Source Task 162</p> <p>Compute Task 163</p> <p>Implicit vs. Explicit Parallel Models 163</p> <p>Remote Execution 163</p> <p>Components 164</p> <p>Batch Dataflow 165</p> <p>Data Abstractions 165</p> <p>Table Abstraction 165</p> <p>Matrix/Tensors 165</p> <p>Functions 166</p> <p>Source 166</p> <p>Compute 167</p> <p>Sink 168</p> <p>An Example 168</p> <p>Caching State 169</p> <p>Evaluation Strategy 170</p> <p>Lazy Evaluation 171</p> <p>Eager Evaluation 171</p> <p>Iterative Computations 172</p> <p>DOALL Parallel 172</p> <p>DOACROSS Parallel 172</p> <p>Pipeline Parallel 173</p> <p>Task Graph Models for Iterative Computations 173</p> <p>K-Means Algorithm 174</p> <p>Streaming Dataflow 176</p> <p>Data Abstractions 177</p> <p>Streams 177</p> <p>Distributed Operations 178</p> <p>Streaming Functions 178</p> <p>Sources 178</p> <p>Compute 179</p> <p>Sink 179</p> <p>An Example 179</p> <p>Windowing 180</p> <p>Windowing Strategies 181</p> <p>Operations on Windows 182</p> <p>Handling Late Events 182</p> <p>SQL 182</p> <p>Queries 183</p> <p>Summary 184</p> <p>References 184</p> <p><b>Chapter 6 Messaging 187</b></p> <p>Network Services 188</p> <p>TCP/IP 188</p> <p>RDMA 189</p> <p>Messaging for Data Analytics 189</p> <p>Anatomy of a Message 190</p> <p>Data Packing 190</p> <p>Protocol 191</p> <p>Message Types 192</p> <p>Control Messages 192</p> <p>External Data Sources 192</p> <p>Data Transfer Messages 192</p> <p>Distributed Operations 194</p> <p>How Are They Used? 194</p> <p>Task Graph 194</p> <p>Parallel Processes 195</p> <p>Anatomy of a Distributed Operation 198</p> <p>Data Abstractions 198</p> <p>Distributed Operation API 198</p> <p>Streaming and Batch Operations 199</p> <p>Streaming Operations 199</p> <p>Batch Operations 199</p> <p>Distributed Operations on Arrays 200</p> <p>Broadcast 200</p> <p>Reduce and AllReduce 201</p> <p>Gather and AllGather 202</p> <p>Scatter 203</p> <p>AllToAll 204</p> <p>Optimized Operations 204</p> <p>Broadcast 205</p> <p>Reduce 206</p> <p>AllReduce 206</p> <p>Gather and AllGather Collective Algorithms 208</p> <p>Scatter and AllToAll Collective Algorithms 208</p> <p>Distributed Operations on Tables 209</p> <p>Shuffle 209</p> <p>Partitioning Data 211</p> <p>Handling Large Data 212</p> <p>Fetch-Based Algorithm (Asynchronous Algorithm) 213</p> <p>Distributed Synchronization Algorithm 214</p> <p>GroupBy 214</p> <p>Aggregate 215</p> <p>Join 216</p> <p>Join Algorithms 219</p> <p>Distributed Joins 221</p> <p>Performance of Joins 223</p> <p>More Operations 223</p> <p>Advanced Topics 224</p> <p>Data Packing 224</p> <p>Memory Considerations 224</p> <p>Message Coalescing 224</p> <p>Compression 225</p> <p>Stragglers 225</p> <p>Nonblocking vs. Blocking Operations 225</p> <p>Blocking Operations 226</p> <p>Nonblocking Operations 226</p> <p>Summary 227</p> <p>References 227</p> <p><b>Chapter 7 Parallel Tasks 229</b></p> <p>CPUs 229</p> <p>Cache 229</p> <p>False Sharing 230</p> <p>Vectorization 231</p> <p>Threads and Processes 234</p> <p>Concurrency and Parallelism 234</p> <p>Context Switches and Scheduling 234</p> <p>Mutual Exclusion 235</p> <p>User-Level Threads 236</p> <p>Process Affinity 236</p> <p>NUMA-Aware Programming 237</p> <p>Accelerators 237</p> <p>Task Execution 238</p> <p>Scheduling 240</p> <p>Static Scheduling 240</p> <p>Dynamic Scheduling 240</p> <p>Loosely Synchronous and Asynchronous Execution 241</p> <p>Loosely Synchronous Parallel System 242</p> <p>Asynchronous Parallel System (Fully Distributed) 243</p> <p>Actor Model 244</p> <p>Actor 244</p> <p>Asynchronous Messages 244</p> <p>Actor Frameworks 245</p> <p>Execution Models 245</p> <p>Process Model 246</p> <p>Thread Model 246</p> <p>Remote Execution 246</p> <p>Tasks for Data Analytics 248</p> <p>SPMD and MPMD Execution 248</p> <p>Batch Tasks 249</p> <p>Data Partitions 249</p> <p>Operations 251</p> <p>Task Graph Scheduling 253</p> <p>Threads, CPU Cores, and Partitions 254</p> <p>Data Locality 255</p> <p>Execution 257</p> <p>Streaming Execution 257</p> <p>State 257</p> <p>Immutable Data 258</p> <p>State in Driver 258</p> <p>Distributed State 259</p> <p>Streaming Tasks 259</p> <p>Streams and Data Partitioning 260</p> <p>Partitions 260</p> <p>Operations 261</p> <p>Scheduling 262</p> <p>Uniform Resources 263</p> <p>Resource-Aware Scheduling 264</p> <p>Execution 264</p> <p>Dynamic Scaling 264</p> <p>Back Pressure (Flow Control) 265</p> <p>Rate-Based Flow Control 266</p> <p>Credit-Based Flow Control 266</p> <p>State 267</p> <p>Summary 268</p> <p>References 268</p> <p><b>Chapter 8 Case Studies 271</b></p> <p>Apache Hadoop 271</p> <p>Programming Model 272</p> <p>Architecture 274</p> <p>Cluster Resource Management 275</p> <p>Apache Spark 275</p> <p>Programming Model 275</p> <p>RDD API 276</p> <p>SQL, DataFrames, and DataSets 277</p> <p>Architecture 278</p> <p>Resource Managers 278</p> <p>Task Schedulers 279</p> <p>Executors 279</p> <p>Communication Operations 280</p> <p>Apache Spark Streaming 280</p> <p>Apache Storm 282</p> <p>Programming Model 282</p> <p>Architecture 284</p> <p>Cluster Resource Managers 285</p> <p>Communication Operations 286</p> <p>Kafka Streams 286</p> <p>Programming Model 286</p> <p>Architecture 287</p> <p>PyTorch 288</p> <p>Programming Model 288</p> <p>Execution 292</p> <p>Cylon 295</p> <p>Programming Model 296</p> <p>Architecture 296</p> <p>Execution 297</p> <p>Communication Operations 298</p> <p>Rapids cuDF 298</p> <p>Programming Model 298</p> <p>Architecture 299</p> <p>Summary 300</p> <p>References 300</p> <p><b>Chapter 9 Fault Tolerance 303</b></p> <p>Dependable Systems and Failures 303</p> <p>Fault Tolerance is Not Free 304</p> <p>Dependable Systems 305</p> <p>Failures 306</p> <p>Process Failures 306</p> <p>Network Failures 307</p> <p>Node Failures 307</p> <p>Byzantine Faults 307</p> <p>Failure Models 308</p> <p>Failure Detection 308</p> <p>Recovering from Faults 309</p> <p>Recovery Methods 310</p> <p>Stateless Programs 310</p> <p>Batch Systems 311</p> <p>Streaming Systems 311</p> <p>Processing Guarantees 311</p> <p>Role of Cluster Resource Managers 312</p> <p>Checkpointing 313</p> <p>State 313</p> <p>Consistent Global State 313</p> <p>Uncoordinated Checkpointing 314</p> <p>Coordinated Checkpointing 315</p> <p>Chandy-Lamport Algorithm 315</p> <p>Batch Systems 316</p> <p>When to Checkpoint? 317</p> <p>Snapshot Data 318</p> <p>Streaming Systems 319</p> <p>Case Study: Apache Storm 319</p> <p>Message Tracking 320</p> <p>Failure Recovery 321</p> <p>Case Study: Apache Flink 321</p> <p>Checkpointing 322</p> <p>Failure Recovery 324</p> <p>Batch Systems 324</p> <p>Iterative Programs 324</p> <p>Case Study: Apache Spark 325</p> <p>RDD Recomputing 326</p> <p>Checkpointing 326</p> <p>Recovery from Failures 327</p> <p>Summary 327</p> <p>References 327</p> <p><b>Chapter 10 Performance and Productivity 329</b></p> <p>Performance Metrics 329</p> <p>System Performance Metrics 330</p> <p>Parallel Performance Metrics 330</p> <p>Speedup 330</p> <p>Strong Scaling 331</p> <p>Weak Scaling 332</p> <p>Parallel Efficiency 332</p> <p>Amdahl’s Law 333</p> <p>Gustafson’s Law 334</p> <p>Throughput 334</p> <p>Latency 335</p> <p>Benchmarks 336</p> <p>LINPACK Benchmark 336</p> <p>NAS Parallel Benchmark 336</p> <p>BigDataBench 336</p> <p>TPC Benchmarks 337</p> <p>HiBench 337</p> <p>Performance Factors 337</p> <p>Memory 337</p> <p>Execution 338</p> <p>Distributed Operators 338</p> <p>Disk I/O 339</p> <p>Garbage Collection 339</p> <p>Finding Issues 342</p> <p>Serial Programs 342</p> <p>Profiling 342</p> <p>Scaling 343</p> <p>Strong Scaling 343</p> <p>Weak Scaling 344</p> <p>Debugging Distributed Applications 344</p> <p>Programming Languages 345</p> <p>C/C++ 346</p> <p>Java 346</p> <p>Memory Management 347</p> <p>Data Structures 348</p> <p>Interfacing with Python 348</p> <p>Python 350</p> <p>C/C++ Code integration 350</p> <p>Productivity 351</p> <p>Choice of Frameworks 351</p> <p>Operating Environment 353</p> <p>CPUs and GPUs 353</p> <p>Public Clouds 355</p> <p>Future of Data-Intensive Applications 358</p> <p>Summary 358</p> <p>References 359</p> <p>Index 361</p>
<p><b>SUPUN KAMBURUGAMUVE, PhD,</b> is a computer scientist researching and designing large scale data analytics tools. He received his doctorate in Computer Science from Indiana University, Bloomington and architected the data processing systems Twister2 and Cylon.</p> <p><b>SALIYA EKANAYAKE, PhD,</b> is a Senior Software Engineer at Microsoft working in the intersection of scaling deep learning systems and parallel computing. He is also a research affiliate at Berkeley Lab. He received his doctorate in Computer Science from Indiana University, Bloomington.
<p><b>PEEK “UNDER THE HOOD” OF BIG DATA ANALYTICS</b></p> <p>The world of big data analytics grows ever more complex. And while many people can work superficially with specific frameworks, far fewer understand the fundamental principles of large-scale, distributed data processing systems and how they operate. In Foundations of Data Intensive Applications: Large Scale Data Analytics under the Hood, renowned big-data experts and computer scientists Drs. Supun Kamburugamuve and Saliya Ekanayake deliver a practical guide to applying the principles of big data to software development for optimal performance. <p>The authors discuss foundational components of large-scale data systems and walk readers through the major software design decisions that define performance, application type, and usability. You???ll learn how to recognize problems in your applications resulting in performance and distributed operation issues, diagnose them, and effectively eliminate them by relying on the bedrock big data principles explained within. <p>Moving beyond individual frameworks and APIs for data processing, this book unlocks the theoretical ideas that operate under the hood of every big data processing system. <p>Ideal for data scientists, data architects, dev-ops engineers, and developers, <i>Foundations of Data Intensive Applications: Large Scale Data Analytics under the Hood</i> shows readers how to: <ul><b><li>Identify the foundations of large-scale, distributed data processing systems</li> <li>Make major software design decisions that optimize performance</li> <li>Diagnose performance problems and distributed operation issues</li> <li>Understand state-of-the-art research in big data</li> <li>Explain and use the major big data frameworks and understand what underpins them</li> <li>Use big data analytics in the real world to solve practical problems</li></b></ul>

Diese Produkte könnten Sie auch interessieren:

MDX Solutions
MDX Solutions
von: George Spofford, Sivakumar Harinath, Christopher Webb, Dylan Hai Huang, Francesco Civardi
PDF ebook
53,99 €
Concept Data Analysis
Concept Data Analysis
von: Claudio Carpineto, Giovanni Romano
PDF ebook
107,99 €
Handbook of Virtual Humans
Handbook of Virtual Humans
von: Nadia Magnenat-Thalmann, Daniel Thalmann
PDF ebook
150,99 €