text:
|Publication number
|Publication type
|Application number
|Publication date
|Sep 15, 2009
|Filing date
|Sep 29, 2004
|Priority date
|Jun 18, 2004
|Fee status
|Also published as
|Publication number
|Robert C. Pike, Sean Quinlan, Sean M. Dorward, Jeffrey Dean, Sanjay Ghemawat
|Original Assignee
|Google Inc.
|Export Citation
|BiBTeX, EndNote, RefMan
|Patent Citations (50), Non-Patent Citations (14), Referenced by (56), Classifications (10), Legal Events (4)
|External Links: USPTO, USPTO Assignment, Espacenet
This application is a continuation-in-part of U.S. application Ser. No. 10/871,244, filed Jun. 18, 2004, the disclosure of which is hereby incorporated by reference.
The disclosed embodiments relate generally to data processing systems and methods, and in particular to a framework for simplifying large-scale data processing and analyzing data records.
Large-scale data processing involves extracting data of interest from raw data in one or more datasets and processing it into a useful data product. The implementation of large-scale data processing in a parallel and distributed processing environment typically includes the distribution of data and computations among multiple disks and processors to make efficient use of aggregate storage space and computing power.
Various languages and systems provide application programmers with tools for querying and manipulating large datasets. These conventional languages and systems, however, fail to provide support for automatically parallelizing these operations across multiple processors in a distributed and parallel processing environment. Nor do these languages and systems automatically handle system faults (e.g., processor failures) and I/O scheduling. Nor do these languages and systems efficiently handle the analysis of data records.
A method and system for analyzing data records includes allocating groups of records to respective processes of a first plurality of processes executing in parallel. In each respective process of the first plurality of processes, for each record in the group of records allocated to the respective process, a query is applied to the record so as to produce zero or more values. Zero or more emit operators are applied to each of the zero or more produced values so as to add corresponding information to an intermediate data structure. Information from a plurality of the intermediate data structures is aggregated to produce output data.
Like reference numerals refer to corresponding parts throughout the several views of the drawings.
In order to explain the operation of the large scale data processing system, it is helpful to consider an exemplary distributed data processing system in which the large scale data processing is performed. In general, the embodiments described here can be performed by a set of interconnected processors that are interconnected by one or more communication networks.
Some of the datacenters DC1-DC4 may be located geographically close to each other, and others may be located far from the other datacenters. In some embodiments, each datacenter includes multiple racks. For example, datacenter 502 (DC1) includes multiple racks 508 a, . . . , 508 n. The racks 508 can include frames or cabinets into which components are mounted. Each rack can include one or more processors (CPUs) 510. For example, the rack 508 a includes CPUs 510 a, . . . , 510 n (slaves 1-16) and the nth rack 506 n includes multiple CPUs 510 (CPUs 17-32). The processors 510 can include data processors, network attached storage devices, and other computer controlled devices. In some embodiments, at least one of processors 510 operates as a master processor, and controls the scheduling and data distribution tasks performed throughout the network system 500. In some embodiments, one or more processors 510 may take on one or more roles, such as a master and/or slave. A rack can include storage (e.g., one or more network attached disks) that is shared by the one or more processors 510.
In some embodiments, the processors 510 within each rack 508 are interconnected to one another through a rack switch 506. Furthermore, all racks 508 within each datacenter 502 are also interconnected via a datacenter switch 504. As noted above, the present invention can be implemented using other arrangements of multiple interconnected processors.
Further details regarding the distributed system 500 of
In another embodiment, the processors shown in
As shown in
It should be noted that the work queue master 214 assigns tasks to processes, and that multiple processes may be executed by each of the processors in the group of processors that are available to do the work assigned by the work queue master 214. In the context of
Application programmers are provided with a restricted set of application-independent operators for reading input data and generating output data. The operators invoke library functions that automatically handle data partitioning, parallelization of computations, fault tolerance (e.g., recovering from process and machine failures) and I/O scheduling. In some embodiments, to perform a specific data processing operation on a set of input files, the only information that must be provided by an application programmer is: information identifying the input file(s), information identifying or specifying the output files to receive output data, and two application-specific data processing operators, hereinafter referred to as map( ) and reduce( ). Generally, the map( ) operator specifies how input data is to be processed to produce intermediate data and the reduce( ) operator specifies how the intermediate data values are to be merged or otherwise combined. Note that the disclosed embodiments are not limited to any particular type or number of operators. Other types of operators (e.g., data filters) can be provided, as needed, depending upon the system 200 architecture and the data processing operations required to produce the desired, application-specific results. In some embodiments, the application programmers provide a partition operator, in addition to the map( ) and reduce( ) operators. The partition( ) operator, specifies how the intermediate data is to be partitioned over a set of intermediate files.
To perform large-scale data processing, a set of input files 202 are split into multiple data blocks 0, . . . , N−1 of either a specified or predefined size (e.g., 64 MB). Alternately, in some embodiments the input files 202 have a predefined maximum size (e.g., 1 GB), and the individual files are the data blocks. A data block is a subset of data that is retrieved during processing. In some embodiments, the data blocks are distributed across multiple storage devices (e.g., magnetic or optical disks) in a data distribution network to fully utilize the aggregate storage space and disk bandwidth of the data processing system.
Referring to
By using a hierarchical assignment scheme, data blocks can be processed quickly without requiring large volumes of data transfer traffic on the system 500. This in turn allows more tasks to be performed without straining the limits of the system 500.
Referring again to
The work queue master 214, when it receives a request to process a set of data using a specified set application-specific map( ), reduce( ) and, optionally, partition( ) operators, determines the number of map tasks and reduce tasks to be performed to process the input data. This may be based on the amount of input data to be processed. For example, a job may include 10,000 map tasks and 10 reduce tasks. In some embodiments, the work queue master module generates a task status table having entries representing all the tasks to be performed, and then begins assigning those tasks to idle processes. As noted above, tasks may be allocated to idle processes based on a resource allocation scheme (e.g., priority, round-robin, weighted round-robin, etc.).
The process 600 begins by determining if there are tasks waiting to be assigned to a process (step 606). If there are no tasks waiting, then the process 600 waits for all the tasks to complete (step 604). If there are tasks waiting, then the process 600 determines if there are any idle processes (step 608). If there are idle processes, then the process 600 assigns a waiting task to an idle process (step 610) and returns to step 606. If there are no idle processes, the process 600 waits for an idle process (step 614). Whenever a process completes a task, the process sends a corresponding message to the work queue master 214, which updates the process and task status tables (step 612). The work queue master 214 may then assign a new task to the idle process, if it has any unassigned tasks waiting for processing resources. For reduce tasks, the work queue master 214 may defer assigning any particular reduce task to an idle process until such time that the intermediate data to be processed by the reduce task has, in fact, been generated by the map tasks. Some reduce tasks may be started long before the last of the map tasks are started if the intermediate data to be processed by those reduce tasks is ready for reduce processing.
In some embodiments, whenever a process fails, which may be discovered by the work queue master 214 using any of a number of known techniques, the work queue master 214 (A) determines what task was running in the failed process, if any, (B) assigns that task to a new process, waiting if necessary until an idle process becomes available, and (C) updates its process and task status tables accordingly. In some embodiments, the work queue master 214 may undertake remedial measures (step 602), such as causing the failed process to be restarted or replaced by a new process. In some embodiments, the work queue master may further detect when such remedial measures fail and then update its process status table to indicate such failures. In addition, in some embodiments, when a map task fails and is restarted in a new process, all processes executing reduce tasks are notified of the re-execution so that any reduce task that has not already read the data produced by the failed process will read the data produced by the new process.
In some embodiments, the set of application-specific data processing operations that the map( ) operator can perform is constrained. For example, in some embodiments, the map( ) operator may be required to process the input data one record at a time, proceeding monotonically from the first record to the last record in the data block being processed. In some embodiments, the map( ) operator may be required to generate its output data in the form of key/value pairs. Either the key or value or both can comprise structured data, as long as the data can be encoded into a string. For example, the key may have multiple parts, or the value may have multiple parts.
By requiring the map( ) operator's output to be in the form of key/value pairs, the resulting intermediate data can be mapped to a set of intermediate data files in accordance with a partition( ) operator. An exemplary partition( ) operator may specify that all intermediate data is to be directed to an intermediate file corresponding to the value of the first byte of the key. Another exemplary partition( ) operator may specify that all intermediate data is to be directed to an intermediate file corresponding to the value of the function "hash(Key) modulo N", where N is a value specified by the application programmer and "hash(Key)" represents the value produced by applying a hash function to the key of the key/value pairs in the intermediate data. In some embodiments, the partition operator is always a modulo function and the application programmer only specifies the modulus to be used by the modulo function. In one embodiment, the partition operator is automatically selected by the work queue master 214, or by one of the application-independent library functions, discussed below.
In some embodiments, the data blocks 0, . . . , N−1 are automatically assigned to map tasks (executed by map processes 204-0, . . . , 204-N−1) in an application independent manner, by the work queue master 214. In particular, the work queue master 214 is configured to determine the number of data blocks to be processed, and to create a corresponding number of instances of the map process 204. Stated in another way, the work queue master 214 assigns a corresponding number of map tasks to processes, as suitable processes become available. Since the number of map tasks may exceed the number of processes available to the work queue master 214, the work queue master 214 will assign as many map tasks as it can to available processes, and will continue to assign the remaining map tasks to processes as the processes complete previously assigned tasks and become available to take on new tasks. The work queue master 214 uses the task status table and process status tables, described above, to coordinate its efforts.
Reduce modules 208 read intermediate data values (e.g., key/value pairs) from the intermediate files 206. In some embodiments, each reduce module 208 reads from only one intermediate file 206. The reduce modules 208 sort the intermediate data values, merge or otherwise combine sorted intermediate data values having the same key and then write the key and combined values to one or more output files 210. In some embodiments, the intermediate file 206 and the output files 210 are stored in a File System (FS), which is accessible to other systems via a distributed network. In some embodiments described below, the reduce phase executes one or more application-specific reduce operators to perform the data merging or combining operation. In an embodiment described below, the data merging or combining operation is performed by one or more application-independent reduce operators, but the selection of which reduce operator(s) to use for any particular data processing operation is application specific.
In some embodiments, the map and reduce modules 204 and 208 are implemented as user-defined objects with methods to carry out application-specific processing on data using known object oriented programming techniques. For example, a MapReduction base class can be created that includes methods and data for counting the number of input files that contain a particular term or pattern of terms, sorting the results of the sort, eliminating duplicates in the sorted results and counting the number of occurrences of the term. Application programmers can derive other classes from the base class and instantiate the base class as an object in the application code to access its data and methods.
While the system 200 provides good performance for many large-scale data processing, the performance of the system 200 may diminish as the amount of data to be processed and thus the number of tasks increases. For instance, performance may be diminished when the size of the data blocks is decreased, thereby increasing the number of map tasks. Since the intermediate files 206 are stored in the FS, an increase in tasks results in an increase in intermediate file access requests and an associated increase in network traffic. Additionally, a single work queue master 214 can only handle a limited number of task assignments per time period, beyond which the work queue master 214 begins to limit system performance. Increasing the size of those tasks to accommodate additional jobs could result in load imbalances in the system 200. These performance issues are addressed in the system 300, which is described below with respect to
In one embodiment, the number of worker processes is equal to the number of machines available in the system 300 (i.e., one worker process per machine). In another embodiment, two or more worker processes are used in each of the machines in the system 300. If a worker process fails, its task is reassigned to another worker process by the master process 320. In some embodiments, the master process 320 or the work queue master 314 may undertake remedial measures to repair, restart or replace a failed worker process.
In some embodiments, when the work queue master 314 receives a map/reduce data processing job, the work queue master 314 allocates the job to a master process 320. The master process 320 determines the number (M) of map tasks and the number (R) of reduce tasks to be performed, and then makes a request to the work queue master 314 for M+R processes (M+R+1, including the master process 320) to be allocated to the map/reduce data processing job. The work queue master 314 responds by assigning a number of processes to the job, and sends that information to the master process 320, which will then manage the performance of the data processing job. If the number of processes requested exceeds the number of processes available, or otherwise exceeds the number of processes that the work queue master 314 is allowed to assign to the job, the number of processes assigned to the job will be less than the number requested.
In some embodiments, all R of the reduce tasks are all immediately assigned to processes, but the reduce tasks do not begin work (e.g., on data sorting) until the master process 320 informs them that there are intermediate files ready for processing. In some embodiments, a single worker process 304/308 can be assigned both a map task and a reduce task, simultaneously (with each being executed by a distinct process thread), and therefore assigning reduce tasks to processes at the beginning of the job does not reduce the throughput of the system.
The division of input files 302 into data blocks 0, . . . , N−1, may be handled automatically by the application independent code. Alternately, the user may set an optional flag, or specify a parameter, so as to control the size of the data blocks into which the input files are divided. Furthermore, the input data may come from sources other than files, such as a database or in-memory data structures.
The input data blocks 0, . . . , N−1, which may in some embodiments be treated as key/value pairs, are read by application independent worker processes 304-0, . . . , 304-N−1, as shown in
In some embodiments, if there are enough worker processes 304 that all the intermediate values can be held in memory across the worker processes, then the system need not write any data to files on local disks. This optimization reduces execution time for map-reduce operations in which the number of worker processes is sufficient to handle all the map tasks at once, and the amount of intermediate data is sufficiently small to be kept in memory.
In some cases, there is significant repetition in the intermediate keys produced by each map task, and the application-specific Reduce function is both commutative and associative. When all these conditions apply, a special optimization can be used to significantly reduce execution time of the map-reduce task. An example of a situation in which the optimization can be applied is a map-reduce operation for counting the number of occurrences of each distinct word in a large collection of documents. In this example, the application-specific map function (sometimes called the map( ) operator elsewhere in this document) outputs a key/value pair for every word w in every document in the collection, where the key/value pair is <w, 1>. The application-specific reduce function (sometimes called the reduce( ) operator elsewhere in this document) for this example is:
input data is "values";
int result=0; // initialize result to zero
for each v in values:
output: <key, result>
Each map task in this example will produce hundreds or thousands of records of the form <word, 1>. The Reduce function simply adds up the count values. To help conserve network bandwidth for map-reduce operations that satisfy these properties, the user may provide an application-specific Combiner function or operator. The Combiner function is invoked with each unique intermediate key and a partial set of intermediate values for the key. This is similar to the Reduce function, except that it gets executed at the end of each Map task by the same machine and process that performed by Map task. The Combiner function partially summarizes the intermediate key/value pairs. In fact, when using a Combiner function, the same function is typically specified for the Combiner and Reduce operations. The partial combining performed by the Combiner operation significantly speeds up certain classes of Map-Reduce operations, in part by significantly reducing the amount of information that must be conveyed from the processors that handle Map tasks to processors handling Reduce tasks, and in part by reducing the complexity and computation time required by the data sorting and Reduce function performed by the Reduce tasks.
Application independent worker processes 308 which have been assigned reduce tasks read data from the locally stored intermediate files 306. In some embodiments, the master process 320 informs the worker processes 308 where to find intermediate data files 306 and schedules read requests for retrieving intermediate data values from the intermediate data files 306. In some embodiments, each of the worker processes 308 reads a corresponding one of the intermediate files 306 produced by all or a subset of the worker processes 304. For example, consider a system in which each of the worker processes 304 assigned a map task outputs M (e.g., 100) intermediate files, which we will call Partion-1,j through Partition-M,j, where j is an index identifying the map task that produced the intermediate files. The system will have 100 worker processes 308, Worker-1 to Worker-M, each of which reads a corresponding subset of the intermediate files, Partition-p,j for all valid values of "j," produced by the worker processes 304, where "p" indicates the partition assigned to a particular worker process Worker-P (304) and "j" is an index identifying the map tasks that produced the intermediate files.
Each worker process 308 sorts the intermediate data values in the subset of the intermediate files read by that worker process in accordance with the key of the key/value pairs in the intermediate data. The sorting of the key/value pairs is an application independent function of the reduce threads in the worker processes 308. Each worker process 308 also merges or otherwise combines the sorted intermediate data values having the same key, and writes the key and combined values to one or more output files 310. The merging or other combining operation performed on the sorted intermediate data is performed by an application-specific reduce( ) operator. In some embodiments, the application-specific reduce( ) operator is implemented using one or more application-independent statistical information processing functions. The selection of which application-independent statistical information processing functions to use, and the data to which these functions are to be applied, however, is application-specific, and in fact depends on which statistical information processing functions are used by the application-specific map operator. In some embodiments, the output files 310 are stored in a File System, which is accessible to other systems via a distributed network. When a worker process 308 completes its assigned reduce task, it informs the master process 320 of the task status (e.g., complete or error). If the reduce task was completed successfully, the worker process's status report is treated by the master process 320 as a request for another task. If the reduce task failed, the master process 320 reassigns the reduce task to another worker process 308.
In some embodiments, the master process 320 is configured to detect task and processor failures. When a task failure is detected, the master process 320 reassigns the task to another process. In some embodiments, the master process 320 redistributes the work of the failed task over a larger number of tasks so as to complete that task more quickly than by simply re-executing the task on another process. The master process subdivides the work assigned to the failed task to a plurality of newly mini-tasks, and then resumes normal operation by assigning the mini-tasks to available processes. The number of mini-tasks may be a predefined number, such as a number between 8 and 32, or it may be dynamically determined based on the number of idle processes available to the master process. In the case of a failed map task, division of the work assigned to the failed task means assigning smaller data blocks to the mini-tasks. In the case of a failed reduce task, division of the work assigned to the failed task may mean assigning the data sorting portion of the reduce task to a larger number of worker processes, thereby performing a distributed sort and merge. The resulting sorted data may, in some embodiments, be divided into a number of files or portions, each of which is then processed using the reduce( ) operator to produce output data. By detecting such failures and taking these remedial actions, the amount of delay in completing the entire data processing operation is significantly reduced.
When a processor failure is detected by the master process 320, it may be necessary to re-execute all the tasks that the failed processor completed as well as any tasks that were in process when the processor failed, because the intermediate results produced by map tasks are stored locally, and the failure of the processor will in many cases make those results unavailable. Using the status tables, described above, the master process 320 determines all the tasks that ran on the processor, and also determines which of those tasks need to be re-executed (e.g., because the results of the tasks are unavailable and are still needed). The master process 320 then updates its status tables to indicate that these identified tasks are waiting for assignment to worker tasks. Thereafter, re-execution of the identified tasks is automatically handled using the processes and mechanisms described elsewhere in this document.
In some embodiments, an additional mechanism, herein called backup tasks, is used to guard against task failures as well as task slow downs. One of the main problems that lengthens the total time taken for a map-reduce operation to complete is the occurrence of "straggler" tasks or machines. A straggler is a process or machine that takes an unusually long time to complete one of the last few map or reduce tasks in the computation. Stragglers can arise for many reasons, including both hardware and software errors or conditions. When a large map-reduce operation is divided into thousands of map and reduce tasks executed by thousands of processes, the risk of a straggler task occurring is significant. The use of backup tasks, as described next, effectively guards against stragglers, without regard to the cause of the problem causing a process or machine to run slowly. In these embodiments, the master process determines when the map-reduce operation is close to completion. In one embodiment, the criteria for being close to completion is that the percentage of map tasks that have completed is above a threshold. In another embodiment, the criteria for being close to completion is that the percentage of map and reduce tasks, taken together, that have completed is above a threshold. The threshold can be any reasonably number, such as 95, 98, or 99 percent, or any percentage above 90 percent. Once the master process determines that the map-reduce operation is close to completion, the master process schedules backup executions of all remaining tasks. These duplicate tasks may be called backup map tasks and backup reduce tasks.
The master process 320 is responsible for assigning tasks to the worker processes 304 and 308 and for tracking their status and output. Periodically, the master process 320 solicits a report from each worker process assigned a task to determine its task status. In some embodiments, the report can be solicited using a polling scheme (e.g., round-robin). If the task status indicates that the worker process has failed, then the task is put back in the appropriate task queue to be reassigned to another worker process. In some embodiments, the master process 320 maintains status tables 326 for managing tasks, as described with respect to
In one embodiment in which more than one master process 320 is used, a locking mechanism is used to ensure that each of the entries of the status tables is modified by only one of the master processes at any one time. Whenever a master process 320 attempts to assign a map or reduce task to a process, or perform any other management of a map or reduce task, the master process first acquires (or attempts to acquire) a lock on the corresponding status table entry. If the lock is refused, the master process concludes that the map/reduce task is being managed by another master process and therefore the master process looks for another map/reduce task to manage. In another embodiment, the task status table is divided into portions, with each master process being given ownership of a corresponding portion of the task status table, and responsibility for managing the map/reduce tasks in that portion of the task status table. Each master process can read other portions of the task status table, but only uses information in entries indicating that the corresponding task has been completed.
The system 300 provides several advantages over other systems and methods by using one or more master processes to assign and manage tasks, together with local databases to store intermediate results produced by the tasks. For example, by distributing file reads over multiple local databases more machines can be used to complete tasks faster. Moreover, since smaller tasks are spread across many machines, a machine failure will result in less lost work and a reduction in the latency introduced by such failure. For example, the FS load for system 200 is O(M*R) file opens and the FS load for system 300 is O(M) input file opens+O(R) output file opens, where M is the number of map tasks and R is the number of reduce tasks. Thus, the system 200 requires significantly more file system file open operations than the system 300.
The memory 412 stores an operating system 416 (e.g., LINUX® or Unix), a network communication module 418, a system initialization module 420, application software 422 and a library 430. The operating system 416 generally includes procedures for handling various basic system services and for performing hardware dependent tasks. The network communication module 418 is used for connecting the system 400 to a file system (FS) 446, servers or other computing devices via one or more communication networks, such as the Internet, other wide area networks, local area networks, metropolitan area networks, and the like. The system initialization module 420 initializes other modules and data structures stored in memory 414 required for the appropriate operation of the system 400. In some embodiments, the application software 422 includes a map operator 424, a reduce operator 426 and a partition operator 428, and the library 430 includes application-independent map functions 432, reduce functions 434, and partition functions 436. As discussed above, the application software 422 may also include a combiner operator 425 when the map-reduce operation meets certain conditions. The functions, procedures or instructions in the library 430 handle the application independent aspects of large scaled data processing jobs, while the application software 422 provides the application-specific functions for producing output data. The application software 422 may include source programs for the map, combiner, reduce and partition operators as well as the corresponding compiled programs, represented by binary files 212 and 312 in
One or more status tables 444 are also included to track tasks and processes, as described with respect to
Referring to
For the embodiment shown in
For the embodiment shown in
The Application Library 810 is a set of application independent procedures 812. In one embodiment, each of the application library procedures includes at least an emit operator 814 and a reduce operator 816. The emit operator 814 for each statistical procedure includes instructions for evaluating data values provided to the emit operator and, when appropriate, updating the information stored in a corresponding table or other data structure (herein called a "table" for ease of explanation) for accumulating the statistical information corresponding to the statistical procedure. Some values provided to the emit operator may be discarded by the emit operator, after analysis of those values, because they provide no information required to be stored in the corresponding table. In some cases, the emit operator 814 may store information corresponding to, but not equal to, a value provided to the emit operator. For instance, an emit operator may increment a count value at a particular index in a table in response to a corresponding value being provided to the emit operator by the application script 804. Furthermore, this is an example of data aggregation that occurs during the map phase.
The reduce operator 816 for each application independent procedure 812 combines the intermediate data produced by multiple map tasks so as to produce a final set of results. The manner in which intermediate data is combined is specific to each type of procedure 812 and thus each application independent procedure 812 has an associated reduce operator. For example, for one application, values having matching index values are summed. In another application, the values for each index are inspected to identify unique index values, and a list of the unique index values is generated.
Records 905 can be, without limitation, log files, transaction records, documents, or virtually any other kind of data records. Records 905 can be in ASCII, binary, or any other file type. Records 905 can include both real-time data and off-line data.
In some embodiments, if record 920 is unstructured, a parsed representation of record 920 is created prior to applying a query at 925. In some embodiments, the parsed representation of record 920 comprises one or more key-value pairs.
At 925, an application-dependent query is applied to record 920 (or to the parsed representation of record 920) to extract or produce zero or more values 930.
In some embodiments, query 925 is applied independently to each record 920 (or to the parsed representation of record 920). For such queries, the analysis of each record 920 is stateless, i.e., no state information needs to be passed from the processing of one record 920 to the next record. Thus, the values 930 produced by a query 925 that is applied independently to each record 920 depend on the content of the record 920 being queried, but do not depend on the contents of other records.
In some embodiments, query 925 is a procedural language query, i.e., a query written as an explicit sequence of steps to apply to record 920 to produce zero or more values. Table 1 provides a pseudo code example of an application script 804, which includes a query written in a procedural language. Although the word "query" is singular, it should be clear that one query 925 on record 920 can include multiple queries (sometimes called sub-queries) about the contents of record 920. Thus, multiple aspects of record 920 can be analyzed in one query 925.
Pseudo Code Example of Application Script, Including Query
/* Define Tables */
Table1: table sum[query:string] of count:int
Table2: table top(100) of query:string weight millisec:int
Table3: table sum[language:string] of count:int
/* Apply the following query to each record */
When (record satisfies specified condition)
/* Extract information from one record */
produce value1 from record;
produce value2 from record;
produce value3 from record;
produce value4 from record;
/* Emit information to tables */
emit Table1[value1] <− 1;
emit Table2[value2] <− value3 weight value4;
emit Table2[valuel] <− value3 weight value4;
emit Table3[value3] <− 1;
If (predefined condition regarding one or more of the produced values)
emit Table1[value4] <− 1;
produce value5 from record;
emit Table3[value5] <− value4;
} /* End of query */
The values 930 produced by the querying 925 of record 920 can take a variety of forms, including, without limitation, Boolean values, arrays of unsigned bytes, integers, floating point values, integral representations of time, hash values, compound structures, arrays, and strings (e.g., arrays of Unicode characters). The values 930 may be temporarily stored in local memory until processing of the current record is complete. In some embodiments, the values produced are represented by key-value pairs.
At 935, zero or more emit operators are applied to each of the zero or more produced values 930 so as to add corresponding information to one or more intermediate data structures 940.
In some embodiments, emit operator 935 is one of a set of predefined application-independent statistical information processing functions, such as one of the operators in emit operators library 965. Each of the emit operators can be thought of as a function that produces a table of values. Furthermore, each such table of values can be indexed using as few or as many indices as the user defines in the application-specific map operator. For each distinct value of the index, or each distinct set of index values (when the table has more than one index), the emit operator produces an associated set of values. For instance, if an emit operator is configured to produce the top 5 values of a set of values, and the table to which it stores data is configured (by the map operator) to be indexed by a single index, then the emit operator will produce the top 5 values for each distinct value of the index. If the table has two indexes (e.g., TopTable[index1][index2]), then the emit operator will produce the top five values for each distinct pair of index values.
Exemplary emit operators include, without limitation: Collection 970, a collection or concatenation of extracted values (sometimes herein called data values); Max 972, a sample of the N highest-weighted items or values per index; Min 974, a sample of the N lowest-weighted items or values; Sample 976, a statistical sampling of N values; Set 978, a set (unique elements) containing at most N items or values per index; Sum 980, an arithmetic sum of data values; Top 982, a statistical estimator for the 'most frequent N' items or values; Histogram 983, which determines the number of occurrences of each distinct value; Quantile 984, which sorts values and determines break points between N tiles (e.g., quartiles for N=4, percentiles for N=100) based on the distribution of the values; and Unique 985, a statistical estimator for the total number of unique items or values. These functions specify particular methods for aggregating the values 930 obtained from the data record queries (e.g., query 925).
In some embodiments, when applying query 925 to record 920 produces a plurality of values 930, each respective process 915 of the first plurality of processes includes applying a respective emit operator 935 to each (or at least a subset) of the produced values 930 so as to add corresponding information to a corresponding intermediate data structure of a plurality of intermediate data structures.
In some embodiments, each intermediate data structure 940 comprises a table having one or more indices. An index (sometimes called a key) can be, without limitation, a time, a number, or a string, thereby permitting the table to be indexed by time, numeric order, or alphabetical order. Indexing the tables by time permits answers to time-series questions (e.g., historical plots) to be easily generated.
In some embodiments, intermediate data structure 940 is a table having a plurality of indices, wherein at least some of the indices are dynamically generated in accordance with the produced values 930. In other words, the index values for which data is stored in the table are dynamically generated from the produced values. For example, if the table is defined to be indexed by an ASCII string, each value of which represents the name of a language, LangTable[language:string], then the values of the index will be determined dynamically based on the language names extracted from the records processed by the system. An example of a table having two indices is LangTable[language:string][day:int], where "day" represents the day of a week (1 to 7), month (1 to 31) or year (1 to 365). This table can be used to count queries for each distinct language on each day of a week, month or year. The index values for either or both of the two indices may be dynamically generated, or alternately could be statically generated when the table is initialized. There need not be any system imposed limit on the number of indices that can be defined for a particular table.
At 955, information from a plurality of intermediate data structures 940 is aggregated to produce output data 960. In some embodiments, the aggregating combines values 930 having the same index values. Each index value may be considered to be the key in a key-value pair. In some embodiments, output data 960 are a final set of tables.
In some embodiments, aggregation is performed by a plurality of second processes executing in parallel (e.g., process 208 or process 308). In some embodiments, in each respective process of the second plurality of processes, information is aggregated from a plurality of the intermediate data structures 940 to produce output data 960. The output data 960 may include multiple tables of aggregated output data, including one table for each table defined in the application script (804,
In some embodiments, once output data 960 have been produced, a second query can be run on output data 960. If output data 960 are a set of records, these records can serve as the input records 905 for a second query using the process illustrated in
The following pseudo code query (Table 2) analyzes web server logs ("WS logs") for the number of searches (sometimes herein called web searches) for images coming from Japanese language users. For these searches by Japanese language users, the query also determines the 100 most CPU-intensive searches.
/* Input WS logs. Parse each log based on the description of such logs
in */
/* WSLogEntryParse, which is defined in the file ""wslog.parse". */
parse "wslog.parse"
/* Declare and initialize the variable log_record. */
/* The type is WSLogEntryParse defined in "wslog.parse". */
/* The value, which is reinitialized for each input record, is generated
by implicit */
/* conversion (parsing) of the input record to that type. */
log_record: WSLogEntryParse = input;
/* Create a table to count the searches. */
japanimagesearch: table sum [search: string] of count: integer
/* Create an object for the 100 such searches that took the most total time
(aggregate) */
/* to serve. */
japanimagetoptime: table top(100) of search: string weight millisec:
/* Define some helper variables, which are reinitialized for each record. */
search: string = log_record.search;
request: string = log_record.request;
language: string = log_record.searchlang;
elapsedtime: integer = log_record.elapsedtime;
When (
/* Look for log lines whose language field is Japanese and whose
request is for the */
/* image server. */
match ("{circumflex over ( )}ja:", language) and match ("{circumflex over ( )}GET /images", request)
/* Count this record. */
emit japanimagesearch[search] <− 1;
/* Track how much time it took to serve. */
emit japanimagetoptime <− search weight elapsedtime;
Each intermediate data structure 940 (e.g., a table) is used by one or more corresponding emit operators to gather and process values 930 emitted to it and store the results in indexed storage locations. Each emit operator (e.g., collection 970, max 972, etc.) knows how to aggregate the values 930 passed to it.
To show the usefulness of indices, the following example considers queries that count the number of web searches for various singers (e.g., Britney Spears, Madonna, etc.) A data structure 940 with no index, such as
numbritneyqueries: table sum of integer;
can only count the number of web searches for one singer. On the other hand, adding indices to the tables permits more sophisticated queries. For example, the following data structure can be used to count the number of web searches for many different singers:
numdivaqueries: table sum [string] of integer;
This table is indexed by strings (e.g., the names of different singers, "britney," "madonna," etc.). Each entry in the table stores an integer (e.g., the number of web searches for the corresponding singer). For this data structure, an emit operator, such as
emit numdivaqueries ["britney"] <−1
will aggregate the integer 1 to the table numdivaqueries indexed by the string "britney". Since the numdivaqueries table is configured to store sums, the effect of the emit operator example shown above is to add 1 to the count of "britney" web queries.
Each time an index value is used in an emit operation, the cell to store its value will be created if it does not already exist in the corresponding table.
Other exemplary types of data structures 940 (e.g., tables) for aggregating query values 930 include:
/* Collect all the web searches into a single stream. */
allsearches: table collection of string;
/*Count the number of times each web search is seen. */
numsearches: table sum [search: string] of count: integer;
/* Record the top 10 web searches for each country. */
topsearches: table top (10) [country: string] of search: string weight count: integer;
/* Record the ten most remunerative web searches. */
bigmoney: table maximum (10) [search: string] of search: string weight revenue: float;
/* Count how many unique web searches using an (internal) sampled table of 10,000*/
/* entries to estimate the distribution. */
uniquesearches: table unique (10000) of search: string;
/* Gather up to ten distinct search strings for each distinct cookie */
session: table set (10) [cookie: string] of search: string;
The following pseudo code query (Table 3) illustrates the use of indices and aggregation to answer the question "How many web searches are made in each language?" for a given set of log records 905.
/* Declare the table indexed by the name of the language to store the
results. */
searchesbylanguage: table sum[language:string] of count: integer;
/* For each record, parse the input record into the variable
'log_record'. */
log_record: LogRecord = input;
/* Discover the language of the search by doing some processing on the
search, */
/* here represented schematically by a call to the fictitious function
'language_of'. */
lang: string = language_of (log_record.search);
/* Create an event that records that there was a search in the logs that was
in this particular language. */
emit searchesbylanguage[lang] <− 1;
As shown in Table 1 and Table 2 above, a more complex query would contain more aspects of a procedural language: 'if' statements, loops, local variables, etc. This query is deliberately simple for clarity.
This example (i.e., the query shown in Table 3) has a table (searchesbylanguage) indexed by the string representing the name of the language in the search. The system creates these indexed strings on demand. That is, the size of the table and the size of the strings to be used as indices do not need to be predeclared; the running of the query generates the appropriate indices and these table entries (for "english", "that", "japanese", etc.) are synthesized on demand.
In some embodiments, the events emitted by running the process on each record are collected on each processor where the process ran. Events collected on a given processor can be aggregated there for efficiency, to reduce the computation and bandwidth required to assemble the final table, e.g., output data 960. For instance, if our sample process runs on three processors, the counts can be accumulated on each processor, so after the query has been applied to all the records, there are in effect mini-tables on each processor, such as:
The final phase aggregates 955 these individual tables element by element to construct the final table 960, such as:
In some embodiments, the final aggregation is done independently for each table, and furthermore final aggregation may be done independently for different indices (or groups of indices) of a table. For example, the final value for "english" can be determined on a separate process from the final value for "spanish."
The foregoing description, for purpose of explanation, has been described with reference to specific embodiments. However, the illustrative discussions above are not intended to be exhaustive or to limit the invention to the precise forms disclosed. Many modifications and variations are possible in view of the above teachings. The embodiments were chosen and described in order to best explain the principles of the invention and its practical applications, to thereby enable others skilled in the art to best utilize the invention and various embodiments with various modifications as are suited to the particular use contemplated.
|Cited Patent
|Filing date
|Publication date
|Jun 24, 1987
|Oct 24, 1989
|Kabushiki Kaisha Toshiba
|Parallel searching system having a master processor for controlling plural slave processors for independently processing respective search requests
|Mar 11, 1991
|Sep 6, 1994
|Laclead Enterprises
|System for managing data storage based on vector-summed size-frequency vectors for data sets, devices, and residual storage on devices
|Jun 9, 1993
|May 9, 1995
|Hitachi, Ltd.
|Evaluating method of data division patterns and a program execution time for a distributed memory parallel computer system, and parallel program producing method using such an evaluating method
|Jul 20, 1993
|May 16, 1995
|Truth Hardware Corporation
|Pivot structure from a lock handle
|Apr 20, 1995
|Nov 28, 1995
|Paralogic, Inc.
|Run-time system having nodes for identifying parallel tasks in a logic program and searching for available nodes to execute the parallel tasks
|Dec 15, 1993
|Dec 31, 1996
|Information Builders, Inc.
|Query processor for parallel processing in homogenous and heterogenous databases
|Mar 4, 1997
|Sep 8, 1998
|Hitachi, Ltd.
|Database management system and method for query process for the same
|Feb 6, 1996
|Oct 6, 1998
|Oracle Corporation
|System and apparatus for storage retrieval and analysis of relational and non-relational data
|Jun 24, 1996
|Feb 9, 1999
|Oracle Corporation
|Method and apparatus for parallelizing operations that create a table
|Feb 6, 1997
|Mar 16, 1999
|Ncr Corporation
|Optimization of SQL queries involving aggregate expressions using a plurality of local and global aggregation operations
|Feb 6, 1997
|Mar 16, 1999
|International Computers Limited
|Parallel searching technique
|Aug 14, 1996
|Jul 6, 1999
|Infoseek Corporation
|Real-time document collection search engine with phrase indexing
|Jun 5, 1997
|Sep 21, 1999
|Oracle Corporation
|Method and apparatus for parallelizing operations that insert data into an existing data container
|Jul 28, 1998
|Oct 5, 1999
|Digital Equipment Corporation
|Method for mapping an index of a database into an array of files
|Feb 13, 1998
|Dec 21, 1999
|Organicnet, Inc.
|Crucible query system
|Sep 4, 1998
|Feb 15, 2000
|Hitachi, Ltd.
|System and method for implementing parallel operations in a database management system
|Apr 9, 1998
|Jan 30, 2001
|International Business Machines Corporation
|Method for executing aggregate queries, and computer system
|Aug 14, 1998
|May 1, 2001
|Microsoft Corporation
|Layered query management
|Nov 3, 1999
|Jul 3, 2001
|Hitachi, Ltd.
|Database management system and query operation therefor, including processing plural database operation requests based on key range of hash code
|Nov 6, 1998
|Oct 9, 2001
|Efirms.Com, Inc.
|System for providing business information
|Nov 25, 1998
|Apr 2, 2002
|International Business Machines Corporation
|Machine-implementable method and apparatus for iteratively extending the results obtained from an initial query in a database
|Aug 4, 1999
|Jun 18, 2002
|Hyperroll, Israel, Ltd.
|Method of and system for managing multi-dimensional databases using modular-arithmetic based address data mapping processes on integer-encoded business dimensions
|Mar 16, 2001
|Apr 29, 2003
|Hitachi, Ltd.
|Database management apparatus and query operation therefor, including processing plural database operation requests based on key range of hash code
|Sep 20, 2000
|May 20, 2003
|Hitachi, Ltd.
|System and method for implementing hash-based load-balancing query processing in a multiprocessor database system
|Jul 29, 1999
|May 25, 2004
|Flexible rule-based communication system and method for controlling the flow of and access to information between computer users
|Jan 24, 2000
|Jun 21, 2005
|Oracle International Corporation
|Methods and systems for asynchronous notification of database events
|Mar 26, 2002
|Nov 1, 2005
|Sun Microsystems, Inc.
|System and method for determining relevancy of query responses in a distributed network search mechanism
|Nov 21, 2000
|Jan 3, 2006
|Al Acquisitions, Inc.
|System for discrete parallel processing of queries and updates
|Mar 26, 2002
|Aug 29, 2006
|Sun Microsystems, Inc.
|System and method for distributed real-time search
|Aug 24, 2001
|Sep 5, 2006
|Oracle International Corporation
|Method and system for pipelined database table functions
|Jan 27, 2003
|Dec 5, 2006
|International Business Machines Corporation
|Method, system, and program for optimizing database query execution
|Jul 7, 2004
|Sep 30, 2008
|Netezza Corporaton
|Optimized SQL code generation
|Jul 7, 2004
|Oct 7, 2008
|Netezza Corporation
|SQL code generation for heterogeneous environment
|Nov 26, 2001
|Aug 29, 2002
|Pedram Abrari
|Business rules user inerface for development of adaptable enterprise applications
|Oct 9, 2001
|Oct 10, 2002
|Thomas Brian Christopher
|System for providing business information
|Feb 4, 2002
|Dec 26, 2002
|Sybase, Inc.
|Database system providing optimization of group by operator over a union all
|May 6, 2002
|Feb 13, 2003
|Gibson Michael A.
|Methods and apparatus for high-speed approximate sub-string searches
|May 17, 2002
|Nov 20, 2003
|Zigmund Sandler
|Database system and methods
|Feb 14, 2003
|Feb 19, 2004
|Mcfadden Brian D.
|Flexible rule-based communication system and method for controlling the flow of and access to information between computer users
|Oct 14, 2003
|Jun 10, 2004
|Burgoon David Alford
|Information reservoir
|Jan 27, 2003
|Jul 29, 2004
|International Business Machines Corporation
|Method, system, and program for optimizing database query execution
|Apr 30, 2003
|Nov 4, 2004
|Oracle International Corporation
|Determining a mapping of an object to storage layer components
|Jul 7, 2004
|Feb 3, 2005
|Netezza Corporation
|Optimized SQL code generation
|Jul 7, 2004
|Feb 3, 2005
|Netezza Corporation
|SQL code generation for heterogeneous environment
|Aug 25, 2003
|Mar 3, 2005
|International Business Machines Corporation
|Method, system, and article of manufacture for parallel processing and serial loading of hierarchical data
|Jul 20, 2004
|Mar 3, 2005
|Decode Genetics Ehf.
|Set definition language for relational data
|Oct 29, 2003
|May 5, 2005
|Oracle International Corporation
|Network data model for relational database management system
|Dec 15, 2003
|Jun 16, 2005
|Sap Aktiengesellschaft
|Database early parallelism method and system
|Jan 8, 2004
|Jun 23, 2005
|International Business Machines Corporation
|Integrated visual and language-based system and method for reusable data transformations
|Apr 1, 2003
|Nov 24, 2005
|Hitachi, Ltd.
|Database management system and method for query process for the same
|"AT&T Labs Research-Hancock Project", http://www.research.att.cm/~kfisher/hancock/.
|Andres C. Arpaci-Dusseau et al., "High-Performance Sorting on Networks of Workstations", Proceedings of the 1997 AMC SIGMOD International Conference on Management of Data, May 1997, Tuscon, Arizona.
|Arash Baratloo et al., "Charlotte: Metacomputing on the Web", Proceedings of the 9th International Conference on Parallel and Distributed Computing Systems, 1996.
|Douglas Thain et al., "Distributed Computing in Practice: The Condor Experience", Concurrency and Computation: Practice and Experience, 2004.
|Erik Riedel et al., "Active Disks for Large-Scale Data Processing", IEEE Computer, Jun. 2001, pp. 68-74.
|Guy E. Blelloch et al., "Scans as Primitive Parallel Operations", IEEE Transactions on Computers, C-38(11), Nov. 1989.
|Jim Gray, "Year 2004 Results", Sort Benchmark Home Page, http://research.microsoft.com/barc/SortBenchmark/.
|Jim Wyllie, "SPsort: How to Sort a Terabyte Quickly", http:/almel.almaden.ibm.com/sc/spsort.pdf.
|Leslie G. Baliant, A Bridging Model for Parallel Computation:, Communications of the ACM, vol. 33, No. 8, Aug. 1990, pp. 103-111.
|Luiz André Barroso et al., "Web Search for a Planet: The Google Cluster Architecture", IEEE Micro, Mar.-Apr. 2003, pp. 22-28.
|Richard E. Ladner et al., "Parallel Prefix Computation", Journal of the ACM, vol. 27, No. 4, Oct. 1980, pp. 831-838.
|Sanjay Ghemawat et al., "The Google File System", 19th Symposium on Operating Systems Principles, Lake George, New York, 2003, pp. 29-43.
|Sergei Gorlatch, "Systematic Efficient Parallelization of Scan and Other List Homomorphisms", Euro-Par '96, Parallel Processing, Lecture Notes in Computer Science 1996, pp. 401-408.
|William Gropp et al., Using MIP: Portable Parallel Programming with the Message-Passing Interface, MIT Press, Cambridge, MA 1999.
|Citing Patent
|Filing date
|Publication date
|Dec 21, 2010
|Apr 16, 2013
|Fujitsu Limited
|Search device and search method
|Jan 8, 2010
|Sep 17, 2013
|International Business Machines Corporation
|Execution of dataflow jobs
|Nov 15, 2010
|Nov 26, 2013
|International Business Machines Corporation
|Reducing the response time of flexible highly data parallel task by assigning task sets using dynamic combined longest processing time scheme
|Jun 12, 2008
|May 13, 2014
|Yahoo! Inc.
|System and/or method for balancing allocation of data among reduce processes by reallocation
|Apr 1, 2010
|May 27, 2014
|Touchstone Systems, Inc.
|Method and system for data aggregation, targeting and acquisition
|Aug 27, 2009
|Jul 22, 2014
|Yahoo! Inc.
|System and method for finding top N pairs in a map-reduce setup
|Nov 30, 2010
|Sep 9, 2014
|Fujitsu Limited
|Technique for coordinating the distributed, parallel crawling of interactive client-server applications
|Jan 30, 2010
|Oct 28, 2014
|International Business Machines Corporation
|System and method for building a cloud aware massive data analytics solution background
|Aug 10, 2010
|Jan 6, 2015
|International Business Machines Corporation
|Scheduling parallel data tasks
|Jul 22, 2010
|Feb 10, 2015
|Zte Corporation
|Data collecting method, data collecting apparatus and network management device
|Mar 12, 2010
|May 12, 2015
|Fujitsu Limited
|Determining differences in an event-driven application accessed in different client-tier environments
|Nov 5, 2012
|Nov 24, 2015
|Sap Se
|Integrated analytics on multiple systems
|Jun 21, 2013
|Dec 1, 2015
|Nec Laboratories America, Inc.
|Compiler-guided software accelerator for iterative HADOOP® jobs
|Feb 14, 2011
|Dec 8, 2015
|Fujitsu Limited
|Web service for automated cross-browser compatibility checking of web applications
|Oct 21, 2014
|Mar 1, 2016
|International Business Machines Corporation
|Scheduling parallel data tasks
|Jun 28, 2012
|Mar 8, 2016
|Emc Corporation
|Execution framework for a distributed file system
|Dec 27, 2012
|May 10, 2016
|Google Inc.
|Clustering for parallel processing
|Apr 20, 2011
|Jun 28, 2016
|International Business Machines Corporation
|Generating map task output with version information during map task execution and executing reduce tasks using the output including version information
|Nov 30, 2010
|Jul 26, 2016
|Fujitsu Limited
|Architecture for distributed, parallel crawling of interactive client-server applications
|Jun 30, 2014
|Aug 23, 2016
|Google Inc.
|Method for learning backup policies for large-scale distributed computing
|May 6, 2016
|Jan 3, 2017
|Google Inc.
|Clustering for parallel processing
|Jun 6, 2014
|Jan 31, 2017
|Microsoft Technology Licensing, Llc
|Extending relational algebra for data management
|Mar 14, 2011
|Mar 7, 2017
|International Business Machines Corporation
|Transmission of Map/Reduce data in a data center
|Jun 28, 2012
|Aug 29, 2017
|EMC IP Holding Company LLC
|Worldwide distributed job and tasks computational model
|Feb 24, 2011
|Oct 31, 2017
|Ebay Inc.
|Parallel data stream processing system
|Jun 12, 2008
|Dec 17, 2009
|Yahoo! Inc.
|System and/or method for balancing allocation of data among reduce processes by reallocation
|Jan 7, 2009
|Jul 8, 2010
|Microsoft Corporation
|Scope: a structured computations optimized for parallel execution script language
|Apr 1, 2010
|Oct 7, 2010
|Touchstone Systems, Inc.
|Method and system for data aggregation, targeting and acquisition
|Aug 27, 2009
|Mar 3, 2011
|Yahoo! Inc.
|System and method for finding top n pairs in a map-reduce setup
|Dec 21, 2010
|Apr 21, 2011
|Fujitsu Limited
|Search device and search method
|Jan 8, 2010
|Jul 14, 2011
|International Business Machines Corporation
|Execution of dataflow jobs
|Jan 30, 2010
|Aug 4, 2011
|International Business Machines Corporation
|System and method for building a cloud aware massive data analytics solution background
|Feb 24, 2011
|Sep 1, 2011
|Ebay Inc.
|Parallel data stream processing system
|Mar 12, 2010
|Sep 15, 2011
|Fujitsu Limited
|Determining Differences in an Event-Driven Application Accessed in Different Client-Tier Environments
|Dec 20, 2010
|Oct 20, 2011
|Methods and systems for performing cross store joins in a multi-tenant store
|Jul 22, 2010
|Nov 22, 2012
|Zte Corporation
|Data Collecting Method, Data Collecting Apparatus and Network Management Device
|Apr 20, 2010
|Apr 25, 2013
|New Orchard Road
|Data center operation
|Apr 27, 2012
|Oct 31, 2013
|Ludmila Cherkasova
|Workload manager for mapreduce environments
|Jun 21, 2013
|Feb 13, 2014
|Nec Laboratories America, Inc.
|Compiler-guided software accelerator for iterative hadoop jobs
|Nov 5, 2012
|Mar 27, 2014
|Qi Sun
|Integrated analytics on multiple systems
|Jun 6, 2014
|Dec 10, 2015
|Microsoft Corporation
|Extending relational algebra for data management
|Mar 31, 2010
|Oct 5, 2011
|Method and system for MapReduce data transmission in data center having SAN
|Mar 31, 2010
|Jul 9, 2014
|Method and system for MapReduce data transmission in data center having SAN
|Oct 18, 2011
|May 2, 2012
|Fujitsu Limited
|Technique for stateless distributed parallel crawling of interactive client-server applications
|Oct 18, 2011
|Oct 31, 2012
|Fujitsu Limited
|Technique for stateless distributed parallel crawling of interactive client-server applications
|Oct 21, 2011
|May 2, 2012
|Fujitsu Limited
|Architecture for distributed, parallel crawling of interactive client-server applications
|Oct 21, 2011
|Oct 31, 2012
|Fujitsu Limited
|Architecture for distributed, parallel crawling of interactive client-server applications
|Oct 26, 2011
|May 2, 2012
|Fujitsu Limited
|Synchronization scheme for distributed, parallel crawling of interactive client-server applications
|Oct 26, 2011
|Nov 28, 2012
|Fujitsu Limited
|Synchronization scheme for distributed, parallel crawling of interactive client-server applications
|Oct 27, 2011
|May 2, 2012
|Fujitsu Limited
|Technique for efficient partial crawling of interactive client-server applications in a parallel, distributed environment
|Oct 27, 2011
|Oct 31, 2012
|Fujitsu Limited
|Technique for efficient partial crawling of interactive client-server applications in a parallel, distributed environment
|Oct 27, 2011
|Nov 14, 2012
|Fujitsu Limited
|Technique for compression of state information in the crawling of interactive client-server applications
|Oct 27, 2011
|May 2, 2012
|Fujitsu Limited
|Technique for coordinating the distributed, parallel crawling of interactive client-server applications
|Oct 27, 2011
|Oct 31, 2012
|Fujitsu Limited
|Technique for coordinating the distributed, parallel crawling of interactive client-server applications
|Jan 26, 2011
|Aug 4, 2011
|International Business Machines Corporation
|System and method for building a cloud aware massive data analytics solution background
|Mar 14, 2011
|Oct 6, 2011
|International Business Machines Corporation
|Transmission of map-reduce data based on a storage network or a storage network file system
|U.S. Classification
|1/1, 707/999.007, 707/999.003
|International Classification
|Cooperative Classification
|Sep 29, 2004
Owner name: GOOGLE, INC., CALIFORNIA
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:PIKE, ROBERT C.;QUINLAN, SEAN;DORWARD, SEAN M.;AND OTHERS;REEL/FRAME:015863/0454
Effective date: 20040928
|Dec 14, 2010
|Certificate of correction
|Jan 8, 2013
|Fee payment
Year of fee payment: 4
|Mar 15, 2017
|Fee payment
Year of fee payment: 8


text:
ICICI Pockets app is back with another great offer on Money Add. Just Add Rs.250 in your Pockets app wallet to get additional Rs.50 Cashback – This Offer is valid for first time money add only (New Users).
ICICI Pockets app can be used anywhere and in may ways. You can do recharges,p Pay bills, Pay other online stores, get a virtual visa card to transact online, book movie tickets, send money and lots more!
How to get the offer ?
Download ICICI Pockets app from Google Play store/ App store.Sign up for a new ICICI Pockets account.Enter all your Required details during Registrations.Verify your mobile number and proceed.
Once your account is created, You need to fill up your Pockets app with Funds.Click on top right icon > Add Funds.Enter amount (Rs.250) and make payment by suitable modes of payment.After successfully payment & now wait for 3 days – You will get your cashback within 3 days of transaction.

subset: commoncrawl


text:
Not Alex Smith, but Troy Smith has helped the 49ers to two straight wins. Can he lead them to the NFC West title?
Like I've said for many years. the "QB" on this team is the problem and you guys for years have said, we need tackles and such and always tore down that idea, saying no chance, not the problem,when the problem has starred us right in the face 2+2=4 obvious. And Troy is good but not the best, just hink if we had Vick in here or Mcnabb, our team might be going all the way if that happened this year! We have the weapons have all the offfensive weapons in place like receiver running fullback, we just need that QB, and we will see if Troy is just that. I still say we go after a high profile QB this offseason in the likes of Vick or someone of his stature as security so if Troy doesnt meet expectations and keep troy as backup if thats possible, thats if troy does not show consistant potential, we dont need another smith experiment, the last one failed!
If troy doesnt work out as good as we think we need a hight profile QB in here immediatly this offseason. If ya'll dont agree, then I will start thinking this is a cowbilly fan Blog. It's obvious what we need, I've been saying it for years! That's the solution consistancy and reliability.
I say we only keep T. Smith in there as starter for next season if we make the playoffs, or dont lose more than 2 more games here on out. I may be crazy but I have a feeling he might pull all the games off but one. I have a funny feeling, I hope I'm right on that, I was right about the london game, and I had a feeling too then.
lone texas i share the same feeling go niners
time to play hard smart 49ers football we need this win today against the bucs and if the rest of the division falls we are one game out of leading the nfc west
Let me get to the point. The playcalling sucks. Granted. No argument. When Alex came back from his 'benching' vs the Eagles and was allowed to open it up, he played great – same witht he final SF drive vs Saints. When Troy was allowed to open it up vs the Rams, he played great. There is simply black and white evidence that both guys suck in conservative offenses. But, that isn't the biggest problem
The problem is Singletary on all levels. Anthony Davis should not be starting. Westbrook and Dixon should be spelling Gore ALOT more. Taylor Mays should never have been leapfrogged to starter. His QBs should not be handcuffed by his prehistoric ground and pound offensive 'vision'. The guys just doesn't get it.
Alex Smith played a fast paced spread offense in college. One of the main reasons he failed with Nolan was that Nolan did not play to those strengths. Say Smith has a limited skill set if you want, but THEY DRAFTED HIM. They knew his skills. Three step drops from under center were not his strong suit. So shoehorning a spread, mobile guy into a Eli Manning style QB mold was doomed from the start. They add Vernon Davis and use him as a freakin blocker. They pass on guys like DeSean Jackson for O-linemen. Nolan gets fired and Singletary picks up where he left off and can't figure out why he's not winning.
Enter Crabtree last year and we see some signs. The Niners go 5-5 to finish out the year and actually look like they are building. Add Ted Ginn jr for speed and Westbrook in the backfield. Then promptly forget you have them and run Gore up the middle all day every day. Gain 3 yards on 2 plays and pass on 3rd and 8 and wonder why the defense is always ready. Before he got hurt, Alex Smith was the second most pressured QB in the league. How exactly does Singletary think they arrived at that place? He has a vanilla offense that leads to 3rd and long and a shitty o-line that crumbles under pressure. Damn, I don't even get paid to figure this out.
Add to the offensive woes by keeping the same defense that ranked near the bottom of the league in pass defense. Gloat about all the sacks you had last year ignoring the fact that most of them came in a handful of games vs teams that somehow had even worse -lines than you did. Sudden the recipe for a 6 win season is perfected.
It took me a while to get all of this. I – like most in Niner land – blamed Alex for most of it. He deserves some – those picks came out of his hand, not mine or yours or anyone else's – but the more I look at it, he was as much a victim of Singletary's lack of football intelligence just like Troy Smith was today. You take QBs who have had rocky careers and need consistency, put them in horrible situations and then rant and cary on like an asshole when your system fails them. That's not coaching. Singletary had an average QB in Alex Smith that he asked to be great because the system around him demanded greatness. Only a great QB could possibly win in that shit. Alex failed. He failed because he's shell shocked. He failed because of their schedule and he failed because he doesn't have it in him to tell his coach to kiss his ass and take control of the offense.
Enter Troy Smith. He beats up on 2 of the worst pass defenses in the league and people – desperate for something – cling to him. Then the system gets him too. We see that Troy is but an average QB and not great. He is capable and – like Alex – could probably make a career in the NFL. That is, if he weren't playing for an idiot.
So the offense sputters as Singletary insists the QB is not an important position. The defense continues to be outclassed by all but the very worst teams in the league and we the fans get to blame Alex or playcalling or Singletary or the Yorks or whoever.
No me, Not anymore.
I blame me. I blame myself for not seeing this team for being over-hyped disaster that it was. If I were Alex and Troy and (by some miracle) I was offered another contract here, I'd run like hell. If I were Lawson, I;d join them. If I were Willis and Davis and Gore, I;d beg to be traded. If I were Singletary, I'd just pray I got fired before it got any worse. Because it will. No matter what. The Packers will steam roll this team. The Rams and Hawks could very possibly beat them. San Diego has a shot. So if we assume the 9ers can beat the Cards 2x (and I don't even want to assume that right now) They will could very well go 2-4 down the stretch. 6-0 would be great. But I don't believe in Santa anymore folks.
Just wanna say that this website sucks.. There aren't any articles any more. Maybe one per game and they are about 1 or 2 paragraphs..
Deekon our apologies…havent been around a lot lately. We are going to be picking things back up. Had to take care of a few things…but the site will get going again. Patience…we aren't going anywhere and we do know we have dropped the ball as of late.
Wickerman, first I hate that name, change it!!! I think you suggesting for our players to want t obe traded is like a fan jumping ship. I hate that were losing more than anyone, but you cant abandon the ship when things are bad. Ya, its been years of this crap and were all tired of it, but dont suggest the players to want to leave our beloved 49ers, let me guess you want them to go right to your cowbilly's dont you! That statement is why I hate your comments and think your just a cowbilly-49er fan on here who loves bgoth teams. You want to see sing go and all those players knowing they would help some other team mainly your cowbillys Wicker! Go back to the cowbilly blog and get a real name like COWPATTYMAN. I am upset with Sings calls too but I know we need that QB and we dont have it yet, all we have is inexperienced 2nd string typre guys in here, guys who would do well in the CFL or the arena league. We need that real deal QB in here or were not going anywhere. I know the line sucks and all that, BS, we need that QB, that high profile proven QB in here enough said!
Hey the village called, they miss their idiot. Go away, you are neither entertaining nor even remotely intelligent. People post comments and your response is 'You are a Cowboys fan, I hate you.'
Really? Your mother must be proud of your intellectual accomplishments. Call up from the basement and have her bring you a ho-ho.
The only gripe I have with this site is that they don't ban bottom feeding, drooling idiots like you for wasting bandwidth and adding nothing above neanderthal grunts to the conversation.
Try watching 9ers games with your eyes open. The tired old 'a veteran QB will change everything' saw is old and pointless. A vet QB will not fix a horrible o-line. He won;t patch the defensive secondary,. He won;t generate a pass rush. He won;t make Crabtree and Morgan into DeSean Jackson. The Yorks have drafted this team to mediocrity and hired a bunch of people from your trailer park to coach it.
But hey go on believing that Vick can be baited into coming to save the 9ers in 2011 or that Jon Gruden will ruin his reputation by taking a job with this dysfunctional mess of an organization.
Please follow this up with some absolutely stunning feat of intellect by calling be stupid or accusing me of being a fan of some other team. Nevermind the fact that I have followed this team since before Bill Walsh. But I imagine you can work some feat of mental gymnastics to wow us all with your superior knowledge. You'll probably work in a reference to a veteran QB that will teach Goldson not to bite on play action or teach Anthony Davis to block while you;re at it.
I await your doubtlessly inspired retort with bated breath.
LOL, No they need to Ban Cowbilly imposters like yourself. Go back to Hee-Haw and your cowbilly blog. Meanwhile I'll be calling mama, LOL. That was hilarious, keep em coming idiot! No sorry, COWPATTYMAN! You are defintly a cowbilly fan on here and I know it! You want the worst for us, your suggestions are ridiculous and always point to taken this team apart were we wont go anywehere. Were do you want these palyers to go if they were to leave genius, let me guess the your beloved cowbillys. Get off this site, your like a Tic. The Probelm is the QB!
Copyright © 2014 49ersNews.com - Privacy Policy


text:
- Description
- As mysterious as the deepest oceans and as mesmerizing as the bluest seas, these deep blue Murano glass cufflinks are a puzzling perfection of pure amusement. The random inflections of silver and white, blending with the tinctures of blue provide a bold balance of brilliance with these deep blue Murano glass cuff links. You definitely won't need a detective from NYPD Blue to decide if these daring cuff links are for you!
Designed by XMI Platinum
Please note, each piece is uniquely made from hand blown Murano glass and there will be some variation from the picture.
- |Reviews
Customer Ratings & Reviews
Be the first to rate this item!
- |Delivery
Orders placed before 3 pm EST ship out the same day.


text:
|"Kim Bottles" <firstname.lastname@example.com>
|Re: [TowerTalk] Rotator for MA550
|"Rick Karlquist" <firstname.lastname@example.com>
|Tue, 15 Jun 2004 15:55:56 -0700 (PDT)
The real issue is probably: Is the MA550 strong enough for the Yagi when the wind blows? I just bought a 2 element SteppIR for my MA-550. I also have a 4 element SteppIR at another QTH on a lattice tower turned by an AlfaSpid. I wouldn't want to put the 4 element on the MA-550 unless I was going to crank it down in high winds. I used to have a KT34 on the MA550 and a HAM-M turned it with no problem. I didn't leave it up in high winds. I remember that the antenna would slip on the mast in high winds, so the HAM-M never really got much of a workout. The rotating base structure is specifically designed for the HAM-M through HAM-IV rotators, as you can probably figure out if you look at it. I have 20 year old UBC calcs for the MA-550 and it certainly isn't rated for much antenna area at 70 MPH. Rick N6RK Kim Bottles said: > Gentlemen, > > I just picked up a used MA550 with rotating base. Is the Ham IV strong > enough to turn this thing? I will be putting my 4 element SteppIR (10 > Square feet WL, 80 pounds) on it. > > What rotator is the "best" solution that will fit the rotating base > fixture? > > Thanks! > > Kim Bottles - K7IM > > Ps. Does anyone have a manual for this MA550 that they would be willing > to copy for me? (I have the drawing from US Tower's website, but if > there is any other information that came with it originally, I would > like to see what it has to say. Thanks again.) > _______________________________________________ > > See: http://www.mscomputer.com for "Self Supporting Towers", "Wireless > Weather Stations", and lot's more. Call Toll Free, 1-800-333-9041 with > any questions and ask for Sherman, W2FLA. > > _______________________________________________ > TowerTalk mailing list > email@example.com > http://lists.contesting.com/mailman/listinfo/towertalk > > _______________________________________________ See: http://www.mscomputer.com for "Self Supporting Towers", "Wireless Weather Stations", and lot's more. Call Toll Free, 1-800-333-9041 with any questions and ask for Sherman, W2FLA. _______________________________________________ TowerTalk mailing list firstname.lastname@example.com http://lists.contesting.com/mailman/listinfo/towertalk
|<Prev in Thread]
|Current Thread
|[Next in Thread>
|Previous by Date:
|[TowerTalk] Antenna Separation, N6KJ
|Next by Date:
|[TowerTalk] HF6V Coil?, Chris Hurlbut
|Previous by Thread:
|[TowerTalk] Rotator for MA550, Kim Bottles
|Next by Thread:
|[Date] [Thread] [Top] [All Lists]


text:
The Tony B. Academic Travel Award honors Tony Beugelsdijk, Los Alamos National Laboratory, an Association for Laboratory Automation (ALA) co-founder who passed away in August, 2009. Tony played a very inspirational and instrumental role in laboratory robotics and made significant contributions to ALA, the former LabAutomation conference and exhibition, and the scientific community as a whole. We are honored to remember him through a program that recognizes up-and-coming researchers who have demonstrated outstanding achievement in laboratory science and technology.
SLAS honors 55 undergraduate students, graduate students, post-doctoral researchers and junior faculty members with SLAS Tony B. Academic Travel Awards for SLAS2015.
55 students from 12 different countries earned invitations to present their scientific achievements at SLAS2015. Winners were determined by a panel of judges who conducted comprehensive evaluations of student abstract proposals and made selections based on scientific merit. Click here for complete details on this program.
Through the SLAS Tony B. Academic Travel Awards program, each will receive roundtrip travel (coach airfare or mileage reimbursement), shared hotel accommodations and full conference registration (which includes access to 142 podium presentations, 300+ poster presentations, 17 short courses, 300+ exhibitors and scores of other workshops, meetings and special events).
The Tony B. Academic Travel Award winners for SLAS2015 are:
United States


text:
Lincolnshire Plum Bread looks delicious. Can it be made in a breadmaker machine I wonder ……. may have to adapt the ingredient quantities a little.
My birthday is 5 May too !!
Thanks Carol, yes this can be made in a bread machine, basically put all of the ingredients in the machine in the order that is suggested, and put the fruit in the extras dispenser to be added later! Another cinco de Mayo fiesta baby – LOVELY! Karen
Where can the book be purchased?


text:
Not Accepting Guests
- Last login almost 6 years ago
Join Couchsurfing to see Joshua's full profile. It's free!
About Me
I have been away from New Zealand travelling for 2 & a half years and haven't left the america's, (Extensive travel through South America, Central America, Canada and also some in the USA) so I think it's time to move on and see what Europe has to offer.
First of all....No I am not Australian!!!! haha
I was raised in the countryside on a sheep and beef farm in Northern New Zealand. As with much of New Zealand's geography, the area of the country i'm from is only a little over an hours drive between East and West coasts, so I was very fortunate to be bought up surrounded by beautiful nature and amazing scenery wherever I looked. Living amongst these surroundings during my upbringing crafted a huge respect towards nature, the ocean and the county that I'm from. I was fortunate enough to have parents that love travel and took my brother and I on yearly vacations, so I too caught the travel bug at a very young age. Being so close to the ocean, I developed a passion for the sea and became a very keen surfer, with most of my worldwide travel being based on this. When I'm not by the coast you'll catch me snowboarding or skating, failing that you would either find me in a bar with a beer in hand, or somewhere in the middle of nowhere like the Northern Canadian bush.
After School I worked for an electricity distribution company, and studied Electrical Engineering in Auckland city. Working full time as a design estimator for a year and a half after graduating, I was more than ready to move on and began my worldwide travel adventures.
Friends describe me as super chilled out and I can get on with almost anybody.
The more you give to others in life, the more you get in return.
Too many people focus on the destination....it's not about the destination, its about the adventure along the way.
Why I'm on Couchsurfing
Currently I plan to use couch surfer as a means of cheap travel while travelling through the more expensive 1st world countries of the world, however whet I settle down somewhere someday with my own house I plan to return the favour and host people myself.
My first couch surfing experience was while travelling with a friend through eastern Canada. We Stayed with a host in Quebec City using my friends couch surfer account, and I could only find good things to come out of the experience so thought it was time to sign up and create my own account. (I had done loads of couch surfing previously, however only with friends I already knew, never using the internet website)
Surfing, snowboarding, skating, free diving, partying/socialising..... pretty much anything that's fun.
- design
- dining
- beer
- partying
- boating
- traveling
- surfing
- scuba diving
- snowboarding
- engineering
- geography
Music, Movies, and Books
Loads of electronic genres, hip hop, dub and reggae....Deadmau5, Mstrcrft, Lazy Rich, Avicii, Flux Pavillion, Skrillex, The Presets, PNAU, The Naked and Famous, Example, The Bloody Beetroots, Justice, Daft Punk, MGMT Slagsmalsklubben, The Tane, Los Pericos, Hilltop Hoods, Swollen Members, Hill......too many to keep going
One Amazing Thing I've Done
Crossed the Darren Gap from Turbo, Colombia to Panama City for a total cost of $80 US in under a week during 2009....involving several boat shuttles, jungle bush wackin (with a fully laden pack and 2 surfboards), and 3 nights on a food delivery ship supplying the primitive sandblast islands.


text:
I found a gorgeous batik circle skirt in a thrift shop and snapped it up even though I had no immediate plans for it. A few days later, the kids at church needed something to for an auction so I turned it into this scarf.
It didn't go for much, but a good friend of mine bought it.


text:
Kingdom Hands Are Dirty Hands
By Rod Anderson , CP Cartoonist |
"You want to serve the Lord, you're always going to have dirty hands . . . . You don't get to a place, you don't get to a size where your hands are clean, your heart is free from the heartbreak, loss, the celebration, the need for prayer, the desperation that comes from leading and walking with God's people."


text:
STARmeterTop 5000
Down 49 this week
Zahn McClarnon
Zahn McClarnon was born on October 24, 1966 in Denver, Colorado, USA as Zahn Tokiya-ku McClarnon. He is known for his work on Spirit: Stallion of the Cimarron (2002), My Neighbor Totoro (1988) and Bone Tomahawk (2015). See full bio »
Born:in Denver, Colorado, USA
More at IMDbPro » Contact Info: View agent


text:
President Bush and Vice President Cheney make reference to "Massachusetts liberals" as if they were referring to people with some kind of disease. I decided it was time to do some research on these people, and here is what I found.
The state with the lowest divorce rate in the nation is Massachusetts. At latest count it had a divorce rate of 2.4 per 1,000 population, while the rate for Texas was 4.1.
But don't take the US government's word for it. Take a look at the findings from the George Barna Research Group. George Barna, a born-again Christian whose company is in Ventura, Calif., found that Massachusetts does indeed have the lowest divorce rate among all 50 states. More disturbing was the finding that born-again Christians have among the highest divorce rates.
The Associated Press, using data supplied by the US Census Bureau, found that the highest divorce rates are to be found in the Bible Belt. The AP report stated that "the divorce rates in these conservative states are roughly 50 percent above the national average of 4.2 per thousand people."


text:
For those attempting to learn a new language(outside of the programming variety), Duolingo is one of the better options around. It brings a casual feel to what can be a daunting task, and mixes methodology throughout the plan. With growing popularity and impressive utility, the team behind the language app have raised $20 million in Series B funding.
This adds to the $18 million they previously gained in funding, giving dueling room to grow. Rather than add more languages or other incremental changes, Duolingo is set to take on a much bigger task. They are aiming to create a proctored exam, in which you use your device camera and microphone to take the test. The testing service will com via a separate app, keeping Duolingo as charming as we currently find it.
Duolingo is also tackling translation services. Duolingo wants to offer text translations for publishers, wherein Duolingo will have a team of translators on staff to make sure whatever is printed in one language reads correctly in others. CNN and Buzzfeed are currently the only clients of note.
While a casual approach to learning may seem unintuitive, it's not. "We figured out that we have more people learning language on a given day on Duolingo than in the whole U.S. school system" said Duolingo CEO Luis von Ahn. "People say they 'play Duolingo'. Our users aren't hardcore. They are procrastinating and don't want to feel as bad, so they open our app."
VIA: Re/Code


text:
About the Book
A Picture Is Worth A Thousand Words
But the photograph art historian Vicky Bliss has just received gives rise to a thousand questions instead. A quick glance at the blood-stained envelope is all the proof she needs that something is horribly wrong.
The picture itself is familiar: a woman adorned in the gold of Troy. Yet this isn't the famous photograph of Frau Schliemann—no, this picture is contemporary. The gold, as Vicky and her fellow academics know, disappeared at the end of World War II.
Now this circle of experts is gathered for a festive Bavarian Christmas. All of them—including the mysterious John Smythe and a very determined killer...
Educator and Librarian Resources
Product Details
- Imprint: William Morrow
- On Sale: 10/13/2009
- Pages: 400
- List Price: 8.24 USD
- BISAC1: FICTION / Mystery & Detective / General
- BISAC2: FICTION / Mystery & Detective / Women Sleuths


text:
Scientists explore forest adaptation, mitigation at forest pow-wow in Aspen
*Click here to see the Summit Voice archive of forest health stories.
By Bob Berwyn
SUMMIT COUNTY — Given the importance of forest ecosystems worldwide as carbon-absorbing areas, as wildlife habitat and sources of water, leading scientists this week called on policy makers to start considering how to address the impacts of climate change, which is killing trees on every continent at a distressing pace.
While there aren't many clear answers on what can be done, some of the researchers speaking at the Feb. 18 For the Forest symposium in Aspen suggested at the very least that managed fire must play a role in trying to avert more destructive and deadly uncontrolled wildfires.
Others suggested starting to explore the idea of assisted species migration — which basically means planting trees in new areas to make forests more adaptable and resilient in the face of climate change. Read a story about a whitebark pine restoration here. Continue reading "Global warming: Can we save our forests?"


text:
A schmoe evening…I have a bunch of toys out on the floor (large plastic iguana and a bunch of Pokemon tops) trying to figure out what my Sunday kids and I will be doing with them in a couple of days. (Yes, I know you're supposed to study the material and then figure out the teaching gimmick, not the other way around.) …the schmoe part is that I'm really just piddling and not getting anything done.
But thinking about my batch of 10-year-olds is making me think about a batch of cookies, and since it's really too late to start baking and I sort of snarfed the last of the E.L. Fudge Double Stuffs in a sugar and carb-craving haze, this is a fair alternative. Enough sweet to stave off the munchies.


text:
Thieves have targeted five elderly shoppers in the Braintree district in the space of a month.
Police officers are urging pensioners to be on the look out when shopping after thieves, believed to be eastern Europeans, have been spotted lurking in town centre shops, deliberately preying on the elderly.
Five elderly pensioners shopping in Braintree, Witham and Halstead have all had their purses stolen in May.
Police officers are urging elderly shoppers to be on the look out after the thieves seem to be targeting people who are older.
See this week's Halstead Gazette for the full story.


text:
The Car Connection Volkswagen GTI Overview
Known elsewhere in the world as the Golf GTI, the Volkswagen GTI is a three- or five-door hatchback with sportier engines, handling and styling than the standard Golf it's based on. It has evolved over the years to grow in size and yet has held the esteem of critics for its design and performance. Primary competition for the GTI includes the Mazda Mazdaspeed3, the MINI Cooper S, and the Honda Civic Si. Priced from $23,000 to $35,000 depending on how many option boxes are ticked, it's not the least expensive car in the segment.
For more information on the 2012 model see our full review of the 2012 Volkswagen GTI. You can also read a preview drive report of the 2015 Volkswagen GTI or follow Volkswagen GTI news.
Six generations of GTI span its introduction to the U.S. in 1983 to the present. The Mark I car trailblazed the hot hatchback genre with sporty performance and a unique, squared-off look. In 1985, the Mark II GTI grew slightly larger and rounded off the corners, increasing power and offering a supercharged "Rallye" variant. 1993 saw the introduction of the Mark III GTI, which retained most of the look of the Mark II, but increased weight and the addition of the VR6 engine in 1995 saw performance stagnate. In 2001, the GTI gained more power and a new larger, rounder look with the Mark IV, as well as several special editions, including the 20th Anniversary model, introduced in 2003.The Mark V GTI, introduced in 2006, saw a complete redesign of the underlying Golf platform, with improved suspension design for better handling and ride quality. Interior quality, while still high for its segment, fell slightly, in part to maintain separation from its more luxurious sister-brand car, the Audi A3. A 2.0-liter turbocharged four-cylinder engine with direct-injection technology generated 200 horsepower, and both three- and five-door models were available with either a six-speed manual or a new, high-tech dual-clutch Direct Shift Gearbox (DSG). Price rose compared to previous generations due to the mechanical upgrades and the dramatic exterior redesign.
Today's GTI, the Mark VI, made its debut in 2009, bringing a mild exterior restyling that draws on the heritage of the Golf. A new grille and headlight treatment, as well as revised front and rear fascias, are the main differences from the Mark V. Mechanical underpinnings largely carried over from the previous GTI, with the same 2.0-liter turbo engine generating 200 horsepower. Zero to 60 mph runs are completed in 6.8 seconds with the manual gearbox and 6.7 seconds with the DSG--not as quick as some of its competition, especially the Mazdaspeed3. Top speed is limited to 130 mph in the U.S. Interior upgrades once again bring the GTI to the top of its class.
Abundant technology, features, and options make the GTI appeal to a broad range of hot-hatch buyers, as the expansive price range suggests. Despite having grown considerably in size and weight since the original Mark I, handling and performance of the latest GTI remain points of praise, though it sits somewhere between the slightly sportier options from Mazda, Honda and MINI and more mature, luxurious cars like the standard MINI Cooper or Audi A3.
A GTI derivative, the Golf R, was added to the lineup in the 2012 model year, with a 256-hp turbo four distributing power to all four wheels via Haldex all-wheel drive. Pricing starts from $33,990 in two-door trim, while the four-door bumps the price by about $1,500. It's a limited edition that traditionally appears a year or two before the debut of an all-new Golf.