"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8241],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r,n,i={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var u=n.createContext({}),l=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},d=function(e){var t=l(e.components);return n.createElement(u.Provider,{value:t},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,a=e.originalType,u=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=l(r),g=i,f=c["".concat(u,".").concat(g)]||c[g]||p[g]||a;return r?n.createElement(f,o(o({ref:t},d),{},{components:r})):n.createElement(f,o({ref:t},d))}));function f(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=r.length,o=new Array(a);o[0]=g;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s[c]="string"==typeof e?e:i,o[1]=s;for(var l=2;l<a;l++)o[l]=r[l];return n.createElement.apply(null,o)}return n.createElement.apply(null,r)}g.displayName="MDXCreateElement"},4523:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>u,default:()=>f,frontMatter:()=>s,metadata:()=>l,toc:()=>c});var n=r(7462),i=r(3366),a=(r(7294),r(3905)),o=["components"],s={id:"getting-started",title:"Getting started with Apache Druid"},u=void 0,l={unversionedId:"operations/getting-started",id:"operations/getting-started",title:"Getting started with Apache Druid",description:"\x3c!--",source:"@site/docs/26.0.0/operations/getting-started.md",sourceDirName:"operations",slug:"/operations/getting-started",permalink:"/docs/26.0.0/operations/getting-started",draft:!1,tags:[],version:"current",frontMatter:{id:"getting-started",title:"Getting started with Apache Druid"}},d={},c=[{value:"Overview",id:"overview",level:2},{value:"Single-server Quickstart and Tutorials",id:"single-server-quickstart-and-tutorials",level:2},{value:"Deploying a Druid cluster",id:"deploying-a-druid-cluster",level:2},{value:"Operating Druid",id:"operating-druid",level:2},{value:"Need help with Druid?",id:"need-help-with-druid",level:2}],p={toc:c},g="wrapper";function f(e){var t=e.components,r=(0,i.Z)(e,o);return(0,a.kt)(g,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"overview"},"Overview"),(0,a.kt)("p",null,"If you are new to Druid, we recommend reading the ",(0,a.kt)("a",{parentName:"p",href:"/docs/26.0.0/design/"},"Design Overview")," and the ",(0,a.kt)("a",{parentName:"p",href:"/docs/26.0.0/ingestion/"},"Ingestion Overview")," first for a basic understanding of Druid."),(0,a.kt)("h2",{id:"single-server-quickstart-and-tutorials"},"Single-server Quickstart and Tutorials"),(0,a.kt)("p",null,"To get started with running Druid, the simplest and quickest way is to try the ",(0,a.kt)("a",{parentName:"p",href:"/docs/26.0.0/tutorials/"},"single-server quickstart and tutorials"),"."),(0,a.kt)("h2",{id:"deploying-a-druid-cluster"},"Deploying a Druid cluster"),(0,a.kt)("p",null,"If you wish to jump straight to deploying Druid as a cluster, or if you have an existing single-server deployment that you wish to migrate to a clustered deployment, please see the ",(0,a.kt)("a",{parentName:"p",href:"/docs/26.0.0/tutorials/cluster"},"Clustered Deployment Guide"),"."),(0,a.kt)("h2",{id:"operating-druid"},"Operating Druid"),(0,a.kt)("p",null,"The ",(0,a.kt)("a",{parentName:"p",href:"/docs/26.0.0/configuration/"},"configuration reference")," describes all of Druid's configuration properties."),(0,a.kt)("p",null,"The ",(0,a.kt)("a",{parentName:"p",href:"/docs/26.0.0/operations/api-reference"},"API reference")," describes the APIs available on each Druid process."),(0,a.kt)("p",null,"The ",(0,a.kt)("a",{parentName:"p",href:"/docs/26.0.0/operations/basic-cluster-tuning"},"basic cluster tuning guide")," is an introductory guide for tuning your Druid cluster."),(0,a.kt)("h2",{id:"need-help-with-druid"},"Need help with Druid?"),(0,a.kt)("p",null,"If you have questions about using Druid, please reach out to the ",(0,a.kt)("a",{parentName:"p",href:"https://druid.apache.org/community/"},"Druid user mailing list or other community channels"),"!"))}f.isMDXComponent=!0}}]);