"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8821],{15680:(e,t,r)=>{r.d(t,{xA:()=>d,yg:()=>u});var o=r(96540);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function s(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,o,a=function(e,t){if(null==e)return{};var r,o,a={},n=Object.keys(e);for(o=0;o<n.length;o++)r=n[o],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o<n.length;o++)r=n[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=o.createContext({}),l=function(e){var t=o.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},d=function(e){var t=l(e.components);return o.createElement(p.Provider,{value:t},e.children)},g="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var r=e.components,a=e.mdxType,n=e.originalType,p=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),g=l(r),m=a,u=g["".concat(p,".").concat(m)]||g[m]||c[m]||n;return r?o.createElement(u,s(s({ref:t},d),{},{components:r})):o.createElement(u,s({ref:t},d))}));function u(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=r.length,s=new Array(n);s[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[g]="string"==typeof e?e:a,s[1]=i;for(var l=2;l<n;l++)s[l]=r[l];return o.createElement.apply(null,s)}return o.createElement.apply(null,r)}m.displayName="MDXCreateElement"},8656:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>p,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>g});var o=r(58168),a=r(98587),n=(r(96540),r(15680)),s=["components"],i={id:"deep-storage-migration",title:"Deep storage migration"},p=void 0,l={unversionedId:"operations/deep-storage-migration",id:"operations/deep-storage-migration",title:"Deep storage migration",description:"\x3c!--",source:"@site/docs/latest/operations/deep-storage-migration.md",sourceDirName:"operations",slug:"/operations/deep-storage-migration",permalink:"/docs/latest/operations/deep-storage-migration",draft:!1,tags:[],version:"current",frontMatter:{id:"deep-storage-migration",title:"Deep storage migration"},sidebar:"docs",previous:{title:"pull-deps tool",permalink:"/docs/latest/operations/pull-deps"},next:{title:"Export Metadata Tool",permalink:"/docs/latest/operations/export-metadata"}},d={},g=[{value:"Shut down cluster services",id:"shut-down-cluster-services",level:2},{value:"Copy segments from old deep storage to new deep storage.",id:"copy-segments-from-old-deep-storage-to-new-deep-storage",level:2},{value:"Export segments with rewritten load specs",id:"export-segments-with-rewritten-load-specs",level:2},{value:"Import metadata",id:"import-metadata",level:3},{value:"Restart cluster",id:"restart-cluster",level:3}],c={toc:g},m="wrapper";function u(e){var t=e.components,r=(0,a.A)(e,s);return(0,n.yg)(m,(0,o.A)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.yg)("p",null,"If you have been running an evaluation Druid cluster using local deep storage and wish to migrate to a\nmore production-capable deep storage system such as S3 or HDFS, this document describes the necessary steps."),(0,n.yg)("p",null,"Migration of deep storage involves the following steps at a high level:"),(0,n.yg)("ul",null,(0,n.yg)("li",{parentName:"ul"},"Copying segments from local deep storage to the new deep storage"),(0,n.yg)("li",{parentName:"ul"},"Exporting Druid's segments table from metadata"),(0,n.yg)("li",{parentName:"ul"},"Rewriting the load specs in the exported segment data to reflect the new deep storage location"),(0,n.yg)("li",{parentName:"ul"},"Reimporting the edited segments into metadata")),(0,n.yg)("h2",{id:"shut-down-cluster-services"},"Shut down cluster services"),(0,n.yg)("p",null,"To ensure a clean migration, shut down the non-coordinator services to ensure that metadata state will not\nchange as you do the migration."),(0,n.yg)("p",null,"When migrating from Derby, the coordinator processes will still need to be up initially, as they host the Derby database."),(0,n.yg)("h2",{id:"copy-segments-from-old-deep-storage-to-new-deep-storage"},"Copy segments from old deep storage to new deep storage."),(0,n.yg)("p",null,"Before migrating, you will need to copy your old segments to the new deep storage."),(0,n.yg)("p",null,"For information on what path structure to use in the new deep storage, please see ",(0,n.yg)("a",{parentName:"p",href:"/docs/latest/operations/export-metadata#deep-storage-migration"},"deep storage migration options"),"."),(0,n.yg)("h2",{id:"export-segments-with-rewritten-load-specs"},"Export segments with rewritten load specs"),(0,n.yg)("p",null,"Druid provides an ",(0,n.yg)("a",{parentName:"p",href:"/docs/latest/operations/export-metadata"},"Export Metadata Tool")," for exporting metadata from Derby into CSV files\nwhich can then be reimported."),(0,n.yg)("p",null,"By setting ",(0,n.yg)("a",{parentName:"p",href:"/docs/latest/operations/export-metadata#deep-storage-migration"},"deep storage migration options"),", the ",(0,n.yg)("inlineCode",{parentName:"p"},"export-metadata")," tool will export CSV files where the segment load specs have been rewritten to load from your new deep storage location."),(0,n.yg)("p",null,"Run the ",(0,n.yg)("inlineCode",{parentName:"p"},"export-metadata")," tool on your existing cluster, using the migration options appropriate for your new deep storage location, and save the CSV files it generates. After a successful export, you can shut down the coordinator."),(0,n.yg)("h3",{id:"import-metadata"},"Import metadata"),(0,n.yg)("p",null,"After generating the CSV exports with the modified segment data, you can reimport the contents of the Druid segments table from the generated CSVs."),(0,n.yg)("p",null,"Please refer to ",(0,n.yg)("a",{parentName:"p",href:"/docs/latest/operations/export-metadata#importing-metadata"},"import commands")," for examples. Only the ",(0,n.yg)("inlineCode",{parentName:"p"},"druid_segments")," table needs to be imported."),(0,n.yg)("h3",{id:"restart-cluster"},"Restart cluster"),(0,n.yg)("p",null,"After importing the segment table successfully, you can now restart your cluster."))}u.isMDXComponent=!0}}]);