IGNITE-8907: [ML] Using vectors in featureExtractor
[ignite.git] / README.md
1 # Apache Ignite
2
3 <a href="https://ignite.apache.org/"><img src="https://ignite.apache.org/images/logo3.png" hspace="20"/></a>
4
5 <a href="https://ci.ignite.apache.org/viewType.html?buildTypeId=Ignite20Tests_RunAll&branch_Ignite20Tests=%3Cdefault%3E"><img src="http://ci.ignite.apache.org/app/rest/builds/buildType:(id:Ignite20Tests_RunAll)/statusIcon.svg"/></a>
6
7
8 ## Getting Started
9
10 For information on how to get started with Apache Ignite, please visit: [Getting Started][getting-started].
11
12 ## Full Documentation
13
14 You can find the full Apache Ignite documentation here: [Full documentation][docs].
15
16
17 ## What is Apache Ignite?
18
19 [Apache Ignite][apache-ignite-homepage] is a memory-centric multi-model distributed
20  <strong>database</strong>, <strong>caching</strong>, and <strong>processing</strong> platform for
21  transactional, analytical, and streaming workloads, delivering in-memory speeds at petabyte scale.
22
23 <p align="center">
24     <a href="https://apacheignite.readme.io/docs">
25         <img src="https://ignite.apache.org/images/durable-memory.png" width="900px"/>
26     </a>
27 </p>
28
29 ## Durable Memory
30 Ignite's durable memory component treats RAM not just as a caching layer but as a complete fully functional storage layer. This means that users can turn the persistence on and off as needed. If the persistence is off, then Ignite can act as a distributed **in-memory database** or **in-memory data grid**, depending on whether you prefer to use SQL or key-value APIs. If the persistence is turned on, then Ignite becomes a distributed, **horizontally scalable database** that guarantees full data consistency and is resilient to full cluster failures.
31
32 [Read More](https://apacheignite.readme.io/docs/durable-memory)
33
34 ## Ignite Persistence
35
36 Ignite Native Persistence is a distributed, ACID, and SQL-compliant **disk store** that transparently integrates with Ignite's Durable Memory as an optional disk layer storing data and indexes on SSD, Flash, 3D XPoint, and other types of non-volatile storages.
37
38 With the Ignite Persistence enabled, you no longer need to keep all the data and indexes in memory or warm it up after a node or cluster restart because the Durable Memory is tightly coupled with persistence and treats it as a secondary memory tier. This implies that if a subset of data or an index is missing in RAM, the Durable Memory will take it from the disk.
39
40 <p align="center">
41     <a href="https://apacheignite.readme.io/docs/distributed-persistent-store">
42         <img src="https://ignite.apache.org/images/native_persistence.png?renew" width="400px"/>
43     </a>
44 </p>
45
46 [Read More](https://apacheignite.readme.io/docs/distributed-persistent-store)
47
48 ## ACID Compliance
49 Data stored in Ignite is ACID-compliant both in memory and on disk, making Ignite a **strongly consistent** system. Ignite transactions work across the network and can span multiple servers.
50
51 [Read More](https://apacheignite.readme.io/docs/transactions)
52
53 ## Complete SQL Support
54 Ignite provides full support for SQL, DDL and DML, allowing users to interact with Ignite using pure SQL without writing any code. This means that users can create tables and indexes as well as insert, update, and query data using only SQL. Having such complete SQL support makes Ignite a one-of-a-kind **distributed SQL database**.
55
56 [Read More](https://apacheignite.readme.io/docs/distributed-sql)
57
58 ## Key-Value
59 The in-memory data grid component in Ignite is a fully transactional **distributed key-value store** that can scale horizontally across 100s of servers in the cluster. When persistence is enabled, Ignite can also store more data than fits in memory and survive full cluster restarts.
60
61 [Read More](https://apacheignite.readme.io/docs/data-grid)
62
63 ## Collocated Processing
64 Most traditional databases work in a client-server fashion, meaning that data must be brought to the client side for processing. This approach requires lots of data movement from servers to clients and generally does not scale. Ignite, on the other hand, allows for sending light-weight computations to the data, i.e. **collocating** computations with data. As a result, Ignite scales better and minimizes data movement.
65
66 [Read More](https://apacheignite.readme.io/docs/collocate-compute-and-data)
67
68 ## Scalability and Durability
69 Ignite is an elastic, horizontally scalable distributed system that supports adding and removing cluster nodes on demand. Ignite also allows for storing multiple copies of the data, making it resilient to partial cluster failures. If the persistence is enabled, then data stored in Ignite will also survive full cluster failures. Cluster restarts in Ignite can be very fast, as the data becomes operational instantaneously directly from disk. As a result, the data does not need to be preloaded in-memory to begin processing, and Ignite caches will lazily warm up resuming the in memory performance.
70
71 [Read More](https://apacheignite.readme.io/docs/clustering)
72
73 ## Ignite Components
74
75 You can view Apache Ignite as a collection of independent, well-integrated components geared to improve performance and
76  scalability of your application.
77
78 Some of these components include:
79 * [Advanced Clustering](#advanced-clustering)
80 * [Data Grid](#data-grid-jcache)
81 * [SQL Database](#sql-database)
82 * [Compute Grid](#compute-grid)
83 * [Service Grid](#service-grid)
84 * [Hadoop Accelerator](#hadoop-accelerator)
85 * [Spark Shared RDDs and SQL indexes](#spark-shared-rdds)
86
87 Below you’ll find a brief explanation for each of them.
88
89
90 ### Advanced Clustering
91
92 Ignite nodes can [automatically discover](https://apacheignite.readme.io/docs/cluster) each other. This helps to scale the cluster when needed, without having to restart the whole cluster. Developers can also leverage from Ignite’s hybrid cloud support that allows establishing connection between private cloud and public clouds such as Amazon Web Services, providing them with best of both worlds.
93
94 <p align="center">
95     <a href="https://apacheignite.readme.io/docs/cluster">
96         <img src="https://ignite.apache.org/images/advanced-clustering.png" />
97     </a>
98 </p>
99
100 Apache Ignite can be deployed on:
101 * [AWS](https://apacheignite.readme.io/docs/aws-deployment)
102 * [Docker](https://apacheignite.readme.io/docs/docker-deployment)
103 * [Google Compute](https://apacheignite.readme.io/docs/google-compute-deployment)
104 * [Kubernetes](https://apacheignite.readme.io/docs/kubernetes-deployment)
105 * [Mesos](https://apacheignite.readme.io/docs/mesos-deployment)
106 * [YARN](https://apacheignite.readme.io/docs/yarn-deployment)
107
108
109 ### Data Grid (JCache)
110
111 [Ignite data grid](https://apacheignite.readme.io/docs/data-grid) is an in-memory distributed key-value store which can be viewed as a distributed partitioned hash map,
112 with every cluster node owning a portion of the overall data. This way the more cluster nodes we add, the more data we
113 can cache.
114
115 Unlike other key-value stores, Ignite determines data locality using a pluggable hashing algorithm. Every client can
116 determine which node a key belongs to by plugging it into a hashing function, without a need for any special mapping
117 servers or name nodes.
118
119 Ignite data grid supports local, replicated, and partitioned data sets and allows to freely cross query between these
120 data sets using standard SQL syntax. Ignite supports standard SQL for querying in-memory data including support for distributed SQL joins.
121
122 <p align="center">
123     <a href="https://apacheignite.readme.io/docs/data-grid">
124         <img src="https://ignite.apache.org/images/data_grid.png" vspace="15" width="450px"/>
125     </a>
126 </p>
127
128 ### SQL Database
129
130 Apache Ignite incorporates [distributed SQL database](https://apacheignite.readme.io/docs/distributed-sql) capabilities as a part of its platform. The database is horizontally
131  scalable, fault tolerant and SQL ANSI-99 compliant. It supports all SQL, DDL, and DML commands including SELECT, UPDATE,
132   INSERT, MERGE, and DELETE queries. It also provides support for a subset of DDL commands relevant for distributed
133   databases.
134
135 With Ignite Durable Memory architecture, data as well as indexes can be stored both in memory and, optionally, on disk.
136 This allows executing distributed SQL operations across different memory layers achieving in-memory performance with the durability of disk.
137
138 You can interact with Apache Ignite using the SQL language via natively developed APIs for Java, .NET and C++, or via
139 the Ignite JDBC or ODBC drivers. This provides a true cross-platform connectivity from languages such as PHP, Ruby and more.
140
141
142 <p align="center">
143     <a href="https://apacheignite.readme.io/docs/distributed-sql">
144         <img src="https://ignite.apache.org/images/sql_database.png" vspace="15" width="400px"/>
145     </a>
146 </p>
147
148
149 ### Compute Grid
150
151 [Distributed computations](https://apacheignite.readme.io/docs/compute-grid) are performed in parallel fashion to gain high performance, low latency, and linear scalability.
152  Ignite compute grid provides a set of simple APIs that allow users distribute computations and data processing across
153  multiple computers in the cluster. Distributed parallel processing is based on the ability to take any computation and
154  execute it on any set of cluster nodes and return the results back.
155
156 <p align="center">
157     <a href="https://apacheignite.readme.io/docs/compute-grid">
158         <img src="https://ignite.apache.org/images/collocated_processing.png" vspace="15" width="400px"/>
159     </a>
160 </p>
161
162 We support these features, amongst others:
163
164 * [Distributed Closure Execution](https://apacheignite.readme.io/docs/distributed-closures)
165 * [MapReduce & ForkJoin Processing](https://apacheignite.readme.io/docs/compute-tasks)
166 * [Continuous Mapping](https://apacheignite.readme.io/docs/continuous-mapping)
167 * [Clustered Executor Service](https://apacheignite.readme.io/docs/executor-service)
168 * [Per-Node Shared State](https://apacheignite.readme.io/docs/node-local-map)
169 * [Collocation of Compute and Data](https://apacheignite.readme.io/docs/collocate-compute-and-data)
170 * [Load Balancing](https://apacheignite.readme.io/docs/load-balancing)
171 * [Fault Tolerance](https://apacheignite.readme.io/docs/fault-tolerance)
172 * [Job State Checkpointing](https://apacheignite.readme.io/docs/checkpointing)
173 * [Job Scheduling](https://apacheignite.readme.io/docs/job-scheduling)
174
175 ### Service Grid
176
177 [Service Grid](https://apacheignite.readme.io/docs/service-grid) allows for deployments of arbitrary user-defined services on the cluster. You can implement and deploy any
178 service, such as custom counters, ID generators, hierarchical maps, etc.
179
180 Ignite allows you to control how many instances of your service should be deployed on each cluster node and will
181 automatically ensure proper deployment and fault tolerance of all the services.
182
183 <p align="center">
184     <a href="https://apacheignite.readme.io/docs/service-grid">
185         <img src="https://ignite.apache.org/images/service_grid.png" vspace="15" width="400px"/>
186     </a>
187 </p>
188
189 ### Ignite File System
190
191 [Ignite File System](https://apacheignite-fs.readme.io/docs/in-memory-file-system) (IGFS) is an in-memory file system allowing work with files and directories over existing cache
192 infrastructure. IGFS can either work as purely in-memory file system, or delegate to another file system (e.g. various
193 Hadoop file system implementations) acting as a caching layer.
194
195 In addition, IGFS provides API to execute map-reduce tasks over file system data.
196
197 ### Distributed Data Structures
198
199 Ignite supports complex [data structures](https://apacheignite.readme.io/docs/data-structures) in a distributed fashion:
200
201 * [Queues and sets](https://apacheignite.readme.io/docs/queue-and-set): ordinary, bounded, collocated, non-collocated
202 * [Atomic types](https://apacheignite.readme.io/docs/atomic-types): `AtomicLong` and `AtomicReference`
203 * [CountDownLatch](https://apacheignite.readme.io/docs/countdownlatch)
204 * [ID Generators](https://apacheignite.readme.io/docs/id-generator)
205 * [Semaphore](https://apacheignite.readme.io/docs/distributed-semaphore)
206
207 ### Distributed Messaging
208
209 [Distributed messaging](https://apacheignite.readme.io/docs/messaging) allows for topic based cluster-wide communication between all nodes. Messages with a specified
210 message topic can be distributed to all or sub-group of nodes that have subscribed to that topic.
211
212 Ignite messaging is based on publish-subscribe paradigm where publishers and subscribers are connected together by a
213 common topic. When one of the nodes sends a message A for topic T, it is published on all nodes that have subscribed to T.
214
215 ### Distributed Events
216
217 [Distributed events](https://apacheignite.readme.io/docs/events) allow applications to receive notifications when a variety of events occur in the distributed grid environment. You can automatically get notified for task executions, read, write or query operations occurring on local or remote nodes within the cluster.
218
219 ### Hadoop Accelerator
220
221 Our [Hadoop Accelerator](https://apacheignite-fs.readme.io/docs/hadoop-accelerator) provides a set of components allowing for in-memory Hadoop job execution and file system operations.
222
223 #### MapReduce
224
225 An alternate [high-performant](https://apacheignite-fs.readme.io/docs/map-reduce) implementation of job tracker which replaces standard Hadoop MapReduce. Use it to
226 boost your Hadoop MapReduce job execution performance.
227
228 <p align="center">
229     <a href="https://apacheignite-fs.readme.io/docs/map-reduce">
230         <img src="https://ignite.apache.org/images/hadoop-mapreduce.png" vspace="15" height="400"/>
231     </a>
232 </p>
233
234 #### IGFS - In-Memory File System
235
236 A Hadoop-compliant [IGFS](https://apacheignite-fs.readme.io/docs/file-system) File System implementation over which Hadoop can run over in plug-n-play fashion and significantly reduce I/O and improve both, latency and throughput.
237
238 <p align="center">
239     <a href="https://apacheignite-fs.readme.io/docs/in-memory-file-system">
240         <img src="https://ignite.apache.org/images/ignite_filesystem.png" height="300" vspace="15"/>
241     </a>
242 </p>
243
244 #### Secondary File System
245
246 An implementation of [`SecondaryFileSystem`](https://apacheignite-fs.readme.io/docs/secondary-file-system). This implementation can be injected into existing IGFS allowing for
247 read-through and write-through behavior over any other Hadoop FileSystem implementation (e.g. HDFS). Use it if you
248 want your IGFS to become an in-memory caching layer over disk-based HDFS or any other Hadoop-compliant file system.
249
250 #### Supported Hadoop distributions
251
252 * [Apache Hadoop](https://apacheignite-fs.readme.io/docs/installing-on-apache-hadoop)
253 * [Cloudera CDH](https://apacheignite-fs.readme.io/docs/installing-on-cloudera-cdh)
254 * [Hortonworks HDP](https://apacheignite-fs.readme.io/docs/installing-on-hortonworks-hdp)
255 * [Apache Hive](https://apacheignite-fs.readme.io/docs/running-apache-hive-over-ignited-hadoop)
256
257 ### Spark Shared RDDs
258
259 Apache Ignite provides an implementation of Spark RDD abstraction which allows to easily share state in memory across Spark jobs.
260
261 The main difference between native Spark `RDD` and `IgniteRDD` is that Ignite RDD provides a [shared in-memory](https://apacheignite-fs.readme.io/docs/ignite-for-spark) view on data across different Spark jobs, workers, or applications, while native Spark RDD cannot be seen by other Spark jobs or applications.
262
263 <p align="center">
264     <a href="https://apacheignite-fs.readme.io/docs/ignite-for-spark">
265         <img src="https://ignite.apache.org/images/spark_integration.png" height="400" vspace="15" />
266     </a>
267 </p>
268
269 ## Ignite Facts
270
271 #### Is Ignite a persistent or pure in-memory storage?
272 **Both**. Native persistence in Ignite can be turned on and off. This allows Ignite to store data sets bigger than can fit in the available memory. Essentially, the smaller operational data sets can be stored in-memory only, and larger data sets that do not fit in memory can be stored on disk, using memory as a caching layer for better performance.
273
274 [Read More](https://apacheignite.readme.io/docs/distributed-persistent-store)
275
276 #### Is Ignite a distributed database?
277 **Yes**. Data in Ignite is either *partitioned* or *replicated* across a cluster of multiple nodes. This provides scalability and adds resilience to the system. Ignite automatically controls how data is partitioned, however, users can plug in their own distribution (affinity) functions and collocate various pieces of data together for efficiency.
278
279 [Read More](https://apacheignite.readme.io/docs/distributed-sql)
280
281 #### Is Ignite a relational SQL database?
282 **Not fully**. Although Ignite aims to behave like any other relational SQL database, there are differences in how Ignite handles constraints and indexes. Ignite supports *primary* and *secondary* indexes, however, the *uniqueness* can only be enforced for the *primary* indexes. Ignite also does not support *foreign key* constraints.
283
284 Essentially, Ignite purposely does not support any constraints that would entail a cluster broadcast message for each update and significantly hurt performance and scalability of the system.
285
286 [Read More](https://apacheignite.readme.io/docs/indexes)
287
288 #### Is Ignite an in-memory database?
289 **Yes**. Even though Ignite *durable memory* works well in-memory and on-disk, the disk persistence can be disabled and Ignite can act as a pure *in-memory database*.
290
291 [Read More](https://apacheignite.readme.io/docs/distributed-sql)
292
293 #### Is Ignite a transactional database?
294 **Not fully**. ACID Transactions are supported, but only at *key-value* API level. Ignite also supports *cross-partition* transactions, which means that transactions can span keys residing in different partitions on different servers.
295
296 At *SQL* level Ignite supports *atomic*, but not yet *transactional* consistency. Ignite community plans to implement SQL transactions in version 2.2.
297
298 [Read More](https://apacheignite.readme.io/docs/sql-queries#known-limitations)
299
300 #### Is Ignite a key-value store?
301 **Yes**. Ignite provides a feature rich key-value API, that is JCache (JSR-107) compliant and supports Java, C++, and .NET.
302
303 [Read More](https://apacheignite.readme.io/docs/data-grid)
304
305 #### Is Ignite an in-memory data grid?
306 **Yes**. Ignite is a full-featured data grid, which can be used either in pure in-memory mode or with Ignite native persistence. It can also integrate with any 3rd party database, including any RDBMS or NoSQL store.
307
308 [Read More](https://apacheignite.readme.io/docs/data-grid)
309
310 #### What is durable memory?
311 Ignite *durable memory* architecture allows Ignite to extend in-memory computing to disk. It is based on a paged-based off-heap memory allocator which becomes durable by persisting to the *write-ahead-log (WAL)* and, then, to main Ignite persistent storage. When persistence is disabled, durable memory acts like a pure in-memory storage.
312
313 [Read More](https://apacheignite.readme.io/docs/durable-memory)
314
315 #### What is collocated processing?
316 Ignite is a distributed system and, therefore, it is important to be able to collocate data with data and compute with data to avoid distributed data noise. Data collocation becomes especially important when performing distributed SQL joins. Ignite also supports sending user logic (functions, lambdas, etc.) directly to the nodes where the data resides and computing on the data locally.
317
318 [Read More](https://apacheignite.readme.io/docs/collocate-compute-and-data)
319
320 ## Ignite On Other Platforms
321
322 <a href="modules/platforms/dotnet">Ignite.NET</a>
323
324 <a href="modules/platforms/cpp">Ignite C++</a>
325
326
327 [apache-ignite-homepage]: https://ignite.apache.org/
328 [getting-started]: https://apacheignite.readme.io/docs/getting-started
329 [docs]: https://apacheignite.readme.io/docs