新加入3篇文章
This commit is contained in:
9
.idea/TheKingOfBigData.iml
generated
Normal file
9
.idea/TheKingOfBigData.iml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
36
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
36
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
@@ -0,0 +1,36 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="TOP_LEVEL_CLASS_OPTIONS">
|
||||
<value>
|
||||
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
|
||||
<option name="REQUIRED_TAGS" value="" />
|
||||
</value>
|
||||
</option>
|
||||
<option name="INNER_CLASS_OPTIONS">
|
||||
<value>
|
||||
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
|
||||
<option name="REQUIRED_TAGS" value="" />
|
||||
</value>
|
||||
</option>
|
||||
<option name="METHOD_OPTIONS">
|
||||
<value>
|
||||
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
|
||||
<option name="REQUIRED_TAGS" value="@return@param@throws or @exception" />
|
||||
</value>
|
||||
</option>
|
||||
<option name="FIELD_OPTIONS">
|
||||
<value>
|
||||
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
|
||||
<option name="REQUIRED_TAGS" value="" />
|
||||
</value>
|
||||
</option>
|
||||
<option name="IGNORE_DEPRECATED" value="false" />
|
||||
<option name="IGNORE_JAVADOC_PERIOD" value="true" />
|
||||
<option name="IGNORE_DUPLICATED_THROWS" value="false" />
|
||||
<option name="IGNORE_POINT_TO_ITSELF" value="false" />
|
||||
<option name="myAdditionalJavadocTags" value="date" />
|
||||
</inspection_tool>
|
||||
</profile>
|
||||
</component>
|
||||
9
.idea/markdown-doclet.xml
generated
Normal file
9
.idea/markdown-doclet.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ch.raffael.mddoclet.integrations.idea.MarkdownDocletIdea.ProjectConfiguration">
|
||||
<option name="enabled" value="false" />
|
||||
<option name="renderingOptions">
|
||||
<RenderingOptions />
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/TheKingOfBigData.iml" filepath="$PROJECT_DIR$/.idea/TheKingOfBigData.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
582
.idea/workspace.xml
generated
Normal file
582
.idea/workspace.xml
generated
Normal file
@@ -0,0 +1,582 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="BranchesTreeState">
|
||||
<expand>
|
||||
<path>
|
||||
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="LOCAL_ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="GROUP_NODE:origin" type="e8cecc67:BranchNodeDescriptor" />
|
||||
</path>
|
||||
</expand>
|
||||
<select />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="1f4b9d3c-5ec4-4f92-99a5-47a66eed35c3" name="Default Changelist" comment="">
|
||||
<change afterPath="$PROJECT_DIR$/.idea/TheKingOfBigData.iml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/markdown-doclet.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/modules.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
|
||||
<change afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="CodeStyleSettingsInfer">
|
||||
<option name="done" value="true" />
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="MavenImportPreferences">
|
||||
<option name="generalSettings">
|
||||
<MavenGeneralSettings>
|
||||
<option name="mavenHome" value="D:\IDEA\IDEA2020.2.3\IntelliJ IDEA 2020.2.3\plugins\maven\lib\maven3" />
|
||||
<option name="userSettingsFile" value="G:\jdk1.8\maven\apache-maven-3.6.1\conf\settings.xml" />
|
||||
</MavenGeneralSettings>
|
||||
</option>
|
||||
</component>
|
||||
<component name="MavenRunner">
|
||||
<option name="vmOptions" value="-DarchetypeCatalog=local" />
|
||||
</component>
|
||||
<component name="ProjectCodeStyleSettingsMigration">
|
||||
<option name="version" value="1" />
|
||||
</component>
|
||||
<component name="ProjectId" id="1nxgMdYXnBJeEVuDVhFgeUWPCfH" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="abbreviatePackageNames" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
|
||||
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
|
||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||
<property name="aspect.path.notification.shown" value="true" />
|
||||
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
|
||||
<property name="node.js.detected.package.eslint" value="true" />
|
||||
<property name="node.js.detected.package.tslint" value="true" />
|
||||
<property name="node.js.path.for.package.eslint" value="project" />
|
||||
<property name="node.js.path.for.package.tslint" value="project" />
|
||||
<property name="node.js.selected.package.eslint" value="(autodetect)" />
|
||||
<property name="node.js.selected.package.tslint" value="(autodetect)" />
|
||||
<property name="nodejs_package_manager_path" value="npm" />
|
||||
<property name="project.structure.last.edited" value="Modules" />
|
||||
<property name="project.structure.proportion" value="0.15" />
|
||||
<property name="project.structure.side.proportion" value="0.2" />
|
||||
<property name="settings.editor.selected.configurable" value="MavenSettings" />
|
||||
</component>
|
||||
<component name="RecentsManager">
|
||||
<key name="CopyFile.RECENT_KEYS">
|
||||
<recent name="F:\github\TheKingOfBigData\code\SparkBase" />
|
||||
<recent name="F:\github\TheKingOfBigData\code\FlinkBase" />
|
||||
<recent name="F:\github\TheKingOfBigData\resources\简历模板" />
|
||||
<recent name="F:\github\TheKingOfBigData\resources\大数据面试题" />
|
||||
<recent name="F:\github\TheKingOfBigData\resources\Java面试题" />
|
||||
</key>
|
||||
<key name="MoveFile.RECENT_KEYS">
|
||||
<recent name="F:\github\TheKingOfBigData\note\其他组件" />
|
||||
<recent name="F:\github\TheKingOfBigData\note\hadoop" />
|
||||
<recent name="F:\github\TheKingOfBigData\note\实战项目" />
|
||||
<recent name="F:\github\TheKingOfBigData\note\hive" />
|
||||
<recent name="F:\github\TheKingOfBigData\note" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="SpellCheckerSettings" BundledDictionaries="0" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" Dictionaries="0" CorrectionsLimit="5" DefaultDictionary="application-level" UseSingleDictionary="true" />
|
||||
<component name="SvnConfiguration">
|
||||
<configuration />
|
||||
</component>
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="1f4b9d3c-5ec4-4f92-99a5-47a66eed35c3" name="Default Changelist" comment="" />
|
||||
<created>1612337108554</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1612337108554</updated>
|
||||
<workItem from="1612337109847" duration="789000" />
|
||||
<workItem from="1612404026027" duration="1401000" />
|
||||
<workItem from="1612711772690" duration="3454000" />
|
||||
<workItem from="1612764620636" duration="1208000" />
|
||||
<workItem from="1612838025714" duration="10246000" />
|
||||
<workItem from="1612888052266" duration="3598000" />
|
||||
<workItem from="1612892187716" duration="95000" />
|
||||
<workItem from="1612924751303" duration="2927000" />
|
||||
<workItem from="1613024594671" duration="815000" />
|
||||
<workItem from="1613104546627" duration="7547000" />
|
||||
<workItem from="1613532266271" duration="13049000" />
|
||||
<workItem from="1613615206988" duration="2081000" />
|
||||
<workItem from="1613626215409" duration="1187000" />
|
||||
<workItem from="1613631292422" duration="140000" />
|
||||
<workItem from="1613633718691" duration="441000" />
|
||||
<workItem from="1613714870313" duration="2724000" />
|
||||
<workItem from="1613903953680" duration="2727000" />
|
||||
<workItem from="1613976109958" duration="1152000" />
|
||||
<workItem from="1614052624817" duration="3488000" />
|
||||
<workItem from="1614135115620" duration="6690000" />
|
||||
<workItem from="1614221229418" duration="1932000" />
|
||||
<workItem from="1614400155815" duration="999000" />
|
||||
<workItem from="1614564885809" duration="4310000" />
|
||||
<workItem from="1614749246577" duration="3523000" />
|
||||
<workItem from="1614826368472" duration="3303000" />
|
||||
<workItem from="1614913388452" duration="2046000" />
|
||||
<workItem from="1615256739349" duration="1324000" />
|
||||
<workItem from="1615304642679" duration="1716000" />
|
||||
<workItem from="1615343449352" duration="1968000" />
|
||||
<workItem from="1615521594291" duration="2771000" />
|
||||
<workItem from="1615626836698" duration="1803000" />
|
||||
<workItem from="1615717650913" duration="1943000" />
|
||||
<workItem from="1615778381802" duration="5166000" />
|
||||
<workItem from="1616151035242" duration="610000" />
|
||||
<workItem from="1616428645952" duration="1207000" />
|
||||
<workItem from="1616600990281" duration="1361000" />
|
||||
<workItem from="1616726212163" duration="2360000" />
|
||||
<workItem from="1617117672628" duration="2947000" />
|
||||
<workItem from="1617243627654" duration="724000" />
|
||||
<workItem from="1617869636389" duration="705000" />
|
||||
</task>
|
||||
<task id="LOCAL-00041" summary="添加思维导图部分内容">
|
||||
<created>1613553002935</created>
|
||||
<option name="number" value="00041" />
|
||||
<option name="presentableId" value="LOCAL-00041" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613553002935</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00042" summary="添加思维导图部分内容">
|
||||
<created>1613553599741</created>
|
||||
<option name="number" value="00042" />
|
||||
<option name="presentableId" value="LOCAL-00042" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613553599741</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00043" summary="补充新的干货">
|
||||
<created>1613566085749</created>
|
||||
<option name="number" value="00043" />
|
||||
<option name="presentableId" value="LOCAL-00043" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613566085749</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00044" summary="补充新的干货">
|
||||
<created>1613571383170</created>
|
||||
<option name="number" value="00044" />
|
||||
<option name="presentableId" value="LOCAL-00044" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613571383170</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00045" summary="更新readme">
|
||||
<created>1613571526126</created>
|
||||
<option name="number" value="00045" />
|
||||
<option name="presentableId" value="LOCAL-00045" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613571526126</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00046" summary="更新readme">
|
||||
<created>1613571704085</created>
|
||||
<option name="number" value="00046" />
|
||||
<option name="presentableId" value="LOCAL-00046" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613571704085</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00047" summary="更新readme">
|
||||
<created>1613571836781</created>
|
||||
<option name="number" value="00047" />
|
||||
<option name="presentableId" value="LOCAL-00047" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613571836781</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00048" summary="更新readme">
|
||||
<created>1613615689141</created>
|
||||
<option name="number" value="00048" />
|
||||
<option name="presentableId" value="LOCAL-00048" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613615689141</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00049" summary="更新readme">
|
||||
<created>1613626248093</created>
|
||||
<option name="number" value="00049" />
|
||||
<option name="presentableId" value="LOCAL-00049" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613626248093</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00050" summary="更新readme">
|
||||
<created>1613631306716</created>
|
||||
<option name="number" value="00050" />
|
||||
<option name="presentableId" value="LOCAL-00050" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613631306717</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00051" summary="更新readme">
|
||||
<created>1613633732020</created>
|
||||
<option name="number" value="00051" />
|
||||
<option name="presentableId" value="LOCAL-00051" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613633732020</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00052" summary="更新readme">
|
||||
<created>1613633826745</created>
|
||||
<option name="number" value="00052" />
|
||||
<option name="presentableId" value="LOCAL-00052" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613633826745</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00053" summary="更新readme">
|
||||
<created>1613715075364</created>
|
||||
<option name="number" value="00053" />
|
||||
<option name="presentableId" value="LOCAL-00053" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613715075364</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00054" summary="更新readme和实战文章">
|
||||
<created>1613904430594</created>
|
||||
<option name="number" value="00054" />
|
||||
<option name="presentableId" value="LOCAL-00054" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613904430595</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00055" summary="更新readme">
|
||||
<created>1613904539132</created>
|
||||
<option name="number" value="00055" />
|
||||
<option name="presentableId" value="LOCAL-00055" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613904539133</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00056" summary="更新readme">
|
||||
<created>1613905240423</created>
|
||||
<option name="number" value="00056" />
|
||||
<option name="presentableId" value="LOCAL-00056" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613905240423</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00057" summary="更新画像文章">
|
||||
<created>1613976136772</created>
|
||||
<option name="number" value="00057" />
|
||||
<option name="presentableId" value="LOCAL-00057" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613976136772</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00058" summary="调整内容格式">
|
||||
<created>1613976316419</created>
|
||||
<option name="number" value="00058" />
|
||||
<option name="presentableId" value="LOCAL-00058" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613976316419</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00059" summary="更新readme">
|
||||
<created>1613976332739</created>
|
||||
<option name="number" value="00059" />
|
||||
<option name="presentableId" value="LOCAL-00059" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1613976332739</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00060" summary="更新Hbase的应用">
|
||||
<created>1614052983022</created>
|
||||
<option name="number" value="00060" />
|
||||
<option name="presentableId" value="LOCAL-00060" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614052983023</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00061" summary="更新Hbase的文章的排版和readme文件">
|
||||
<created>1614053150375</created>
|
||||
<option name="number" value="00061" />
|
||||
<option name="presentableId" value="LOCAL-00061" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614053150375</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00062" summary="更新Hbase的文章的排版">
|
||||
<created>1614068467185</created>
|
||||
<option name="number" value="00062" />
|
||||
<option name="presentableId" value="LOCAL-00062" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614068467186</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00063" summary="更新flink的文章的排版">
|
||||
<created>1614069110259</created>
|
||||
<option name="number" value="00063" />
|
||||
<option name="presentableId" value="LOCAL-00063" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614069110259</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00064" summary="更新readme文章目录">
|
||||
<created>1614135311362</created>
|
||||
<option name="number" value="00064" />
|
||||
<option name="presentableId" value="LOCAL-00064" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614135311362</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00065" summary="更新readme文章目录">
|
||||
<created>1614135414740</created>
|
||||
<option name="number" value="00065" />
|
||||
<option name="presentableId" value="LOCAL-00065" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614135414740</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00066" summary="添加了flink和spark的入门代码">
|
||||
<created>1614136658942</created>
|
||||
<option name="number" value="00066" />
|
||||
<option name="presentableId" value="LOCAL-00066" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614136658942</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00067" summary="删除代码">
|
||||
<created>1614137284413</created>
|
||||
<option name="number" value="00067" />
|
||||
<option name="presentableId" value="LOCAL-00067" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614137284413</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00068" summary="更新readme">
|
||||
<created>1614159563836</created>
|
||||
<option name="number" value="00068" />
|
||||
<option name="presentableId" value="LOCAL-00068" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614159563836</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00069" summary="调整文章格式">
|
||||
<created>1614159988330</created>
|
||||
<option name="number" value="00069" />
|
||||
<option name="presentableId" value="LOCAL-00069" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614159988330</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00070" summary="调整文章格式">
|
||||
<created>1614160944145</created>
|
||||
<option name="number" value="00070" />
|
||||
<option name="presentableId" value="LOCAL-00070" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614160944145</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00071" summary="添加 Hbase 在用户画像中应用实践的文章">
|
||||
<created>1614221754829</created>
|
||||
<option name="number" value="00071" />
|
||||
<option name="presentableId" value="LOCAL-00071" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614221754830</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00072" summary="更新 readme">
|
||||
<created>1614221845498</created>
|
||||
<option name="number" value="00072" />
|
||||
<option name="presentableId" value="LOCAL-00072" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614221845498</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00073" summary="更新 readme">
|
||||
<created>1614221935986</created>
|
||||
<option name="number" value="00073" />
|
||||
<option name="presentableId" value="LOCAL-00073" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614221935986</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00074" summary="更新 readme 文章列表">
|
||||
<created>1614400543695</created>
|
||||
<option name="number" value="00074" />
|
||||
<option name="presentableId" value="LOCAL-00074" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614400543695</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00075" summary="更新 readme 文章列表">
|
||||
<created>1614565001252</created>
|
||||
<option name="number" value="00075" />
|
||||
<option name="presentableId" value="LOCAL-00075" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614565001253</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00076" summary="更新 readme 文章列表">
|
||||
<created>1614590143572</created>
|
||||
<option name="number" value="00076" />
|
||||
<option name="presentableId" value="LOCAL-00076" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614590143572</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00077" summary="更新文章格式">
|
||||
<created>1614749713423</created>
|
||||
<option name="number" value="00077" />
|
||||
<option name="presentableId" value="LOCAL-00077" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614749713424</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00078" summary="更新readme,添加新的文章!">
|
||||
<created>1614750134970</created>
|
||||
<option name="number" value="00078" />
|
||||
<option name="presentableId" value="LOCAL-00078" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614750134970</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00079" summary="更新readme">
|
||||
<created>1614750150671</created>
|
||||
<option name="number" value="00079" />
|
||||
<option name="presentableId" value="LOCAL-00079" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614750150671</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00080" summary="更新readme,新增一篇企业级真实应用文章">
|
||||
<created>1614913806529</created>
|
||||
<option name="number" value="00080" />
|
||||
<option name="presentableId" value="LOCAL-00080" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1614913806529</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00081" summary="新增一篇HDFS文章">
|
||||
<created>1615304742574</created>
|
||||
<option name="number" value="00081" />
|
||||
<option name="presentableId" value="LOCAL-00081" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1615304742575</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00082" summary="更新readme,添加新增文章链接">
|
||||
<created>1615304991031</created>
|
||||
<option name="number" value="00082" />
|
||||
<option name="presentableId" value="LOCAL-00082" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1615304991032</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00083" summary="创建新目录-其他组件,存放非主流技术组件的文章">
|
||||
<created>1615723463782</created>
|
||||
<option name="number" value="00083" />
|
||||
<option name="presentableId" value="LOCAL-00083" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1615723463783</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00084" summary="更新readme,添加了几篇新的文章链接,并添加了新的福利地址">
|
||||
<created>1615883036572</created>
|
||||
<option name="number" value="00084" />
|
||||
<option name="presentableId" value="LOCAL-00084" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1615883036572</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00085" summary="更新readme,添加了几篇新的文章链接,并添加了新的福利地址">
|
||||
<created>1615883114796</created>
|
||||
<option name="number" value="00085" />
|
||||
<option name="presentableId" value="LOCAL-00085" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1615883114796</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00086" summary="更新readme,添加了几篇新的文章链接,并添加了新的福利地址">
|
||||
<created>1616601475979</created>
|
||||
<option name="number" value="00086" />
|
||||
<option name="presentableId" value="LOCAL-00086" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1616601475979</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00087" summary="更新readme,添加了一篇面试精华帖">
|
||||
<created>1616726434023</created>
|
||||
<option name="number" value="00087" />
|
||||
<option name="presentableId" value="LOCAL-00087" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1616726434024</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00088" summary="添加了2篇关于Kylin新的文章">
|
||||
<created>1617118135092</created>
|
||||
<option name="number" value="00088" />
|
||||
<option name="presentableId" value="LOCAL-00088" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1617118135093</updated>
|
||||
</task>
|
||||
<task id="LOCAL-00089" summary="更新 readme 文件,新加入2篇文章的链接">
|
||||
<created>1617118726813</created>
|
||||
<option name="number" value="00089" />
|
||||
<option name="presentableId" value="LOCAL-00089" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1617118726814</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="90" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="1" />
|
||||
</component>
|
||||
<component name="Vcs.Log.Tabs.Properties">
|
||||
<option name="TAB_STATES">
|
||||
<map>
|
||||
<entry key="MAIN">
|
||||
<value>
|
||||
<State>
|
||||
<option name="COLUMN_ORDER" />
|
||||
</State>
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
<MESSAGE value="更新readme和实战文章" />
|
||||
<MESSAGE value="更新画像文章" />
|
||||
<MESSAGE value="调整内容格式" />
|
||||
<MESSAGE value="更新Hbase的应用" />
|
||||
<MESSAGE value="更新Hbase的文章的排版和readme文件" />
|
||||
<MESSAGE value="更新Hbase的文章的排版" />
|
||||
<MESSAGE value="更新flink的文章的排版" />
|
||||
<MESSAGE value="更新readme文章目录" />
|
||||
<MESSAGE value="添加了flink和spark的入门代码" />
|
||||
<MESSAGE value="删除代码" />
|
||||
<MESSAGE value="调整文章格式" />
|
||||
<MESSAGE value="添加 Hbase 在用户画像中应用实践的文章" />
|
||||
<MESSAGE value="更新 readme" />
|
||||
<MESSAGE value="更新 readme 文章列表" />
|
||||
<MESSAGE value="更新文章格式" />
|
||||
<MESSAGE value="更新readme,添加新的文章!" />
|
||||
<MESSAGE value="更新readme" />
|
||||
<MESSAGE value="更新readme,新增一篇企业级真实应用文章" />
|
||||
<MESSAGE value="新增一篇HDFS文章" />
|
||||
<MESSAGE value="更新readme,添加新增文章链接" />
|
||||
<MESSAGE value="创建新目录-其他组件,存放非主流技术组件的文章" />
|
||||
<MESSAGE value="更新readme,添加了几篇新的文章链接,并添加了新的福利地址" />
|
||||
<MESSAGE value="更新readme,添加了一篇面试精华帖" />
|
||||
<MESSAGE value="添加了2篇关于Kylin新的文章" />
|
||||
<MESSAGE value="更新 readme 文件,新加入2篇文章的链接" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="更新 readme 文件,新加入2篇文章的链接" />
|
||||
</component>
|
||||
<component name="WindowStateProjectService">
|
||||
<state x="249" y="0" key="#Project_Structure" timestamp="1614052957576">
|
||||
<screen x="0" y="0" width="1536" height="824" />
|
||||
</state>
|
||||
<state x="249" y="0" key="#Project_Structure/0.0.1536.824/1920.0.1536.824@0.0.1536.824" timestamp="1614052957576" />
|
||||
<state x="504" y="207" key="#com.intellij.fileTypes.FileTypeChooser" timestamp="1612337814453">
|
||||
<screen x="0" y="0" width="1536" height="824" />
|
||||
</state>
|
||||
<state x="504" y="207" key="#com.intellij.fileTypes.FileTypeChooser/0.0.1536.824/1920.0.1536.824@0.0.1536.824" timestamp="1612337814453" />
|
||||
<state x="506" y="327" key="#com.intellij.framework.addSupport.AddSupportForSingleFrameworkDialog" timestamp="1614136268236">
|
||||
<screen x="0" y="0" width="1536" height="824" />
|
||||
</state>
|
||||
<state x="506" y="327" key="#com.intellij.framework.addSupport.AddSupportForSingleFrameworkDialog/0.0.1536.824/1920.0.1536.824@0.0.1536.824" timestamp="1614136268236" />
|
||||
<state x="400" y="0" key="CommitChangelistDialog2" timestamp="1617118725972">
|
||||
<screen x="0" y="0" width="1536" height="824" />
|
||||
</state>
|
||||
<state x="367" y="0" key="CommitChangelistDialog2/0.0.1536.824/1920.0.1536.824@0.0.1536.824" timestamp="1616726432133" />
|
||||
<state x="400" y="0" key="CommitChangelistDialog2/0.0.1536.824@0.0.1536.824" timestamp="1617118725972" />
|
||||
<state x="93" y="93" width="1350" height="638" key="DiffContextDialog" timestamp="1613631431416">
|
||||
<screen x="0" y="0" width="1536" height="824" />
|
||||
</state>
|
||||
<state x="93" y="93" width="1350" height="638" key="DiffContextDialog/0.0.1536.824/1920.0.1536.824@0.0.1536.824" timestamp="1613631431416" />
|
||||
<state x="549" y="167" key="FileChooserDialogImpl" timestamp="1617869639968">
|
||||
<screen x="0" y="0" width="1536" height="824" />
|
||||
</state>
|
||||
<state x="549" y="167" key="FileChooserDialogImpl/0.0.1536.824/1920.0.1536.824@0.0.1536.824" timestamp="1617869639968" />
|
||||
<state x="549" y="167" key="FileChooserDialogImpl/0.0.1536.824@0.0.1536.824" timestamp="1613104555585" />
|
||||
<state x="270" y="57" key="SettingsEditor" timestamp="1615778393772">
|
||||
<screen x="0" y="0" width="1536" height="824" />
|
||||
</state>
|
||||
<state x="270" y="57" key="SettingsEditor/0.0.1536.824@0.0.1536.824" timestamp="1615778393772" />
|
||||
<state x="361" y="145" key="Vcs.Push.Dialog.v2" timestamp="1617118729539">
|
||||
<screen x="0" y="0" width="1536" height="824" />
|
||||
</state>
|
||||
<state x="361" y="145" key="Vcs.Push.Dialog.v2/0.0.1536.824/1920.0.1536.824@0.0.1536.824" timestamp="1616726435098" />
|
||||
<state x="361" y="145" key="Vcs.Push.Dialog.v2/0.0.1536.824@0.0.1536.824" timestamp="1617118729539" />
|
||||
<state x="572" y="322" key="com.intellij.openapi.vcs.update.UpdateOrStatusOptionsDialogupdate-v2" timestamp="1613133100634">
|
||||
<screen x="0" y="0" width="1536" height="824" />
|
||||
</state>
|
||||
<state x="572" y="322" key="com.intellij.openapi.vcs.update.UpdateOrStatusOptionsDialogupdate-v2/0.0.1536.824/1920.0.1536.824@0.0.1536.824" timestamp="1612854309960" />
|
||||
<state x="572" y="322" key="com.intellij.openapi.vcs.update.UpdateOrStatusOptionsDialogupdate-v2/0.0.1536.824@0.0.1536.824" timestamp="1613133100634" />
|
||||
<state x="431" y="145" width="672" height="678" key="search.everywhere.popup" timestamp="1613108118345">
|
||||
<screen x="0" y="0" width="1536" height="824" />
|
||||
</state>
|
||||
<state x="431" y="145" width="672" height="678" key="search.everywhere.popup/0.0.1536.824@0.0.1536.824" timestamp="1613108118345" />
|
||||
</component>
|
||||
</project>
|
||||
247
note/其他组件/实时分析数据库 Druid,Mark 一下.md
Normal file
247
note/其他组件/实时分析数据库 Druid,Mark 一下.md
Normal file
@@ -0,0 +1,247 @@
|
||||
> **本文已收录github:[https://github.com/BigDataScholar/TheKingOfBigData](https://github.com/BigDataScholar/TheKingOfBigData),里面有大数据高频考点,Java一线大厂面试题资源,上百本免费电子书籍,作者亲绘大数据生态圈思维导图…持续更新,欢迎star!**
|
||||
## 前言
|
||||
阿里巴巴也曾创建过一个开源项目叫作 Druid(简称阿里Druid),它是一个数据库连接池的项目。而本期内容介绍的是一个分布式的**支持实时分析**的数据存储系统(Data Store)。Druid 设计之初的想法就是为分析而生,它在处理数据的规模、数据处理的实时性方面,比传统的 OLAP 系统有了显著的性能改进,而且拥抱主流的开源生态,包括 Hadoop 等。多年以来,Druid 一直是非常活跃的开源项目!
|
||||

|
||||
## Druid
|
||||
### Druid 简介
|
||||
<font color='RoyalBlue'>Druid 是一个**高性能**的实时分析数据库。它在 PB 级数据处理、毫秒级查询、数据实时处理方面,比传统的 OLAP 系统有显著的性能提升。</font>
|
||||
> Druid 的官方网站是 [http://druid.io](http://druid.io)
|
||||
|
||||

|
||||
### Druid 的三个设计原则
|
||||
- **快速查询(Fast Query)**:部分数据的聚合(Partial Aggregate)+内存化(In-emory)+索引(Index)。
|
||||
- **水平扩展能力(Horizontal Scalability)**:分布式数据(Distributed Data)+ 并行化查询(Parallelizable Query)
|
||||
- **实时分析(Realtime Analytics)**:不可变的过去,只追加的未来(Immutable Past,Append-Only Future)
|
||||
|
||||
#### 1. 快速查询(Fast Query)
|
||||
对于数据分析场景,大部分情况下,我们只关心一定粒度聚合的数据,而非每一行原始数据的细节情况。因此,数据聚合粒度可以是1 分钟、5 分钟、1 小时或1 天等。部分数据聚合(Partial Aggregate)给 Druid 争取了很大的性能优化空间。
|
||||
|
||||
数据内存化也是提高查询速度的杀手锏。内存和硬盘的访问速度相差近百倍,但内存的大小是非常有限的,因此在内存使用方面要精细设计,比如Druid 里面使用了 Bitmap 和各种压缩技术。
|
||||
|
||||
另外,为了支持 Drill-Down 某些维度,Druid 维护了一些倒排索引。这种方式可以加快 AND 和 OR 等计算操作。
|
||||
|
||||
#### 2、水平扩展能力(Horizontal Scalability)
|
||||
Druid 查询性能在很大程度上依赖于内存的优化使用。数据可以分布在多个节点的内存中,因此当数据增长的时候,可以通过简单增加机器的方式进行扩容。为了保持平衡,Druid按照时间范围把聚合数据进行分区处理。对于高基数的维度,只按照时间切分有时候是不够的(Druid 的每个Segment 不超过2000 万行),故Druid 还支持对Segment 进一步分区。 历史Segment 数据可以保存在深度存储系统中,存储系统可以是本地磁盘、HDFS 或远程的云服务。如果某些节点出现故障,则可借助Zookeeper 协调其他节点重新构造数据。
|
||||
|
||||
Druid 的查询模块能够感知和处理集群的状态变化,查询总是在有效的集群架构中进行。集群上的查询可以进行灵活的水平扩展。
|
||||
|
||||
#### 3、实时分析(Realtime Analytics)
|
||||
Druid 提供了包含基于时间维度数据的存储服务,并且任何一行数据都是历史真实发生的事件,因此在设计之初就约定事件一但进入系统,就不能再改变。
|
||||
|
||||
对于历史数据 Druid 以Segment 数据文件的方式组织,并且将它们存储到深度存储系统中,例如文件系统或亚马逊的S3 等。当需要查询这些数据的时候,Druid 再从深度存储系统中将它们装载到内存供查询使用。
|
||||
|
||||
|
||||
|
||||
|
||||
### Druid 特点
|
||||
Druid具有如下技术特点:
|
||||
|
||||
- **列式存储格式**
|
||||
|
||||
Druid使用面向列的存储,这意味着它只需要加载特定查询所需的精确列。这为仅查看几列的查询提供了巨大的速度提升。此外,每列都针对其特定数据类型进行了优化,支持快速扫描和聚合。
|
||||
|
||||
- **高可用性与高可拓展性**
|
||||
|
||||
Druid采用分布式、SN(share-nothing)架构,管理类节点可配置HA,工作节点功能单一,不相互依赖,这些特性都使得Druid集群在管理、容错、灾备、扩容等方面变得十分简单。Druid通常部署在数十到数百台服务器的集群中,并且可以提供数百万条记录/秒的摄取率,保留数万亿条记录,以及亚秒级到几秒钟的查询延迟。
|
||||
|
||||
|
||||
- **大规模的并行查询**
|
||||
|
||||
Druid可以在整个集群中进行大规模的并行查询。
|
||||
|
||||
- **实时摄取或批量处理**
|
||||
|
||||
实时流数据分析。区别于传统分析型数据库采用的批量导入数据进行分析的方式,Druid提供了实时流数据分析,采用`LSM(Long structure-merge)-Tree`结构使 Druid 拥有极高的实时写入性能;同时实现了实时数据在亚秒级内的可视化。
|
||||
|
||||
|
||||
- **自愈、自平衡、易操作**
|
||||
|
||||
作为运营商,要将群集扩展或缩小,**只需添加或删除服务器,群集将在后台自动重新平衡,无需任何停机时间**。如果任何Druid服务器发生故障,系统将自动路由损坏,直到可以更换这些服务器。Druid旨在全天候运行,无需任何原因计划停机,包括配置更改和软件更新。
|
||||
|
||||
- **云原生,容错的架构,不会丢失数据**
|
||||
|
||||
一旦 Druid 摄取了您的数据,副本就会安全地存储在深层存储(通常是云存储,HDFS或共享文件系统)中。即使每个Druid服务器都出现故障,您的数据也可以从深层存储中恢复。对于仅影响少数 Druid 服务器的更有限的故障,复制可确保在系统恢复时仍可进行查询。
|
||||
|
||||
- **亚秒级的OLAP查询分析**
|
||||
|
||||
Druid采用了列式存储、倒排索引、位图索引等关键技术,能够在亚秒级别内完成海量数据的过滤、聚合以及多维分析等操作。
|
||||
|
||||
- **丰富的数据分析功能**
|
||||
|
||||
针对不同用户群体,Druid提供了友好的可视化界面、类SQL查询语言以及REST 查询接口。
|
||||
|
||||
|
||||
### Druid 的使用场景
|
||||
了解了 Druid 有哪些常见的特点,我们还需要知道它具体的使用场景。
|
||||
|
||||
如果您的用例符合以下的几个描述,Druid 可能是一个不错的选择:
|
||||
|
||||
- 插入率非常高,但更新不常见
|
||||
- 大多数查询都是聚合和报告查询(“分组依据”查询)。您可能还有搜索和扫描查询。
|
||||
- 查询延迟定位为100毫秒到几秒钟
|
||||
- 数据有一个时间组件(Druid包括与时间特别相关的优化和设计选择)。
|
||||
- 可能有多个表,但每个查询只能访问一个大的分布式表。查询可能会触发多个较小的“查找”表。
|
||||
- 有高基数数据列(例如URL,用户ID),需要对它们进行快速计数和排名。
|
||||
- 希望从 Kafka,HDFS,平面文件或对象存储(如Amazon S3)加载数据。
|
||||
|
||||
要是感觉看的不是很懂,简洁地**总结**一下:
|
||||
|
||||
> - **适用于将清洗好的记录实时录入,但不需要更新操作的场景**
|
||||
> - **适用于支持宽表,不用join的场景(换句话说就是一张单表)**
|
||||
> - **适用于实时性要求高的场景**
|
||||
> - **适用于对数据质量的敏感度不高的场景**
|
||||
|
||||
当然以上列举的都是 <font color='blue'>**Druid 的适用情况**</font>,为了方便我们之后做技术选型,我们还需要知道它<font color='blue'>**不支持哪些操作**</font>。
|
||||
|
||||
- **不支持精确去重**
|
||||
- **不支持 Join(只能进行 semi-join)**
|
||||
- **不支持根据主键的单条记录更新**
|
||||
|
||||
所以如果不能接受这几点,则可以考虑放弃使用 Druid 了。
|
||||
|
||||
|
||||
那 Druid 的常见应用领域有哪些呢 ?
|
||||
|
||||
- 点击流分析(网络和移动分析)
|
||||
- 风险/欺诈分析
|
||||
- 网络遥测分析(网络性能监控)
|
||||
- 服务器指标存储
|
||||
- 供应链分析(制造指标)
|
||||
- 应用程序性能指标
|
||||
- 商业智能/ OLAP
|
||||
|
||||
关于更详细的描述,建议大家去多浏览官网`https://druid.apache.org/use-cases`,这里不做过多赘述 。
|
||||
|
||||
|
||||
|
||||
|
||||
下面来侃侃 Druid 的 架构 ~
|
||||
### Druid架构
|
||||
Druid 采用多进程,分布式的架构;其架构易于运维及部署,便于部署在云环境中。每个 Druid 进程都可以被独立地配置和横向扩展,这种设计一方面赋予了Druid集群 最大的灵活性和可扩展性,另一方面以提供了更高的容错性:避免了个别组件的失效影响了系统的其他模块。
|
||||
|
||||

|
||||
Druid的总体架构包含如下四类节点。
|
||||
|
||||
- **中间管理节点**(MiddleManager Node):及时摄入实时数据,并生成 Segment 数据文件。
|
||||
- **历史节点**(Historical Node):加载已生成的数据文件,以供用户查询数据。
|
||||
- **查询节点**(Broker Node):对外提供数据查询服务,并同时从中间管理节点与历史节点中查询数据,合并后返回调用方。
|
||||
- **协调节点**(Coordinator Node):负责历史节点的数据负载均衡,以及通过规则(Rule)管理数据的生命周期。
|
||||
|
||||
集群还包含如下三类外部依赖:
|
||||
|
||||
- **元数据库**(Metadata Storage):存储Druid 集群的元数据信息,比如,Segment 的相关信息,一般使用 MySQL 或 PostgreSQL 存储。
|
||||
|
||||
- **分布式协调服务**(Zookeeper):为 Druid 集群提供一致性协调服务的组件,通常为 Zookeeper。
|
||||
- **数据文件存储库**(Deep Storage):存放生成的 Segment 数据文件,并提供历史服务器下载功能,对于单节点集群,可以是本地磁盘,而对于分布式集群,一般是 HDFS 或 NFS 。
|
||||
|
||||
### Druid 数据结构
|
||||
|
||||
基于 DataSource 和 Segment 的 Druid 数据结构与 Druid 架构相辅相成,它们共同成就了 Druid 的高性能优势。
|
||||
|
||||
DataSource相当于关系型数据库中的表(Table)。DataSource的结构如下。
|
||||
|
||||
- **时间列**:表明每行数据的时间值,默认使用UTC时间格式且精确到毫秒级。
|
||||
- **维度列**:维度来自OLAP的概念,用来标识数据行的各个类别信息。
|
||||
- **指标列**:用于聚合和计算的列。通常是一些数字,计算操作包括Count、Sum等。
|
||||
|
||||
DataSource 结构如表所示:
|
||||
|
||||

|
||||
<font color='BlueViolet'>无论是实时摄取数据还是批量处理数据,Druid 在基于 DataSource 结构存储数据时,可选择对任意的指标列进行聚合操作</font>。该聚合操作主要基于维度列与时间列。表显示的是 DataSource 聚合后的数据结构。
|
||||

|
||||
**在数据存储时便可对数据进行聚合操作**是 Druid 的特点,该特点使得 Druid 不仅能够节省存储空间,而且能够提高聚合查询的效率。
|
||||
|
||||
**DataSource是一个逻辑概念,Segment是数据的实际物理存储格式**。Druid将不同时间范围内的数据存储在不同的 Segment 数据块中,这便是所谓的数据<font color=' BlueViolet'>**横向切割**</font>。按照时间横向切割数据,避免了全表查询,极大地提高了效率。
|
||||
|
||||
在Segment中,采用列式存储格式对数据进行压缩存储(Bitmap压缩技术),这便是所谓的数据<font color='BlueViolet'>**纵向切割**</font>。
|
||||
|
||||
## Druid 安装
|
||||
接下来为大家介绍如何安装 Druid,本次我们演示安装的是**单机版**。
|
||||
|
||||
### 安装部署
|
||||
我们可以选择去官网 `https://druid.apache.org/`下载
|
||||

|
||||
另外我们也可以选择`https://imply.io/`,从 imply页面下载 Druid 最新版本的安装包。因为 imply 集成了Druid ,提供了 Druid 从部署到配置再到各种可视化工具的完整解决方案,所以这里我们使用了第 2 种方法 ~
|
||||
|
||||
(1)将 `imply-2.7.10.tar.gz`上传到 node01 节点的的 /opt/software 目录下,并解压到`/export/servers`目录下。
|
||||
|
||||
```bash
|
||||
[root@node01 software]# tar -zxvf imply-2.7.10.tar.gz -C ../servers/
|
||||
```
|
||||
(2)修改imply-2.7.10的名称为imply。
|
||||
|
||||
```bash
|
||||
[root@node01 servers]# mv imply-2.7.10 imply
|
||||
```
|
||||
(3)修改配置文件
|
||||
|
||||
① 修改 Druid 的 ZK 配置
|
||||
|
||||
```bash
|
||||
[root@node01 servers]# vim imply/conf/druid/_common/common.runtime.properties
|
||||
```
|
||||
需要修改的内容如下
|
||||
|
||||
```bash
|
||||
druid.zk.service.host=node01:2181,node02:2181,node03:2181
|
||||
```
|
||||
② 修改启动命令参数,使其不校验、不启动内置ZK。
|
||||

|
||||
(4)启动
|
||||
|
||||
① 启动 Zookeeper
|
||||
|
||||
```bash
|
||||
[root@node01 imply]# zk_startall.sh
|
||||
```
|
||||
② 通过 bin 目录下的 supervise 命令启动 imply
|
||||
|
||||
```bash
|
||||
[root@node01 imply]$ bin/supervise -c conf/supervise/quickstart.conf
|
||||
```
|
||||
|
||||
|
||||
> **说明**:每启动一个服务均会打印出一条日志。我们可以在/opt/module/imply/var/sv/目录下查看服务启动时的日志信息。
|
||||
|
||||
(1)启动成功之后呢,我们可以通过 `ip:端口`的方式进行访问,以我当前所安装 Druid 的节点 node01 为例,当我访问`node01:9095/datasets`,便可以在网页上看到如下界面:
|
||||
|
||||

|
||||
|
||||
(2)单击“Load data”按钮,然后单击“Apache Kafka”按钮:
|
||||

|
||||
(3)添加 Kafka 集群和主题信息,并选择合适的格式化形式
|
||||

|
||||
(4)确认数据样本格式
|
||||

|
||||
(5)加载数据,必须要有时间字段
|
||||

|
||||
(6)配置要加载的列
|
||||

|
||||
(7)配置 Kafka 数据源
|
||||

|
||||
(8)确认加载数据的配置
|
||||

|
||||
(9)连接 Kafka 的 topics_start,刚开始会显示 Connecting,加载完成之后便会显示如下图所示:
|
||||

|
||||
(10)选择 SQL
|
||||
|
||||
因为 topic 为`ckTest`里存储的都是用户行为数据,这里我写了一个 SQL 获取每种渠道所对应的数据量,如下所示:
|
||||

|
||||
## 巨人的肩膀
|
||||
> 1、hhttps://druid.apache.org/ Druid 官网
|
||||
> 2、https://www.jianshu.com/p/6f822e0f538c《Druid基本概念及架构介绍》
|
||||
> 3、https://zhuanlan.zhihu.com/p/82038648《Apache Druid 简介》
|
||||
> 4、https://blog.csdn.net/weixin_40735752/article/details/88218571《Druid.IO简介系列之二:Druid系统架构》
|
||||
|
||||
|
||||
## 小结
|
||||
本期文章为大家介绍了 **Druid 的简介,特点,使用场景,架构与数据结构**,并用一个简单的 demo 为大家演示了 Druid 的具体使用。当然关于 Druid 值得探索的内容还有很多,限于文章篇幅不作过多介绍,希望大家能看完之后养成一种“**自我驱动型学习**”的能力,这才是最重要的!有疑问也欢迎找我探讨 ~ **你知道的越多,你不知道的也越多** ~ 我是 梦想家,我们下一期见!
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
98
note/程序人生/[云上有为 · 未来无界] 2021上海站 ECUG Con 第一天回忆录.md
Normal file
98
note/程序人生/[云上有为 · 未来无界] 2021上海站 ECUG Con 第一天回忆录.md
Normal file
@@ -0,0 +1,98 @@
|
||||
|
||||
|
||||
|
||||
|
||||
## 前言
|
||||
|
||||
在前两周,我在刷着公众号订阅信息,无意间看到了关于 ECUG(一个历经 14 年的老牌技术盛会)将要在4月10号到11号在上海举办线下活动的宣传信息。于是在好友 @小林coding 的帮助下,成功拿到了内部票(再次感谢林总),又在技术群里遇见跟自己同方向的小伙伴。于是提前约定,在这周六一大早,相约出发了 ~
|
||||
|
||||
|
||||
> **拓展:**
|
||||
> **ECUG** 全称为 Effective Cloud User Group(实效云计算用户组),成立于 2007 年的 CN Erlounge II,由许式伟发起,是科技领域不可或缺的高端前沿团体。作为行业技术进步的一扇窗口,ECUG 汇聚众多技术人,关注当下热点技术与尖端实践,共同引领行业技术的变革。
|
||||
> **ECUG Con** 是由 ECUG 社区主办的技术盛会,发起于 2007 年,目前已成功举办 13 届。期间,来自 Google、微软、BAT、华为、京东、携程等知名企业以及七牛云、PingCAP、饿了么等众多互联网科技公司的权威技术大神纷纷参与,影响了上万名技术从业者。
|
||||
|
||||
我们7点整从地铁站出发,一共坐了有19个站,大约花费了1个小时的路程时间。等到了位于上海市长宁区协和路 1102 号建滔诺富特酒店,已经快8点半了。
|
||||
|
||||
喏,这就是举办活动所在的酒店。
|
||||

|
||||
因为本次活动是从早上8点就开始签到,所以我们来到活动所在的一楼大厅时,已经陆续有小伙伴在签到,拿属于自己的工牌。
|
||||

|
||||
领完工牌之后,从旁边的通道往里走,就可以看见2个年轻靓丽的小姐姐已经等候多时 ~
|
||||

|
||||
哦不好意思,我眼神不太好,好像是四个(超级加倍(`・ω・´))
|
||||
相信大家一定从上面一张图中发现了一个 coserplay貂蝉的小姐姐。没错,看着颇有几分程序员鼓励师的感 jio 。下面附上一张帅气小哥的照片
|
||||

|
||||
再来一张自己和小伙伴们一起的合影(越看自己的表情越鬼畜。。。。)
|
||||

|
||||
然后拍完照片,我们先去占位置,结果没想到咔嚓,又多了一张照片。看着小姐姐十几厘米的高跟鞋,我陷入了沉思 ..... (这次的眼神总算是正常了一点)
|
||||

|
||||
好了,还是说正事,不然我担心一群读者心里骂我 lsp,取关就难搞了,但是我丝毫不慌,毕竟当年我也是号称阳光幼儿园大班浪里小白龙的男人。。。
|
||||
|
||||
不废话了,我们来到大厅,已经有陆续好多的朋友已经坐在位置上等待会议的开始。到底是怎样的一种技术氛围,放上两张初始的照片,感受一下:
|
||||
|
||||

|
||||

|
||||
但大会毕竟9点才正式开始,寻思着还有一会,便又出去溜达了一下。可以看到现场还是有很多的企业工作人员在为自己公司招人或者宣传自家的产品。
|
||||
|
||||

|
||||
旁边还有其他的小哥哥,小姐姐在用送的体验券,体验 X-box游戏机和 NS 游戏机。
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
|
||||
终于差不多到了大会正式开始的时间,本次活动的主持人是 超神经 HyperAI 的主编 袁滚滚,是一位实力与颜值俱佳的大牛。
|
||||
|
||||

|
||||
|
||||
|
||||
按照活动的出场顺序,第一位分享的嘉宾是**前WPS首席构架师,现任七牛云创始人兼CEO,同时也是ECUG发起人**,见到了传说中的大牛偶像,心理比较的激动 ~
|
||||
|
||||

|
||||
许老师作为 Go 语言狂人,在本次大会上着重介绍了 Go 语言的发展历程和特点,以及对自己带领团队开发的 Go+ 的宏大展望与美好愿景。
|
||||

|
||||
接下来出场的嘉宾就不一一详细介绍了,但是大牛前辈们现场的照片还是要分享一下的 ~
|
||||
|
||||
「华为云知识图谱高级专家」郑毅
|
||||

|
||||
「亚马逊云科技首席布道师」王宇博
|
||||
|
||||

|
||||
不知不觉到了茶歇时间,可以看出本次活动还是非常的给力,提供的美食种类还是非常的多 ~
|
||||

|
||||
|
||||

|
||||

|
||||

|
||||
好了再来一张远景图,再放几张估计哈喇子都要掉地上了~
|
||||
|
||||

|
||||
吃完了美食,迎接来的下午分享同样给力!
|
||||
|
||||
「前阿里p9,资深技术专家,阿里云数加平台研发负责人,现任数新网络 CEO」 王贲 为我们介绍了金融数据中台的相关技术分享内容 。
|
||||

|
||||
一直被业内称作“AI四小龙”之一的商汤科技近几年发展也越发迅速。「移动智能事业群副总裁,智能终端业务CTO」王子彬老师为我们介绍了 AI +AR 在商汤云平台的搭建及行业赋能 。
|
||||

|
||||
|
||||
「华中科技大学计算机软件与理论博士,Zilliz合伙人,系统架构师,CCF 分布式计算与系统专委会委员」郭人通老师的分享。
|
||||

|
||||
最后做分享的是来自「同济大学经济与管理学院的教授、博士生导师」的梁哲老师。为我们分享的是 AI 赋能智慧明航的内容。
|
||||

|
||||
## 彩蛋
|
||||
最后分享一些会场其他的照片,相信大家会感兴趣的 ~
|
||||
|
||||
- 会场设置的抓娃娃环节,抓到了可以找工作人员兑换奖品
|
||||

|
||||
|
||||
- 集齐了各个展台企业的印章,可以凭互动卡排队领取 ECUG 卫衣
|
||||

|
||||
|
||||
- 大会第一二排坐的都是 VIP ,后面坐的才是参会观众
|
||||

|
||||
- 用便签写下对 ECUG 的祝福,就可以免费获得自定义刻字的可乐一罐
|
||||

|
||||
- 全程都可以找小姐姐拍照
|
||||

|
||||
## 结尾
|
||||
真的,虽然我水完这篇文章又过去了3个小时,可见我是在真的很认真的在水文章,来个三连不过分吧(别问为什么,问就是臭不要脸(〃'▽'〃))。
|
||||
42
note/程序人生/给大家介绍 2 本还不错的书「数据仓库,数据中台」.md
Normal file
42
note/程序人生/给大家介绍 2 本还不错的书「数据仓库,数据中台」.md
Normal file
@@ -0,0 +1,42 @@
|
||||
## 前言
|
||||
老读者都知道,Alice是一个爱看书的程序员。之前已经为大家分享过2篇跟书有关的文章,一篇是[《推荐10本大数据领域必读的经典好书(火速收藏)》](https://blog.csdn.net/weixin_44318830/article/details/108907926),为大家推荐了一些从很经典的大数据书籍(还专门为大家准备了电子版)。另外一篇是《[简单谈谈最近在看的几本书「数据中台,用户画像」](https://blog.csdn.net/weixin_44318830/article/details/111350860?)》,第二篇更多是站在读者的角度,分析评判书的可读性,并写了自己的读后感。虽然带来的效果并没有第一篇那么好,但是却收到不少小伙伴的好评!最近,又淘到2本不错的好书,想借本期文章为大家好好“品”一下,希望大家能够受益!
|
||||
|
||||
## 大数据分析 : 数据仓库项目实战
|
||||
|
||||

|
||||
相信大家看到封面,第一眼应该是被左上角的“硅谷”所吸引。作为“尚大”毕业的学生,对于其资料的硬核程度,与靠着自学一路走来的小伙伴们一样,有目共睹。作为它出版的第一本书,相信大家也同样期待 ~
|
||||
|
||||
大数据发展至今,早已不是一个新兴词语,大数据的应用已经无处不在!正如本书前言所述,**在大数据时代,我们面临的不仅是海量的数据,更重要的是海量数据所带来的数据的采集、存储、处理等方方面面的问题**。为了更快速、更全面地展示大数据的实践应用,这本书以一个数据仓库项目为切入点,带领大家一步步揭开大数据的面纱!
|
||||
|
||||
相信很多非大数据行业的小伙伴不是很理解,数据仓库是啥?
|
||||
|
||||
如果是回答新手上路的**萌新**,我会回答<font color='RoyalBlue'>**数据仓库项目是学习大数据的重要基石**</font>。你可以通过以搭建数仓为主线,从搭建之初的框架选型、数据服务的整体策划到数据的流向,数据的采集、存储和计算,循序渐进,一步步展开,进行细致剖析。简单理解,就是完整跟着把这个项目做一遍,大数据基本常用的技术你都玩过了 ~
|
||||
|
||||
如果有一定开发经验,但是在工作中未接触到大数据行业的“**老司机**”来问这个问题,我会基于自己大量阅读和实践的认知,告诉他:<font color=' tomato'>**数据仓库是大多数企业“试水”大数据的首先切入点**</font>。为啥?一方面数据仓库主要编程语言以SQL为主,所以经常搞数仓的就容易被人戏称是 SQLBoy,哈哈开个玩笑 ~ 无论是 Hive 还是 SparkSQL,都是通过高度标准化的 SQL 进行开发的,这样的好处就很明显。对于很多从传统数据仓库,例如做后台开发,向大数据转型的开发人员和团队来说,是一种较为平滑的过渡;另一方面,数据仓库理论和方法论已经非常成熟,在大数据平台上实现数据仓库遵循的依然是这些理论,只是在不同的业务,项目中实现的细节上有所不同!所以,如果完整跟着做了一个项目,在大脑中形成自己的一套“数仓理论”,再去学习其他的项目或者技术点,相信会有起到“触类旁通”的效果,事半功倍!
|
||||
|
||||
当然,在大数据领域扎根多年的“老鸟”应该是不会问我这么“稚嫩”的问题,但 “ A true master is an eternal student ”,真正的大师,永远都怀着一颗学徒的心。我会袒露心声:现在大数据生态圈用“百花齐放”真的不为过,举一些当前大数据开发主流的框架,例如**采集**:Flume,Kafka,Sqoop;**存储**:MySQL,Hadoop,HBase;**计算**:Hive,Tez;**即席查询**:Presto,Druid,Kylin;**可视化**:Superset;**任务调度**:Azkaban;**元数据管理**:Atlas 等等,我们很少在真实的一个企业级项目中均有所涉及,但如果有一个不算复杂的项目能把一个完整的技术栈串联起来,我相信不管是对于项目本身的业务的拓展理解还是自身技术栈的积累,都会有不少的提升!除此之外,书中还有对于数仓学习中需要掌握的一些理论,例如范式理论,星型,雪花和星座模型区别,表如何分层,数仓如何建模,以及常用的术语都有一定的讲解,但不是非常详细。如果想要全面了解数仓,建议去看《数据仓库工具箱》,想要数仓工具箱电子版可以私聊我,当然这就是后话了~
|
||||
|
||||
|
||||
或许你看到这里,会对项目的架构感兴趣,那我就分享一下最近看了硅谷的教程,依葫芦画瓢的2张架构图,分别是离线和实时的数仓架构设计,而这本书就是按照离线的架构介绍的。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||
这本书比较适合初级程序员 或者 大数据萌新,要求读者具有一定的编程基础,例如 Java 和 SQL 。另外项目配套的相关内容早已在B站上有对应的视频公开 ~ 想找电子书的朋友可以用“无限卡”去 wx读书上白嫖 ~
|
||||
|
||||
## 大数据平台架构与原型实现:数据中台建设实战
|
||||

|
||||
这本书的作者是一位架构师。拥有 14 年 IT 系统开发和架构经验,在大数据、企业级应用架构,SaaS、分布式存储和领域驱动设计等方面都有不错的实践经验。当时买这本书的主要原因是它因为在豆瓣上口碑不错,再加上近几年数据中台越来越火,几乎所有的大厂都有自己的中台,而自己作为一个大数据萌新,对于“热门新鲜”的技术一直都很敏感,所以当时就很爽快地买来看了。
|
||||
|
||||
让我惊喜的是,这本书对于中台的介绍应该是我目前为止看过的所有资料里介绍的最透彻的,光技术中台一个知识点,就从技术体系,组织架构,以及需要具备的能力和建设策略,让之前从没有认真思考过“数据中台”来源的我,开始思索其未来的发展。但美中不足的地方是,书中大篇幅的实际系统部署内容,对于开发能力薄弱的读者不是很友好。但这也不能埋怨作者,毕竟就像现在数据中台的概念满天飞,最终的落地却是一大难题。如果整本书光吹理论而不将其落到实际的操作上,整本书的价值将大打折扣!
|
||||
|
||||
说一些我认为受益比较大的地方。在第4章**架构与原型设计**,在第一小节,介绍大数据平台架构设计的时候,介绍了一些业界已经较为成熟的架构模式,例如 **Lambda架构,Kappa架构 以及 Smack 架构**。在此之前,我最多也只是在公司内部技术分享会上听到其他人谈到会有点印象,但是自己却从未去主动了解过。我在几乎0基础的情况下,阅读这些架构的设计理念和应用,还是比较的容易,这可能跟自学能力有关。另外我比较欣赏的一点就是,作者作为一个高级架构师,对于技术本身的理解非常深入。尤其在做技术选型的时候,从**数仓分层的设计与构建**,**数据存储系统的选择对比**,**不同场景下工作流的作业调度**,**部署提交**,**项目构建**...每一个点都需要有一定的知识储备。这些都能了然于胸,离不开平时大量的实践和积累。我的目标是未来能成为大数据架构师,别的不说,至少通过作者的阅读,我学会了新的思考方式!
|
||||
|
||||
借用彩食鲜CTO、鲲鹏会荣誉导师,苏宁科技集团原副总裁乔新亮老师的评论,本书涵盖了大数据平台建设的全部环节,通读下来,整体上实操性很强,架构原理融于了工程原型的搭建过程,对于希望自己动手实践的读者会很有帮助,同时在操作步骤中介绍了相应的逻辑与设计,有助于读者更好地领会背后的原理。在今天这个时代,我们不见得要自己搭建整个平台,但是了解原理可以让自己工作起来事半功倍,不管是自己搭建,还是利用成熟平台,懂得原理,明白实践,再开始在企业中搭建数据驱动内部经营的完善体系就会胸有成竹、游刃有余!
|
||||
|
||||
|
||||
## 小结
|
||||
本期内容我为大家推荐了2本非常认可,喜欢的技术书籍,同时也希望大家在平时阅读的时候,多输出,多思考,这样往往能够对书中想要表达的核心思想理解得更透彻。好了,本篇内容就到这里,我是【大数据梦想家】,一个坚信技术成就自我的“后浪”,你知道的越多,你不知道的也越多!如果本文对您有所启发,不妨点个三连,我们下一期,不见不散~
|
||||
|
||||
Reference in New Issue
Block a user