1 line
360 KiB
JSON
1 line
360 KiB
JSON
{"meta":{"version":1,"warehouse":"5.0.1"},"models":{"Asset":[{"_id":"themes/butterfly/source/css/index.styl","path":"css/index.styl","modified":1,"renderable":1},{"_id":"themes/butterfly/source/css/var.styl","path":"css/var.styl","modified":1,"renderable":1},{"_id":"themes/butterfly/source/img/404.jpg","path":"img/404.jpg","modified":1,"renderable":1},{"_id":"themes/butterfly/source/img/avatar.jpg","path":"img/avatar.jpg","modified":1,"renderable":1},{"_id":"themes/butterfly/source/img/friend_404.gif","path":"img/friend_404.gif","modified":1,"renderable":1},{"_id":"themes/butterfly/source/img/favicon.png","path":"img/favicon.png","modified":1,"renderable":1},{"_id":"themes/butterfly/source/js/main.js","path":"js/main.js","modified":1,"renderable":1},{"_id":"themes/butterfly/source/js/tw_cn.js","path":"js/tw_cn.js","modified":1,"renderable":1},{"_id":"themes/butterfly/source/js/utils.js","path":"js/utils.js","modified":1,"renderable":1},{"_id":"themes/butterfly/source/js/search/algolia.js","path":"js/search/algolia.js","modified":1,"renderable":1},{"_id":"themes/butterfly/source/js/search/local-search.js","path":"js/search/local-search.js","modified":1,"renderable":1},{"_id":"source/img/000001.png","path":"img/000001.png","modified":1,"renderable":0},{"_id":"source/img/dingyue.png","path":"img/dingyue.png","modified":1,"renderable":0},{"_id":"source/img/peiqian.png","path":"img/peiqian.png","modified":1,"renderable":0},{"_id":"source/img/site01.jpg","path":"img/site01.jpg","modified":1,"renderable":0},{"_id":"source/img/yiyuan.png","path":"img/yiyuan.png","modified":1,"renderable":0},{"_id":"source/img/machinelearning/cros-valid.png","path":"img/machinelearning/cros-valid.png","modified":1,"renderable":0},{"_id":"source/img/machinelearning/kfold-skfold.png","path":"img/machinelearning/kfold-skfold.png","modified":1,"renderable":0},{"_id":"source/img/machinelearning/knn-01.png","path":"img/machinelearning/knn-01.png","modified":1,"renderable":0}],"Cache":[{"_id":"source/about/index.md","hash":"31fdd093368e1c18c1592a8cad6f3c3fe6d6711a","modified":1723257494626},{"_id":"source/_data/link.yml","hash":"6aaf04b5c920e403bea8f82e4b3f4d719760e6df","modified":1723257824766},{"_id":"source/_posts/hello-world.md","hash":"40e804610ff712f079ace7012b862b4efecf82fb","modified":1723206110026},{"_id":"source/categories/index.md","hash":"49618dce0bee26dfc65f0de1794f01d2967cb7b8","modified":1722407843090},{"_id":"source/tags/index.md","hash":"1f27b735b6c7d629c8931b5bd3913bdd659f1981","modified":1722385980076},{"_id":"source/link/index.md","hash":"26e21fe46bf7c0fc5ae95b73d52bf516368d6dc7","modified":1723257768927},{"_id":"source/_posts/machinelearning/knn.md","hash":"6e6c444dc7be367d0cc131b29c02414e619e416e","modified":1736846489069},{"_id":"source/music/index.md","hash":"d8dcf467af235e0bac09805db3a4ab73ad782b83","modified":1723257619897},{"_id":"source/img/machinelearning/kfold-skfold.png","hash":"ab841f5412b7ea773468a3facff643df68a88c01","modified":1736846071435},{"_id":"source/img/machinelearning/knn-01.png","hash":"2a931981d1d5f72d6b42b39b8ef313569eab853e","modified":1736766866160},{"_id":"source/_posts/net/index.md","hash":"7eae8512c2a6bd937200487540b962d65a47ad9e","modified":1723206110028},{"_id":"source/_posts/frontend/frontend.md","hash":"3770215d35203b03d86d4f3a6ceee32f9849b584","modified":1723206110023},{"_id":"source/_posts/ancient/guwenguanzhi/1.md","hash":"629652f1d8e2a347e6b11c367d25b0a26698cd60","modified":1723257063678},{"_id":"source/movies/index.md","hash":"4abf7a6a712f712f22d80203f6004a89feca2014","modified":1723257633715},{"_id":"source/_posts/frontend/deploy/deploy.md","hash":"ba4a05741f30f92f9fbe7b815519142de09b13fb","modified":1723206110045},{"_id":"source/_posts/frontend/uniapp/uniapp.md","hash":"8c8594e3eb73d2c10c4c6dfc008b58c36763b054","modified":1723206110039},{"_id":"source/_posts/bigdata/hadoop/env.md","hash":"4b184c804e9c8083966b1360fe9d5aa539930005","modified":1726065928095},{"_id":"source/_posts/bigdata/hadoop/hdfs.md","hash":"3148149529354105eb301c70961b6f1b68030835","modified":1726066302712},{"_id":"source/_posts/frontend/uniapp/component1.md","hash":"b9b981d3903f5e57e7f327d930df4f04780211f9","modified":1723206110042},{"_id":"source/_posts/linux/script.md","hash":"2deda929ed0c81ddcd00945c673b29f1bd1353c0","modified":1723997145731},{"_id":"themes/butterfly/_config.yml","hash":"c6fab3700a6502b5790ca20d20113020544ea048","modified":1722500710088},{"_id":"source/_posts/net/jichang/jichang.md","hash":"ad0485f33d2f0a8eea342c815d869911433df370","modified":1723206110036},{"_id":"themes/butterfly/plugins.yml","hash":"7bb2c7350c0c57850aa30213cd0f26553a614702","modified":1722500710224},{"_id":"themes/butterfly/package.json","hash":"2b6fb6f62b9fa6a829311ffd532ae760fbd0a7db","modified":1722500710223},{"_id":"themes/butterfly/.github/FUNDING.yml","hash":"3b572099a992e30267f5fe4cd3c582ff7ac9f083","modified":1722500710075},{"_id":"themes/butterfly/languages/default.yml","hash":"90e9e2f36dc51aa77eb7804ae048b4876035b12d","modified":1722500710090},{"_id":"themes/butterfly/languages/en.yml","hash":"68127be0e6b44cfc5f31353d8b275c02939b3ff9","modified":1722500710092},{"_id":"themes/butterfly/languages/zh-CN.yml","hash":"2dcc70a011b37890215ae0fd6d8f8c78aa8af6b0","modified":1722500710093},{"_id":"themes/butterfly/languages/zh-TW.yml","hash":"1392e7b8c678cdfb54f55523693e66abc7d80538","modified":1722500710094},{"_id":"source/_posts/bigdata/hadoop/zookeper.md","hash":"96e58c86eba61accb620adc5e7b7dbc46e47b237","modified":1726066302706},{"_id":"themes/butterfly/layout/archive.pug","hash":"bc77220dfc269b8faad0930e1a4142ebf68165e5","modified":1722500710096},{"_id":"themes/butterfly/layout/category.pug","hash":"bf979aec88d78b644fc5d31518f8679ad7625792","modified":1722500710097},{"_id":"themes/butterfly/layout/page.pug","hash":"bf2d6c6d2d156777b55292e51be02b0b3acf0af8","modified":1722500710219},{"_id":"themes/butterfly/layout/tag.pug","hash":"4bb5efc6dabdf1626685bf6771aaa1467155ae86","modified":1722500710222},{"_id":"themes/butterfly/layout/index.pug","hash":"648dcbdb3d145a710de81c909e000e8664d2ac9c","modified":1722500710218},{"_id":"themes/butterfly/LICENSE","hash":"c8bc7df08db9dd3b39c2c2259a163a36cf2f6808","modified":1722500710084},{"_id":"themes/butterfly/layout/post.pug","hash":"fdbb508b5e6dec30fb8753c5a7fdd494410c4fc0","modified":1722500710220},{"_id":"themes/butterfly/.github/ISSUE_TEMPLATE/bug_report.yml","hash":"eed9190301095b35081aa2658204cc3f15b9f5e1","modified":1722500710076},{"_id":"themes/butterfly/.github/ISSUE_TEMPLATE/config.yml","hash":"63ad2249ad09fb3fe21bd5ff9adefb304a7ab24a","modified":1722500710077},{"_id":"themes/butterfly/layout/includes/404.pug","hash":"aace9ddff469de4226e47a52ede1c81e66d66d5c","modified":1722500710100},{"_id":"themes/butterfly/layout/includes/footer.pug","hash":"8715948b93e7508b84d913be1969b28c6b067b9b","modified":1722500710102},{"_id":"themes/butterfly/layout/includes/additional-js.pug","hash":"50eea5aa78cdeb6c72dd22f0aeabc407cc0f712e","modified":1722500710101},{"_id":"themes/butterfly/layout/includes/head.pug","hash":"ea8d4e8ac6af93cd268ba8f6ffcb80417bc2501e","modified":1722500710103},{"_id":"themes/butterfly/layout/includes/layout.pug","hash":"96df62e34661d8ca4a45267286127479e5178a79","modified":1722500710123},{"_id":"themes/butterfly/layout/includes/pagination.pug","hash":"c5c58714fb3cb839653e5c32e6094784c8662935","modified":1722500710135},{"_id":"themes/butterfly/.github/ISSUE_TEMPLATE/feature_request.yml","hash":"6e0f9470b18bd37d4891282ac73d61676b040e8c","modified":1722500710079},{"_id":"themes/butterfly/layout/includes/rightside.pug","hash":"f448bf73103b88de4443e52d600e871cf3de3e32","modified":1722500710138},{"_id":"themes/butterfly/layout/includes/sidebar.pug","hash":"9277fead4c29dbe93976f078adaa26e8f9253da3","modified":1722500710140},{"_id":"themes/butterfly/scripts/events/comment.js","hash":"95479790234c291b064d031577d71214cdd1d820","modified":1722500710229},{"_id":"themes/butterfly/scripts/events/cdn.js","hash":"7864ba45716c51aef8d8b04fd4bc212e0008ce3b","modified":1722500710226},{"_id":"themes/butterfly/scripts/events/init.js","hash":"ce68e84a9ccfcf91100befbaa9afc392a0cd93bb","modified":1722500710229},{"_id":"themes/butterfly/scripts/events/merge_config.js","hash":"b1dfc3c898b886eab1241b068fc27d7a26a3b7d2","modified":1722500710230},{"_id":"themes/butterfly/scripts/events/stylus.js","hash":"0a336dfe5ed08952fa0df1532421df38a74a20d6","modified":1722500710231},{"_id":"themes/butterfly/scripts/events/welcome.js","hash":"f59e10305fef59ea3e62a7395106c0927582879d","modified":1722500710232},{"_id":"themes/butterfly/scripts/filters/post_lazyload.js","hash":"5ed2d7ef240c927fe1b7a7fb5bf9e55e2bfd55a5","modified":1722500710233},{"_id":"themes/butterfly/scripts/filters/random_cover.js","hash":"0df22d7dbfa766a65cb6032a1f003348f4307cfe","modified":1722500710234},{"_id":"themes/butterfly/scripts/helpers/aside_categories.js","hash":"cdd992c8577d583c237b6aac9f5077d8200879b2","modified":1722500710237},{"_id":"themes/butterfly/scripts/helpers/aside_archives.js","hash":"4f712b4ea383b59a3122683db1d54c04a79ccc5d","modified":1722500710236},{"_id":"themes/butterfly/scripts/events/404.js","hash":"f1d1c378356b776e9b2a8411e6dca88dc8c3245c","modified":1722500710226},{"_id":"themes/butterfly/scripts/helpers/page.js","hash":"c74d6a9b8f71e69447f7847a5f5e81555d68b140","modified":1722500710240},{"_id":"themes/butterfly/scripts/helpers/findArchiveLength.js","hash":"b12895e0765d596494e5526d121de0dd5a7c23d3","modified":1722500710238},{"_id":"themes/butterfly/scripts/helpers/related_post.js","hash":"76343ac8422c9c8539082e77eda6ffee4b877eb2","modified":1722500710241},{"_id":"themes/butterfly/scripts/helpers/series.js","hash":"17c0095bc8d612a268cdcab000b1742dc4c6f811","modified":1722500710243},{"_id":"themes/butterfly/scripts/tag/button.js","hash":"164d5f1c2d1b4cb5a813a6fc574016743a53c019","modified":1722500710244},{"_id":"themes/butterfly/scripts/tag/flink.js","hash":"3ba7677969ff01fab06fc6713455ddc6861f0024","modified":1722500710245},{"_id":"themes/butterfly/scripts/tag/gallery.js","hash":"7ec77b3093f5de67e7032f40a5b12f1389f6f6ff","modified":1722500710247},{"_id":"themes/butterfly/scripts/tag/hide.js","hash":"5d08c3552f7d3c80a724ca628bff66321abe2e5a","modified":1722500710248},{"_id":"themes/butterfly/scripts/tag/inlineImg.js","hash":"c863d2732ce4bdc084f2d0db92f50f80328c1007","modified":1722500710248},{"_id":"themes/butterfly/scripts/tag/label.js","hash":"b013dc0a3d57d2caa18b89263f23871da9ec456d","modified":1722500710248},{"_id":"themes/butterfly/scripts/tag/mermaid.js","hash":"289f85847c58f0b2b7d98a68e370a2896edb8949","modified":1722500710250},{"_id":"themes/butterfly/README_CN.md","hash":"9d729ee2ffc5e5f703ccfbfbbb7b286d59071125","modified":1722500710087},{"_id":"themes/butterfly/scripts/tag/score.js","hash":"35d54adc92e717cc32e13515122b025fd1a98ea2","modified":1722500710252},{"_id":"themes/butterfly/scripts/tag/note.js","hash":"e68d8d21f3a86e3646907a3685550ee20e8d4a9f","modified":1722500710252},{"_id":"themes/butterfly/scripts/tag/timeline.js","hash":"e611074a5a7f489a8b04afac0a3f7f882ce26532","modified":1722500710255},{"_id":"themes/butterfly/scripts/tag/series.js","hash":"dc56e5182dd3813dc977c9bf8556dcc7615e467b","modified":1722500710252},{"_id":"themes/butterfly/scripts/tag/tabs.js","hash":"7c448886f230adb4f4a0208c88fff809abcb5637","modified":1722500710254},{"_id":"themes/butterfly/source/css/index.styl","hash":"b13d96924a5534bff91d75566b196ac87b4fac22","modified":1722500710313},{"_id":"themes/butterfly/scripts/helpers/inject_head_js.js","hash":"b55f71347d2ead097c7f98c0ec792b091433345c","modified":1722500710239},{"_id":"themes/butterfly/README.md","hash":"20a91bea7f7ada8b8195d2abff106a7ce21bba20","modified":1722500710085},{"_id":"themes/butterfly/source/css/var.styl","hash":"950250f66faeb611a67540e0fa6cedbcf5a7a321","modified":1722500710313},{"_id":"themes/butterfly/.github/workflows/stale.yml","hash":"4040c76547e270aaf184e9b219a44ca41bbb1b9f","modified":1722500710082},{"_id":"themes/butterfly/source/img/favicon.png","hash":"3cf89864b4f6c9b532522a4d260a2e887971c92d","modified":1722500710317},{"_id":"themes/butterfly/source/js/main.js","hash":"59cd756a94ecdf3ec7b18f50691a8a6305f7a65a","modified":1722500710321},{"_id":"themes/butterfly/.github/workflows/publish.yml","hash":"e320b40c051bae1549156cd5ea4a51383cf78598","modified":1722500710080},{"_id":"themes/butterfly/source/js/utils.js","hash":"7b871fe0c4456660cff4c7b9cc4ed089adac2caf","modified":1722500710327},{"_id":"themes/butterfly/layout/includes/head/analytics.pug","hash":"c7666a10448edd93f5ace37296051b7670495f1b","modified":1722500710106},{"_id":"themes/butterfly/source/img/avatar.jpg","hash":"cb0941101c6a6b8f762ce6ffc3c948641e7f642f","modified":1722500710316},{"_id":"themes/butterfly/layout/includes/head/config.pug","hash":"39e1ca0a54eb5fd3688a78737417a1aaa50914c9","modified":1722500710108},{"_id":"themes/butterfly/layout/includes/head/config_site.pug","hash":"bd5dd5452e28a4fe94c3241a758ec6f4fdb7a149","modified":1722500710109},{"_id":"themes/butterfly/layout/includes/head/google_adsense.pug","hash":"f29123e603cbbcc6ce277d4e8f600ba67498077c","modified":1722500710109},{"_id":"themes/butterfly/layout/includes/head/pwa.pug","hash":"6dc2c9b85df9ab4f5b554305339fd80a90a6cf43","modified":1722500710113},{"_id":"themes/butterfly/layout/includes/head/site_verification.pug","hash":"5168caadc4cf541f5d6676a9c5e8ae47a948f9ad","modified":1722500710114},{"_id":"themes/butterfly/layout/includes/head/preconnect.pug","hash":"a7c929b90ae52b78b39b1728e3ab0e3db1cb7b9a","modified":1722500710111},{"_id":"themes/butterfly/layout/includes/header/index.pug","hash":"1bef867c799ba158c5417272fb137539951aa120","modified":1722500710117},{"_id":"themes/butterfly/layout/includes/header/nav.pug","hash":"962ee70a35e60a13c31eea47d16b9f98069fe417","modified":1722500710119},{"_id":"themes/butterfly/layout/includes/header/menu_item.pug","hash":"ca8bcd90ad9467819330bfe7c02b76322754bccf","modified":1722500710118},{"_id":"themes/butterfly/layout/includes/header/social.pug","hash":"7a641b5dd45b970e1dafd1433eb32ea149e55cf2","modified":1722500710121},{"_id":"themes/butterfly/layout/includes/header/post-info.pug","hash":"cc99b2dc5c6b1f74391b0da609853ebc11de9610","modified":1722500710120},{"_id":"themes/butterfly/layout/includes/loading/pace.pug","hash":"a6fde4835d6460ce7baf792fd5e1977fad73db25","modified":1722500710127},{"_id":"themes/butterfly/layout/includes/loading/index.pug","hash":"00ae419f527d8225a2dc03d4f977cec737248423","modified":1722500710126},{"_id":"themes/butterfly/layout/includes/loading/fullpage-loading.pug","hash":"766baca6ddce49d1724a02312387b292ff2d0bdc","modified":1722500710125},{"_id":"themes/butterfly/layout/includes/mixins/article-sort.pug","hash":"9155f01d4c644a2e19b2b13b2d3c6d5e34dd0abf","modified":1722500710128},{"_id":"themes/butterfly/layout/includes/page/categories.pug","hash":"5276a8d2835e05bd535fedc9f593a0ce8c3e8437","modified":1722500710131},{"_id":"themes/butterfly/layout/includes/mixins/post-ui.pug","hash":"90eb453b14f6b5c25bfd8d28aa67783603a1411d","modified":1722500710129},{"_id":"themes/butterfly/layout/includes/page/default-page.pug","hash":"e9459f122af7b733398578f9f0f8ab3c5e12a217","modified":1722500710131},{"_id":"themes/butterfly/layout/includes/page/tags.pug","hash":"12be059c536490af216a397e8f2a7abbf6d4610e","modified":1722500710134},{"_id":"themes/butterfly/layout/includes/page/flink.pug","hash":"e37681bc9c169d4220f26ecda2b3d5c02b6b9a0f","modified":1722500710133},{"_id":"themes/butterfly/layout/includes/post/reward.pug","hash":"912df10a053db3135968e92b6fd1a707ee94c968","modified":1722500710138},{"_id":"themes/butterfly/layout/includes/post/post-copyright.pug","hash":"0abad416b1974a17e5be7817931d5fe799180170","modified":1722500710136},{"_id":"themes/butterfly/layout/includes/third-party/aplayer.pug","hash":"e939344fd389aeb11864ee697d5fd9b036d8325f","modified":1722500710146},{"_id":"themes/butterfly/layout/includes/head/Open_Graph.pug","hash":"c8dbdfe6145a0bc6f7691c9551be8169a2698f0a","modified":1722500710105},{"_id":"themes/butterfly/layout/includes/third-party/pangu.pug","hash":"f0898509da70388b5c532f19e762756d74080200","modified":1722500710191},{"_id":"themes/butterfly/layout/includes/widget/card_ad.pug","hash":"a8312b527493dabbadbb1280760168d3bc909a3b","modified":1722500710204},{"_id":"themes/butterfly/layout/includes/third-party/effect.pug","hash":"43014bfc63583d3ee8808d526dd165848c0ed52f","modified":1722500710177},{"_id":"themes/butterfly/layout/includes/third-party/prismjs.pug","hash":"08979afbfecb4476a5ae8e360947b92624d285b8","modified":1722500710194},{"_id":"themes/butterfly/layout/includes/third-party/subtitle.pug","hash":"dfb5e16a7e7106bb20b2ac2d0df1251d0fc79609","modified":1722500710202},{"_id":"themes/butterfly/layout/includes/widget/card_announcement.pug","hash":"21e019bdc3b1e796bb00976bb29af2d51f873624","modified":1722500710205},{"_id":"themes/butterfly/layout/includes/widget/card_bottom_self.pug","hash":"1dba77d250eeebfb6e293d504352c7e9ea31980b","modified":1722500710208},{"_id":"themes/butterfly/layout/includes/widget/card_archives.pug","hash":"73d33b6930e7944187a4b3403daf25d27077a2dd","modified":1722500710206},{"_id":"themes/butterfly/layout/includes/widget/card_author.pug","hash":"ab037bf5794638bd30da4cf7cf106e5d03b5f696","modified":1722500710207},{"_id":"themes/butterfly/layout/includes/widget/card_categories.pug","hash":"66e383b4ef374951eb87dd1bf4cdb7a667193fb5","modified":1722500710209},{"_id":"themes/butterfly/layout/includes/widget/card_newest_comment.pug","hash":"8e22f53886a57a68286970d8af8b4c950fd4a1d7","modified":1722500710210},{"_id":"themes/butterfly/layout/includes/widget/card_post_series.pug","hash":"e0bb72fa0ce15964b11b8fe421cae3432394e35f","modified":1722500710210},{"_id":"themes/butterfly/layout/includes/widget/card_post_toc.pug","hash":"d48d77af1670bd568d784794408bf524a448bfcc","modified":1722500710211},{"_id":"themes/butterfly/layout/includes/widget/card_recent_post.pug","hash":"bb842d2aa6469d65bf06af1372f0a19a9e4ef44c","modified":1722500710214},{"_id":"themes/butterfly/layout/includes/widget/card_tags.pug","hash":"842b772a387b576550fa127030e1c2e9bf65716d","modified":1722500710215},{"_id":"themes/butterfly/layout/includes/widget/index.pug","hash":"8df529f71e25f1c0a00e533de7944ed3d1ba7bd8","modified":1722500710217},{"_id":"themes/butterfly/layout/includes/widget/card_top_self.pug","hash":"7b5ae404a1205546b7de4be42291315cf918f2b3","modified":1722500710215},{"_id":"themes/butterfly/layout/includes/widget/card_webinfo.pug","hash":"12185713f9ca08984fc74e3b69d8cd6828d23da8","modified":1722500710216},{"_id":"themes/butterfly/source/css/_highlight/highlight.styl","hash":"41054740cfbd1357138785464f6859681ca58493","modified":1722500710260},{"_id":"themes/butterfly/source/css/_highlight/theme.styl","hash":"3c178608406c31d768af355ef1d7326da37cc75f","modified":1722500710268},{"_id":"themes/butterfly/source/css/_global/function.styl","hash":"e920dae9ce00177922468db49240f5aca0af4f64","modified":1722500710258},{"_id":"themes/butterfly/source/css/_global/index.styl","hash":"0421da07907b3d98df64239e073b23fbb3f04149","modified":1722500710259},{"_id":"themes/butterfly/source/css/_layout/comments.styl","hash":"fbfce4d67cacd1df22fb73d89d008693f59d9d91","modified":1722500710273},{"_id":"themes/butterfly/source/css/_layout/aside.styl","hash":"aae70ddd126b2e40158e45036abecbfa33cbfbba","modified":1722500710270},{"_id":"themes/butterfly/source/css/_layout/chat.styl","hash":"792a04d36de32f230ca3256ad87a90fe8392f333","modified":1722500710272},{"_id":"themes/butterfly/source/css/_layout/footer.styl","hash":"5e27f7842af82ff7498d4b59787ce9ca90fa9e6f","modified":1722500710275},{"_id":"themes/butterfly/source/css/_layout/loading.styl","hash":"f0b01bbf321c2c24fdccaee367dd9fd448031a72","modified":1722500710277},{"_id":"themes/butterfly/source/css/_layout/pagination.styl","hash":"bd099f7d3adef4b7edd24c0a25a07415b156e587","modified":1722500710278},{"_id":"themes/butterfly/source/css/_layout/head.styl","hash":"dd5d9a5631b682610ea699541b8246ceaa56fddb","modified":1723206391886},{"_id":"themes/butterfly/layout/includes/third-party/pjax.pug","hash":"9b734d99963f3e7f562597dcf60485ccbf6e961c","modified":1722500710192},{"_id":"themes/butterfly/source/css/_layout/post.styl","hash":"7ae27854a737a02eca89b0b92db94cb298fef59e","modified":1722500710280},{"_id":"themes/butterfly/source/css/_layout/relatedposts.styl","hash":"6dcf19c0933c8828a439f801b0f4b256447dec07","modified":1722500710281},{"_id":"themes/butterfly/source/css/_layout/reward.styl","hash":"c0b11a1a5f52e3a6af4e312a8134c93eda18a7dd","modified":1722500710281},{"_id":"themes/butterfly/source/css/_layout/third-party.styl","hash":"15ea7564b2e3bf46bc91fb6e49c94d057b37caaf","modified":1722500710283},{"_id":"themes/butterfly/source/css/_layout/sidebar.styl","hash":"80ee9d0bfe5d38aac1f0cdcea5fc88b71d310041","modified":1722500710283},{"_id":"themes/butterfly/source/css/_mode/readmode.styl","hash":"a22fd15048d21452f0015d0765d295d730203308","modified":1723078297080},{"_id":"themes/butterfly/source/css/_mode/darkmode.styl","hash":"dbc855795a881f8c805bf5c9c5c4d5d542a648ec","modified":1722500710286},{"_id":"themes/butterfly/source/css/_page/404.styl","hash":"a7223a8fcc4fa7b81e552c9a2554be7df9de312e","modified":1722500710289},{"_id":"themes/butterfly/source/css/_page/categories.styl","hash":"68bc8cbea25dbb3cdc170f09f9b43ce130547717","modified":1722500710292},{"_id":"themes/butterfly/source/css/_page/archives.styl","hash":"5dd1ba997741d02894ff846eda939ad8051c0bb2","modified":1722500710290},{"_id":"themes/butterfly/source/css/_page/flink.styl","hash":"ecc2b2e28c179eb9406fc2c6f00e141078249cdd","modified":1722500710294},{"_id":"themes/butterfly/source/css/_page/common.styl","hash":"df7a51fcabbadab5aa31770e3202a47c9599bbb7","modified":1722500710293},{"_id":"themes/butterfly/source/css/_page/tags.styl","hash":"9e35f91847773b915c74a78b8aa66c7bdb950ad0","modified":1722500710296},{"_id":"themes/butterfly/source/css/_page/homepage.styl","hash":"a977cd8161ef4d6ddd5293e81403519076657430","modified":1722500710295},{"_id":"themes/butterfly/source/img/404.jpg","hash":"fb4489bc1d30c93d28f7332158c1c6c1416148de","modified":1722500710315},{"_id":"themes/butterfly/source/css/_search/index.styl","hash":"0b23010154e19f37f0c4af0110f9f834d6d41a13","modified":1722500710298},{"_id":"themes/butterfly/source/css/_search/local-search.styl","hash":"8a53d7ba5ca2f5eb4124b684e7845b648583f658","modified":1722500710301},{"_id":"themes/butterfly/source/css/_tags/button.styl","hash":"62da1de0d5b8453fcecbfacddb16985265638ba5","modified":1722500710302},{"_id":"themes/butterfly/source/css/_tags/gallery.styl","hash":"3e9355b76f87e2ee90f652855282b37ab5ae0b3e","modified":1722500710304},{"_id":"themes/butterfly/source/css/_tags/hexo.styl","hash":"985b183db7b7bfd8f9bdb60494549fb7f850348b","modified":1722500710305},{"_id":"themes/butterfly/source/css/_tags/hide.styl","hash":"b7cf7753479fcf2fe07287ffdb0e568adbba4c18","modified":1722500710306},{"_id":"themes/butterfly/source/css/_tags/note.styl","hash":"4929382bd60788d34752a66e2fe764ef797a72a0","modified":1722500710308},{"_id":"themes/butterfly/source/css/_tags/inlineImg.styl","hash":"5a873d01fabebcf7ddf7a6b1c2e2e5e2714097f4","modified":1722500710307},{"_id":"themes/butterfly/source/css/_tags/label.styl","hash":"2f83bd145b870d80d4b18b0ac603235229a5694e","modified":1722500710307},{"_id":"themes/butterfly/source/css/_tags/tabs.styl","hash":"353b95f9a6c2c1e777d978118cb61f909ccbf89c","modified":1722500710309},{"_id":"themes/butterfly/source/img/friend_404.gif","hash":"8d2d0ebef70a8eb07329f57e645889b0e420fa48","modified":1722500710319},{"_id":"themes/butterfly/source/css/_tags/timeline.styl","hash":"07ea7134db7a66c87658116f089fb1a2a6906563","modified":1722500710310},{"_id":"themes/butterfly/source/css/_third-party/normalize.min.css","hash":"8549829fb7d3c21cd9e119884962e8c463a4a267","modified":1722500710312},{"_id":"themes/butterfly/source/js/search/local-search.js","hash":"ab3904451ae1d78903424b8b2ef815c8571e1749","modified":1722500710325},{"_id":"themes/butterfly/layout/includes/third-party/abcjs/abcjs.pug","hash":"8f95aca305b56ccd7c8c7367b03d26db816ebd5f","modified":1722500710143},{"_id":"themes/butterfly/layout/includes/third-party/card-post-count/disqus.pug","hash":"d6fff5a7f84c8b09f282f9ddc0020a68a8aac9ea","modified":1722500710148},{"_id":"themes/butterfly/layout/includes/third-party/abcjs/index.pug","hash":"58f37823f6cd9a194fb50f7ca7c2233e49939034","modified":1722500710144},{"_id":"themes/butterfly/source/css/_layout/rightside.styl","hash":"0322237e762db401d7b4aa33168d0b9334a9ec26","modified":1722500710282},{"_id":"themes/butterfly/layout/includes/third-party/card-post-count/index.pug","hash":"846cabae287ae31b3bbfac3da022475713dd5ecc","modified":1722500710151},{"_id":"themes/butterfly/layout/includes/third-party/card-post-count/artalk.pug","hash":"b03ee8625149191f9d5d057bbc9824b68d8dd0c4","modified":1722500710147},{"_id":"themes/butterfly/layout/includes/third-party/card-post-count/remark42.pug","hash":"716dc463fe4ef5112e7018ed60804125fdfa5cad","modified":1722500710151},{"_id":"themes/butterfly/layout/includes/third-party/card-post-count/valine.pug","hash":"cd4fc9c5a61608a5dedf645c1295430a1623040f","modified":1722500710153},{"_id":"themes/butterfly/layout/includes/third-party/card-post-count/fb.pug","hash":"4b98145d6584d586cabf033493282afc72ae816a","modified":1722500710149},{"_id":"themes/butterfly/layout/includes/third-party/card-post-count/twikoo.pug","hash":"7e233f872aea6fd6beccdc9efd86b1bf9ec9f12d","modified":1722500710152},{"_id":"themes/butterfly/layout/includes/third-party/card-post-count/waline.pug","hash":"fd2320ee25507bb8ef49f932c2d170586b44ea4d","modified":1722500710154},{"_id":"themes/butterfly/layout/includes/third-party/chat/chatra.pug","hash":"08a85e52fc800d3562df869e5e2613313e76fce6","modified":1722500710156},{"_id":"themes/butterfly/layout/includes/third-party/chat/crisp.pug","hash":"09d2ab2570b67e6f09244a898ccab5567cb82ace","modified":1722500710156},{"_id":"themes/butterfly/layout/includes/third-party/chat/index.pug","hash":"1157118db9f5d7c0c5a0fc7c346f6e934ca00d52","modified":1722500710159},{"_id":"themes/butterfly/layout/includes/third-party/chat/daovoice.pug","hash":"0d960849d5b05d27ec87627b983ca35f2411b9e8","modified":1722500710158},{"_id":"themes/butterfly/layout/includes/third-party/chat/messenger.pug","hash":"799da8f3015e6fe440681b21644bcb3810a5518c","modified":1722500710160},{"_id":"themes/butterfly/layout/includes/third-party/chat/tidio.pug","hash":"6d40b521eec4136f6742c548a4445ed593470b1b","modified":1722500710161},{"_id":"themes/butterfly/layout/includes/third-party/comments/artalk.pug","hash":"5373b822aa72ddb96f2f1f4baf6c058b40d705d6","modified":1722500710163},{"_id":"themes/butterfly/layout/includes/third-party/comments/disqus.pug","hash":"364d1fd655baca9132038ef1e312abde2c0bc7de","modified":1722500710164},{"_id":"themes/butterfly/layout/includes/third-party/comments/disqusjs.pug","hash":"f78c9c20c86d58c7cf099f6f8d6097103d7d43e5","modified":1722500710165},{"_id":"themes/butterfly/layout/includes/third-party/comments/giscus.pug","hash":"1eab7ca1cb16c6786f9c3ca0efef8cc15e444ab4","modified":1722500710167},{"_id":"themes/butterfly/layout/includes/third-party/comments/facebook_comments.pug","hash":"11f5dca1432e59f22955aaf4ac3e9de6b286d887","modified":1722500710166},{"_id":"themes/butterfly/layout/includes/third-party/comments/gitalk.pug","hash":"1c86c8fc1a28514a02a1f6a25ca9ec05eb3955b7","modified":1722500710168},{"_id":"themes/butterfly/layout/includes/third-party/comments/index.pug","hash":"db6713d2b90eb8183f86ac92c26761a8501c0ddb","modified":1722500710169},{"_id":"themes/butterfly/layout/includes/third-party/comments/js.pug","hash":"3abbaaa4ea575c45b3cebffd40bad1acc6ffce84","modified":1722500710170},{"_id":"themes/butterfly/layout/includes/third-party/comments/livere.pug","hash":"09c2ef4bc6d005f96dfa48b1d9af1ec095c5266d","modified":1722500710171},{"_id":"themes/butterfly/layout/includes/third-party/comments/remark42.pug","hash":"7f450664e6323a076ae59c393b0f22167cfa82e5","modified":1722500710172},{"_id":"themes/butterfly/layout/includes/third-party/comments/twikoo.pug","hash":"9942a903227350960c1d0716e59516ae79ac24a8","modified":1722500710173},{"_id":"themes/butterfly/layout/includes/third-party/comments/utterances.pug","hash":"b65a42167df5fb07e2a63f312a58c321d3112a90","modified":1722500710174},{"_id":"themes/butterfly/layout/includes/third-party/comments/valine.pug","hash":"4ed7c74087e81c6fcaf4fca7dced58b4e19f4cb1","modified":1722500710175},{"_id":"themes/butterfly/layout/includes/third-party/math/index.pug","hash":"2afa4c21dd19890f47fb568cfb0d90efb676a253","modified":1722500710179},{"_id":"themes/butterfly/layout/includes/third-party/math/katex.pug","hash":"f0d3eddd2bed68e5517274b3530bfe0fa5057d8e","modified":1722500710180},{"_id":"themes/butterfly/layout/includes/third-party/comments/waline.pug","hash":"efb72547fc2d470a124f5636391128dc59627498","modified":1722500710176},{"_id":"themes/butterfly/layout/includes/third-party/math/mathjax.pug","hash":"bb944185f4bb9f9a9b9d70ee215f66ccd6d4c6cf","modified":1722500710181},{"_id":"themes/butterfly/layout/includes/third-party/math/mermaid.pug","hash":"c682e4d61017fb0dd2e837bfcc242371f1a13364","modified":1722500710182},{"_id":"themes/butterfly/layout/includes/third-party/newest-comments/artalk.pug","hash":"2e36fac4791e99844cd56676898be0dbf5eb4e99","modified":1722500710184},{"_id":"themes/butterfly/layout/includes/third-party/newest-comments/index.pug","hash":"f8b65460c399973090c1fb7ab81e3708c252e7cc","modified":1722500710187},{"_id":"themes/butterfly/layout/includes/third-party/newest-comments/disqus-comment.pug","hash":"d8898e427acd91ceb97d6a7ee3acb011ca86b9fc","modified":1722500710184},{"_id":"themes/butterfly/layout/includes/third-party/newest-comments/remark42.pug","hash":"a4e52188b6effeee1df2a01dcbf4105de76a61a8","modified":1722500710188},{"_id":"themes/butterfly/layout/includes/third-party/newest-comments/twikoo-comment.pug","hash":"17520a86de12ae585289463c066d3ac91b78a2ff","modified":1722500710188},{"_id":"themes/butterfly/layout/includes/third-party/newest-comments/valine.pug","hash":"ecfff55b2c7f6d87ce4d5028fdf9f8c0bf155c73","modified":1722500710189},{"_id":"themes/butterfly/layout/includes/third-party/newest-comments/waline.pug","hash":"0544d91c0bc9e26e0fe1b5ff490f4a8540ed1ee1","modified":1722500710191},{"_id":"themes/butterfly/layout/includes/third-party/newest-comments/github-issues.pug","hash":"fc8814bd016d039874ec2fc24dcb78587892e2a6","modified":1722500710186},{"_id":"themes/butterfly/layout/includes/third-party/search/algolia.pug","hash":"90338ac4cd114d324fe1caaaeea8be9ca05d6a46","modified":1722500710195},{"_id":"themes/butterfly/layout/includes/third-party/search/index.pug","hash":"3adcf28a8d205ea3ee19828eda0e668702fac07a","modified":1722500710197},{"_id":"themes/butterfly/layout/includes/third-party/search/docsearch.pug","hash":"52a06a2e039f44383085333cac69f3f4e7d0ad3a","modified":1722500710196},{"_id":"themes/butterfly/layout/includes/third-party/search/local-search.pug","hash":"420a86e73d0d748ac234fd00d06d9e433ca5e3f2","modified":1722500710198},{"_id":"themes/butterfly/layout/includes/third-party/share/addtoany.pug","hash":"1f02a26730e5f36cc2dfec7ff4d5c93a099ed5ba","modified":1722500710199},{"_id":"themes/butterfly/layout/includes/third-party/share/index.pug","hash":"c16ee69b5ca8db016db0508d014ae0867c4ce929","modified":1722500710201},{"_id":"themes/butterfly/layout/includes/third-party/share/share-js.pug","hash":"8106bd031586f075a994956ee4438eb13be25d7b","modified":1722500710202},{"_id":"themes/butterfly/source/css/_highlight/highlight/diff.styl","hash":"6e77f1ca0cfb0db6b028f5c0238780e66d344f3d","modified":1722500710263},{"_id":"themes/butterfly/source/css/_highlight/highlight/index.styl","hash":"fc702a4614d0562a381907b083f71ba63d301d86","modified":1722500710264},{"_id":"themes/butterfly/source/css/_search/algolia.styl","hash":"37db99299af380e9111dce2a78a5049b301b13e0","modified":1722500710298},{"_id":"themes/butterfly/source/js/tw_cn.js","hash":"d776c670e4076ad6049dbb64cdee7a734b51d37f","modified":1722500710326},{"_id":"themes/butterfly/source/css/_highlight/prismjs/diff.styl","hash":"1309292f1c8c53d96cd7333507b106bcc24ca8fc","modified":1722500710265},{"_id":"themes/butterfly/source/js/search/algolia.js","hash":"a7c2fe73cc05ad3525909b86ad0ede1a9f2d3b48","modified":1722500710323},{"_id":"themes/butterfly/source/css/_highlight/prismjs/index.styl","hash":"01ff9e77eb1bd454bec65a6ff5972c8e219bc708","modified":1722500710267},{"_id":"source/img/000001.png","hash":"ad86c3b72174364d462bdab1d09540bd79eb123c","modified":1725979378674},{"_id":"source/img/machinelearning/cros-valid.png","hash":"8f9b204b651f93c17ad0856daa628d6abe985d97","modified":1736768886866},{"_id":"themes/butterfly/source/css/_highlight/prismjs/line-number.styl","hash":"7c9cc43e1d2577f7151039d58e603c30860fd281","modified":1722500710267},{"_id":"source/img/yiyuan.png","hash":"817a89509a8ebcddff6b369979d53ecf44a30a9f","modified":1722998234119},{"_id":"source/img/peiqian.png","hash":"2f077f1fff014ee448cd58b57ff83901702e2d88","modified":1723000686874},{"_id":"source/img/dingyue.png","hash":"c6afcd1124d84f07caeefcb895be3f3a5b301678","modified":1723001642809},{"_id":"source/img/site01.jpg","hash":"d93084432feb123fd5d781210c3a2c4db43c10ec","modified":1722524985872},{"_id":"public/search.xml","hash":"c74441d8486d2c420c4a9ec910968232d6c9734e","modified":1736846566584},{"_id":"public/categories/index.html","hash":"4cdbd3cb944cfabfbed8e61e3a37b5c9b83b7396","modified":1736846566584},{"_id":"public/archives/page/2/index.html","hash":"63e4f26007a93f524053a1e0cb6bc51bd6d8a238","modified":1736846566584},{"_id":"public/archives/2024/page/2/index.html","hash":"cef75c1ad6ecc3546d9c3b3d85d5fa5abc4496e4","modified":1736846566584},{"_id":"public/archives/2024/08/index.html","hash":"3a1fe1a2e2f8c7b522abb2288f03b6c860fcd961","modified":1736846566584},{"_id":"public/archives/2024/09/index.html","hash":"57f8c6aece22366a588aa014929ce938fc817834","modified":1736846566584},{"_id":"public/archives/2025/index.html","hash":"9570ac1a063dceff1c65cbb86c23d45d5ba13c16","modified":1736846566584},{"_id":"public/archives/2025/01/index.html","hash":"4992dcc3b763a79da912785b626af031dd0b51d2","modified":1736846566584},{"_id":"public/categories/古文观止/index.html","hash":"38a7c71204d6250eeb64835da114d81d29a96bd3","modified":1736846566584},{"_id":"public/tags/machinelearning/index.html","hash":"b61b88237972d9339ea47985786d95b867621ccd","modified":1736846566584},{"_id":"public/tags/uniapp/index.html","hash":"38560f6232dc61e37896693dac7f6fd62c442e17","modified":1736846566584},{"_id":"public/tags/古文观止/index.html","hash":"ac2e51c1948e633ea366d285d32bacd49a084be9","modified":1736846566584},{"_id":"public/tags/网络代理/index.html","hash":"30586ee6155b79d03b974461ec191617423ee9e9","modified":1736846566584},{"_id":"public/tags/index.html","hash":"993995c0a7fbb2c2fdac52a97c3c5cbb192666e1","modified":1736846566584},{"_id":"public/about/index.html","hash":"c9c4d571d48afaa58272256a09013db6fba5e325","modified":1736846566584},{"_id":"public/music/index.html","hash":"f976d20fe5d54263abb781b080d605cf1b9bdf12","modified":1736846566584},{"_id":"public/link/index.html","hash":"2516665d0cddc0f91ff97869fcad08a82a591c69","modified":1736846566584},{"_id":"public/movies/index.html","hash":"d99e71fca8a463d766356d8977d83d1b5d9eaa8c","modified":1736846566584},{"_id":"public/posts/29139.html","hash":"536395be9bf8e4760b17d09c676f6a77fe1fd976","modified":1736846566584},{"_id":"public/posts/61253.html","hash":"f923eb1311298fb34787e401568b2f5e041c7677","modified":1736846566584},{"_id":"public/posts/61251.html","hash":"b172067125d2ea1d72a67b045f098fbcde1b38e1","modified":1736846566584},{"_id":"public/posts/61252.html","hash":"3cbe1345d3737f098d0bebee66ec05d3b4a9555e","modified":1736846566584},{"_id":"public/posts/16107.html","hash":"34386a72d3dfd4c6b091f8aac2072e39eaed6feb","modified":1736846566584},{"_id":"public/posts/34849.html","hash":"7b7588271de905a37a1fcdf73424779cf3373a66","modified":1736846566584},{"_id":"public/posts/58638.html","hash":"a7f6b8cb183cfce43486303b778533e11bf85e7f","modified":1736846566584},{"_id":"public/posts/41168.html","hash":"d40b9a14d1e4b6ed6f7fbcad5b14cce52cb70b51","modified":1736846566584},{"_id":"public/posts/14011.html","hash":"a1dc0b992ff4c4c477b38d3c88c21f97225a0987","modified":1736846566584},{"_id":"public/posts/58817.html","hash":"fa05234a4f30849f8c1307ae8d3ba122215061e5","modified":1736846566584},{"_id":"public/posts/33957.html","hash":"9a5a5c409a390417117b576f178da8caa98f9220","modified":1736846566584},{"_id":"public/posts/47807.html","hash":"092726e6acee2bacc8f0f31382f914aba7459dc7","modified":1736846566584},{"_id":"public/posts/1441.html","hash":"0292564cd4084af24d2b19cd872897d4039cb9a5","modified":1736846566584},{"_id":"public/archives/index.html","hash":"f75ae491b1e1816d291da92a8993e0f21111ae85","modified":1736846566584},{"_id":"public/archives/2024/index.html","hash":"2a435300c19f4c09ebedf0e9a684cf8c4cb63d15","modified":1736846566584},{"_id":"public/index.html","hash":"b5a4f632368315255b3f8394b71fbb27ac0d3bae","modified":1736846566584},{"_id":"public/page/2/index.html","hash":"bb806417c4a65025c66264aab257b801dd09843b","modified":1736846566584},{"_id":"public/img/avatar.jpg","hash":"cb0941101c6a6b8f762ce6ffc3c948641e7f642f","modified":1736846566584},{"_id":"public/img/404.jpg","hash":"fb4489bc1d30c93d28f7332158c1c6c1416148de","modified":1736846566584},{"_id":"public/img/favicon.png","hash":"3cf89864b4f6c9b532522a4d260a2e887971c92d","modified":1736846566584},{"_id":"public/img/friend_404.gif","hash":"8d2d0ebef70a8eb07329f57e645889b0e420fa48","modified":1736846566584},{"_id":"public/img/machinelearning/kfold-skfold.png","hash":"ab841f5412b7ea773468a3facff643df68a88c01","modified":1736846566584},{"_id":"public/img/machinelearning/knn-01.png","hash":"2a931981d1d5f72d6b42b39b8ef313569eab853e","modified":1736846566584},{"_id":"public/css/var.css","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1736846566584},{"_id":"public/js/search/local-search.js","hash":"e1f60ebac53a3f596fd0a4769b4f9275c48c6542","modified":1736846566584},{"_id":"public/js/utils.js","hash":"8e6b48d294e7aeaba8ff6348c43b2271cf865547","modified":1736846566584},{"_id":"public/js/search/algolia.js","hash":"108988d046da9a4716148df43b3975217c8ceaae","modified":1736846566584},{"_id":"public/css/index.css","hash":"a86592daf1fcadb01092b449a0eb5100fc2351fb","modified":1736846566584},{"_id":"public/js/main.js","hash":"0dac585446445e0c419b86eec5580bc9b0657dc6","modified":1736846566584},{"_id":"public/js/tw_cn.js","hash":"f8d2e3f31468991a7f5171cbfdb157dfb86d3372","modified":1736846566584},{"_id":"public/img/machinelearning/cros-valid.png","hash":"8f9b204b651f93c17ad0856daa628d6abe985d97","modified":1736846566584},{"_id":"public/img/000001.png","hash":"ad86c3b72174364d462bdab1d09540bd79eb123c","modified":1736846566584},{"_id":"public/img/yiyuan.png","hash":"817a89509a8ebcddff6b369979d53ecf44a30a9f","modified":1736846566584},{"_id":"public/img/peiqian.png","hash":"2f077f1fff014ee448cd58b57ff83901702e2d88","modified":1736846566584},{"_id":"public/img/dingyue.png","hash":"c6afcd1124d84f07caeefcb895be3f3a5b301678","modified":1736846566584},{"_id":"public/img/site01.jpg","hash":"d93084432feb123fd5d781210c3a2c4db43c10ec","modified":1736846566584}],"Category":[{"name":"古文观止","_id":"cm5w9lrdp000htgahcgif26p4"}],"Data":[{"_id":"link","data":[{"class_name":"友情鏈接","class_desc":"那些人,那些事","link_list":[{"name":"Hexo","link":"https://hexo.io/zh-tw/","avatar":"https://d33wubrfki0l68.cloudfront.net/6657ba50e702d84afb32fe846bed54fba1a77add/827ae/logo.svg","descr":"快速、簡單且強大的網誌框架"}]},{"class_name":"網站","class_desc":"值得推薦的網站","link_list":[{"name":"Youtube","link":"https://www.youtube.com/","avatar":"https://i.loli.net/2020/05/14/9ZkGg8v3azHJfM1.png","descr":"視頻網站"},{"name":"Weibo","link":"https://www.weibo.com/","avatar":"https://i.loli.net/2020/05/14/TLJBum386vcnI1P.png","descr":"中國最大社交分享平台"},{"name":"Twitter","link":"https://twitter.com/","avatar":"https://i.loli.net/2020/05/14/5VyHPQqR6LWF39a.png","descr":"社交分享平台"}]}]}],"Page":[{"title":"About me","date":"2024-08-10T02:35:41.000Z","_content":"\n落花飞舞,翩若惊鸿。\n","source":"about/index.md","raw":"---\ntitle: About me\ndate: 2024-08-10 10:35:41\n---\n\n落花飞舞,翩若惊鸿。\n","updated":"2024-08-10T02:38:14.626Z","path":"about/index.html","comments":1,"layout":"page","_id":"cm5w9lrd90000tgah6s394dm1","content":"<p>落花飞舞,翩若惊鸿。</p>\n","cover":false,"excerpt":"","more":"<p>落花飞舞,翩若惊鸿。</p>\n"},{"title":"categories","date":"2024-07-31T00:33:49.000Z","aside":false,"top_img":false,"type":"categories","_content":"\n### category","source":"categories/index.md","raw":"---\ntitle: categories\ndate: 2024-07-31 08:33:49\naside: false\ntop_img: false\ntype: \"categories\"\n---\n\n### category","updated":"2024-07-31T06:37:23.090Z","path":"categories/index.html","comments":1,"layout":"page","_id":"cm5w9lrdg0002tgahhfj95eri","content":"<h3 id=\"category\"><a href=\"#category\" class=\"headerlink\" title=\"category\"></a>category</h3>","cover":false,"excerpt":"","more":"<h3 id=\"category\"><a href=\"#category\" class=\"headerlink\" title=\"category\"></a>category</h3>"},{"title":"tags","date":"2024-07-31T00:32:38.000Z","type":"tags","comments":0,"top_img":false,"_content":"","source":"tags/index.md","raw":"---\ntitle: tags\ndate: 2024-07-31 08:32:38\ntype: \"tags\"\ncomments: false\ntop_img: false\n---\n","updated":"2024-07-31T00:33:00.076Z","path":"tags/index.html","layout":"page","_id":"cm5w9lrdh0004tgah1cwhcbiv","content":"","cover":false,"excerpt":"","more":""},{"title":"Music","date":"2024-08-10T02:40:19.000Z","_content":"","source":"music/index.md","raw":"---\ntitle: Music\ndate: 2024-08-10 10:40:19\n---\n","updated":"2024-08-10T02:40:19.897Z","path":"music/index.html","comments":1,"layout":"page","_id":"cm5w9lrdj0006tgaha0vu4yha","content":"","cover":false,"excerpt":"","more":""},{"title":"link","date":"2024-08-10T02:42:35.000Z","type":"link","_content":"","source":"link/index.md","raw":"---\ntitle: link\ndate: 2024-08-10 10:42:35\ntype: \"link\"\n---\n","updated":"2024-08-10T02:42:48.927Z","path":"link/index.html","comments":1,"layout":"page","_id":"cm5w9lrdl0009tgah5j9mfltg","content":"","cover":false,"excerpt":"","more":""},{"title":"Movies","date":"2024-08-10T02:40:33.000Z","_content":"","source":"movies/index.md","raw":"---\ntitle: Movies\ndate: 2024-08-10 10:40:33\n---\n","updated":"2024-08-10T02:40:33.715Z","path":"movies/index.html","comments":1,"layout":"page","_id":"cm5w9lrdm000btgah0epg77s3","content":"","cover":false,"excerpt":"","more":""}],"Post":[{"title":"script","abbrlink":34849,"date":"2024-08-17T03:09:24.000Z","_content":"\n### 查看CPU、内存使用率\n```bash\n#!/bin/bash\n\n# 定义颜色\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[0;33m'\nBLUE='\\033[0;34m'\nNC='\\033[0m' # 无颜色\n\nwhile true; do\n # 获取所有进程的CPU使用率和内存使用率\n cpu_usage=$(ps aux | awk '{sum_cpu += $3} END {print sum_cpu}')\n mem_usage=$(ps aux | awk '{sum_mem += $4} END {print sum_mem}')\n \n # 打印结果,带有时间戳、分隔线和颜色高亮\n echo -e \"${BLUE}==============================${NC}\"\n echo -e \"${YELLOW}Timestamp: $(date)${NC}\"\n echo -e \"${BLUE}==============================${NC}\"\n echo -e \"${GREEN}Total CPU usage: ${RED}$cpu_usage%${NC}\"\n echo -e \"${GREEN}Total Memory usage: ${RED}$mem_usage%${NC}\"\n echo -e \"${BLUE}==============================${NC}\"\n \n # 等待5秒后再次执行\n sleep 5\ndone\n\n```\n**保存脚本到/usr/local/bin目录下**\n```bash\n mv usage.sh /usr/local/bin/usage\n```\n\n### Shell脚本编写的基本信息\n\n```bash\n#! /bin/bash\n# -------------------------------------------------\n# Filename: test.sh\n# Version: 1.0\n# Date: 2024/05/02\n# Author: shenjianZ\n# Email: shenjianZLT@gmail.com\n# Website: https://blog.shenjianl.cn\n# Description: this is a test shell\n# CopyRight: 2024 All rights reserved shenjianZ\n# License GPL\n# ------------------------------------------------\n\n\n# Your script logic goes here\n```","source":"_posts/linux/script.md","raw":"---\ntitle: script\nabbrlink: 34849\ndate: 2024-08-17 11:09:24\ntags:\n---\n\n### 查看CPU、内存使用率\n```bash\n#!/bin/bash\n\n# 定义颜色\nRED='\\033[0;31m'\nGREEN='\\033[0;32m'\nYELLOW='\\033[0;33m'\nBLUE='\\033[0;34m'\nNC='\\033[0m' # 无颜色\n\nwhile true; do\n # 获取所有进程的CPU使用率和内存使用率\n cpu_usage=$(ps aux | awk '{sum_cpu += $3} END {print sum_cpu}')\n mem_usage=$(ps aux | awk '{sum_mem += $4} END {print sum_mem}')\n \n # 打印结果,带有时间戳、分隔线和颜色高亮\n echo -e \"${BLUE}==============================${NC}\"\n echo -e \"${YELLOW}Timestamp: $(date)${NC}\"\n echo -e \"${BLUE}==============================${NC}\"\n echo -e \"${GREEN}Total CPU usage: ${RED}$cpu_usage%${NC}\"\n echo -e \"${GREEN}Total Memory usage: ${RED}$mem_usage%${NC}\"\n echo -e \"${BLUE}==============================${NC}\"\n \n # 等待5秒后再次执行\n sleep 5\ndone\n\n```\n**保存脚本到/usr/local/bin目录下**\n```bash\n mv usage.sh /usr/local/bin/usage\n```\n\n### Shell脚本编写的基本信息\n\n```bash\n#! /bin/bash\n# -------------------------------------------------\n# Filename: test.sh\n# Version: 1.0\n# Date: 2024/05/02\n# Author: shenjianZ\n# Email: shenjianZLT@gmail.com\n# Website: https://blog.shenjianl.cn\n# Description: this is a test shell\n# CopyRight: 2024 All rights reserved shenjianZ\n# License GPL\n# ------------------------------------------------\n\n\n# Your script logic goes here\n```","slug":"linux/script","published":1,"updated":"2024-08-18T16:05:45.731Z","comments":1,"layout":"post","photos":[],"_id":"cm5w9lrdc0001tgah0jou53lf","content":"<h3 id=\"查看CPU、内存使用率\"><a href=\"#查看CPU、内存使用率\" class=\"headerlink\" title=\"查看CPU、内存使用率\"></a>查看CPU、内存使用率</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#!/bin/bash</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 定义颜色</span></span><br><span class=\"line\">RED=<span class=\"string\">'\\033[0;31m'</span></span><br><span class=\"line\">GREEN=<span class=\"string\">'\\033[0;32m'</span></span><br><span class=\"line\">YELLOW=<span class=\"string\">'\\033[0;33m'</span></span><br><span class=\"line\">BLUE=<span class=\"string\">'\\033[0;34m'</span></span><br><span class=\"line\">NC=<span class=\"string\">'\\033[0m'</span> <span class=\"comment\"># 无颜色</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">while</span> <span class=\"literal\">true</span>; <span class=\"keyword\">do</span></span><br><span class=\"line\"> <span class=\"comment\"># 获取所有进程的CPU使用率和内存使用率</span></span><br><span class=\"line\"> cpu_usage=$(ps aux | awk <span class=\"string\">'{sum_cpu += $3} END {print sum_cpu}'</span>)</span><br><span class=\"line\"> mem_usage=$(ps aux | awk <span class=\"string\">'{sum_mem += $4} END {print sum_mem}'</span>)</span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"comment\"># 打印结果,带有时间戳、分隔线和颜色高亮</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> -e <span class=\"string\">"<span class=\"variable\">${BLUE}</span>==============================<span class=\"variable\">${NC}</span>"</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> -e <span class=\"string\">"<span class=\"variable\">${YELLOW}</span>Timestamp: <span class=\"subst\">$(date)</span><span class=\"variable\">${NC}</span>"</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> -e <span class=\"string\">"<span class=\"variable\">${BLUE}</span>==============================<span class=\"variable\">${NC}</span>"</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> -e <span class=\"string\">"<span class=\"variable\">${GREEN}</span>Total CPU usage: <span class=\"variable\">${RED}</span><span class=\"variable\">$cpu_usage</span>%<span class=\"variable\">${NC}</span>"</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> -e <span class=\"string\">"<span class=\"variable\">${GREEN}</span>Total Memory usage: <span class=\"variable\">${RED}</span><span class=\"variable\">$mem_usage</span>%<span class=\"variable\">${NC}</span>"</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> -e <span class=\"string\">"<span class=\"variable\">${BLUE}</span>==============================<span class=\"variable\">${NC}</span>"</span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"comment\"># 等待5秒后再次执行</span></span><br><span class=\"line\"> <span class=\"built_in\">sleep</span> 5</span><br><span class=\"line\"><span class=\"keyword\">done</span></span><br><span class=\"line\"></span><br></pre></td></tr></table></figure>\n<p><strong>保存脚本到/usr/local/bin目录下</strong></p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">mv</span> usage.sh /usr/local/bin/usage</span><br></pre></td></tr></table></figure>\n\n<h3 id=\"Shell脚本编写的基本信息\"><a href=\"#Shell脚本编写的基本信息\" class=\"headerlink\" title=\"Shell脚本编写的基本信息\"></a>Shell脚本编写的基本信息</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#! /bin/bash</span></span><br><span class=\"line\"><span class=\"comment\"># -------------------------------------------------</span></span><br><span class=\"line\"><span class=\"comment\"># Filename: test.sh</span></span><br><span class=\"line\"><span class=\"comment\"># Version: 1.0</span></span><br><span class=\"line\"><span class=\"comment\"># Date: 2024/05/02</span></span><br><span class=\"line\"><span class=\"comment\"># Author: shenjianZ</span></span><br><span class=\"line\"><span class=\"comment\"># Email: shenjianZLT@gmail.com</span></span><br><span class=\"line\"><span class=\"comment\"># Website: https://blog.shenjianl.cn</span></span><br><span class=\"line\"><span class=\"comment\"># Description: this is a test shell</span></span><br><span class=\"line\"><span class=\"comment\"># CopyRight: 2024 All rights reserved shenjianZ</span></span><br><span class=\"line\"><span class=\"comment\"># License GPL</span></span><br><span class=\"line\"><span class=\"comment\"># ------------------------------------------------</span></span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># Your script logic goes here</span></span><br></pre></td></tr></table></figure>","cover":false,"excerpt":"","more":"<h3 id=\"查看CPU、内存使用率\"><a href=\"#查看CPU、内存使用率\" class=\"headerlink\" title=\"查看CPU、内存使用率\"></a>查看CPU、内存使用率</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#!/bin/bash</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 定义颜色</span></span><br><span class=\"line\">RED=<span class=\"string\">'\\033[0;31m'</span></span><br><span class=\"line\">GREEN=<span class=\"string\">'\\033[0;32m'</span></span><br><span class=\"line\">YELLOW=<span class=\"string\">'\\033[0;33m'</span></span><br><span class=\"line\">BLUE=<span class=\"string\">'\\033[0;34m'</span></span><br><span class=\"line\">NC=<span class=\"string\">'\\033[0m'</span> <span class=\"comment\"># 无颜色</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">while</span> <span class=\"literal\">true</span>; <span class=\"keyword\">do</span></span><br><span class=\"line\"> <span class=\"comment\"># 获取所有进程的CPU使用率和内存使用率</span></span><br><span class=\"line\"> cpu_usage=$(ps aux | awk <span class=\"string\">'{sum_cpu += $3} END {print sum_cpu}'</span>)</span><br><span class=\"line\"> mem_usage=$(ps aux | awk <span class=\"string\">'{sum_mem += $4} END {print sum_mem}'</span>)</span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"comment\"># 打印结果,带有时间戳、分隔线和颜色高亮</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> -e <span class=\"string\">"<span class=\"variable\">${BLUE}</span>==============================<span class=\"variable\">${NC}</span>"</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> -e <span class=\"string\">"<span class=\"variable\">${YELLOW}</span>Timestamp: <span class=\"subst\">$(date)</span><span class=\"variable\">${NC}</span>"</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> -e <span class=\"string\">"<span class=\"variable\">${BLUE}</span>==============================<span class=\"variable\">${NC}</span>"</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> -e <span class=\"string\">"<span class=\"variable\">${GREEN}</span>Total CPU usage: <span class=\"variable\">${RED}</span><span class=\"variable\">$cpu_usage</span>%<span class=\"variable\">${NC}</span>"</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> -e <span class=\"string\">"<span class=\"variable\">${GREEN}</span>Total Memory usage: <span class=\"variable\">${RED}</span><span class=\"variable\">$mem_usage</span>%<span class=\"variable\">${NC}</span>"</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> -e <span class=\"string\">"<span class=\"variable\">${BLUE}</span>==============================<span class=\"variable\">${NC}</span>"</span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"comment\"># 等待5秒后再次执行</span></span><br><span class=\"line\"> <span class=\"built_in\">sleep</span> 5</span><br><span class=\"line\"><span class=\"keyword\">done</span></span><br><span class=\"line\"></span><br></pre></td></tr></table></figure>\n<p><strong>保存脚本到/usr/local/bin目录下</strong></p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">mv</span> usage.sh /usr/local/bin/usage</span><br></pre></td></tr></table></figure>\n\n<h3 id=\"Shell脚本编写的基本信息\"><a href=\"#Shell脚本编写的基本信息\" class=\"headerlink\" title=\"Shell脚本编写的基本信息\"></a>Shell脚本编写的基本信息</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#! /bin/bash</span></span><br><span class=\"line\"><span class=\"comment\"># -------------------------------------------------</span></span><br><span class=\"line\"><span class=\"comment\"># Filename: test.sh</span></span><br><span class=\"line\"><span class=\"comment\"># Version: 1.0</span></span><br><span class=\"line\"><span class=\"comment\"># Date: 2024/05/02</span></span><br><span class=\"line\"><span class=\"comment\"># Author: shenjianZ</span></span><br><span class=\"line\"><span class=\"comment\"># Email: shenjianZLT@gmail.com</span></span><br><span class=\"line\"><span class=\"comment\"># Website: https://blog.shenjianl.cn</span></span><br><span class=\"line\"><span class=\"comment\"># Description: this is a test shell</span></span><br><span class=\"line\"><span class=\"comment\"># CopyRight: 2024 All rights reserved shenjianZ</span></span><br><span class=\"line\"><span class=\"comment\"># License GPL</span></span><br><span class=\"line\"><span class=\"comment\"># ------------------------------------------------</span></span><br><span class=\"line\"></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># Your script logic goes here</span></span><br></pre></td></tr></table></figure>"},{"title":"Hello World","abbrlink":16107,"_content":"Welcome to [Hexo](https://hexo.io/)! This is your very first post. Check [documentation](https://hexo.io/docs/) for more info. If you get any problems when using Hexo, you can find the answer in [troubleshooting](https://hexo.io/docs/troubleshooting.html) or you can ask me on [GitHub](https://github.com/hexojs/hexo/issues).\n\n## Quick Start\n\n### Create a new post\n\n``` bash\n$ hexo new \"My New Post\"\n```\n\nMore info: [Writing](https://hexo.io/docs/writing.html)\n\n### Run server\n\n``` bash\n$ hexo server\n```\n\nMore info: [Server](https://hexo.io/docs/server.html)\n\n### Generate static files\n\n``` bash\n$ hexo generate\n```\n\nMore info: [Generating](https://hexo.io/docs/generating.html)\n\n### Deploy to remote sites\n\n``` bash\n$ hexo deploy\n```\n\nMore info: [Deployment](https://hexo.io/docs/one-command-deployment.html)\n","source":"_posts/hello-world.md","raw":"---\ntitle: Hello World\nabbrlink: 16107\n---\nWelcome to [Hexo](https://hexo.io/)! This is your very first post. Check [documentation](https://hexo.io/docs/) for more info. If you get any problems when using Hexo, you can find the answer in [troubleshooting](https://hexo.io/docs/troubleshooting.html) or you can ask me on [GitHub](https://github.com/hexojs/hexo/issues).\n\n## Quick Start\n\n### Create a new post\n\n``` bash\n$ hexo new \"My New Post\"\n```\n\nMore info: [Writing](https://hexo.io/docs/writing.html)\n\n### Run server\n\n``` bash\n$ hexo server\n```\n\nMore info: [Server](https://hexo.io/docs/server.html)\n\n### Generate static files\n\n``` bash\n$ hexo generate\n```\n\nMore info: [Generating](https://hexo.io/docs/generating.html)\n\n### Deploy to remote sites\n\n``` bash\n$ hexo deploy\n```\n\nMore info: [Deployment](https://hexo.io/docs/one-command-deployment.html)\n","slug":"hello-world","published":1,"date":"2024-09-11T00:01:10.419Z","updated":"2024-08-09T12:21:50.026Z","comments":1,"layout":"post","photos":[],"_id":"cm5w9lrdg0003tgah9d6e9nmn","content":"<p>Welcome to <a href=\"https://hexo.io/\">Hexo</a>! This is your very first post. Check <a href=\"https://hexo.io/docs/\">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href=\"https://hexo.io/docs/troubleshooting.html\">troubleshooting</a> or you can ask me on <a href=\"https://github.com/hexojs/hexo/issues\">GitHub</a>.</p>\n<h2 id=\"Quick-Start\"><a href=\"#Quick-Start\" class=\"headerlink\" title=\"Quick Start\"></a>Quick Start</h2><h3 id=\"Create-a-new-post\"><a href=\"#Create-a-new-post\" class=\"headerlink\" title=\"Create a new post\"></a>Create a new post</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo new <span class=\"string\">"My New Post"</span></span><br></pre></td></tr></table></figure>\n\n<p>More info: <a href=\"https://hexo.io/docs/writing.html\">Writing</a></p>\n<h3 id=\"Run-server\"><a href=\"#Run-server\" class=\"headerlink\" title=\"Run server\"></a>Run server</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo server</span><br></pre></td></tr></table></figure>\n\n<p>More info: <a href=\"https://hexo.io/docs/server.html\">Server</a></p>\n<h3 id=\"Generate-static-files\"><a href=\"#Generate-static-files\" class=\"headerlink\" title=\"Generate static files\"></a>Generate static files</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo generate</span><br></pre></td></tr></table></figure>\n\n<p>More info: <a href=\"https://hexo.io/docs/generating.html\">Generating</a></p>\n<h3 id=\"Deploy-to-remote-sites\"><a href=\"#Deploy-to-remote-sites\" class=\"headerlink\" title=\"Deploy to remote sites\"></a>Deploy to remote sites</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo deploy</span><br></pre></td></tr></table></figure>\n\n<p>More info: <a href=\"https://hexo.io/docs/one-command-deployment.html\">Deployment</a></p>\n","cover":false,"excerpt":"","more":"<p>Welcome to <a href=\"https://hexo.io/\">Hexo</a>! This is your very first post. Check <a href=\"https://hexo.io/docs/\">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href=\"https://hexo.io/docs/troubleshooting.html\">troubleshooting</a> or you can ask me on <a href=\"https://github.com/hexojs/hexo/issues\">GitHub</a>.</p>\n<h2 id=\"Quick-Start\"><a href=\"#Quick-Start\" class=\"headerlink\" title=\"Quick Start\"></a>Quick Start</h2><h3 id=\"Create-a-new-post\"><a href=\"#Create-a-new-post\" class=\"headerlink\" title=\"Create a new post\"></a>Create a new post</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo new <span class=\"string\">"My New Post"</span></span><br></pre></td></tr></table></figure>\n\n<p>More info: <a href=\"https://hexo.io/docs/writing.html\">Writing</a></p>\n<h3 id=\"Run-server\"><a href=\"#Run-server\" class=\"headerlink\" title=\"Run server\"></a>Run server</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo server</span><br></pre></td></tr></table></figure>\n\n<p>More info: <a href=\"https://hexo.io/docs/server.html\">Server</a></p>\n<h3 id=\"Generate-static-files\"><a href=\"#Generate-static-files\" class=\"headerlink\" title=\"Generate static files\"></a>Generate static files</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo generate</span><br></pre></td></tr></table></figure>\n\n<p>More info: <a href=\"https://hexo.io/docs/generating.html\">Generating</a></p>\n<h3 id=\"Deploy-to-remote-sites\"><a href=\"#Deploy-to-remote-sites\" class=\"headerlink\" title=\"Deploy to remote sites\"></a>Deploy to remote sites</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">$ hexo deploy</span><br></pre></td></tr></table></figure>\n\n<p>More info: <a href=\"https://hexo.io/docs/one-command-deployment.html\">Deployment</a></p>\n"},{"title":"k近邻算法(K-Nearest Neighbors)KNN","abbrlink":29139,"mathjax":true,"date":"2025-01-13T09:20:59.000Z","_content":"## **k近邻算法(K-Nearest Neighbors)KNN**\n将当前样本的类别归类于距离最近的**k**个样本的类别\n\n#### **距离公式(2维)**\n\n- 欧式距离\n$$\nd = \\sqrt{(x_1-y_1)^2 + (x_2 - y_2)^2}\n$$\n- 曼哈顿距离\n$$\nd = |x_1 - x_2| + |y_1 - y_2|\n$$\n- 切比雪夫距离\n$$\nd = \\max\\left(|x_1 - x_2|, |y_1 - y_2|\\right)\n$$\n#### k值选择问题\n\n| k值 | 影响 |\n| --- | ------------------ |\n| 越大 | 模型过拟合,准确率波动较大 |\n| 越小 | 模型欠拟合,准确率趋于稳定但可能较低 |\n### 特征预处理\n> 通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程 \n- 归一化\n 将数据变换到指定区间(默认是\\[0,1\\])\n $$ x' = \\frac{x- x_{\\text {min}}}{x_{\\text{max}} - x_{\\text{min}}} $$\n 若需要缩放到任意区间 \\(\\[a, b\\]\\),公式为: $$ x' = a + \\frac{(x - x_{\\text{min}}) \\cdot (b - a)}{x_{\\text{max}} - x_{\\text{min}}} $$\n 其中:\\( \\[a, b\\] \\):目标区间的范围\n 归一化受到数据集的异常值的影响,需要进行标准化处理(更加合理)\n ``` python\n\t from sklearn.preprocessing import MinMaxScaler # 归一化\n\t```\n- 标准化\n 将数据调整为均值为 0,标准差为 1 的标准正态分布\n $$ z = \\frac{x - \\mu}{\\sigma} $$\n \\( z \\):标准化后的值 \\( x \\):原始数据值 \\( $\\mu$ \\):数据的均值 \\( $\\sigma$\\):数据的标准差\n \n ``` python\n \t from sklearn.preprocessing import StandardScaler # 标准化\n ```\n\n### KNN代码实现\n```python\nimport seaborn as sns\nimport matplotlib.pyplot as plt \nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.datasets import load_iris\nfrom sklearn.preprocessing import MinMaxScaler,StandardScaler\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.metrics import accuracy_score\n\n# 1 数据集获取\niris = load_iris()\n# print(iris.feature_names)\niris_data = pd.DataFrame(iris.data,columns=['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width'])\niris_data['target'] = iris.target\n\ndef iris_plot(data,col1,col2):\n sns.lmplot(x=col1,y=col2,data=data,hue=\"target\",fit_reg=False)\n plt.show()\n# 2 数据集可视化\n# iris_plot(iris_data, 'Sepal_Width', 'Petal_Length')\n\n# 3 数据集的划分\nX_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=44)\n# print(\"训练集的特征值:\\n\",X_train)\n# print(\"训练集的目标值:\\n\",y_train)\n# print(\"测试集的特征值:\\n\",X_test)\n# print(\"测试集的特征值:\\n\",y_test)\n\n# 4 归一化\ntransfer = StandardScaler()\nX_train = transfer.fit_transform(X_train)\nX_test = transfer.transform(X_test)\n# print(\"归一化的,X_train:\\n\",X_train)\n# print(\"归一化的X_test:\\n\",X_test)\n\n# 5 机器学习 KNN\n# 5.1 实例化估计器\nestimator = KNeighborsClassifier(n_neighbors=9)\n# 5.2 进行训练\nestimator.fit(X_train,y_train)\n\n# 6 模型评估\ny_pred = estimator.predict(X_test)\nprint(\"预测值:\\n\",y_pre)\nprint(\"预测值与真实值是否相等:\\n\",y_pred==y_test)\naccuracy = accuracy_score(y_test, y_pred)\nprint(f\"\\nKNN 模型的准确率: {accuracy:.4f}\")\n```\n\n\n### 交叉验证与网格搜索\n```python\nimport seaborn as sns\nimport matplotlib.pyplot as plt \nimport pandas as pd\nfrom sklearn.model_selection import train_test_split,GridSearchCV\nfrom sklearn.datasets import load_iris\nfrom sklearn.preprocessing import MinMaxScaler,StandardScaler\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.metrics import accuracy_score\n\n# 1 数据集获取\niris = load_iris()\niris_data = pd.DataFrame(iris.data,columns=['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width'])\niris_data['target'] = iris.target\n\n# 3 数据集的划分\nX_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2)\n\n# 4 归一化\ntransfer = StandardScaler()\nX_train = transfer.fit_transform(X_train)\nX_test = transfer.transform(X_test)\n\n# 5 机器学习 KNN\n# 5.1 实例化估计器\n#\n#不指定 <code> n_neighbors </code> ,使用网格搜索进行循环训练\nestimator = KNeighborsClassifier()\n# 5.2 模型调优 -- 交叉验证,网格搜素\nestimator = GridSearchCV(estimator,param_grid={\"n_neighbors\":[1,3,5,7]},cv=5) # 5 折\n# 5.2 进行训练\nestimator.fit(X_train,y_train)\n \n# 6 模型评估\ny_pred = estimator.predict(X_test)\nprint(\"预测值:\\n\",y_pred)\nprint(\"预测值与真实值是否相等:\\n\",y_pred==y_test)\naccuracy = accuracy_score(y_test, y_pred)\nprint(f\"\\nKNN 模型的准确率: {accuracy:.4f}\")\n\n# 交叉验证的相关参数\nprint(f\"最好结果:{estimator.best_score_}\")\nprint(f\"最好模型:{estimator.best_estimator_}\")\nprint(f\"最好模型结果:{estimator.cv_results_}\")\n```\n\n\n### 机器学习的基本步骤\n- 获取数据集\n- 数据集基本处理\n - 去重去空、填充等操作 \n - 确定特征值和目标值\n - 分割数据集\n- 特征工程(特征预处理 标准化等)\n- 机器学习\n- 模型评估\n\n### 数据分割的方法\n- 留出法\n 训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。\n 单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。\n ``` python\n\tfrom sklearn.model_selection import KFold,StratifiedKFold\n\timport pandas as pd\n\tX = np.array([\n\t[1,2,3,4],\n\t[11,12,13,14],\n\t[21,22,23,24],\n\t[31,32,33,34],\n\t[41,42,43,44],\n\t[51,52,53,54],\n\t[61,62,63,64],\n\t[71,72,73,74]\n\t])\n\ty=np.array([1,1,0,0,1,1,0,0])\n\tfolder = KFold(n_splits=4)\n\tsfloder = StratifiedKFold(n_splits=4)\n\tprint(\"KFOLD:\")\n\tfor train,test in folder.split(X,y):\n\t print(f\"train:{train},test:{test}\")\n\tprint(\"SKFOLD:\")\n\tfor train,test in sfloder.split(X,y):\n print(f\"train:{train},test:{test}\")\n\t```\n\t\n- 自助法\n- 交叉验证法","source":"_posts/machinelearning/knn.md","raw":"---\ntitle: k近邻算法(K-Nearest Neighbors)KNN\ntags: machinelearning\nabbrlink: 29139\nmathjax: true\ndate: 2025-01-13 17:20:59\n---\n## **k近邻算法(K-Nearest Neighbors)KNN**\n将当前样本的类别归类于距离最近的**k**个样本的类别\n\n#### **距离公式(2维)**\n\n- 欧式距离\n$$\nd = \\sqrt{(x_1-y_1)^2 + (x_2 - y_2)^2}\n$$\n- 曼哈顿距离\n$$\nd = |x_1 - x_2| + |y_1 - y_2|\n$$\n- 切比雪夫距离\n$$\nd = \\max\\left(|x_1 - x_2|, |y_1 - y_2|\\right)\n$$\n#### k值选择问题\n\n| k值 | 影响 |\n| --- | ------------------ |\n| 越大 | 模型过拟合,准确率波动较大 |\n| 越小 | 模型欠拟合,准确率趋于稳定但可能较低 |\n### 特征预处理\n> 通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程 \n- 归一化\n 将数据变换到指定区间(默认是\\[0,1\\])\n $$ x' = \\frac{x- x_{\\text {min}}}{x_{\\text{max}} - x_{\\text{min}}} $$\n 若需要缩放到任意区间 \\(\\[a, b\\]\\),公式为: $$ x' = a + \\frac{(x - x_{\\text{min}}) \\cdot (b - a)}{x_{\\text{max}} - x_{\\text{min}}} $$\n 其中:\\( \\[a, b\\] \\):目标区间的范围\n 归一化受到数据集的异常值的影响,需要进行标准化处理(更加合理)\n ``` python\n\t from sklearn.preprocessing import MinMaxScaler # 归一化\n\t```\n- 标准化\n 将数据调整为均值为 0,标准差为 1 的标准正态分布\n $$ z = \\frac{x - \\mu}{\\sigma} $$\n \\( z \\):标准化后的值 \\( x \\):原始数据值 \\( $\\mu$ \\):数据的均值 \\( $\\sigma$\\):数据的标准差\n \n ``` python\n \t from sklearn.preprocessing import StandardScaler # 标准化\n ```\n\n### KNN代码实现\n```python\nimport seaborn as sns\nimport matplotlib.pyplot as plt \nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.datasets import load_iris\nfrom sklearn.preprocessing import MinMaxScaler,StandardScaler\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.metrics import accuracy_score\n\n# 1 数据集获取\niris = load_iris()\n# print(iris.feature_names)\niris_data = pd.DataFrame(iris.data,columns=['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width'])\niris_data['target'] = iris.target\n\ndef iris_plot(data,col1,col2):\n sns.lmplot(x=col1,y=col2,data=data,hue=\"target\",fit_reg=False)\n plt.show()\n# 2 数据集可视化\n# iris_plot(iris_data, 'Sepal_Width', 'Petal_Length')\n\n# 3 数据集的划分\nX_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=44)\n# print(\"训练集的特征值:\\n\",X_train)\n# print(\"训练集的目标值:\\n\",y_train)\n# print(\"测试集的特征值:\\n\",X_test)\n# print(\"测试集的特征值:\\n\",y_test)\n\n# 4 归一化\ntransfer = StandardScaler()\nX_train = transfer.fit_transform(X_train)\nX_test = transfer.transform(X_test)\n# print(\"归一化的,X_train:\\n\",X_train)\n# print(\"归一化的X_test:\\n\",X_test)\n\n# 5 机器学习 KNN\n# 5.1 实例化估计器\nestimator = KNeighborsClassifier(n_neighbors=9)\n# 5.2 进行训练\nestimator.fit(X_train,y_train)\n\n# 6 模型评估\ny_pred = estimator.predict(X_test)\nprint(\"预测值:\\n\",y_pre)\nprint(\"预测值与真实值是否相等:\\n\",y_pred==y_test)\naccuracy = accuracy_score(y_test, y_pred)\nprint(f\"\\nKNN 模型的准确率: {accuracy:.4f}\")\n```\n\n\n### 交叉验证与网格搜索\n```python\nimport seaborn as sns\nimport matplotlib.pyplot as plt \nimport pandas as pd\nfrom sklearn.model_selection import train_test_split,GridSearchCV\nfrom sklearn.datasets import load_iris\nfrom sklearn.preprocessing import MinMaxScaler,StandardScaler\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.metrics import accuracy_score\n\n# 1 数据集获取\niris = load_iris()\niris_data = pd.DataFrame(iris.data,columns=['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width'])\niris_data['target'] = iris.target\n\n# 3 数据集的划分\nX_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2)\n\n# 4 归一化\ntransfer = StandardScaler()\nX_train = transfer.fit_transform(X_train)\nX_test = transfer.transform(X_test)\n\n# 5 机器学习 KNN\n# 5.1 实例化估计器\n#\n#不指定 <code> n_neighbors </code> ,使用网格搜索进行循环训练\nestimator = KNeighborsClassifier()\n# 5.2 模型调优 -- 交叉验证,网格搜素\nestimator = GridSearchCV(estimator,param_grid={\"n_neighbors\":[1,3,5,7]},cv=5) # 5 折\n# 5.2 进行训练\nestimator.fit(X_train,y_train)\n \n# 6 模型评估\ny_pred = estimator.predict(X_test)\nprint(\"预测值:\\n\",y_pred)\nprint(\"预测值与真实值是否相等:\\n\",y_pred==y_test)\naccuracy = accuracy_score(y_test, y_pred)\nprint(f\"\\nKNN 模型的准确率: {accuracy:.4f}\")\n\n# 交叉验证的相关参数\nprint(f\"最好结果:{estimator.best_score_}\")\nprint(f\"最好模型:{estimator.best_estimator_}\")\nprint(f\"最好模型结果:{estimator.cv_results_}\")\n```\n\n\n### 机器学习的基本步骤\n- 获取数据集\n- 数据集基本处理\n - 去重去空、填充等操作 \n - 确定特征值和目标值\n - 分割数据集\n- 特征工程(特征预处理 标准化等)\n- 机器学习\n- 模型评估\n\n### 数据分割的方法\n- 留出法\n 训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。\n 单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。\n ``` python\n\tfrom sklearn.model_selection import KFold,StratifiedKFold\n\timport pandas as pd\n\tX = np.array([\n\t[1,2,3,4],\n\t[11,12,13,14],\n\t[21,22,23,24],\n\t[31,32,33,34],\n\t[41,42,43,44],\n\t[51,52,53,54],\n\t[61,62,63,64],\n\t[71,72,73,74]\n\t])\n\ty=np.array([1,1,0,0,1,1,0,0])\n\tfolder = KFold(n_splits=4)\n\tsfloder = StratifiedKFold(n_splits=4)\n\tprint(\"KFOLD:\")\n\tfor train,test in folder.split(X,y):\n\t print(f\"train:{train},test:{test}\")\n\tprint(\"SKFOLD:\")\n\tfor train,test in sfloder.split(X,y):\n print(f\"train:{train},test:{test}\")\n\t```\n\t\n- 自助法\n- 交叉验证法","slug":"machinelearning/knn","published":1,"updated":"2025-01-14T09:21:29.069Z","comments":1,"layout":"post","photos":[],"_id":"cm5w9lrdi0005tgah797v3otl","content":"<h2 id=\"k近邻算法(K-Nearest-Neighbors)KNN\"><a href=\"#k近邻算法(K-Nearest-Neighbors)KNN\" class=\"headerlink\" title=\"k近邻算法(K-Nearest Neighbors)KNN\"></a><strong>k近邻算法(K-Nearest Neighbors)KNN</strong></h2><p>将当前样本的类别归类于距离最近的<strong>k</strong>个样本的类别</p>\n<h4 id=\"距离公式-2维\"><a href=\"#距离公式-2维\" class=\"headerlink\" title=\"距离公式(2维)\"></a><strong>距离公式(2维)</strong></h4><ul>\n<li>欧式距离<br>$$<br>d = \\sqrt{(x_1-y_1)^2 + (x_2 - y_2)^2}<br>$$</li>\n<li>曼哈顿距离<br>$$<br>d = |x_1 - x_2| + |y_1 - y_2|<br>$$</li>\n<li>切比雪夫距离<br>$$<br>d = \\max\\left(|x_1 - x_2|, |y_1 - y_2|\\right)<br>$$</li>\n</ul>\n<h4 id=\"k值选择问题\"><a href=\"#k值选择问题\" class=\"headerlink\" title=\"k值选择问题\"></a>k值选择问题</h4><table>\n<thead>\n<tr>\n<th>k值</th>\n<th>影响</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>越大</td>\n<td>模型过拟合,准确率波动较大</td>\n</tr>\n<tr>\n<td>越小</td>\n<td>模型欠拟合,准确率趋于稳定但可能较低</td>\n</tr>\n</tbody></table>\n<h3 id=\"特征预处理\"><a href=\"#特征预处理\" class=\"headerlink\" title=\"特征预处理\"></a>特征预处理</h3><blockquote>\n<p>通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程 </p>\n</blockquote>\n<ul>\n<li><p>归一化<br>将数据变换到指定区间(默认是[0,1])<br>$$ x’ = \\frac{x- x_{\\text {min}}}{x_{\\text{max}} - x_{\\text{min}}} $$<br>若需要缩放到任意区间 ([a, b]),公式为: $$ x’ = a + \\frac{(x - x_{\\text{min}}) \\cdot (b - a)}{x_{\\text{max}} - x_{\\text{min}}} $$<br>其中:( [a, b] ):目标区间的范围<br>归一化受到数据集的异常值的影响,需要进行标准化处理(更加合理)</p>\n<figure class=\"highlight python\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">from</span> sklearn.preprocessing <span class=\"keyword\">import</span> MinMaxScaler <span class=\"comment\"># 归一化</span></span><br></pre></td></tr></table></figure></li>\n<li><p>标准化<br>将数据调整为均值为 0,标准差为 1 的标准正态分布<br>$$ z = \\frac{x - \\mu}{\\sigma} $$<br>( z ):标准化后的值 ( x ):原始数据值 ( $\\mu$ ):数据的均值 ( $\\sigma$):数据的标准差</p>\n<figure class=\"highlight python\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">from</span> sklearn.preprocessing <span class=\"keyword\">import</span> StandardScaler <span class=\"comment\"># 标准化</span></span><br></pre></td></tr></table></figure></li>\n</ul>\n<h3 id=\"KNN代码实现\"><a href=\"#KNN代码实现\" class=\"headerlink\" title=\"KNN代码实现\"></a>KNN代码实现</h3><figure class=\"highlight python\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">import</span> seaborn <span class=\"keyword\">as</span> sns</span><br><span class=\"line\"><span class=\"keyword\">import</span> matplotlib.pyplot <span class=\"keyword\">as</span> plt </span><br><span class=\"line\"><span class=\"keyword\">import</span> pandas <span class=\"keyword\">as</span> pd</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.model_selection <span class=\"keyword\">import</span> train_test_split</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.datasets <span class=\"keyword\">import</span> load_iris</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.preprocessing <span class=\"keyword\">import</span> MinMaxScaler,StandardScaler</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.neighbors <span class=\"keyword\">import</span> KNeighborsClassifier</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.metrics <span class=\"keyword\">import</span> accuracy_score</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 1 数据集获取</span></span><br><span class=\"line\">iris = load_iris()</span><br><span class=\"line\"><span class=\"comment\"># print(iris.feature_names)</span></span><br><span class=\"line\">iris_data = pd.DataFrame(iris.data,columns=[<span class=\"string\">'Sepal_Length'</span>, <span class=\"string\">'Sepal_Width'</span>, <span class=\"string\">'Petal_Length'</span>, <span class=\"string\">'Petal_Width'</span>])</span><br><span class=\"line\">iris_data[<span class=\"string\">'target'</span>] = iris.target</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">def</span> <span class=\"title function_\">iris_plot</span>(<span class=\"params\">data,col1,col2</span>):</span><br><span class=\"line\"> sns.lmplot(x=col1,y=col2,data=data,hue=<span class=\"string\">"target"</span>,fit_reg=<span class=\"literal\">False</span>)</span><br><span class=\"line\"> plt.show()</span><br><span class=\"line\"><span class=\"comment\"># 2 数据集可视化</span></span><br><span class=\"line\"><span class=\"comment\"># iris_plot(iris_data, 'Sepal_Width', 'Petal_Length')</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 3 数据集的划分</span></span><br><span class=\"line\">X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=<span class=\"number\">0.2</span>,random_state=<span class=\"number\">44</span>)</span><br><span class=\"line\"><span class=\"comment\"># print("训练集的特征值:\\n",X_train)</span></span><br><span class=\"line\"><span class=\"comment\"># print("训练集的目标值:\\n",y_train)</span></span><br><span class=\"line\"><span class=\"comment\"># print("测试集的特征值:\\n",X_test)</span></span><br><span class=\"line\"><span class=\"comment\"># print("测试集的特征值:\\n",y_test)</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 4 归一化</span></span><br><span class=\"line\">transfer = StandardScaler()</span><br><span class=\"line\">X_train = transfer.fit_transform(X_train)</span><br><span class=\"line\">X_test = transfer.transform(X_test)</span><br><span class=\"line\"><span class=\"comment\"># print("归一化的,X_train:\\n",X_train)</span></span><br><span class=\"line\"><span class=\"comment\"># print("归一化的X_test:\\n",X_test)</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 5 机器学习 KNN</span></span><br><span class=\"line\"><span class=\"comment\"># 5.1 实例化估计器</span></span><br><span class=\"line\">estimator = KNeighborsClassifier(n_neighbors=<span class=\"number\">9</span>)</span><br><span class=\"line\"><span class=\"comment\"># 5.2 进行训练</span></span><br><span class=\"line\">estimator.fit(X_train,y_train)</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 6 模型评估</span></span><br><span class=\"line\">y_pred = estimator.predict(X_test)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">"预测值:\\n"</span>,y_pre)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">"预测值与真实值是否相等:\\n"</span>,y_pred==y_test)</span><br><span class=\"line\">accuracy = accuracy_score(y_test, y_pred)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">f"\\nKNN 模型的准确率: <span class=\"subst\">{accuracy:<span class=\"number\">.4</span>f}</span>"</span>)</span><br></pre></td></tr></table></figure>\n\n<p><img src=\"/img/machinelearning/knn-01.png\"></p>\n<h3 id=\"交叉验证与网格搜索\"><a href=\"#交叉验证与网格搜索\" class=\"headerlink\" title=\"交叉验证与网格搜索\"></a>交叉验证与网格搜索</h3><figure class=\"highlight python\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">import</span> seaborn <span class=\"keyword\">as</span> sns</span><br><span class=\"line\"><span class=\"keyword\">import</span> matplotlib.pyplot <span class=\"keyword\">as</span> plt </span><br><span class=\"line\"><span class=\"keyword\">import</span> pandas <span class=\"keyword\">as</span> pd</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.model_selection <span class=\"keyword\">import</span> train_test_split,GridSearchCV</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.datasets <span class=\"keyword\">import</span> load_iris</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.preprocessing <span class=\"keyword\">import</span> MinMaxScaler,StandardScaler</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.neighbors <span class=\"keyword\">import</span> KNeighborsClassifier</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.metrics <span class=\"keyword\">import</span> accuracy_score</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 1 数据集获取</span></span><br><span class=\"line\">iris = load_iris()</span><br><span class=\"line\">iris_data = pd.DataFrame(iris.data,columns=[<span class=\"string\">'Sepal_Length'</span>, <span class=\"string\">'Sepal_Width'</span>, <span class=\"string\">'Petal_Length'</span>, <span class=\"string\">'Petal_Width'</span>])</span><br><span class=\"line\">iris_data[<span class=\"string\">'target'</span>] = iris.target</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 3 数据集的划分</span></span><br><span class=\"line\">X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=<span class=\"number\">0.2</span>)</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 4 归一化</span></span><br><span class=\"line\">transfer = StandardScaler()</span><br><span class=\"line\">X_train = transfer.fit_transform(X_train)</span><br><span class=\"line\">X_test = transfer.transform(X_test)</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 5 机器学习 KNN</span></span><br><span class=\"line\"><span class=\"comment\"># 5.1 实例化估计器</span></span><br><span class=\"line\"><span class=\"comment\">#</span></span><br><span class=\"line\"><span class=\"comment\">#不指定 <code> n_neighbors </code> ,使用网格搜索进行循环训练</span></span><br><span class=\"line\">estimator = KNeighborsClassifier()</span><br><span class=\"line\"><span class=\"comment\"># 5.2 模型调优 -- 交叉验证,网格搜素</span></span><br><span class=\"line\">estimator = GridSearchCV(estimator,param_grid={<span class=\"string\">"n_neighbors"</span>:[<span class=\"number\">1</span>,<span class=\"number\">3</span>,<span class=\"number\">5</span>,<span class=\"number\">7</span>]},cv=<span class=\"number\">5</span>) <span class=\"comment\"># 5 折</span></span><br><span class=\"line\"><span class=\"comment\"># 5.2 进行训练</span></span><br><span class=\"line\">estimator.fit(X_train,y_train)</span><br><span class=\"line\"> </span><br><span class=\"line\"><span class=\"comment\"># 6 模型评估</span></span><br><span class=\"line\">y_pred = estimator.predict(X_test)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">"预测值:\\n"</span>,y_pred)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">"预测值与真实值是否相等:\\n"</span>,y_pred==y_test)</span><br><span class=\"line\">accuracy = accuracy_score(y_test, y_pred)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">f"\\nKNN 模型的准确率: <span class=\"subst\">{accuracy:<span class=\"number\">.4</span>f}</span>"</span>)</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 交叉验证的相关参数</span></span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">f"最好结果:<span class=\"subst\">{estimator.best_score_}</span>"</span>)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">f"最好模型:<span class=\"subst\">{estimator.best_estimator_}</span>"</span>)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">f"最好模型结果:<span class=\"subst\">{estimator.cv_results_}</span>"</span>)</span><br></pre></td></tr></table></figure>\n<p><img src=\"/img/machinelearning/cros-valid.png\"></p>\n<h3 id=\"机器学习的基本步骤\"><a href=\"#机器学习的基本步骤\" class=\"headerlink\" title=\"机器学习的基本步骤\"></a>机器学习的基本步骤</h3><ul>\n<li>获取数据集</li>\n<li>数据集基本处理<ul>\n<li>去重去空、填充等操作 </li>\n<li>确定特征值和目标值</li>\n<li>分割数据集</li>\n</ul>\n</li>\n<li>特征工程(特征预处理 标准化等)</li>\n<li>机器学习</li>\n<li>模型评估</li>\n</ul>\n<h3 id=\"数据分割的方法\"><a href=\"#数据分割的方法\" class=\"headerlink\" title=\"数据分割的方法\"></a>数据分割的方法</h3><ul>\n<li>留出法<br>训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。<br>单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。<figure class=\"highlight python\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">from</span> sklearn.model_selection <span class=\"keyword\">import</span> KFold,StratifiedKFold</span><br><span class=\"line\"><span class=\"keyword\">import</span> pandas <span class=\"keyword\">as</span> pd</span><br><span class=\"line\">X = np.array([</span><br><span class=\"line\">[<span class=\"number\">1</span>,<span class=\"number\">2</span>,<span class=\"number\">3</span>,<span class=\"number\">4</span>],</span><br><span class=\"line\">[<span class=\"number\">11</span>,<span class=\"number\">12</span>,<span class=\"number\">13</span>,<span class=\"number\">14</span>],</span><br><span class=\"line\">[<span class=\"number\">21</span>,<span class=\"number\">22</span>,<span class=\"number\">23</span>,<span class=\"number\">24</span>],</span><br><span class=\"line\">[<span class=\"number\">31</span>,<span class=\"number\">32</span>,<span class=\"number\">33</span>,<span class=\"number\">34</span>],</span><br><span class=\"line\">[<span class=\"number\">41</span>,<span class=\"number\">42</span>,<span class=\"number\">43</span>,<span class=\"number\">44</span>],</span><br><span class=\"line\">[<span class=\"number\">51</span>,<span class=\"number\">52</span>,<span class=\"number\">53</span>,<span class=\"number\">54</span>],</span><br><span class=\"line\">[<span class=\"number\">61</span>,<span class=\"number\">62</span>,<span class=\"number\">63</span>,<span class=\"number\">64</span>],</span><br><span class=\"line\">[<span class=\"number\">71</span>,<span class=\"number\">72</span>,<span class=\"number\">73</span>,<span class=\"number\">74</span>]</span><br><span class=\"line\">])</span><br><span class=\"line\">y=np.array([<span class=\"number\">1</span>,<span class=\"number\">1</span>,<span class=\"number\">0</span>,<span class=\"number\">0</span>,<span class=\"number\">1</span>,<span class=\"number\">1</span>,<span class=\"number\">0</span>,<span class=\"number\">0</span>])</span><br><span class=\"line\">folder = KFold(n_splits=<span class=\"number\">4</span>)</span><br><span class=\"line\">sfloder = StratifiedKFold(n_splits=<span class=\"number\">4</span>)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">"KFOLD:"</span>)</span><br><span class=\"line\"><span class=\"keyword\">for</span> train,test <span class=\"keyword\">in</span> folder.split(X,y):</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">f"train:<span class=\"subst\">{train}</span>,test:<span class=\"subst\">{test}</span>"</span>)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">"SKFOLD:"</span>)</span><br><span class=\"line\"><span class=\"keyword\">for</span> train,test <span class=\"keyword\">in</span> sfloder.split(X,y):</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">f"train:<span class=\"subst\">{train}</span>,test:<span class=\"subst\">{test}</span>"</span>)</span><br></pre></td></tr></table></figure>\n <img src=\"/img/machinelearning/kfold-skfold.png\"></li>\n<li>自助法</li>\n<li>交叉验证法</li>\n</ul>\n","cover":false,"excerpt":"","more":"<h2 id=\"k近邻算法(K-Nearest-Neighbors)KNN\"><a href=\"#k近邻算法(K-Nearest-Neighbors)KNN\" class=\"headerlink\" title=\"k近邻算法(K-Nearest Neighbors)KNN\"></a><strong>k近邻算法(K-Nearest Neighbors)KNN</strong></h2><p>将当前样本的类别归类于距离最近的<strong>k</strong>个样本的类别</p>\n<h4 id=\"距离公式-2维\"><a href=\"#距离公式-2维\" class=\"headerlink\" title=\"距离公式(2维)\"></a><strong>距离公式(2维)</strong></h4><ul>\n<li>欧式距离<br>$$<br>d = \\sqrt{(x_1-y_1)^2 + (x_2 - y_2)^2}<br>$$</li>\n<li>曼哈顿距离<br>$$<br>d = |x_1 - x_2| + |y_1 - y_2|<br>$$</li>\n<li>切比雪夫距离<br>$$<br>d = \\max\\left(|x_1 - x_2|, |y_1 - y_2|\\right)<br>$$</li>\n</ul>\n<h4 id=\"k值选择问题\"><a href=\"#k值选择问题\" class=\"headerlink\" title=\"k值选择问题\"></a>k值选择问题</h4><table>\n<thead>\n<tr>\n<th>k值</th>\n<th>影响</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>越大</td>\n<td>模型过拟合,准确率波动较大</td>\n</tr>\n<tr>\n<td>越小</td>\n<td>模型欠拟合,准确率趋于稳定但可能较低</td>\n</tr>\n</tbody></table>\n<h3 id=\"特征预处理\"><a href=\"#特征预处理\" class=\"headerlink\" title=\"特征预处理\"></a>特征预处理</h3><blockquote>\n<p>通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程 </p>\n</blockquote>\n<ul>\n<li><p>归一化<br>将数据变换到指定区间(默认是[0,1])<br>$$ x’ = \\frac{x- x_{\\text {min}}}{x_{\\text{max}} - x_{\\text{min}}} $$<br>若需要缩放到任意区间 ([a, b]),公式为: $$ x’ = a + \\frac{(x - x_{\\text{min}}) \\cdot (b - a)}{x_{\\text{max}} - x_{\\text{min}}} $$<br>其中:( [a, b] ):目标区间的范围<br>归一化受到数据集的异常值的影响,需要进行标准化处理(更加合理)</p>\n<figure class=\"highlight python\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">from</span> sklearn.preprocessing <span class=\"keyword\">import</span> MinMaxScaler <span class=\"comment\"># 归一化</span></span><br></pre></td></tr></table></figure></li>\n<li><p>标准化<br>将数据调整为均值为 0,标准差为 1 的标准正态分布<br>$$ z = \\frac{x - \\mu}{\\sigma} $$<br>( z ):标准化后的值 ( x ):原始数据值 ( $\\mu$ ):数据的均值 ( $\\sigma$):数据的标准差</p>\n<figure class=\"highlight python\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">from</span> sklearn.preprocessing <span class=\"keyword\">import</span> StandardScaler <span class=\"comment\"># 标准化</span></span><br></pre></td></tr></table></figure></li>\n</ul>\n<h3 id=\"KNN代码实现\"><a href=\"#KNN代码实现\" class=\"headerlink\" title=\"KNN代码实现\"></a>KNN代码实现</h3><figure class=\"highlight python\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">import</span> seaborn <span class=\"keyword\">as</span> sns</span><br><span class=\"line\"><span class=\"keyword\">import</span> matplotlib.pyplot <span class=\"keyword\">as</span> plt </span><br><span class=\"line\"><span class=\"keyword\">import</span> pandas <span class=\"keyword\">as</span> pd</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.model_selection <span class=\"keyword\">import</span> train_test_split</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.datasets <span class=\"keyword\">import</span> load_iris</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.preprocessing <span class=\"keyword\">import</span> MinMaxScaler,StandardScaler</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.neighbors <span class=\"keyword\">import</span> KNeighborsClassifier</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.metrics <span class=\"keyword\">import</span> accuracy_score</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 1 数据集获取</span></span><br><span class=\"line\">iris = load_iris()</span><br><span class=\"line\"><span class=\"comment\"># print(iris.feature_names)</span></span><br><span class=\"line\">iris_data = pd.DataFrame(iris.data,columns=[<span class=\"string\">'Sepal_Length'</span>, <span class=\"string\">'Sepal_Width'</span>, <span class=\"string\">'Petal_Length'</span>, <span class=\"string\">'Petal_Width'</span>])</span><br><span class=\"line\">iris_data[<span class=\"string\">'target'</span>] = iris.target</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"keyword\">def</span> <span class=\"title function_\">iris_plot</span>(<span class=\"params\">data,col1,col2</span>):</span><br><span class=\"line\"> sns.lmplot(x=col1,y=col2,data=data,hue=<span class=\"string\">"target"</span>,fit_reg=<span class=\"literal\">False</span>)</span><br><span class=\"line\"> plt.show()</span><br><span class=\"line\"><span class=\"comment\"># 2 数据集可视化</span></span><br><span class=\"line\"><span class=\"comment\"># iris_plot(iris_data, 'Sepal_Width', 'Petal_Length')</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 3 数据集的划分</span></span><br><span class=\"line\">X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=<span class=\"number\">0.2</span>,random_state=<span class=\"number\">44</span>)</span><br><span class=\"line\"><span class=\"comment\"># print("训练集的特征值:\\n",X_train)</span></span><br><span class=\"line\"><span class=\"comment\"># print("训练集的目标值:\\n",y_train)</span></span><br><span class=\"line\"><span class=\"comment\"># print("测试集的特征值:\\n",X_test)</span></span><br><span class=\"line\"><span class=\"comment\"># print("测试集的特征值:\\n",y_test)</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 4 归一化</span></span><br><span class=\"line\">transfer = StandardScaler()</span><br><span class=\"line\">X_train = transfer.fit_transform(X_train)</span><br><span class=\"line\">X_test = transfer.transform(X_test)</span><br><span class=\"line\"><span class=\"comment\"># print("归一化的,X_train:\\n",X_train)</span></span><br><span class=\"line\"><span class=\"comment\"># print("归一化的X_test:\\n",X_test)</span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 5 机器学习 KNN</span></span><br><span class=\"line\"><span class=\"comment\"># 5.1 实例化估计器</span></span><br><span class=\"line\">estimator = KNeighborsClassifier(n_neighbors=<span class=\"number\">9</span>)</span><br><span class=\"line\"><span class=\"comment\"># 5.2 进行训练</span></span><br><span class=\"line\">estimator.fit(X_train,y_train)</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 6 模型评估</span></span><br><span class=\"line\">y_pred = estimator.predict(X_test)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">"预测值:\\n"</span>,y_pre)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">"预测值与真实值是否相等:\\n"</span>,y_pred==y_test)</span><br><span class=\"line\">accuracy = accuracy_score(y_test, y_pred)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">f"\\nKNN 模型的准确率: <span class=\"subst\">{accuracy:<span class=\"number\">.4</span>f}</span>"</span>)</span><br></pre></td></tr></table></figure>\n\n<p><img src=\"/img/machinelearning/knn-01.png\"></p>\n<h3 id=\"交叉验证与网格搜索\"><a href=\"#交叉验证与网格搜索\" class=\"headerlink\" title=\"交叉验证与网格搜索\"></a>交叉验证与网格搜索</h3><figure class=\"highlight python\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">import</span> seaborn <span class=\"keyword\">as</span> sns</span><br><span class=\"line\"><span class=\"keyword\">import</span> matplotlib.pyplot <span class=\"keyword\">as</span> plt </span><br><span class=\"line\"><span class=\"keyword\">import</span> pandas <span class=\"keyword\">as</span> pd</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.model_selection <span class=\"keyword\">import</span> train_test_split,GridSearchCV</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.datasets <span class=\"keyword\">import</span> load_iris</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.preprocessing <span class=\"keyword\">import</span> MinMaxScaler,StandardScaler</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.neighbors <span class=\"keyword\">import</span> KNeighborsClassifier</span><br><span class=\"line\"><span class=\"keyword\">from</span> sklearn.metrics <span class=\"keyword\">import</span> accuracy_score</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 1 数据集获取</span></span><br><span class=\"line\">iris = load_iris()</span><br><span class=\"line\">iris_data = pd.DataFrame(iris.data,columns=[<span class=\"string\">'Sepal_Length'</span>, <span class=\"string\">'Sepal_Width'</span>, <span class=\"string\">'Petal_Length'</span>, <span class=\"string\">'Petal_Width'</span>])</span><br><span class=\"line\">iris_data[<span class=\"string\">'target'</span>] = iris.target</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 3 数据集的划分</span></span><br><span class=\"line\">X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=<span class=\"number\">0.2</span>)</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 4 归一化</span></span><br><span class=\"line\">transfer = StandardScaler()</span><br><span class=\"line\">X_train = transfer.fit_transform(X_train)</span><br><span class=\"line\">X_test = transfer.transform(X_test)</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 5 机器学习 KNN</span></span><br><span class=\"line\"><span class=\"comment\"># 5.1 实例化估计器</span></span><br><span class=\"line\"><span class=\"comment\">#</span></span><br><span class=\"line\"><span class=\"comment\">#不指定 <code> n_neighbors </code> ,使用网格搜索进行循环训练</span></span><br><span class=\"line\">estimator = KNeighborsClassifier()</span><br><span class=\"line\"><span class=\"comment\"># 5.2 模型调优 -- 交叉验证,网格搜素</span></span><br><span class=\"line\">estimator = GridSearchCV(estimator,param_grid={<span class=\"string\">"n_neighbors"</span>:[<span class=\"number\">1</span>,<span class=\"number\">3</span>,<span class=\"number\">5</span>,<span class=\"number\">7</span>]},cv=<span class=\"number\">5</span>) <span class=\"comment\"># 5 折</span></span><br><span class=\"line\"><span class=\"comment\"># 5.2 进行训练</span></span><br><span class=\"line\">estimator.fit(X_train,y_train)</span><br><span class=\"line\"> </span><br><span class=\"line\"><span class=\"comment\"># 6 模型评估</span></span><br><span class=\"line\">y_pred = estimator.predict(X_test)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">"预测值:\\n"</span>,y_pred)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">"预测值与真实值是否相等:\\n"</span>,y_pred==y_test)</span><br><span class=\"line\">accuracy = accuracy_score(y_test, y_pred)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">f"\\nKNN 模型的准确率: <span class=\"subst\">{accuracy:<span class=\"number\">.4</span>f}</span>"</span>)</span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"comment\"># 交叉验证的相关参数</span></span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">f"最好结果:<span class=\"subst\">{estimator.best_score_}</span>"</span>)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">f"最好模型:<span class=\"subst\">{estimator.best_estimator_}</span>"</span>)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">f"最好模型结果:<span class=\"subst\">{estimator.cv_results_}</span>"</span>)</span><br></pre></td></tr></table></figure>\n<p><img src=\"/img/machinelearning/cros-valid.png\"></p>\n<h3 id=\"机器学习的基本步骤\"><a href=\"#机器学习的基本步骤\" class=\"headerlink\" title=\"机器学习的基本步骤\"></a>机器学习的基本步骤</h3><ul>\n<li>获取数据集</li>\n<li>数据集基本处理<ul>\n<li>去重去空、填充等操作 </li>\n<li>确定特征值和目标值</li>\n<li>分割数据集</li>\n</ul>\n</li>\n<li>特征工程(特征预处理 标准化等)</li>\n<li>机器学习</li>\n<li>模型评估</li>\n</ul>\n<h3 id=\"数据分割的方法\"><a href=\"#数据分割的方法\" class=\"headerlink\" title=\"数据分割的方法\"></a>数据分割的方法</h3><ul>\n<li>留出法<br>训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。<br>单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。<figure class=\"highlight python\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"keyword\">from</span> sklearn.model_selection <span class=\"keyword\">import</span> KFold,StratifiedKFold</span><br><span class=\"line\"><span class=\"keyword\">import</span> pandas <span class=\"keyword\">as</span> pd</span><br><span class=\"line\">X = np.array([</span><br><span class=\"line\">[<span class=\"number\">1</span>,<span class=\"number\">2</span>,<span class=\"number\">3</span>,<span class=\"number\">4</span>],</span><br><span class=\"line\">[<span class=\"number\">11</span>,<span class=\"number\">12</span>,<span class=\"number\">13</span>,<span class=\"number\">14</span>],</span><br><span class=\"line\">[<span class=\"number\">21</span>,<span class=\"number\">22</span>,<span class=\"number\">23</span>,<span class=\"number\">24</span>],</span><br><span class=\"line\">[<span class=\"number\">31</span>,<span class=\"number\">32</span>,<span class=\"number\">33</span>,<span class=\"number\">34</span>],</span><br><span class=\"line\">[<span class=\"number\">41</span>,<span class=\"number\">42</span>,<span class=\"number\">43</span>,<span class=\"number\">44</span>],</span><br><span class=\"line\">[<span class=\"number\">51</span>,<span class=\"number\">52</span>,<span class=\"number\">53</span>,<span class=\"number\">54</span>],</span><br><span class=\"line\">[<span class=\"number\">61</span>,<span class=\"number\">62</span>,<span class=\"number\">63</span>,<span class=\"number\">64</span>],</span><br><span class=\"line\">[<span class=\"number\">71</span>,<span class=\"number\">72</span>,<span class=\"number\">73</span>,<span class=\"number\">74</span>]</span><br><span class=\"line\">])</span><br><span class=\"line\">y=np.array([<span class=\"number\">1</span>,<span class=\"number\">1</span>,<span class=\"number\">0</span>,<span class=\"number\">0</span>,<span class=\"number\">1</span>,<span class=\"number\">1</span>,<span class=\"number\">0</span>,<span class=\"number\">0</span>])</span><br><span class=\"line\">folder = KFold(n_splits=<span class=\"number\">4</span>)</span><br><span class=\"line\">sfloder = StratifiedKFold(n_splits=<span class=\"number\">4</span>)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">"KFOLD:"</span>)</span><br><span class=\"line\"><span class=\"keyword\">for</span> train,test <span class=\"keyword\">in</span> folder.split(X,y):</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">f"train:<span class=\"subst\">{train}</span>,test:<span class=\"subst\">{test}</span>"</span>)</span><br><span class=\"line\"><span class=\"built_in\">print</span>(<span class=\"string\">"SKFOLD:"</span>)</span><br><span class=\"line\"><span class=\"keyword\">for</span> train,test <span class=\"keyword\">in</span> sfloder.split(X,y):</span><br><span class=\"line\"> <span class=\"built_in\">print</span>(<span class=\"string\">f"train:<span class=\"subst\">{train}</span>,test:<span class=\"subst\">{test}</span>"</span>)</span><br></pre></td></tr></table></figure>\n <img src=\"/img/machinelearning/kfold-skfold.png\"></li>\n<li>自助法</li>\n<li>交叉验证法</li>\n</ul>\n"},{"title":"page","abbrlink":1441,"date":"2024-08-01T01:00:10.000Z","_content":"\n- [deploy](./deploy)\n- ","source":"_posts/frontend/frontend.md","raw":"---\ntitle: page\nabbrlink: 1441\ndate: 2024-08-01 09:00:10\ntags:\n---\n\n- [deploy](./deploy)\n- ","slug":"frontend/frontend","published":1,"updated":"2024-08-09T12:21:50.023Z","comments":1,"layout":"post","photos":[],"_id":"cm5w9lrdj0007tgah975l4qm5","content":"<ul>\n<li><a href=\"./deploy\">deploy</a></li>\n<li></li>\n</ul>\n","cover":false,"excerpt":"","more":"<ul>\n<li><a href=\"./deploy\">deploy</a></li>\n<li></li>\n</ul>\n"},{"title":"网络相关","abbrlink":41168,"date":"2024-08-07T02:06:08.000Z","_content":"\n","source":"_posts/net/index.md","raw":"---\ntitle: 网络相关\nabbrlink: 41168\ndate: 2024-08-07 10:06:08\ntags:\n---\n\n","slug":"net/index","published":1,"updated":"2024-08-09T12:21:50.028Z","comments":1,"layout":"post","photos":[],"_id":"cm5w9lrdm000atgahetofhexy","content":"","cover":false,"excerpt":"","more":""},{"title":"uniapp 开发","abbrlink":58817,"date":"2024-08-05T06:07:01.000Z","_content":"- [uniapp component](../component1)","source":"_posts/frontend/uniapp/uniapp.md","raw":"---\ntitle: uniapp 开发\ntags: uniapp\nabbrlink: 58817\ndate: 2024-08-05 14:07:01\n---\n- [uniapp component](../component1)","slug":"frontend/uniapp/uniapp","published":1,"updated":"2024-08-09T12:21:50.039Z","comments":1,"layout":"post","photos":[],"_id":"cm5w9lrdn000ctgah8ll3dor6","content":"<ul>\n<li><a href=\"../component1\">uniapp component</a></li>\n</ul>\n","cover":false,"excerpt":"","more":"<ul>\n<li><a href=\"../component1\">uniapp component</a></li>\n</ul>\n"},{"title":"郑伯克段于鄢","abbrlink":58638,"date":"2024-08-09T12:00:13.000Z","_content":"原文如下:\n\n 初,郑武公娶于申【申国】,曰武姜【武为武公谥号,姜为其宗族之性】。生庄公及共叔段【共表示其曾出逃到共,叔为老三,段为名】。庄公寤生【出生时头先出,难产】,惊姜氏,故名曰“寤生”, 遂恶之,爱【喜爱】共叔段,欲立【立为储君】之,亟(qì)【多次】请于武公,及庄公即位,为之【共叔段】请制【一个叫制的封地,虎牢关所在】。公曰:“制,岩邑【险要的城邑】也,虢叔死焉,佗【通“他”,其他】邑唯命(是听)。”请京,使居之,谓之“京城大叔”。","source":"_posts/ancient/guwenguanzhi/1.md","raw":"---\ntitle: 郑伯克段于鄢\ntags: 古文观止\ncategories:\n - 古文观止\nabbrlink: 58638\ndate: 2024-08-09 20:00:13\n---\n原文如下:\n\n 初,郑武公娶于申【申国】,曰武姜【武为武公谥号,姜为其宗族之性】。生庄公及共叔段【共表示其曾出逃到共,叔为老三,段为名】。庄公寤生【出生时头先出,难产】,惊姜氏,故名曰“寤生”, 遂恶之,爱【喜爱】共叔段,欲立【立为储君】之,亟(qì)【多次】请于武公,及庄公即位,为之【共叔段】请制【一个叫制的封地,虎牢关所在】。公曰:“制,岩邑【险要的城邑】也,虢叔死焉,佗【通“他”,其他】邑唯命(是听)。”请京,使居之,谓之“京城大叔”。","slug":"ancient/guwenguanzhi/1","published":1,"updated":"2024-08-10T02:31:03.678Z","comments":1,"layout":"post","photos":[],"_id":"cm5w9lrdn000dtgah04audthw","content":"<p>原文如下:</p>\n<p> 初,郑武公娶于申【申国】,曰武姜【武为武公谥号,姜为其宗族之性】。生庄公及共叔段【共表示其曾出逃到共,叔为老三,段为名】。庄公寤生【出生时头先出,难产】,惊姜氏,故名曰“寤生”, 遂恶之,爱【喜爱】共叔段,欲立【立为储君】之,亟(qì)【多次】请于武公,及庄公即位,为之【共叔段】请制【一个叫制的封地,虎牢关所在】。公曰:“制,岩邑【险要的城邑】也,虢叔死焉,佗【通“他”,其他】邑唯命(是听)。”请京,使居之,谓之“京城大叔”。</p>\n","cover":false,"excerpt":"","more":"<p>原文如下:</p>\n<p> 初,郑武公娶于申【申国】,曰武姜【武为武公谥号,姜为其宗族之性】。生庄公及共叔段【共表示其曾出逃到共,叔为老三,段为名】。庄公寤生【出生时头先出,难产】,惊姜氏,故名曰“寤生”, 遂恶之,爱【喜爱】共叔段,欲立【立为储君】之,亟(qì)【多次】请于武公,及庄公即位,为之【共叔段】请制【一个叫制的封地,虎牢关所在】。公曰:“制,岩邑【险要的城邑】也,虢叔死焉,佗【通“他”,其他】邑唯命(是听)。”请京,使居之,谓之“京城大叔”。</p>\n"},{"title":"组件使用","abbrlink":33957,"date":"2024-08-05T06:07:01.000Z","_content":"\n### 组件自动导入\n```json\n\t\"easycom\":{\n\t \"autoscan\": true,\n\t \"custom\": {\n\t \"^tui-(.*)\": \"@/components/thorui/tui-$1/tui-$1.vue\" // 匹配components目录内的vue文件\n\t }\n\t}\n```\n\n### `tui-sticky 吸顶容器` \n\n> 包含 以下 `tui` 组件 :\n> - tui-sticky\n> - tui-list-view\n> - tui-list-cell\n> \n\n```html\n<tui-sticky :scrollTop=\"scrollTop\" stickyHeight=\"104rpx\" container>\n <!-- header start -->\n <template v-slot:header>\n <view class=\"sticky-item\">\n <view class=\"setting\">设置</view>\n </view>\n </template>\n <!-- header end -->\n <!--内容 start-->\n <template v-slot:content>\n <tui-list-view class=\"content\">\n <tui-list-cell :arrow=\"false\">\n <switch class='switch' checked color=\"#FFCC33\" />\n </tui-list-cell>\n </tui-list-view>\n </template>\n <!--内容 end-->\n</tui-sticky>\n\n<script setup>\n import { ref } from 'vue'\n import { onPageScroll } from '@dcloudio/uni-app'\n\n // 定义 scrollTop 响应式变量\n const scrollTop = ref(0)\n // 监听页面滚动事件\n onPageScroll((e) => {\n scrollTop.value = e.scrollTop\n })\n</script>\n```\n","source":"_posts/frontend/uniapp/component1.md","raw":"---\ntitle: 组件使用\ntags: uniapp\nabbrlink: 33957\ndate: 2024-08-05 14:07:01\n---\n\n### 组件自动导入\n```json\n\t\"easycom\":{\n\t \"autoscan\": true,\n\t \"custom\": {\n\t \"^tui-(.*)\": \"@/components/thorui/tui-$1/tui-$1.vue\" // 匹配components目录内的vue文件\n\t }\n\t}\n```\n\n### `tui-sticky 吸顶容器` \n\n> 包含 以下 `tui` 组件 :\n> - tui-sticky\n> - tui-list-view\n> - tui-list-cell\n> \n\n```html\n<tui-sticky :scrollTop=\"scrollTop\" stickyHeight=\"104rpx\" container>\n <!-- header start -->\n <template v-slot:header>\n <view class=\"sticky-item\">\n <view class=\"setting\">设置</view>\n </view>\n </template>\n <!-- header end -->\n <!--内容 start-->\n <template v-slot:content>\n <tui-list-view class=\"content\">\n <tui-list-cell :arrow=\"false\">\n <switch class='switch' checked color=\"#FFCC33\" />\n </tui-list-cell>\n </tui-list-view>\n </template>\n <!--内容 end-->\n</tui-sticky>\n\n<script setup>\n import { ref } from 'vue'\n import { onPageScroll } from '@dcloudio/uni-app'\n\n // 定义 scrollTop 响应式变量\n const scrollTop = ref(0)\n // 监听页面滚动事件\n onPageScroll((e) => {\n scrollTop.value = e.scrollTop\n })\n</script>\n```\n","slug":"frontend/uniapp/component1","published":1,"updated":"2024-08-09T12:21:50.042Z","comments":1,"layout":"post","photos":[],"_id":"cm5w9lrdo000gtgah38tl6q9j","content":"<h3 id=\"组件自动导入\"><a href=\"#组件自动导入\" class=\"headerlink\" title=\"组件自动导入\"></a>组件自动导入</h3><figure class=\"highlight json\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"attr\">"easycom"</span><span class=\"punctuation\">:</span><span class=\"punctuation\">{</span></span><br><span class=\"line\"> <span class=\"attr\">"autoscan"</span><span class=\"punctuation\">:</span> <span class=\"literal\"><span class=\"keyword\">true</span></span><span class=\"punctuation\">,</span></span><br><span class=\"line\"> <span class=\"attr\">"custom"</span><span class=\"punctuation\">:</span> <span class=\"punctuation\">{</span></span><br><span class=\"line\"> <span class=\"attr\">"^tui-(.*)"</span><span class=\"punctuation\">:</span> <span class=\"string\">"@/components/thorui/tui-$1/tui-$1.vue"</span> <span class=\"comment\">// 匹配components目录内的vue文件</span></span><br><span class=\"line\"> <span class=\"punctuation\">}</span></span><br><span class=\"line\"><span class=\"punctuation\">}</span></span><br></pre></td></tr></table></figure>\n\n<h3 id=\"tui-sticky-吸顶容器\"><a href=\"#tui-sticky-吸顶容器\" class=\"headerlink\" title=\"tui-sticky 吸顶容器\"></a><code>tui-sticky 吸顶容器</code></h3><blockquote>\n<p>包含 以下 <code>tui</code> 组件 :</p>\n<ul>\n<li>tui-sticky</li>\n<li>tui-list-view</li>\n<li>tui-list-cell</li>\n</ul>\n</blockquote>\n<figure class=\"highlight html\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"tag\"><<span class=\"name\">tui-sticky</span> <span class=\"attr\">:scrollTop</span>=<span class=\"string\">"scrollTop"</span> <span class=\"attr\">stickyHeight</span>=<span class=\"string\">"104rpx"</span> <span class=\"attr\">container</span>></span></span><br><span class=\"line\"> <span class=\"comment\"><!-- header start --></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">template</span> <span class=\"attr\">v-slot:header</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">view</span> <span class=\"attr\">class</span>=<span class=\"string\">"sticky-item"</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">view</span> <span class=\"attr\">class</span>=<span class=\"string\">"setting"</span>></span>设置<span class=\"tag\"></<span class=\"name\">view</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">view</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">template</span>></span></span><br><span class=\"line\"> <span class=\"comment\"><!-- header end --></span></span><br><span class=\"line\"> <span class=\"comment\"><!--内容 start--></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">template</span> <span class=\"attr\">v-slot:content</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">tui-list-view</span> <span class=\"attr\">class</span>=<span class=\"string\">"content"</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">tui-list-cell</span> <span class=\"attr\">:arrow</span>=<span class=\"string\">"false"</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">switch</span> <span class=\"attr\">class</span>=<span class=\"string\">'switch'</span> <span class=\"attr\">checked</span> <span class=\"attr\">color</span>=<span class=\"string\">"#FFCC33"</span> /></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">tui-list-cell</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">tui-list-view</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">template</span>></span></span><br><span class=\"line\"> <span class=\"comment\"><!--内容 end--></span></span><br><span class=\"line\"><span class=\"tag\"></<span class=\"name\">tui-sticky</span>></span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"tag\"><<span class=\"name\">script</span> <span class=\"attr\">setup</span>></span><span class=\"language-javascript\"></span></span><br><span class=\"line\"><span class=\"language-javascript\"> <span class=\"keyword\">import</span> { ref } <span class=\"keyword\">from</span> <span class=\"string\">'vue'</span></span></span><br><span class=\"line\"><span class=\"language-javascript\"> <span class=\"keyword\">import</span> { onPageScroll } <span class=\"keyword\">from</span> <span class=\"string\">'@dcloudio/uni-app'</span></span></span><br><span class=\"line\"><span class=\"language-javascript\"></span></span><br><span class=\"line\"><span class=\"language-javascript\"> <span class=\"comment\">// 定义 scrollTop 响应式变量</span></span></span><br><span class=\"line\"><span class=\"language-javascript\"> <span class=\"keyword\">const</span> scrollTop = <span class=\"title function_\">ref</span>(<span class=\"number\">0</span>)</span></span><br><span class=\"line\"><span class=\"language-javascript\"> <span class=\"comment\">// 监听页面滚动事件</span></span></span><br><span class=\"line\"><span class=\"language-javascript\"> <span class=\"title function_\">onPageScroll</span>(<span class=\"function\">(<span class=\"params\">e</span>) =></span> {</span></span><br><span class=\"line\"><span class=\"language-javascript\"> scrollTop.<span class=\"property\">value</span> = e.<span class=\"property\">scrollTop</span></span></span><br><span class=\"line\"><span class=\"language-javascript\"> })</span></span><br><span class=\"line\"><span class=\"language-javascript\"></span><span class=\"tag\"></<span class=\"name\">script</span>></span></span><br></pre></td></tr></table></figure>\n","cover":false,"excerpt":"","more":"<h3 id=\"组件自动导入\"><a href=\"#组件自动导入\" class=\"headerlink\" title=\"组件自动导入\"></a>组件自动导入</h3><figure class=\"highlight json\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"attr\">"easycom"</span><span class=\"punctuation\">:</span><span class=\"punctuation\">{</span></span><br><span class=\"line\"> <span class=\"attr\">"autoscan"</span><span class=\"punctuation\">:</span> <span class=\"literal\"><span class=\"keyword\">true</span></span><span class=\"punctuation\">,</span></span><br><span class=\"line\"> <span class=\"attr\">"custom"</span><span class=\"punctuation\">:</span> <span class=\"punctuation\">{</span></span><br><span class=\"line\"> <span class=\"attr\">"^tui-(.*)"</span><span class=\"punctuation\">:</span> <span class=\"string\">"@/components/thorui/tui-$1/tui-$1.vue"</span> <span class=\"comment\">// 匹配components目录内的vue文件</span></span><br><span class=\"line\"> <span class=\"punctuation\">}</span></span><br><span class=\"line\"><span class=\"punctuation\">}</span></span><br></pre></td></tr></table></figure>\n\n<h3 id=\"tui-sticky-吸顶容器\"><a href=\"#tui-sticky-吸顶容器\" class=\"headerlink\" title=\"tui-sticky 吸顶容器\"></a><code>tui-sticky 吸顶容器</code></h3><blockquote>\n<p>包含 以下 <code>tui</code> 组件 :</p>\n<ul>\n<li>tui-sticky</li>\n<li>tui-list-view</li>\n<li>tui-list-cell</li>\n</ul>\n</blockquote>\n<figure class=\"highlight html\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"tag\"><<span class=\"name\">tui-sticky</span> <span class=\"attr\">:scrollTop</span>=<span class=\"string\">"scrollTop"</span> <span class=\"attr\">stickyHeight</span>=<span class=\"string\">"104rpx"</span> <span class=\"attr\">container</span>></span></span><br><span class=\"line\"> <span class=\"comment\"><!-- header start --></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">template</span> <span class=\"attr\">v-slot:header</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">view</span> <span class=\"attr\">class</span>=<span class=\"string\">"sticky-item"</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">view</span> <span class=\"attr\">class</span>=<span class=\"string\">"setting"</span>></span>设置<span class=\"tag\"></<span class=\"name\">view</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">view</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">template</span>></span></span><br><span class=\"line\"> <span class=\"comment\"><!-- header end --></span></span><br><span class=\"line\"> <span class=\"comment\"><!--内容 start--></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">template</span> <span class=\"attr\">v-slot:content</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">tui-list-view</span> <span class=\"attr\">class</span>=<span class=\"string\">"content"</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">tui-list-cell</span> <span class=\"attr\">:arrow</span>=<span class=\"string\">"false"</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">switch</span> <span class=\"attr\">class</span>=<span class=\"string\">'switch'</span> <span class=\"attr\">checked</span> <span class=\"attr\">color</span>=<span class=\"string\">"#FFCC33"</span> /></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">tui-list-cell</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">tui-list-view</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">template</span>></span></span><br><span class=\"line\"> <span class=\"comment\"><!--内容 end--></span></span><br><span class=\"line\"><span class=\"tag\"></<span class=\"name\">tui-sticky</span>></span></span><br><span class=\"line\"></span><br><span class=\"line\"><span class=\"tag\"><<span class=\"name\">script</span> <span class=\"attr\">setup</span>></span><span class=\"language-javascript\"></span></span><br><span class=\"line\"><span class=\"language-javascript\"> <span class=\"keyword\">import</span> { ref } <span class=\"keyword\">from</span> <span class=\"string\">'vue'</span></span></span><br><span class=\"line\"><span class=\"language-javascript\"> <span class=\"keyword\">import</span> { onPageScroll } <span class=\"keyword\">from</span> <span class=\"string\">'@dcloudio/uni-app'</span></span></span><br><span class=\"line\"><span class=\"language-javascript\"></span></span><br><span class=\"line\"><span class=\"language-javascript\"> <span class=\"comment\">// 定义 scrollTop 响应式变量</span></span></span><br><span class=\"line\"><span class=\"language-javascript\"> <span class=\"keyword\">const</span> scrollTop = <span class=\"title function_\">ref</span>(<span class=\"number\">0</span>)</span></span><br><span class=\"line\"><span class=\"language-javascript\"> <span class=\"comment\">// 监听页面滚动事件</span></span></span><br><span class=\"line\"><span class=\"language-javascript\"> <span class=\"title function_\">onPageScroll</span>(<span class=\"function\">(<span class=\"params\">e</span>) =></span> {</span></span><br><span class=\"line\"><span class=\"language-javascript\"> scrollTop.<span class=\"property\">value</span> = e.<span class=\"property\">scrollTop</span></span></span><br><span class=\"line\"><span class=\"language-javascript\"> })</span></span><br><span class=\"line\"><span class=\"language-javascript\"></span><span class=\"tag\"></<span class=\"name\">script</span>></span></span><br></pre></td></tr></table></figure>\n"},{"title":"Docker被墙,如何继续使用?","top_img":"/img/site01.jpg","top_img_height":"800px","abbrlink":47807,"date":"2024-08-01T01:10:40.000Z","_content":"\n## Docker Download\n> 自从docker官方仓库在中国大陆被墙后,docker的部署方式也发生了改变。\n> 解决docker安装问题:https://github.com/shenjianZ/docker_installer\n\n1. 安装docker \n ```shell\n sudo curl -fsSL https://gitee.com/tech-shrimp/docker_installer/releases/download/latest/linux.sh| bash -s docker --mirror Aliyun\n ```\n \n2. 启动docker\n ```shell\n sudo systemctl start docker\n ```\n \n3. 设置开机自启\n ```shell\n sudo systemctl enable docker\n ```\n \n4. Docker pull images\n > 将image下载到阿里云镜像仓库中\n > 解决docker pull 镜像问题:https://github.com/shenjianZ/docker_image_pusher\n \n 1. **登录阿里云镜像服务** https://cr.console.aliyun.com/,\n\n 启用个人实例,创建一个命名空间(`ALIYUN_NAME_SPACE`)\n\n 2. 在**访问凭证** 可以看到账号 用户名(`ALIYUN_REGISTRY_USER`)\n\n 密码(`ALIYUN_REGISTRY_PASSWORD`)\n\n 仓库地址(`ALIYUN_REGISTRY`)\n\n 3. **启动Action**\n 进入您自己的项目,点击`Action`,启用`Github Action`功能\n \n 4. **配置环境变量**\n 进入Settings->Secret and variables->Actions->New Repository secret\n 将上一步的四个值\n `ALIYUN_NAME_SPACE`,\n \n ` ALIYUN_REGISTRY_USER`,\n \n `ALIYUN_REGISTRY_PASSWORD`,\n \n `ALIYUN_REGISTRY`\n 配置成环境变量\n \n 5. **添加镜像**\n 打开`images.txt`文件,添加你想要的镜像 可以加tag\n \n 6. 使用镜像\n 回到阿里云,镜像仓库,点击任意镜像,可查看镜像状态。(可以改成公开,拉取镜像免登录)","source":"_posts/frontend/deploy/deploy.md","raw":"---\ntitle: Docker被墙,如何继续使用?\ntop_img: /img/site01.jpg\ntop_img_height: 800px\nabbrlink: 47807\ndate: 2024-08-01 09:10:40\ntags:\n---\n\n## Docker Download\n> 自从docker官方仓库在中国大陆被墙后,docker的部署方式也发生了改变。\n> 解决docker安装问题:https://github.com/shenjianZ/docker_installer\n\n1. 安装docker \n ```shell\n sudo curl -fsSL https://gitee.com/tech-shrimp/docker_installer/releases/download/latest/linux.sh| bash -s docker --mirror Aliyun\n ```\n \n2. 启动docker\n ```shell\n sudo systemctl start docker\n ```\n \n3. 设置开机自启\n ```shell\n sudo systemctl enable docker\n ```\n \n4. Docker pull images\n > 将image下载到阿里云镜像仓库中\n > 解决docker pull 镜像问题:https://github.com/shenjianZ/docker_image_pusher\n \n 1. **登录阿里云镜像服务** https://cr.console.aliyun.com/,\n\n 启用个人实例,创建一个命名空间(`ALIYUN_NAME_SPACE`)\n\n 2. 在**访问凭证** 可以看到账号 用户名(`ALIYUN_REGISTRY_USER`)\n\n 密码(`ALIYUN_REGISTRY_PASSWORD`)\n\n 仓库地址(`ALIYUN_REGISTRY`)\n\n 3. **启动Action**\n 进入您自己的项目,点击`Action`,启用`Github Action`功能\n \n 4. **配置环境变量**\n 进入Settings->Secret and variables->Actions->New Repository secret\n 将上一步的四个值\n `ALIYUN_NAME_SPACE`,\n \n ` ALIYUN_REGISTRY_USER`,\n \n `ALIYUN_REGISTRY_PASSWORD`,\n \n `ALIYUN_REGISTRY`\n 配置成环境变量\n \n 5. **添加镜像**\n 打开`images.txt`文件,添加你想要的镜像 可以加tag\n \n 6. 使用镜像\n 回到阿里云,镜像仓库,点击任意镜像,可查看镜像状态。(可以改成公开,拉取镜像免登录)","slug":"frontend/deploy/deploy","published":1,"updated":"2024-08-09T12:21:50.045Z","comments":1,"layout":"post","photos":[],"_id":"cm5w9lrdt000otgah0ogb4vdp","content":"<h2 id=\"Docker-Download\"><a href=\"#Docker-Download\" class=\"headerlink\" title=\"Docker Download\"></a>Docker Download</h2><blockquote>\n<p>自从docker官方仓库在中国大陆被墙后,docker的部署方式也发生了改变。<br>解决docker安装问题:<a href=\"https://github.com/shenjianZ/docker_installer\">https://github.com/shenjianZ/docker_installer</a></p>\n</blockquote>\n<ol>\n<li><p>安装docker </p>\n <figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo curl -fsSL https://gitee.com/tech-shrimp/docker_installer/releases/download/latest/linux.sh| bash -s docker --mirror Aliyun</span><br></pre></td></tr></table></figure>\n</li>\n<li><p>启动docker</p>\n <figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo systemctl start docker</span><br></pre></td></tr></table></figure>\n</li>\n<li><p>设置开机自启</p>\n <figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo systemctl enable docker</span><br></pre></td></tr></table></figure>\n</li>\n<li><p>Docker pull images</p>\n<blockquote>\n<p>将image下载到阿里云镜像仓库中<br>解决docker pull 镜像问题:<a href=\"https://github.com/shenjianZ/docker_image_pusher\">https://github.com/shenjianZ/docker_image_pusher</a></p>\n</blockquote>\n<ol>\n<li><p><strong>登录阿里云镜像服务</strong> <a href=\"https://cr.console.aliyun.com/\">https://cr.console.aliyun.com/</a>,</p>\n<p>启用个人实例,创建一个命名空间(<code>ALIYUN_NAME_SPACE</code>)</p>\n</li>\n<li><p>在<strong>访问凭证</strong> 可以看到账号 用户名(<code>ALIYUN_REGISTRY_USER</code>)</p>\n<p>密码(<code>ALIYUN_REGISTRY_PASSWORD</code>)</p>\n<p>仓库地址(<code>ALIYUN_REGISTRY</code>)</p>\n</li>\n<li><p><strong>启动Action</strong><br>进入您自己的项目,点击<code>Action</code>,启用<code>Github Action</code>功能</p>\n</li>\n<li><p><strong>配置环境变量</strong><br>进入Settings->Secret and variables->Actions->New Repository secret<br> 将上一步的四个值<br> <code>ALIYUN_NAME_SPACE</code>,</p>\n<p> <code> ALIYUN_REGISTRY_USER</code>,</p>\n<p> <code>ALIYUN_REGISTRY_PASSWORD</code>,</p>\n<p> <code>ALIYUN_REGISTRY</code><br> 配置成环境变量</p>\n</li>\n<li><p><strong>添加镜像</strong><br> 打开<code>images.txt</code>文件,添加你想要的镜像 可以加tag</p>\n</li>\n<li><p>使用镜像<br>回到阿里云,镜像仓库,点击任意镜像,可查看镜像状态。(可以改成公开,拉取镜像免登录)</p>\n</li>\n</ol>\n</li>\n</ol>\n","cover":false,"excerpt":"","more":"<h2 id=\"Docker-Download\"><a href=\"#Docker-Download\" class=\"headerlink\" title=\"Docker Download\"></a>Docker Download</h2><blockquote>\n<p>自从docker官方仓库在中国大陆被墙后,docker的部署方式也发生了改变。<br>解决docker安装问题:<a href=\"https://github.com/shenjianZ/docker_installer\">https://github.com/shenjianZ/docker_installer</a></p>\n</blockquote>\n<ol>\n<li><p>安装docker </p>\n <figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo curl -fsSL https://gitee.com/tech-shrimp/docker_installer/releases/download/latest/linux.sh| bash -s docker --mirror Aliyun</span><br></pre></td></tr></table></figure>\n</li>\n<li><p>启动docker</p>\n <figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo systemctl start docker</span><br></pre></td></tr></table></figure>\n</li>\n<li><p>设置开机自启</p>\n <figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sudo systemctl enable docker</span><br></pre></td></tr></table></figure>\n</li>\n<li><p>Docker pull images</p>\n<blockquote>\n<p>将image下载到阿里云镜像仓库中<br>解决docker pull 镜像问题:<a href=\"https://github.com/shenjianZ/docker_image_pusher\">https://github.com/shenjianZ/docker_image_pusher</a></p>\n</blockquote>\n<ol>\n<li><p><strong>登录阿里云镜像服务</strong> <a href=\"https://cr.console.aliyun.com/\">https://cr.console.aliyun.com/</a>,</p>\n<p>启用个人实例,创建一个命名空间(<code>ALIYUN_NAME_SPACE</code>)</p>\n</li>\n<li><p>在<strong>访问凭证</strong> 可以看到账号 用户名(<code>ALIYUN_REGISTRY_USER</code>)</p>\n<p>密码(<code>ALIYUN_REGISTRY_PASSWORD</code>)</p>\n<p>仓库地址(<code>ALIYUN_REGISTRY</code>)</p>\n</li>\n<li><p><strong>启动Action</strong><br>进入您自己的项目,点击<code>Action</code>,启用<code>Github Action</code>功能</p>\n</li>\n<li><p><strong>配置环境变量</strong><br>进入Settings->Secret and variables->Actions->New Repository secret<br> 将上一步的四个值<br> <code>ALIYUN_NAME_SPACE</code>,</p>\n<p> <code> ALIYUN_REGISTRY_USER</code>,</p>\n<p> <code>ALIYUN_REGISTRY_PASSWORD</code>,</p>\n<p> <code>ALIYUN_REGISTRY</code><br> 配置成环境变量</p>\n</li>\n<li><p><strong>添加镜像</strong><br> 打开<code>images.txt</code>文件,添加你想要的镜像 可以加tag</p>\n</li>\n<li><p>使用镜像<br>回到阿里云,镜像仓库,点击任意镜像,可查看镜像状态。(可以改成公开,拉取镜像免登录)</p>\n</li>\n</ol>\n</li>\n</ol>\n"},{"title":"Hadoop集群搭建基础环境","top_img":"/img/site01.jpg","top_img_height":"800px","abbrlink":61253,"date":"2024-09-11T14:45:40.000Z","_content":"\n### 防火墙关闭\n```bash\n# 在 6 台主机执行\nsystemctl stop firewalld\nsystemctl disable firewalld\n```\n### 配置yum源\n- 下载 repo 文件:\n [Centos-7.repo](http://mirrors.aliyun.com/repo/Centos-7.repo)\n 并上传到`/tmp`,进入到`/tmp`\n- 备份并且替换系统的repo文件\n ``` bash\n \tcp Centos-7.repo /etc/yum.repos.d/ \n\tcd /etc/yum.repos.d/ \n\tmv CentOS-Base.repo CentOS-Base.repo.bak \n\tmv Centos-7.repo CentOS-Base.repo\n\t ```\n- 将`nn1`上的`CentOS-Base.repo`拷贝到其他主机\n ```bash\n scp /etc/yum.repos.d/CentOS-Base.repo root@nn2:/etc/yum.repos.d\n scp /etc/yum.repos.d/CentOS-Base.repo root@nn3:/etc/yum.repos.d\n scp /etc/yum.repos.d/CentOS-Base.repo root@s1:/etc/yum.repos.d\n scp /etc/yum.repos.d/CentOS-Base.repo root@s2:/etc/yum.repos.d\n scp /etc/yum.repos.d/CentOS-Base.repo root@s3:/etc/yum.repos.d\n ```\n- 执行yum源更新命令\n ```bash\n\t yum clean all\n\t yum makecache \n\t yum update -y \n\t```\n- 安装常用软件\n ```bash\n yum install -y openssh-server vim gcc gcc-c++ glibc-headers bzip2-devel lzo-devel curl wget openssh-clients zlib-devel autoconf automake cmake libtool openssl-devel fuse-devel snappy-devel telnet unzip zip net-tools.x86_64 firewalld systemd ntp unrar bzip2\n ```\n### JDK安装\n>注意需要在六台机器依次执行\n- 上传到`/tmp`目录下,安装\n ```bash\n cd /tmp\n rpm -ivh jdk-8u144-linux-x64.rpm\n ```\n- 配置环境变量\n ```bash\n ln -s /usr/java/jdk1.8.0_144/ /usr/java/jdk1.8\n echo 'export JAVA_HOME=/usr/java/jdk1.8' >> /etc/profile.d/myEnv.sh \n echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile.d/myEnv.sh \n source /etc/profile \n java -version\n ```\n### 修改主机名和主机名映射\n\n```bash\nvim /etc/hostname\n```\n6台机器分别为nn1、nn2、nn3、s1、s2、s3\n\n```bash\nvim /etc/hosts\n```\n\n修改为\n```text\n192.168.1.30 nn1\n192.168.1.31 nn2\n192.168.1.32 nn3\n192.168.1.33 s1\n192.168.1.34 s2\n192.168.1.35 s3\n```\n### 创建hadoop用户\n```bash\n#创建hadoop用户 \nuseradd hadoop \n#给hadoop用户设置密码: 12345678 \npasswd hadoop\n```\n### 禁止非 wheel 组用户切换到root,配置免密切换root\n- 修改/etc/pam.d/su配置\n ```bash\n sed -i 's/#auth\\t\\trequired\\tpam_wheel.so/auth\\t\\trequired\\tpam_wheel.so/g' '/etc/pam.d/su' \n sed -i 's/#auth\\t\\tsufficient\\tpam_wheel.so/auth\\t\\tsufficient\\tpam_wheel.so/g' '/etc/pam.d/su'\n ```\n- 修改/etc/login.defs文件\n ```bash\n echo \"SU_WHEEL_ONLY yes\" >> /etc/login.defs\n ```\n- 添加用户到管理员,禁止普通用户su 到 root\n ```bash\n #把hadoop用户加到wheel组里\n gpasswd -a hadoop wheel\n #查看wheel组里是否有hadoop用户\n cat /etc/group | grep wheel\n ```\n### 给hadoop用户,配置SSH密钥\n#### 配置hadoop用户ssh免密码登录到hadoop\n- 仅在`nn1`执行这段脚本命令即可\n 但是 `su - hadoop ` ,` mkdir ~/.ssh` 需要在其他主机执行一下\n ```bash\n #切换到hadoop用户 \n su - hadoop\n #生成ssh公私钥 \n ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''\n ssh-copy-id nn1\n ssh-copy-id nn2\n ssh-copy-id nn3\n ssh-copy-id s1\n ssh-copy-id s2\n ssh-copy-id s3\n scp /home/hadoop/.ssh/id_rsa hadoop@nn2:/home/hadoop/.ssh\n scp /home/hadoop/.ssh/id_rsa hadoop@nn3:/home/hadoop/.ssh\n scp /home/hadoop/.ssh/id_rsa hadoop@s1:/home/hadoop/.ssh\n scp /home/hadoop/.ssh/id_rsa hadoop@s2:/home/hadoop/.ssh\n scp /home/hadoop/.ssh/id_rsa hadoop@s3:/home/hadoop/.ssh\n ```\n#### 配置hadoop用户ssh免密码登录到root\n- 同上\n ```bash\n ssh-copy-id root@nn1\n ssh-copy-id root@ nn2\n ssh-copy-id root@nn3\n ssh-copy-id root@s1\n ssh-copy-id root@s2\n ssh-copy-id root@s3\n scp /home/hadoop/.ssh/id_rsa root@nn2:/root/.ssh\n scp /home/hadoop/.ssh/id_rsa root@nn3:/root/.ssh\n scp /home/hadoop/.ssh/id_rsa root@s1:/root/.ssh\n scp /home/hadoop/.ssh/id_rsa root@s2:/root/.ssh\n scp /home/hadoop/.ssh/id_rsa root@s3:/root/.ssh\n ```\n### 脚本配置\n- **ips**\n ```bash\n vim /home/hadoop/bin/ips\n ```\n \n ```bash\n nn1 \n nn2\n nn3\n s1 \n s2 \n s3\n ```\n- **ssh_all.sh**\n ```bash\n vim /home/hadoop/bin/ssh_all.sh\n ```\n\n ```bash\n #! /bin/bash\n # 进入到当前脚本所在目录\n cd `dirname $0`\n # 获取当前脚本所在目录\n dir_path=`pwd`\n #echo $dir_path\n # 读ips文件得到数组(里面是一堆主机名)\n ip_arr=(`cat $dir_path/ips`)\n # 遍历数组里的主机名\n for ip in ${ip_arr[*]}\n do\n # 拼接ssh命令: ssh hadoop@nn1.hadoop ls\n cmd_=\"ssh hadoop@${ip} \\\"$*\\\" \"\n echo $cmd_\n # 通过eval命令 执行 拼接的ssh 命令\n if eval ${cmd_} ; then\n echo \"OK\"\n else\n echo \"FAIL\"\n fi\n done\n ```\n- **ssh_root.sh**\n ```bash\n #! /bin/bash\n # 进入到当前脚本所在目录\n cd `dirname $0`\n # 获取当前脚本所在目录\n dir_path=`pwd`\n #echo $dir_path\n # 读ips文件得到数组(里面是一堆主机名)\n ip_arr=(`cat $dir_path/ips`)\n # 遍历数组里的主机名\n for ip in ${ip_arr[*]}\n do\n # 拼接ssh命令: ssh hadoop@nn1.hadoop ls\n cmd_=\"ssh hadoop@${ip} ~/bin/exe.sh \\\"$*\\\"\"\n echo $cmd_\n # 通过eval命令 执行 拼接的ssh 命令\n if eval ${cmd_} ; then\n echo \"OK\"\n else\n echo \"FAIL\"\n fi\n done\n ```\n- **scp_all.sh**\n ```bash\n #! /bin/bash\n # 进入到当前脚本所在目录\n cd `dirname $0`\n # 获取当前脚本所在目录\n dir_path=`pwd`\n #echo $dir_path\n # 读ips文件得到数组(里面是一堆主机名)\n ip_arr=(`cat $dir_path/ips`)\n # 源\n source_=$1\n # 目标\n target=$2\n # 遍历数组里的主机名\n for ip in ${ip_arr[*]}\n do\n # 拼接scp命令: scp 源 hadoop@nn1.hadoop:目标\n cmd_=\"scp -r ${source_} hadoop@${ip}:${target}\"\n echo $cmd_\n # 通过eval命令 执行 拼接的scp 命令\n if eval ${cmd_} ; then\n echo \"OK\"\n else\n echo \"FAIL\"\n fi\n done\n ```\n- **exe.sh**\n ```bash\n #切换到root用户执行cmd命令\n cmd=$*\n su - << EOF\n $cmd\n EOF\n ```\n- 赋予执行权限\n ```bash\n chmod +x ssh_all.sh \n chmod +x scp_all.sh\n chmod +x ssh_root.sh\n chmod +x exe.sh\n ```\n- 分发到其他主机\n ```bash\n ./ssh_all.sh mkdir /home/hadoop/bin\n ./scp_all.sh /home/hadoop/bin/ips /home/hadoop/bin/\n ./scp_all.sh /home/hadoop/bin/exe.sh /home/hadoop/bin/\n ./scp_all.sh /home/hadoop/bin/ssh_all.sh /home/hadoop/bin/\n ./scp_all.sh /home/hadoop/bin/scp_all.sh /home/hadoop/bin/\n ./scp_all.sh /home/hadoop/bin/ssh_root.sh /home/hadoop/bin/\n ```\n\n- 将 `/home/hadoop/bin`添加到hadoop用户的环境变量,需要切换到`hadoop`用户\n\n ```bash\n echo 'export PATH=$PATH:/home/hadoop/bin' >> ~/.bashrc && source ~/.bashrc\n scp_all.sh /home/hadoop/.bashrc /home/hadoop/\n ssh_all.sh source ~/.bashrc \n ```","source":"_posts/bigdata/hadoop/env.md","raw":"---\ntitle: Hadoop集群搭建基础环境\ntop_img: /img/site01.jpg\ntop_img_height: 800px\nabbrlink: 61253\ndate: 2024-09-011 22:45:40\n---\n\n### 防火墙关闭\n```bash\n# 在 6 台主机执行\nsystemctl stop firewalld\nsystemctl disable firewalld\n```\n### 配置yum源\n- 下载 repo 文件:\n [Centos-7.repo](http://mirrors.aliyun.com/repo/Centos-7.repo)\n 并上传到`/tmp`,进入到`/tmp`\n- 备份并且替换系统的repo文件\n ``` bash\n \tcp Centos-7.repo /etc/yum.repos.d/ \n\tcd /etc/yum.repos.d/ \n\tmv CentOS-Base.repo CentOS-Base.repo.bak \n\tmv Centos-7.repo CentOS-Base.repo\n\t ```\n- 将`nn1`上的`CentOS-Base.repo`拷贝到其他主机\n ```bash\n scp /etc/yum.repos.d/CentOS-Base.repo root@nn2:/etc/yum.repos.d\n scp /etc/yum.repos.d/CentOS-Base.repo root@nn3:/etc/yum.repos.d\n scp /etc/yum.repos.d/CentOS-Base.repo root@s1:/etc/yum.repos.d\n scp /etc/yum.repos.d/CentOS-Base.repo root@s2:/etc/yum.repos.d\n scp /etc/yum.repos.d/CentOS-Base.repo root@s3:/etc/yum.repos.d\n ```\n- 执行yum源更新命令\n ```bash\n\t yum clean all\n\t yum makecache \n\t yum update -y \n\t```\n- 安装常用软件\n ```bash\n yum install -y openssh-server vim gcc gcc-c++ glibc-headers bzip2-devel lzo-devel curl wget openssh-clients zlib-devel autoconf automake cmake libtool openssl-devel fuse-devel snappy-devel telnet unzip zip net-tools.x86_64 firewalld systemd ntp unrar bzip2\n ```\n### JDK安装\n>注意需要在六台机器依次执行\n- 上传到`/tmp`目录下,安装\n ```bash\n cd /tmp\n rpm -ivh jdk-8u144-linux-x64.rpm\n ```\n- 配置环境变量\n ```bash\n ln -s /usr/java/jdk1.8.0_144/ /usr/java/jdk1.8\n echo 'export JAVA_HOME=/usr/java/jdk1.8' >> /etc/profile.d/myEnv.sh \n echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile.d/myEnv.sh \n source /etc/profile \n java -version\n ```\n### 修改主机名和主机名映射\n\n```bash\nvim /etc/hostname\n```\n6台机器分别为nn1、nn2、nn3、s1、s2、s3\n\n```bash\nvim /etc/hosts\n```\n\n修改为\n```text\n192.168.1.30 nn1\n192.168.1.31 nn2\n192.168.1.32 nn3\n192.168.1.33 s1\n192.168.1.34 s2\n192.168.1.35 s3\n```\n### 创建hadoop用户\n```bash\n#创建hadoop用户 \nuseradd hadoop \n#给hadoop用户设置密码: 12345678 \npasswd hadoop\n```\n### 禁止非 wheel 组用户切换到root,配置免密切换root\n- 修改/etc/pam.d/su配置\n ```bash\n sed -i 's/#auth\\t\\trequired\\tpam_wheel.so/auth\\t\\trequired\\tpam_wheel.so/g' '/etc/pam.d/su' \n sed -i 's/#auth\\t\\tsufficient\\tpam_wheel.so/auth\\t\\tsufficient\\tpam_wheel.so/g' '/etc/pam.d/su'\n ```\n- 修改/etc/login.defs文件\n ```bash\n echo \"SU_WHEEL_ONLY yes\" >> /etc/login.defs\n ```\n- 添加用户到管理员,禁止普通用户su 到 root\n ```bash\n #把hadoop用户加到wheel组里\n gpasswd -a hadoop wheel\n #查看wheel组里是否有hadoop用户\n cat /etc/group | grep wheel\n ```\n### 给hadoop用户,配置SSH密钥\n#### 配置hadoop用户ssh免密码登录到hadoop\n- 仅在`nn1`执行这段脚本命令即可\n 但是 `su - hadoop ` ,` mkdir ~/.ssh` 需要在其他主机执行一下\n ```bash\n #切换到hadoop用户 \n su - hadoop\n #生成ssh公私钥 \n ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''\n ssh-copy-id nn1\n ssh-copy-id nn2\n ssh-copy-id nn3\n ssh-copy-id s1\n ssh-copy-id s2\n ssh-copy-id s3\n scp /home/hadoop/.ssh/id_rsa hadoop@nn2:/home/hadoop/.ssh\n scp /home/hadoop/.ssh/id_rsa hadoop@nn3:/home/hadoop/.ssh\n scp /home/hadoop/.ssh/id_rsa hadoop@s1:/home/hadoop/.ssh\n scp /home/hadoop/.ssh/id_rsa hadoop@s2:/home/hadoop/.ssh\n scp /home/hadoop/.ssh/id_rsa hadoop@s3:/home/hadoop/.ssh\n ```\n#### 配置hadoop用户ssh免密码登录到root\n- 同上\n ```bash\n ssh-copy-id root@nn1\n ssh-copy-id root@ nn2\n ssh-copy-id root@nn3\n ssh-copy-id root@s1\n ssh-copy-id root@s2\n ssh-copy-id root@s3\n scp /home/hadoop/.ssh/id_rsa root@nn2:/root/.ssh\n scp /home/hadoop/.ssh/id_rsa root@nn3:/root/.ssh\n scp /home/hadoop/.ssh/id_rsa root@s1:/root/.ssh\n scp /home/hadoop/.ssh/id_rsa root@s2:/root/.ssh\n scp /home/hadoop/.ssh/id_rsa root@s3:/root/.ssh\n ```\n### 脚本配置\n- **ips**\n ```bash\n vim /home/hadoop/bin/ips\n ```\n \n ```bash\n nn1 \n nn2\n nn3\n s1 \n s2 \n s3\n ```\n- **ssh_all.sh**\n ```bash\n vim /home/hadoop/bin/ssh_all.sh\n ```\n\n ```bash\n #! /bin/bash\n # 进入到当前脚本所在目录\n cd `dirname $0`\n # 获取当前脚本所在目录\n dir_path=`pwd`\n #echo $dir_path\n # 读ips文件得到数组(里面是一堆主机名)\n ip_arr=(`cat $dir_path/ips`)\n # 遍历数组里的主机名\n for ip in ${ip_arr[*]}\n do\n # 拼接ssh命令: ssh hadoop@nn1.hadoop ls\n cmd_=\"ssh hadoop@${ip} \\\"$*\\\" \"\n echo $cmd_\n # 通过eval命令 执行 拼接的ssh 命令\n if eval ${cmd_} ; then\n echo \"OK\"\n else\n echo \"FAIL\"\n fi\n done\n ```\n- **ssh_root.sh**\n ```bash\n #! /bin/bash\n # 进入到当前脚本所在目录\n cd `dirname $0`\n # 获取当前脚本所在目录\n dir_path=`pwd`\n #echo $dir_path\n # 读ips文件得到数组(里面是一堆主机名)\n ip_arr=(`cat $dir_path/ips`)\n # 遍历数组里的主机名\n for ip in ${ip_arr[*]}\n do\n # 拼接ssh命令: ssh hadoop@nn1.hadoop ls\n cmd_=\"ssh hadoop@${ip} ~/bin/exe.sh \\\"$*\\\"\"\n echo $cmd_\n # 通过eval命令 执行 拼接的ssh 命令\n if eval ${cmd_} ; then\n echo \"OK\"\n else\n echo \"FAIL\"\n fi\n done\n ```\n- **scp_all.sh**\n ```bash\n #! /bin/bash\n # 进入到当前脚本所在目录\n cd `dirname $0`\n # 获取当前脚本所在目录\n dir_path=`pwd`\n #echo $dir_path\n # 读ips文件得到数组(里面是一堆主机名)\n ip_arr=(`cat $dir_path/ips`)\n # 源\n source_=$1\n # 目标\n target=$2\n # 遍历数组里的主机名\n for ip in ${ip_arr[*]}\n do\n # 拼接scp命令: scp 源 hadoop@nn1.hadoop:目标\n cmd_=\"scp -r ${source_} hadoop@${ip}:${target}\"\n echo $cmd_\n # 通过eval命令 执行 拼接的scp 命令\n if eval ${cmd_} ; then\n echo \"OK\"\n else\n echo \"FAIL\"\n fi\n done\n ```\n- **exe.sh**\n ```bash\n #切换到root用户执行cmd命令\n cmd=$*\n su - << EOF\n $cmd\n EOF\n ```\n- 赋予执行权限\n ```bash\n chmod +x ssh_all.sh \n chmod +x scp_all.sh\n chmod +x ssh_root.sh\n chmod +x exe.sh\n ```\n- 分发到其他主机\n ```bash\n ./ssh_all.sh mkdir /home/hadoop/bin\n ./scp_all.sh /home/hadoop/bin/ips /home/hadoop/bin/\n ./scp_all.sh /home/hadoop/bin/exe.sh /home/hadoop/bin/\n ./scp_all.sh /home/hadoop/bin/ssh_all.sh /home/hadoop/bin/\n ./scp_all.sh /home/hadoop/bin/scp_all.sh /home/hadoop/bin/\n ./scp_all.sh /home/hadoop/bin/ssh_root.sh /home/hadoop/bin/\n ```\n\n- 将 `/home/hadoop/bin`添加到hadoop用户的环境变量,需要切换到`hadoop`用户\n\n ```bash\n echo 'export PATH=$PATH:/home/hadoop/bin' >> ~/.bashrc && source ~/.bashrc\n scp_all.sh /home/hadoop/.bashrc /home/hadoop/\n ssh_all.sh source ~/.bashrc \n ```","slug":"bigdata/hadoop/env","published":1,"updated":"2024-09-11T14:45:28.095Z","comments":1,"layout":"post","photos":[],"_id":"cm5w9lrdu000ptgah6cdk1e7e","content":"<h3 id=\"防火墙关闭\"><a href=\"#防火墙关闭\" class=\"headerlink\" title=\"防火墙关闭\"></a>防火墙关闭</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 在 6 台主机执行</span></span><br><span class=\"line\">systemctl stop firewalld</span><br><span class=\"line\">systemctl <span class=\"built_in\">disable</span> firewalld</span><br></pre></td></tr></table></figure>\n<h3 id=\"配置yum源\"><a href=\"#配置yum源\" class=\"headerlink\" title=\"配置yum源\"></a>配置yum源</h3><ul>\n<li>下载 repo 文件:<br><a href=\"http://mirrors.aliyun.com/repo/Centos-7.repo\">Centos-7.repo</a><br>并上传到<code>/tmp</code>,进入到<code>/tmp</code></li>\n<li>备份并且替换系统的repo文件<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"> \t<span class=\"built_in\">cp</span> Centos-7.repo /etc/yum.repos.d/ </span><br><span class=\"line\"><span class=\"built_in\">cd</span> /etc/yum.repos.d/ </span><br><span class=\"line\"><span class=\"built_in\">mv</span> CentOS-Base.repo CentOS-Base.repo.bak </span><br><span class=\"line\"><span class=\"built_in\">mv</span> Centos-7.repo CentOS-Base.repo</span><br></pre></td></tr></table></figure></li>\n<li>将<code>nn1</code>上的<code>CentOS-Base.repo</code>拷贝到其他主机<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">scp /etc/yum.repos.d/CentOS-Base.repo root@nn2:/etc/yum.repos.d</span><br><span class=\"line\">scp /etc/yum.repos.d/CentOS-Base.repo root@nn3:/etc/yum.repos.d</span><br><span class=\"line\">scp /etc/yum.repos.d/CentOS-Base.repo root@s1:/etc/yum.repos.d</span><br><span class=\"line\">scp /etc/yum.repos.d/CentOS-Base.repo root@s2:/etc/yum.repos.d</span><br><span class=\"line\">scp /etc/yum.repos.d/CentOS-Base.repo root@s3:/etc/yum.repos.d</span><br></pre></td></tr></table></figure></li>\n<li>执行yum源更新命令<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">yum clean all</span><br><span class=\"line\">yum makecache </span><br><span class=\"line\">yum update -y </span><br></pre></td></tr></table></figure></li>\n<li>安装常用软件 <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">yum install -y openssh-server vim gcc gcc-c++ glibc-headers bzip2-devel lzo-devel curl wget openssh-clients zlib-devel autoconf automake cmake libtool openssl-devel fuse-devel snappy-devel telnet unzip zip net-tools.x86_64 firewalld systemd ntp unrar bzip2</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h3 id=\"JDK安装\"><a href=\"#JDK安装\" class=\"headerlink\" title=\"JDK安装\"></a>JDK安装</h3><blockquote>\n<p>注意需要在六台机器依次执行</p>\n</blockquote>\n<ul>\n<li>上传到<code>/tmp</code>目录下,安装 <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">cd</span> /tmp</span><br><span class=\"line\">rpm -ivh jdk-8u144-linux-x64.rpm</span><br></pre></td></tr></table></figure></li>\n<li>配置环境变量 <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">ln</span> -s /usr/java/jdk1.8.0_144/ /usr/java/jdk1.8</span><br><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">'export JAVA_HOME=/usr/java/jdk1.8'</span> >> /etc/profile.d/myEnv.sh </span><br><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">'export PATH=$PATH:$JAVA_HOME/bin'</span> >> /etc/profile.d/myEnv.sh </span><br><span class=\"line\"><span class=\"built_in\">source</span> /etc/profile </span><br><span class=\"line\">java -version</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h3 id=\"修改主机名和主机名映射\"><a href=\"#修改主机名和主机名映射\" class=\"headerlink\" title=\"修改主机名和主机名映射\"></a>修改主机名和主机名映射</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /etc/hostname</span><br></pre></td></tr></table></figure>\n<p>6台机器分别为nn1、nn2、nn3、s1、s2、s3</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /etc/hosts</span><br></pre></td></tr></table></figure>\n\n<p>修改为</p>\n<figure class=\"highlight text\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">192.168.1.30 nn1</span><br><span class=\"line\">192.168.1.31 nn2</span><br><span class=\"line\">192.168.1.32 nn3</span><br><span class=\"line\">192.168.1.33 s1</span><br><span class=\"line\">192.168.1.34 s2</span><br><span class=\"line\">192.168.1.35 s3</span><br></pre></td></tr></table></figure>\n<h3 id=\"创建hadoop用户\"><a href=\"#创建hadoop用户\" class=\"headerlink\" title=\"创建hadoop用户\"></a>创建hadoop用户</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#创建hadoop用户 </span></span><br><span class=\"line\">useradd hadoop </span><br><span class=\"line\"><span class=\"comment\">#给hadoop用户设置密码: 12345678 </span></span><br><span class=\"line\">passwd hadoop</span><br></pre></td></tr></table></figure>\n<h3 id=\"禁止非-wheel-组用户切换到root,配置免密切换root\"><a href=\"#禁止非-wheel-组用户切换到root,配置免密切换root\" class=\"headerlink\" title=\"禁止非 wheel 组用户切换到root,配置免密切换root\"></a>禁止非 wheel 组用户切换到root,配置免密切换root</h3><ul>\n<li>修改/etc/pam.d/su配置 <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sed -i <span class=\"string\">'s/#auth\\t\\trequired\\tpam_wheel.so/auth\\t\\trequired\\tpam_wheel.so/g'</span> <span class=\"string\">'/etc/pam.d/su'</span> </span><br><span class=\"line\">sed -i <span class=\"string\">'s/#auth\\t\\tsufficient\\tpam_wheel.so/auth\\t\\tsufficient\\tpam_wheel.so/g'</span> <span class=\"string\">'/etc/pam.d/su'</span></span><br></pre></td></tr></table></figure></li>\n<li>修改/etc/login.defs文件 <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">"SU_WHEEL_ONLY yes"</span> >> /etc/login.defs</span><br></pre></td></tr></table></figure></li>\n<li>添加用户到管理员,禁止普通用户su 到 root <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#把hadoop用户加到wheel组里</span></span><br><span class=\"line\">gpasswd -a hadoop wheel</span><br><span class=\"line\"><span class=\"comment\">#查看wheel组里是否有hadoop用户</span></span><br><span class=\"line\"><span class=\"built_in\">cat</span> /etc/group | grep wheel</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h3 id=\"给hadoop用户,配置SSH密钥\"><a href=\"#给hadoop用户,配置SSH密钥\" class=\"headerlink\" title=\"给hadoop用户,配置SSH密钥\"></a>给hadoop用户,配置SSH密钥</h3><h4 id=\"配置hadoop用户ssh免密码登录到hadoop\"><a href=\"#配置hadoop用户ssh免密码登录到hadoop\" class=\"headerlink\" title=\"配置hadoop用户ssh免密码登录到hadoop\"></a>配置hadoop用户ssh免密码登录到hadoop</h4><ul>\n<li>仅在<code>nn1</code>执行这段脚本命令即可<br>但是 <code>su - hadoop </code> ,<code> mkdir ~/.ssh</code> 需要在其他主机执行一下 <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#切换到hadoop用户 </span></span><br><span class=\"line\">su - hadoop</span><br><span class=\"line\"><span class=\"comment\">#生成ssh公私钥 </span></span><br><span class=\"line\">ssh-keygen -t rsa -f ~/.ssh/id_rsa -P <span class=\"string\">''</span></span><br><span class=\"line\">ssh-copy-id nn1</span><br><span class=\"line\">ssh-copy-id nn2</span><br><span class=\"line\">ssh-copy-id nn3</span><br><span class=\"line\">ssh-copy-id s1</span><br><span class=\"line\">ssh-copy-id s2</span><br><span class=\"line\">ssh-copy-id s3</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa hadoop@nn2:/home/hadoop/.ssh</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa hadoop@nn3:/home/hadoop/.ssh</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa hadoop@s1:/home/hadoop/.ssh</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa hadoop@s2:/home/hadoop/.ssh</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa hadoop@s3:/home/hadoop/.ssh</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h4 id=\"配置hadoop用户ssh免密码登录到root\"><a href=\"#配置hadoop用户ssh免密码登录到root\" class=\"headerlink\" title=\"配置hadoop用户ssh免密码登录到root\"></a>配置hadoop用户ssh免密码登录到root</h4><ul>\n<li>同上 <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh-copy-id root@nn1</span><br><span class=\"line\">ssh-copy-id root@ nn2</span><br><span class=\"line\">ssh-copy-id root@nn3</span><br><span class=\"line\">ssh-copy-id root@s1</span><br><span class=\"line\">ssh-copy-id root@s2</span><br><span class=\"line\">ssh-copy-id root@s3</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa root@nn2:/root/.ssh</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa root@nn3:/root/.ssh</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa root@s1:/root/.ssh</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa root@s2:/root/.ssh</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa root@s3:/root/.ssh</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h3 id=\"脚本配置\"><a href=\"#脚本配置\" class=\"headerlink\" title=\"脚本配置\"></a>脚本配置</h3><ul>\n<li><p><strong>ips</strong></p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /home/hadoop/bin/ips</span><br></pre></td></tr></table></figure>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">nn1 </span><br><span class=\"line\">nn2</span><br><span class=\"line\">nn3</span><br><span class=\"line\">s1 </span><br><span class=\"line\">s2 </span><br><span class=\"line\">s3</span><br></pre></td></tr></table></figure></li>\n<li><p><strong>ssh_all.sh</strong></p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /home/hadoop/bin/ssh_all.sh</span><br></pre></td></tr></table></figure>\n\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#! /bin/bash</span></span><br><span class=\"line\"><span class=\"comment\"># 进入到当前脚本所在目录</span></span><br><span class=\"line\"><span class=\"built_in\">cd</span> `<span class=\"built_in\">dirname</span> <span class=\"variable\">$0</span>`</span><br><span class=\"line\"><span class=\"comment\"># 获取当前脚本所在目录</span></span><br><span class=\"line\">dir_path=`<span class=\"built_in\">pwd</span>`</span><br><span class=\"line\"><span class=\"comment\">#echo $dir_path</span></span><br><span class=\"line\"><span class=\"comment\"># 读ips文件得到数组(里面是一堆主机名)</span></span><br><span class=\"line\">ip_arr=(`<span class=\"built_in\">cat</span> <span class=\"variable\">$dir_path</span>/ips`)</span><br><span class=\"line\"><span class=\"comment\"># 遍历数组里的主机名</span></span><br><span class=\"line\"><span class=\"keyword\">for</span> ip <span class=\"keyword\">in</span> <span class=\"variable\">${ip_arr[*]}</span></span><br><span class=\"line\"><span class=\"keyword\">do</span></span><br><span class=\"line\"> <span class=\"comment\"># 拼接ssh命令: ssh hadoop@nn1.hadoop ls</span></span><br><span class=\"line\"> cmd_=<span class=\"string\">"ssh hadoop@<span class=\"variable\">${ip}</span> \\"$*\\" "</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"variable\">$cmd_</span></span><br><span class=\"line\"> <span class=\"comment\"># 通过eval命令 执行 拼接的ssh 命令</span></span><br><span class=\"line\"> <span class=\"keyword\">if</span> <span class=\"built_in\">eval</span> <span class=\"variable\">${cmd_}</span> ; <span class=\"keyword\">then</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"OK"</span></span><br><span class=\"line\"> <span class=\"keyword\">else</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"FAIL"</span></span><br><span class=\"line\"> <span class=\"keyword\">fi</span></span><br><span class=\"line\"><span class=\"keyword\">done</span></span><br></pre></td></tr></table></figure></li>\n<li><p><strong>ssh_root.sh</strong></p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#! /bin/bash</span></span><br><span class=\"line\"><span class=\"comment\"># 进入到当前脚本所在目录</span></span><br><span class=\"line\"><span class=\"built_in\">cd</span> `<span class=\"built_in\">dirname</span> <span class=\"variable\">$0</span>`</span><br><span class=\"line\"><span class=\"comment\"># 获取当前脚本所在目录</span></span><br><span class=\"line\">dir_path=`<span class=\"built_in\">pwd</span>`</span><br><span class=\"line\"><span class=\"comment\">#echo $dir_path</span></span><br><span class=\"line\"><span class=\"comment\"># 读ips文件得到数组(里面是一堆主机名)</span></span><br><span class=\"line\">ip_arr=(`<span class=\"built_in\">cat</span> <span class=\"variable\">$dir_path</span>/ips`)</span><br><span class=\"line\"><span class=\"comment\"># 遍历数组里的主机名</span></span><br><span class=\"line\"><span class=\"keyword\">for</span> ip <span class=\"keyword\">in</span> <span class=\"variable\">${ip_arr[*]}</span></span><br><span class=\"line\"><span class=\"keyword\">do</span></span><br><span class=\"line\"> <span class=\"comment\"># 拼接ssh命令: ssh hadoop@nn1.hadoop ls</span></span><br><span class=\"line\"> cmd_=<span class=\"string\">"ssh hadoop@<span class=\"variable\">${ip}</span> ~/bin/exe.sh \\"$*\\""</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"variable\">$cmd_</span></span><br><span class=\"line\"> <span class=\"comment\"># 通过eval命令 执行 拼接的ssh 命令</span></span><br><span class=\"line\"> <span class=\"keyword\">if</span> <span class=\"built_in\">eval</span> <span class=\"variable\">${cmd_}</span> ; <span class=\"keyword\">then</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"OK"</span></span><br><span class=\"line\"> <span class=\"keyword\">else</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"FAIL"</span></span><br><span class=\"line\"> <span class=\"keyword\">fi</span></span><br><span class=\"line\"><span class=\"keyword\">done</span></span><br></pre></td></tr></table></figure></li>\n<li><p><strong>scp_all.sh</strong></p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#! /bin/bash</span></span><br><span class=\"line\"><span class=\"comment\"># 进入到当前脚本所在目录</span></span><br><span class=\"line\"><span class=\"built_in\">cd</span> `<span class=\"built_in\">dirname</span> <span class=\"variable\">$0</span>`</span><br><span class=\"line\"><span class=\"comment\"># 获取当前脚本所在目录</span></span><br><span class=\"line\">dir_path=`<span class=\"built_in\">pwd</span>`</span><br><span class=\"line\"><span class=\"comment\">#echo $dir_path</span></span><br><span class=\"line\"><span class=\"comment\"># 读ips文件得到数组(里面是一堆主机名)</span></span><br><span class=\"line\">ip_arr=(`<span class=\"built_in\">cat</span> <span class=\"variable\">$dir_path</span>/ips`)</span><br><span class=\"line\"><span class=\"comment\"># 源</span></span><br><span class=\"line\">source_=<span class=\"variable\">$1</span></span><br><span class=\"line\"><span class=\"comment\"># 目标</span></span><br><span class=\"line\">target=<span class=\"variable\">$2</span></span><br><span class=\"line\"><span class=\"comment\"># 遍历数组里的主机名</span></span><br><span class=\"line\"><span class=\"keyword\">for</span> ip <span class=\"keyword\">in</span> <span class=\"variable\">${ip_arr[*]}</span></span><br><span class=\"line\"><span class=\"keyword\">do</span></span><br><span class=\"line\"> <span class=\"comment\"># 拼接scp命令: scp 源 hadoop@nn1.hadoop:目标</span></span><br><span class=\"line\"> cmd_=<span class=\"string\">"scp -r <span class=\"variable\">${source_}</span> hadoop@<span class=\"variable\">${ip}</span>:<span class=\"variable\">${target}</span>"</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"variable\">$cmd_</span></span><br><span class=\"line\"> <span class=\"comment\"># 通过eval命令 执行 拼接的scp 命令</span></span><br><span class=\"line\"> <span class=\"keyword\">if</span> <span class=\"built_in\">eval</span> <span class=\"variable\">${cmd_}</span> ; <span class=\"keyword\">then</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"OK"</span></span><br><span class=\"line\"> <span class=\"keyword\">else</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"FAIL"</span></span><br><span class=\"line\"> <span class=\"keyword\">fi</span></span><br><span class=\"line\"><span class=\"keyword\">done</span></span><br></pre></td></tr></table></figure></li>\n<li><p><strong>exe.sh</strong></p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#切换到root用户执行cmd命令</span></span><br><span class=\"line\">cmd=$*</span><br><span class=\"line\">su - << <span class=\"string\">EOF</span></span><br><span class=\"line\"><span class=\"string\">$cmd</span></span><br><span class=\"line\"><span class=\"string\">EOF</span></span><br></pre></td></tr></table></figure></li>\n<li><p>赋予执行权限</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">chmod</span> +x ssh_all.sh </span><br><span class=\"line\"><span class=\"built_in\">chmod</span> +x scp_all.sh</span><br><span class=\"line\"><span class=\"built_in\">chmod</span> +x ssh_root.sh</span><br><span class=\"line\"><span class=\"built_in\">chmod</span> +x exe.sh</span><br></pre></td></tr></table></figure></li>\n<li><p>分发到其他主机</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">./ssh_all.sh <span class=\"built_in\">mkdir</span> /home/hadoop/bin</span><br><span class=\"line\">./scp_all.sh /home/hadoop/bin/ips /home/hadoop/bin/</span><br><span class=\"line\">./scp_all.sh /home/hadoop/bin/exe.sh /home/hadoop/bin/</span><br><span class=\"line\">./scp_all.sh /home/hadoop/bin/ssh_all.sh /home/hadoop/bin/</span><br><span class=\"line\">./scp_all.sh /home/hadoop/bin/scp_all.sh /home/hadoop/bin/</span><br><span class=\"line\">./scp_all.sh /home/hadoop/bin/ssh_root.sh /home/hadoop/bin/</span><br></pre></td></tr></table></figure>\n</li>\n<li><p>将 <code>/home/hadoop/bin</code>添加到hadoop用户的环境变量,需要切换到<code>hadoop</code>用户</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">'export PATH=$PATH:/home/hadoop/bin'</span> >> ~/.bashrc && <span class=\"built_in\">source</span> ~/.bashrc</span><br><span class=\"line\">scp_all.sh /home/hadoop/.bashrc /home/hadoop/</span><br><span class=\"line\">ssh_all.sh <span class=\"built_in\">source</span> ~/.bashrc </span><br></pre></td></tr></table></figure></li>\n</ul>\n","cover":false,"excerpt":"","more":"<h3 id=\"防火墙关闭\"><a href=\"#防火墙关闭\" class=\"headerlink\" title=\"防火墙关闭\"></a>防火墙关闭</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 在 6 台主机执行</span></span><br><span class=\"line\">systemctl stop firewalld</span><br><span class=\"line\">systemctl <span class=\"built_in\">disable</span> firewalld</span><br></pre></td></tr></table></figure>\n<h3 id=\"配置yum源\"><a href=\"#配置yum源\" class=\"headerlink\" title=\"配置yum源\"></a>配置yum源</h3><ul>\n<li>下载 repo 文件:<br><a href=\"http://mirrors.aliyun.com/repo/Centos-7.repo\">Centos-7.repo</a><br>并上传到<code>/tmp</code>,进入到<code>/tmp</code></li>\n<li>备份并且替换系统的repo文件<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"> \t<span class=\"built_in\">cp</span> Centos-7.repo /etc/yum.repos.d/ </span><br><span class=\"line\"><span class=\"built_in\">cd</span> /etc/yum.repos.d/ </span><br><span class=\"line\"><span class=\"built_in\">mv</span> CentOS-Base.repo CentOS-Base.repo.bak </span><br><span class=\"line\"><span class=\"built_in\">mv</span> Centos-7.repo CentOS-Base.repo</span><br></pre></td></tr></table></figure></li>\n<li>将<code>nn1</code>上的<code>CentOS-Base.repo</code>拷贝到其他主机<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">scp /etc/yum.repos.d/CentOS-Base.repo root@nn2:/etc/yum.repos.d</span><br><span class=\"line\">scp /etc/yum.repos.d/CentOS-Base.repo root@nn3:/etc/yum.repos.d</span><br><span class=\"line\">scp /etc/yum.repos.d/CentOS-Base.repo root@s1:/etc/yum.repos.d</span><br><span class=\"line\">scp /etc/yum.repos.d/CentOS-Base.repo root@s2:/etc/yum.repos.d</span><br><span class=\"line\">scp /etc/yum.repos.d/CentOS-Base.repo root@s3:/etc/yum.repos.d</span><br></pre></td></tr></table></figure></li>\n<li>执行yum源更新命令<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">yum clean all</span><br><span class=\"line\">yum makecache </span><br><span class=\"line\">yum update -y </span><br></pre></td></tr></table></figure></li>\n<li>安装常用软件 <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">yum install -y openssh-server vim gcc gcc-c++ glibc-headers bzip2-devel lzo-devel curl wget openssh-clients zlib-devel autoconf automake cmake libtool openssl-devel fuse-devel snappy-devel telnet unzip zip net-tools.x86_64 firewalld systemd ntp unrar bzip2</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h3 id=\"JDK安装\"><a href=\"#JDK安装\" class=\"headerlink\" title=\"JDK安装\"></a>JDK安装</h3><blockquote>\n<p>注意需要在六台机器依次执行</p>\n</blockquote>\n<ul>\n<li>上传到<code>/tmp</code>目录下,安装 <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">cd</span> /tmp</span><br><span class=\"line\">rpm -ivh jdk-8u144-linux-x64.rpm</span><br></pre></td></tr></table></figure></li>\n<li>配置环境变量 <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">ln</span> -s /usr/java/jdk1.8.0_144/ /usr/java/jdk1.8</span><br><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">'export JAVA_HOME=/usr/java/jdk1.8'</span> >> /etc/profile.d/myEnv.sh </span><br><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">'export PATH=$PATH:$JAVA_HOME/bin'</span> >> /etc/profile.d/myEnv.sh </span><br><span class=\"line\"><span class=\"built_in\">source</span> /etc/profile </span><br><span class=\"line\">java -version</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h3 id=\"修改主机名和主机名映射\"><a href=\"#修改主机名和主机名映射\" class=\"headerlink\" title=\"修改主机名和主机名映射\"></a>修改主机名和主机名映射</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /etc/hostname</span><br></pre></td></tr></table></figure>\n<p>6台机器分别为nn1、nn2、nn3、s1、s2、s3</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /etc/hosts</span><br></pre></td></tr></table></figure>\n\n<p>修改为</p>\n<figure class=\"highlight text\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">192.168.1.30 nn1</span><br><span class=\"line\">192.168.1.31 nn2</span><br><span class=\"line\">192.168.1.32 nn3</span><br><span class=\"line\">192.168.1.33 s1</span><br><span class=\"line\">192.168.1.34 s2</span><br><span class=\"line\">192.168.1.35 s3</span><br></pre></td></tr></table></figure>\n<h3 id=\"创建hadoop用户\"><a href=\"#创建hadoop用户\" class=\"headerlink\" title=\"创建hadoop用户\"></a>创建hadoop用户</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#创建hadoop用户 </span></span><br><span class=\"line\">useradd hadoop </span><br><span class=\"line\"><span class=\"comment\">#给hadoop用户设置密码: 12345678 </span></span><br><span class=\"line\">passwd hadoop</span><br></pre></td></tr></table></figure>\n<h3 id=\"禁止非-wheel-组用户切换到root,配置免密切换root\"><a href=\"#禁止非-wheel-组用户切换到root,配置免密切换root\" class=\"headerlink\" title=\"禁止非 wheel 组用户切换到root,配置免密切换root\"></a>禁止非 wheel 组用户切换到root,配置免密切换root</h3><ul>\n<li>修改/etc/pam.d/su配置 <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">sed -i <span class=\"string\">'s/#auth\\t\\trequired\\tpam_wheel.so/auth\\t\\trequired\\tpam_wheel.so/g'</span> <span class=\"string\">'/etc/pam.d/su'</span> </span><br><span class=\"line\">sed -i <span class=\"string\">'s/#auth\\t\\tsufficient\\tpam_wheel.so/auth\\t\\tsufficient\\tpam_wheel.so/g'</span> <span class=\"string\">'/etc/pam.d/su'</span></span><br></pre></td></tr></table></figure></li>\n<li>修改/etc/login.defs文件 <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">"SU_WHEEL_ONLY yes"</span> >> /etc/login.defs</span><br></pre></td></tr></table></figure></li>\n<li>添加用户到管理员,禁止普通用户su 到 root <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#把hadoop用户加到wheel组里</span></span><br><span class=\"line\">gpasswd -a hadoop wheel</span><br><span class=\"line\"><span class=\"comment\">#查看wheel组里是否有hadoop用户</span></span><br><span class=\"line\"><span class=\"built_in\">cat</span> /etc/group | grep wheel</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h3 id=\"给hadoop用户,配置SSH密钥\"><a href=\"#给hadoop用户,配置SSH密钥\" class=\"headerlink\" title=\"给hadoop用户,配置SSH密钥\"></a>给hadoop用户,配置SSH密钥</h3><h4 id=\"配置hadoop用户ssh免密码登录到hadoop\"><a href=\"#配置hadoop用户ssh免密码登录到hadoop\" class=\"headerlink\" title=\"配置hadoop用户ssh免密码登录到hadoop\"></a>配置hadoop用户ssh免密码登录到hadoop</h4><ul>\n<li>仅在<code>nn1</code>执行这段脚本命令即可<br>但是 <code>su - hadoop </code> ,<code> mkdir ~/.ssh</code> 需要在其他主机执行一下 <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#切换到hadoop用户 </span></span><br><span class=\"line\">su - hadoop</span><br><span class=\"line\"><span class=\"comment\">#生成ssh公私钥 </span></span><br><span class=\"line\">ssh-keygen -t rsa -f ~/.ssh/id_rsa -P <span class=\"string\">''</span></span><br><span class=\"line\">ssh-copy-id nn1</span><br><span class=\"line\">ssh-copy-id nn2</span><br><span class=\"line\">ssh-copy-id nn3</span><br><span class=\"line\">ssh-copy-id s1</span><br><span class=\"line\">ssh-copy-id s2</span><br><span class=\"line\">ssh-copy-id s3</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa hadoop@nn2:/home/hadoop/.ssh</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa hadoop@nn3:/home/hadoop/.ssh</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa hadoop@s1:/home/hadoop/.ssh</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa hadoop@s2:/home/hadoop/.ssh</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa hadoop@s3:/home/hadoop/.ssh</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h4 id=\"配置hadoop用户ssh免密码登录到root\"><a href=\"#配置hadoop用户ssh免密码登录到root\" class=\"headerlink\" title=\"配置hadoop用户ssh免密码登录到root\"></a>配置hadoop用户ssh免密码登录到root</h4><ul>\n<li>同上 <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh-copy-id root@nn1</span><br><span class=\"line\">ssh-copy-id root@ nn2</span><br><span class=\"line\">ssh-copy-id root@nn3</span><br><span class=\"line\">ssh-copy-id root@s1</span><br><span class=\"line\">ssh-copy-id root@s2</span><br><span class=\"line\">ssh-copy-id root@s3</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa root@nn2:/root/.ssh</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa root@nn3:/root/.ssh</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa root@s1:/root/.ssh</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa root@s2:/root/.ssh</span><br><span class=\"line\">scp /home/hadoop/.ssh/id_rsa root@s3:/root/.ssh</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h3 id=\"脚本配置\"><a href=\"#脚本配置\" class=\"headerlink\" title=\"脚本配置\"></a>脚本配置</h3><ul>\n<li><p><strong>ips</strong></p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /home/hadoop/bin/ips</span><br></pre></td></tr></table></figure>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">nn1 </span><br><span class=\"line\">nn2</span><br><span class=\"line\">nn3</span><br><span class=\"line\">s1 </span><br><span class=\"line\">s2 </span><br><span class=\"line\">s3</span><br></pre></td></tr></table></figure></li>\n<li><p><strong>ssh_all.sh</strong></p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /home/hadoop/bin/ssh_all.sh</span><br></pre></td></tr></table></figure>\n\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#! /bin/bash</span></span><br><span class=\"line\"><span class=\"comment\"># 进入到当前脚本所在目录</span></span><br><span class=\"line\"><span class=\"built_in\">cd</span> `<span class=\"built_in\">dirname</span> <span class=\"variable\">$0</span>`</span><br><span class=\"line\"><span class=\"comment\"># 获取当前脚本所在目录</span></span><br><span class=\"line\">dir_path=`<span class=\"built_in\">pwd</span>`</span><br><span class=\"line\"><span class=\"comment\">#echo $dir_path</span></span><br><span class=\"line\"><span class=\"comment\"># 读ips文件得到数组(里面是一堆主机名)</span></span><br><span class=\"line\">ip_arr=(`<span class=\"built_in\">cat</span> <span class=\"variable\">$dir_path</span>/ips`)</span><br><span class=\"line\"><span class=\"comment\"># 遍历数组里的主机名</span></span><br><span class=\"line\"><span class=\"keyword\">for</span> ip <span class=\"keyword\">in</span> <span class=\"variable\">${ip_arr[*]}</span></span><br><span class=\"line\"><span class=\"keyword\">do</span></span><br><span class=\"line\"> <span class=\"comment\"># 拼接ssh命令: ssh hadoop@nn1.hadoop ls</span></span><br><span class=\"line\"> cmd_=<span class=\"string\">"ssh hadoop@<span class=\"variable\">${ip}</span> \\"$*\\" "</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"variable\">$cmd_</span></span><br><span class=\"line\"> <span class=\"comment\"># 通过eval命令 执行 拼接的ssh 命令</span></span><br><span class=\"line\"> <span class=\"keyword\">if</span> <span class=\"built_in\">eval</span> <span class=\"variable\">${cmd_}</span> ; <span class=\"keyword\">then</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"OK"</span></span><br><span class=\"line\"> <span class=\"keyword\">else</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"FAIL"</span></span><br><span class=\"line\"> <span class=\"keyword\">fi</span></span><br><span class=\"line\"><span class=\"keyword\">done</span></span><br></pre></td></tr></table></figure></li>\n<li><p><strong>ssh_root.sh</strong></p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#! /bin/bash</span></span><br><span class=\"line\"><span class=\"comment\"># 进入到当前脚本所在目录</span></span><br><span class=\"line\"><span class=\"built_in\">cd</span> `<span class=\"built_in\">dirname</span> <span class=\"variable\">$0</span>`</span><br><span class=\"line\"><span class=\"comment\"># 获取当前脚本所在目录</span></span><br><span class=\"line\">dir_path=`<span class=\"built_in\">pwd</span>`</span><br><span class=\"line\"><span class=\"comment\">#echo $dir_path</span></span><br><span class=\"line\"><span class=\"comment\"># 读ips文件得到数组(里面是一堆主机名)</span></span><br><span class=\"line\">ip_arr=(`<span class=\"built_in\">cat</span> <span class=\"variable\">$dir_path</span>/ips`)</span><br><span class=\"line\"><span class=\"comment\"># 遍历数组里的主机名</span></span><br><span class=\"line\"><span class=\"keyword\">for</span> ip <span class=\"keyword\">in</span> <span class=\"variable\">${ip_arr[*]}</span></span><br><span class=\"line\"><span class=\"keyword\">do</span></span><br><span class=\"line\"> <span class=\"comment\"># 拼接ssh命令: ssh hadoop@nn1.hadoop ls</span></span><br><span class=\"line\"> cmd_=<span class=\"string\">"ssh hadoop@<span class=\"variable\">${ip}</span> ~/bin/exe.sh \\"$*\\""</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"variable\">$cmd_</span></span><br><span class=\"line\"> <span class=\"comment\"># 通过eval命令 执行 拼接的ssh 命令</span></span><br><span class=\"line\"> <span class=\"keyword\">if</span> <span class=\"built_in\">eval</span> <span class=\"variable\">${cmd_}</span> ; <span class=\"keyword\">then</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"OK"</span></span><br><span class=\"line\"> <span class=\"keyword\">else</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"FAIL"</span></span><br><span class=\"line\"> <span class=\"keyword\">fi</span></span><br><span class=\"line\"><span class=\"keyword\">done</span></span><br></pre></td></tr></table></figure></li>\n<li><p><strong>scp_all.sh</strong></p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta\">#! /bin/bash</span></span><br><span class=\"line\"><span class=\"comment\"># 进入到当前脚本所在目录</span></span><br><span class=\"line\"><span class=\"built_in\">cd</span> `<span class=\"built_in\">dirname</span> <span class=\"variable\">$0</span>`</span><br><span class=\"line\"><span class=\"comment\"># 获取当前脚本所在目录</span></span><br><span class=\"line\">dir_path=`<span class=\"built_in\">pwd</span>`</span><br><span class=\"line\"><span class=\"comment\">#echo $dir_path</span></span><br><span class=\"line\"><span class=\"comment\"># 读ips文件得到数组(里面是一堆主机名)</span></span><br><span class=\"line\">ip_arr=(`<span class=\"built_in\">cat</span> <span class=\"variable\">$dir_path</span>/ips`)</span><br><span class=\"line\"><span class=\"comment\"># 源</span></span><br><span class=\"line\">source_=<span class=\"variable\">$1</span></span><br><span class=\"line\"><span class=\"comment\"># 目标</span></span><br><span class=\"line\">target=<span class=\"variable\">$2</span></span><br><span class=\"line\"><span class=\"comment\"># 遍历数组里的主机名</span></span><br><span class=\"line\"><span class=\"keyword\">for</span> ip <span class=\"keyword\">in</span> <span class=\"variable\">${ip_arr[*]}</span></span><br><span class=\"line\"><span class=\"keyword\">do</span></span><br><span class=\"line\"> <span class=\"comment\"># 拼接scp命令: scp 源 hadoop@nn1.hadoop:目标</span></span><br><span class=\"line\"> cmd_=<span class=\"string\">"scp -r <span class=\"variable\">${source_}</span> hadoop@<span class=\"variable\">${ip}</span>:<span class=\"variable\">${target}</span>"</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"variable\">$cmd_</span></span><br><span class=\"line\"> <span class=\"comment\"># 通过eval命令 执行 拼接的scp 命令</span></span><br><span class=\"line\"> <span class=\"keyword\">if</span> <span class=\"built_in\">eval</span> <span class=\"variable\">${cmd_}</span> ; <span class=\"keyword\">then</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"OK"</span></span><br><span class=\"line\"> <span class=\"keyword\">else</span></span><br><span class=\"line\"> <span class=\"built_in\">echo</span> <span class=\"string\">"FAIL"</span></span><br><span class=\"line\"> <span class=\"keyword\">fi</span></span><br><span class=\"line\"><span class=\"keyword\">done</span></span><br></pre></td></tr></table></figure></li>\n<li><p><strong>exe.sh</strong></p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#切换到root用户执行cmd命令</span></span><br><span class=\"line\">cmd=$*</span><br><span class=\"line\">su - << <span class=\"string\">EOF</span></span><br><span class=\"line\"><span class=\"string\">$cmd</span></span><br><span class=\"line\"><span class=\"string\">EOF</span></span><br></pre></td></tr></table></figure></li>\n<li><p>赋予执行权限</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">chmod</span> +x ssh_all.sh </span><br><span class=\"line\"><span class=\"built_in\">chmod</span> +x scp_all.sh</span><br><span class=\"line\"><span class=\"built_in\">chmod</span> +x ssh_root.sh</span><br><span class=\"line\"><span class=\"built_in\">chmod</span> +x exe.sh</span><br></pre></td></tr></table></figure></li>\n<li><p>分发到其他主机</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">./ssh_all.sh <span class=\"built_in\">mkdir</span> /home/hadoop/bin</span><br><span class=\"line\">./scp_all.sh /home/hadoop/bin/ips /home/hadoop/bin/</span><br><span class=\"line\">./scp_all.sh /home/hadoop/bin/exe.sh /home/hadoop/bin/</span><br><span class=\"line\">./scp_all.sh /home/hadoop/bin/ssh_all.sh /home/hadoop/bin/</span><br><span class=\"line\">./scp_all.sh /home/hadoop/bin/scp_all.sh /home/hadoop/bin/</span><br><span class=\"line\">./scp_all.sh /home/hadoop/bin/ssh_root.sh /home/hadoop/bin/</span><br></pre></td></tr></table></figure>\n</li>\n<li><p>将 <code>/home/hadoop/bin</code>添加到hadoop用户的环境变量,需要切换到<code>hadoop</code>用户</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">'export PATH=$PATH:/home/hadoop/bin'</span> >> ~/.bashrc && <span class=\"built_in\">source</span> ~/.bashrc</span><br><span class=\"line\">scp_all.sh /home/hadoop/.bashrc /home/hadoop/</span><br><span class=\"line\">ssh_all.sh <span class=\"built_in\">source</span> ~/.bashrc </span><br></pre></td></tr></table></figure></li>\n</ul>\n"},{"title":"Hadoop集群HDFS配置","top_img":"/img/site01.jpg","top_img_height":"800px","abbrlink":61252,"date":"2024-09-11T14:45:40.000Z","_content":"\n### 上传`hadoop-3.1.4.tar.gz`到`/tmp`,解压\n>注意在六台机器均上传到`/tmp`\n```bash\n# 在6台机器执行\nsudo tar -zxvf /tmp/hadoop-3.1.4.tar.gz -C /usr/local/\n# 分发到其他主机\nssh_root.sh chown -R hadoop:hadoop /usr/local/hadoop-3.1.4\nssh_root.sh ln -s /usr/local/hadoop-3.1.4/ /usr/local/hadoop\n```\n### 配置环境变量\n```bash\necho 'export HADOOP_HOME=/usr/local/hadoop' >> /etc/profile.d/myEnv.sh\necho 'export PATH=$PATH:$HADOOP_HOME/bin' >> /etc/profile.d/myEnv.sh\necho 'export PATH=$PATH:$HADOOP_HOME/sbin' >> /etc/profile.d/myEnv.sh\n```\n\n```bash\n# 分发到nn2、nn3、s1、s2、s3\nscp_all.sh /etc/profile.d/myEnv.sh /etc/profile.d/\n# source 环境变量\nssh_root.sh source /etc/profile\n```\n>还需要创建 `/data`这个目录,由于nn1、nn2、nn3已经创建`/data`,其他三台需要创建一下\n```bash\n### 在s1、s2、s3执行\nsudo mkdir /data\nsudo chown -R hadoop:hadoop /data\n```\n\n### 修改core-site.xml\n```bash\nvim /usr/local/hadoop/etc/hadoop/core-site.xml \n```\n\n```xml\n<configuration>\n\t<property>\n\t <name>fs.defaultFS</name>\n\t <value>hdfs://ns1</value>\n\t <description>默认文件服务的协议和NS逻辑名称,和hdfs-site.xml里的对应此配置替代了1.0里的fs.default.name</description>\n\t</property>\n\t\n\t<property>\n\t <name>hadoop.tmp.dir</name>\n\t <value>/data/tmp</value>\n\t <description>数据存储目录</description>\n\t</property>\n\t\n\t<property>\n\t <name>hadoop.proxyuser.root.groups</name>\n\t <value>hadoop</value>\n\t <description>\n\t hdfs dfsadmin –refreshSuperUserGroupsConfiguration,\n\t yarn rmadmin –refreshSuperUserGroupsConfiguration\n\t 使用这两个命令不用重启就能刷新\n\t </description>\n\t</property>\n\t\n\t<property>\n\t <name>hadoop.proxyuser.root.hosts</name>\n\t <value>localhost</value>\n\t <description>本地代理</description>\n\t</property>\n\t\n\t<!-- zkfc的配置 -->\n\t<property> \n\t\t<name>ha.zookeeper.quorum</name> \n\t\t<value>nn1:2181,nn2:2181,nn3:2181</value> \n\t\t<description>HA使用的zookeeper地址</description> \n\t</property>\n</configuration>\n```\n### 修改`hdfs-site.xml`\n```bash\nvim /usr/local/hadoop/etc/hadoop/hdfs-site.xml \n```\n\n```xml\n<configuration>\n <property>\n <name>dfs.namenode.name.dir</name>\n <value>/data/namenode</value>\n <description>namenode本地文件存放地址</description>\n </property>\n \n <property>\n <name>dfs.nameservices</name>\n <value>ns1</value>\n <description>提供服务的NS逻辑名称,与core-site.xml里的对应</description>\n </property>\n \n <!-- namenode的配置 -->\n <!-- 主要的 -->\n <property>\n <name>dfs.ha.namenodes.ns1</name>\n <value>nn1,nn2,nn3</value>\n <description>列出该逻辑名称下的NameNode逻辑名称</description>\n </property>\n \n <property>\n <name>dfs.namenode.rpc-address.ns1.nn1</name>\n <value>nn1:9000</value>\n <description>指定NameNode的RPC位置</description>\n </property>\n \n <property>\n <name>dfs.namenode.http-address.ns1.nn1</name>\n <value>nn1:50070</value>\n <description>指定NameNode的Web Server位置</description>\n </property>\n \n <property>\n <name>dfs.namenode.rpc-address.ns1.nn2</name>\n <value>nn2:9000</value>\n <description>指定NameNode的RPC位置</description>\n </property>\n \n <property>\n <name>dfs.namenode.http-address.ns1.nn2</name>\n <value>nn2:50070</value>\n <description>指定NameNode的Web Server位置</description>\n </property>\n \n <property>\n <name>dfs.namenode.rpc-address.ns1.nn3</name>\n <value>nn3:9000</value>\n <description>指定NameNode的RPC位置</description>\n </property>\n \n <property>\n <name>dfs.namenode.http-address.ns1.nn3</name>\n <value>nn3:50070</value>\n <description>指定NameNode的Web Server位置</description>\n </property>\n \n <property>\n <name>dfs.namenode.handler.count</name>\n <value>77</value>\n <description>namenode的工作线程数</description>\n </property>\n\n <!-- journaldata配置,使得其他两个namenode同步第一个namenode数据 --> \n <property>\n <name>dfs.namenode.shared.edits.dir</name>\n <value>qjournal://nn1:8485;nn2:8485;nn3:8485/ns1</value>\n <description>指定用于HA存放edits的共享存储,通常是namenode的所在机器</description>\n </property>\n \n <property>\n <name>dfs.journalnode.edits.dir</name>\n <value>/data/journaldata/</value>\n <description>journaldata服务存放文件的地址</description>\n </property>\n \n <property>\n <name>ipc.client.connect.max.retries</name>\n <value>10</value>\n <description>namenode和journalnode的链接重试次数10次</description>\n </property>\n \n <property>\n <name>ipc.client.connect.retry.interval</name>\n <value>10000</value>\n <description>重试的间隔时间10s</description>\n </property>\n\n <!-- zkfc的配置 -->\n <property>\n <name>dfs.ha.fencing.methods</name>\n <value>sshfence</value>\n <description>指定HA做隔离的方法,缺省是ssh,可设为shell,稍后详述</description>\n </property>\n \n <property>\n <name>dfs.ha.fencing.ssh.private-key-files</name>\n <value>/home/hadoop/.ssh/id_rsa</value>\n <description>杀死命令脚本的免密配置秘钥</description>\n </property>\n \n <property>\n <name>dfs.client.failover.proxy.provider.ns1</name>\n <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>\n <description>指定客户端用于HA切换的代理类,不同的NS可以用不同的代理类以上示例为Hadoop 2.0自带的缺省代理类</description>\n </property>\n \n <property>\n <name>dfs.client.failover.proxy.provider.auto-ha</name>\n <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>\n </property> \n \n <property>\n <name>dfs.ha.automatic-failover.enabled</name>\n <value>true</value>\n </property>\n\t<!-- datanode配置 -->\n\t<property>\n\t <name>dfs.datanode.data.dir</name>\n\t <value>/data/datanode</value>\n\t <description>datanode本地文件存放地址</description>\n\t</property>\n\t<property>\n\t <name>dfs.replication</name>\n\t <value>3</value>\n\t <description>文件复本数</description>\n\t</property>\n\t<property>\n\t <name>dfs.namenode.datanode.registration.ip-hostname-check</name>\n\t <value>false</value>\n\t</property>\n\t<property>\n\t <name>dfs.client.use.datanode.hostname</name>\n\t <value>true</value>\n\t</property>\n\t<property>\n\t <name>dfs.datanode.use.datanode.hostname</name>\n\t <value>true</value>\n\t</property>\n</configuration>\n```\n### 修改`hadoop-env.sh`\n```bash\nvim /usr/local/hadoop/etc/hadoop/hadoop-env.sh\n```\n\n```bash\n# 添加这两行\nsource /etc/profile \nexport HADOOP_HEAPSIZE_MAX=512\n```\n### 分发这些配置文件\n```bash\nscp_all.sh /usr/local/hadoop/etc/hadoop/core-site.xml /usr/local/hadoop/etc/hadoop/\nscp_all.sh /usr/local/hadoop/etc/hadoop/hdfs-site.xml /usr/local/hadoop/etc/hadoop/\nscp_all.sh /usr/local/hadoop/etc/hadoop/hadoop-env.sh /usr/local/hadoop/etc/hadoop/\n```\n### 集群初始化\n- 需要先启动zookeeper集群\n ```bash\n ssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh start\n ```\n\n ```bash\n # 第一次启动先启动journalnode,便于3个namenode的元数据同步\n ssh_all_zookeeper.sh hadoop-daemon.sh start journalnode\n ```\n- `zkfc`搭建\n ```bash\n #在nn1节点执行 \n hdfs zkfc -formatZK\n #nn1 nn2 nn3启动zkfc \n hadoop-daemon.sh start zkfc\n ```\n- 初始化nn1的namenode,在nn1执行\n ```bash\n hdfs namenode -format \n hadoop-daemon.sh start namenode\n ```\n- 格式化第二台和第三台namenode,并且启动namenode,在nn2、nn3执行\n ```bash\n hdfs namenode -bootstrapStandby \n hadoop-daemon.sh start namenode\n ```\n- 修改**workers**\n ```bash\n vim /usr/local/hadoop/etc/hadoop/workers\n ```\n 修改为\n ```text\n s1\n s2\n s3\n ```\n 分发给其他机器\n ```bash\n scp_all.sh /usr/local/hadoop/etc/hadoop/workers /usr/local/hadoop/etc/hadoop\n ```\n- 启动datanode节点,在s1、s2、s3执行\n\n ```bash\n #启动各个节点的datanode\n hadoop-daemons.sh start datanode\n ```\n### 集群启动\n```bash\nstart-dfs.sh\n```","source":"_posts/bigdata/hadoop/hdfs.md","raw":"---\ntitle: Hadoop集群HDFS配置\ntop_img: /img/site01.jpg\ntop_img_height: 800px\nabbrlink: 61252\ndate: 2024-09-011 22:45:40\n---\n\n### 上传`hadoop-3.1.4.tar.gz`到`/tmp`,解压\n>注意在六台机器均上传到`/tmp`\n```bash\n# 在6台机器执行\nsudo tar -zxvf /tmp/hadoop-3.1.4.tar.gz -C /usr/local/\n# 分发到其他主机\nssh_root.sh chown -R hadoop:hadoop /usr/local/hadoop-3.1.4\nssh_root.sh ln -s /usr/local/hadoop-3.1.4/ /usr/local/hadoop\n```\n### 配置环境变量\n```bash\necho 'export HADOOP_HOME=/usr/local/hadoop' >> /etc/profile.d/myEnv.sh\necho 'export PATH=$PATH:$HADOOP_HOME/bin' >> /etc/profile.d/myEnv.sh\necho 'export PATH=$PATH:$HADOOP_HOME/sbin' >> /etc/profile.d/myEnv.sh\n```\n\n```bash\n# 分发到nn2、nn3、s1、s2、s3\nscp_all.sh /etc/profile.d/myEnv.sh /etc/profile.d/\n# source 环境变量\nssh_root.sh source /etc/profile\n```\n>还需要创建 `/data`这个目录,由于nn1、nn2、nn3已经创建`/data`,其他三台需要创建一下\n```bash\n### 在s1、s2、s3执行\nsudo mkdir /data\nsudo chown -R hadoop:hadoop /data\n```\n\n### 修改core-site.xml\n```bash\nvim /usr/local/hadoop/etc/hadoop/core-site.xml \n```\n\n```xml\n<configuration>\n\t<property>\n\t <name>fs.defaultFS</name>\n\t <value>hdfs://ns1</value>\n\t <description>默认文件服务的协议和NS逻辑名称,和hdfs-site.xml里的对应此配置替代了1.0里的fs.default.name</description>\n\t</property>\n\t\n\t<property>\n\t <name>hadoop.tmp.dir</name>\n\t <value>/data/tmp</value>\n\t <description>数据存储目录</description>\n\t</property>\n\t\n\t<property>\n\t <name>hadoop.proxyuser.root.groups</name>\n\t <value>hadoop</value>\n\t <description>\n\t hdfs dfsadmin –refreshSuperUserGroupsConfiguration,\n\t yarn rmadmin –refreshSuperUserGroupsConfiguration\n\t 使用这两个命令不用重启就能刷新\n\t </description>\n\t</property>\n\t\n\t<property>\n\t <name>hadoop.proxyuser.root.hosts</name>\n\t <value>localhost</value>\n\t <description>本地代理</description>\n\t</property>\n\t\n\t<!-- zkfc的配置 -->\n\t<property> \n\t\t<name>ha.zookeeper.quorum</name> \n\t\t<value>nn1:2181,nn2:2181,nn3:2181</value> \n\t\t<description>HA使用的zookeeper地址</description> \n\t</property>\n</configuration>\n```\n### 修改`hdfs-site.xml`\n```bash\nvim /usr/local/hadoop/etc/hadoop/hdfs-site.xml \n```\n\n```xml\n<configuration>\n <property>\n <name>dfs.namenode.name.dir</name>\n <value>/data/namenode</value>\n <description>namenode本地文件存放地址</description>\n </property>\n \n <property>\n <name>dfs.nameservices</name>\n <value>ns1</value>\n <description>提供服务的NS逻辑名称,与core-site.xml里的对应</description>\n </property>\n \n <!-- namenode的配置 -->\n <!-- 主要的 -->\n <property>\n <name>dfs.ha.namenodes.ns1</name>\n <value>nn1,nn2,nn3</value>\n <description>列出该逻辑名称下的NameNode逻辑名称</description>\n </property>\n \n <property>\n <name>dfs.namenode.rpc-address.ns1.nn1</name>\n <value>nn1:9000</value>\n <description>指定NameNode的RPC位置</description>\n </property>\n \n <property>\n <name>dfs.namenode.http-address.ns1.nn1</name>\n <value>nn1:50070</value>\n <description>指定NameNode的Web Server位置</description>\n </property>\n \n <property>\n <name>dfs.namenode.rpc-address.ns1.nn2</name>\n <value>nn2:9000</value>\n <description>指定NameNode的RPC位置</description>\n </property>\n \n <property>\n <name>dfs.namenode.http-address.ns1.nn2</name>\n <value>nn2:50070</value>\n <description>指定NameNode的Web Server位置</description>\n </property>\n \n <property>\n <name>dfs.namenode.rpc-address.ns1.nn3</name>\n <value>nn3:9000</value>\n <description>指定NameNode的RPC位置</description>\n </property>\n \n <property>\n <name>dfs.namenode.http-address.ns1.nn3</name>\n <value>nn3:50070</value>\n <description>指定NameNode的Web Server位置</description>\n </property>\n \n <property>\n <name>dfs.namenode.handler.count</name>\n <value>77</value>\n <description>namenode的工作线程数</description>\n </property>\n\n <!-- journaldata配置,使得其他两个namenode同步第一个namenode数据 --> \n <property>\n <name>dfs.namenode.shared.edits.dir</name>\n <value>qjournal://nn1:8485;nn2:8485;nn3:8485/ns1</value>\n <description>指定用于HA存放edits的共享存储,通常是namenode的所在机器</description>\n </property>\n \n <property>\n <name>dfs.journalnode.edits.dir</name>\n <value>/data/journaldata/</value>\n <description>journaldata服务存放文件的地址</description>\n </property>\n \n <property>\n <name>ipc.client.connect.max.retries</name>\n <value>10</value>\n <description>namenode和journalnode的链接重试次数10次</description>\n </property>\n \n <property>\n <name>ipc.client.connect.retry.interval</name>\n <value>10000</value>\n <description>重试的间隔时间10s</description>\n </property>\n\n <!-- zkfc的配置 -->\n <property>\n <name>dfs.ha.fencing.methods</name>\n <value>sshfence</value>\n <description>指定HA做隔离的方法,缺省是ssh,可设为shell,稍后详述</description>\n </property>\n \n <property>\n <name>dfs.ha.fencing.ssh.private-key-files</name>\n <value>/home/hadoop/.ssh/id_rsa</value>\n <description>杀死命令脚本的免密配置秘钥</description>\n </property>\n \n <property>\n <name>dfs.client.failover.proxy.provider.ns1</name>\n <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>\n <description>指定客户端用于HA切换的代理类,不同的NS可以用不同的代理类以上示例为Hadoop 2.0自带的缺省代理类</description>\n </property>\n \n <property>\n <name>dfs.client.failover.proxy.provider.auto-ha</name>\n <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>\n </property> \n \n <property>\n <name>dfs.ha.automatic-failover.enabled</name>\n <value>true</value>\n </property>\n\t<!-- datanode配置 -->\n\t<property>\n\t <name>dfs.datanode.data.dir</name>\n\t <value>/data/datanode</value>\n\t <description>datanode本地文件存放地址</description>\n\t</property>\n\t<property>\n\t <name>dfs.replication</name>\n\t <value>3</value>\n\t <description>文件复本数</description>\n\t</property>\n\t<property>\n\t <name>dfs.namenode.datanode.registration.ip-hostname-check</name>\n\t <value>false</value>\n\t</property>\n\t<property>\n\t <name>dfs.client.use.datanode.hostname</name>\n\t <value>true</value>\n\t</property>\n\t<property>\n\t <name>dfs.datanode.use.datanode.hostname</name>\n\t <value>true</value>\n\t</property>\n</configuration>\n```\n### 修改`hadoop-env.sh`\n```bash\nvim /usr/local/hadoop/etc/hadoop/hadoop-env.sh\n```\n\n```bash\n# 添加这两行\nsource /etc/profile \nexport HADOOP_HEAPSIZE_MAX=512\n```\n### 分发这些配置文件\n```bash\nscp_all.sh /usr/local/hadoop/etc/hadoop/core-site.xml /usr/local/hadoop/etc/hadoop/\nscp_all.sh /usr/local/hadoop/etc/hadoop/hdfs-site.xml /usr/local/hadoop/etc/hadoop/\nscp_all.sh /usr/local/hadoop/etc/hadoop/hadoop-env.sh /usr/local/hadoop/etc/hadoop/\n```\n### 集群初始化\n- 需要先启动zookeeper集群\n ```bash\n ssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh start\n ```\n\n ```bash\n # 第一次启动先启动journalnode,便于3个namenode的元数据同步\n ssh_all_zookeeper.sh hadoop-daemon.sh start journalnode\n ```\n- `zkfc`搭建\n ```bash\n #在nn1节点执行 \n hdfs zkfc -formatZK\n #nn1 nn2 nn3启动zkfc \n hadoop-daemon.sh start zkfc\n ```\n- 初始化nn1的namenode,在nn1执行\n ```bash\n hdfs namenode -format \n hadoop-daemon.sh start namenode\n ```\n- 格式化第二台和第三台namenode,并且启动namenode,在nn2、nn3执行\n ```bash\n hdfs namenode -bootstrapStandby \n hadoop-daemon.sh start namenode\n ```\n- 修改**workers**\n ```bash\n vim /usr/local/hadoop/etc/hadoop/workers\n ```\n 修改为\n ```text\n s1\n s2\n s3\n ```\n 分发给其他机器\n ```bash\n scp_all.sh /usr/local/hadoop/etc/hadoop/workers /usr/local/hadoop/etc/hadoop\n ```\n- 启动datanode节点,在s1、s2、s3执行\n\n ```bash\n #启动各个节点的datanode\n hadoop-daemons.sh start datanode\n ```\n### 集群启动\n```bash\nstart-dfs.sh\n```","slug":"bigdata/hadoop/hdfs","published":1,"updated":"2024-09-11T14:51:42.712Z","comments":1,"layout":"post","photos":[],"_id":"cm5w9lrdv000qtgah29015x3b","content":"<h3 id=\"上传hadoop-3-1-4-tar-gz到-tmp,解压\"><a href=\"#上传hadoop-3-1-4-tar-gz到-tmp,解压\" class=\"headerlink\" title=\"上传hadoop-3.1.4.tar.gz到/tmp,解压\"></a>上传<code>hadoop-3.1.4.tar.gz</code>到<code>/tmp</code>,解压</h3><blockquote>\n<p>注意在六台机器均上传到<code>/tmp</code></p>\n</blockquote>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 在6台机器执行</span></span><br><span class=\"line\"><span class=\"built_in\">sudo</span> tar -zxvf /tmp/hadoop-3.1.4.tar.gz -C /usr/local/</span><br><span class=\"line\"><span class=\"comment\"># 分发到其他主机</span></span><br><span class=\"line\">ssh_root.sh <span class=\"built_in\">chown</span> -R hadoop:hadoop /usr/local/hadoop-3.1.4</span><br><span class=\"line\">ssh_root.sh <span class=\"built_in\">ln</span> -s /usr/local/hadoop-3.1.4/ /usr/local/hadoop</span><br></pre></td></tr></table></figure>\n<h3 id=\"配置环境变量\"><a href=\"#配置环境变量\" class=\"headerlink\" title=\"配置环境变量\"></a>配置环境变量</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">'export HADOOP_HOME=/usr/local/hadoop'</span> >> /etc/profile.d/myEnv.sh</span><br><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">'export PATH=$PATH:$HADOOP_HOME/bin'</span> >> /etc/profile.d/myEnv.sh</span><br><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">'export PATH=$PATH:$HADOOP_HOME/sbin'</span> >> /etc/profile.d/myEnv.sh</span><br></pre></td></tr></table></figure>\n\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 分发到nn2、nn3、s1、s2、s3</span></span><br><span class=\"line\">scp_all.sh /etc/profile.d/myEnv.sh /etc/profile.d/</span><br><span class=\"line\"><span class=\"comment\"># source 环境变量</span></span><br><span class=\"line\">ssh_root.sh <span class=\"built_in\">source</span> /etc/profile</span><br></pre></td></tr></table></figure>\n<blockquote>\n<p>还需要创建 <code>/data</code>这个目录,由于nn1、nn2、nn3已经创建<code>/data</code>,其他三台需要创建一下</p>\n</blockquote>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">### 在s1、s2、s3执行</span></span><br><span class=\"line\"><span class=\"built_in\">sudo</span> <span class=\"built_in\">mkdir</span> /data</span><br><span class=\"line\"><span class=\"built_in\">sudo</span> <span class=\"built_in\">chown</span> -R hadoop:hadoop /data</span><br></pre></td></tr></table></figure>\n\n<h3 id=\"修改core-site-xml\"><a href=\"#修改core-site-xml\" class=\"headerlink\" title=\"修改core-site.xml\"></a>修改core-site.xml</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /usr/local/hadoop/etc/hadoop/core-site.xml </span><br></pre></td></tr></table></figure>\n\n<figure class=\"highlight xml\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"tag\"><<span class=\"name\">configuration</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>fs.defaultFS<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>hdfs://ns1<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">description</span>></span>默认文件服务的协议和NS逻辑名称,和hdfs-site.xml里的对应此配置替代了1.0里的fs.default.name<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t</span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>hadoop.tmp.dir<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>/data/tmp<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">description</span>></span>数据存储目录<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t</span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>hadoop.proxyuser.root.groups<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>hadoop<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">description</span>></span></span><br><span class=\"line\">\t hdfs dfsadmin –refreshSuperUserGroupsConfiguration,</span><br><span class=\"line\">\t yarn rmadmin –refreshSuperUserGroupsConfiguration</span><br><span class=\"line\">\t 使用这两个命令不用重启就能刷新</span><br><span class=\"line\">\t <span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t</span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>hadoop.proxyuser.root.hosts<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>localhost<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">description</span>></span>本地代理<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t</span><br><span class=\"line\">\t<span class=\"comment\"><!-- zkfc的配置 --></span></span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span> </span><br><span class=\"line\">\t\t<span class=\"tag\"><<span class=\"name\">name</span>></span>ha.zookeeper.quorum<span class=\"tag\"></<span class=\"name\">name</span>></span> </span><br><span class=\"line\">\t\t<span class=\"tag\"><<span class=\"name\">value</span>></span>nn1:2181,nn2:2181,nn3:2181<span class=\"tag\"></<span class=\"name\">value</span>></span> </span><br><span class=\"line\">\t\t<span class=\"tag\"><<span class=\"name\">description</span>></span>HA使用的zookeeper地址<span class=\"tag\"></<span class=\"name\">description</span>></span> </span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"><span class=\"tag\"></<span class=\"name\">configuration</span>></span></span><br></pre></td></tr></table></figure>\n<h3 id=\"修改hdfs-site-xml\"><a href=\"#修改hdfs-site-xml\" class=\"headerlink\" title=\"修改hdfs-site.xml\"></a>修改<code>hdfs-site.xml</code></h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml </span><br></pre></td></tr></table></figure>\n\n<figure class=\"highlight xml\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br><span class=\"line\">49</span><br><span class=\"line\">50</span><br><span class=\"line\">51</span><br><span class=\"line\">52</span><br><span class=\"line\">53</span><br><span class=\"line\">54</span><br><span class=\"line\">55</span><br><span class=\"line\">56</span><br><span class=\"line\">57</span><br><span class=\"line\">58</span><br><span class=\"line\">59</span><br><span class=\"line\">60</span><br><span class=\"line\">61</span><br><span class=\"line\">62</span><br><span class=\"line\">63</span><br><span class=\"line\">64</span><br><span class=\"line\">65</span><br><span class=\"line\">66</span><br><span class=\"line\">67</span><br><span class=\"line\">68</span><br><span class=\"line\">69</span><br><span class=\"line\">70</span><br><span class=\"line\">71</span><br><span class=\"line\">72</span><br><span class=\"line\">73</span><br><span class=\"line\">74</span><br><span class=\"line\">75</span><br><span class=\"line\">76</span><br><span class=\"line\">77</span><br><span class=\"line\">78</span><br><span class=\"line\">79</span><br><span class=\"line\">80</span><br><span class=\"line\">81</span><br><span class=\"line\">82</span><br><span class=\"line\">83</span><br><span class=\"line\">84</span><br><span class=\"line\">85</span><br><span class=\"line\">86</span><br><span class=\"line\">87</span><br><span class=\"line\">88</span><br><span class=\"line\">89</span><br><span class=\"line\">90</span><br><span class=\"line\">91</span><br><span class=\"line\">92</span><br><span class=\"line\">93</span><br><span class=\"line\">94</span><br><span class=\"line\">95</span><br><span class=\"line\">96</span><br><span class=\"line\">97</span><br><span class=\"line\">98</span><br><span class=\"line\">99</span><br><span class=\"line\">100</span><br><span class=\"line\">101</span><br><span class=\"line\">102</span><br><span class=\"line\">103</span><br><span class=\"line\">104</span><br><span class=\"line\">105</span><br><span class=\"line\">106</span><br><span class=\"line\">107</span><br><span class=\"line\">108</span><br><span class=\"line\">109</span><br><span class=\"line\">110</span><br><span class=\"line\">111</span><br><span class=\"line\">112</span><br><span class=\"line\">113</span><br><span class=\"line\">114</span><br><span class=\"line\">115</span><br><span class=\"line\">116</span><br><span class=\"line\">117</span><br><span class=\"line\">118</span><br><span class=\"line\">119</span><br><span class=\"line\">120</span><br><span class=\"line\">121</span><br><span class=\"line\">122</span><br><span class=\"line\">123</span><br><span class=\"line\">124</span><br><span class=\"line\">125</span><br><span class=\"line\">126</span><br><span class=\"line\">127</span><br><span class=\"line\">128</span><br><span class=\"line\">129</span><br><span class=\"line\">130</span><br><span class=\"line\">131</span><br><span class=\"line\">132</span><br><span class=\"line\">133</span><br><span class=\"line\">134</span><br><span class=\"line\">135</span><br><span class=\"line\">136</span><br><span class=\"line\">137</span><br><span class=\"line\">138</span><br><span class=\"line\">139</span><br><span class=\"line\">140</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"tag\"><<span class=\"name\">configuration</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.name.dir<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>/data/namenode<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>namenode本地文件存放地址<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.nameservices<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>ns1<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>提供服务的NS逻辑名称,与core-site.xml里的对应<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"comment\"><!-- namenode的配置 --></span></span><br><span class=\"line\"> <span class=\"comment\"><!-- 主要的 --></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.ha.namenodes.ns1<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>nn1,nn2,nn3<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>列出该逻辑名称下的NameNode逻辑名称<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.rpc-address.ns1.nn1<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>nn1:9000<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定NameNode的RPC位置<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.http-address.ns1.nn1<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>nn1:50070<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定NameNode的Web Server位置<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.rpc-address.ns1.nn2<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>nn2:9000<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定NameNode的RPC位置<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.http-address.ns1.nn2<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>nn2:50070<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定NameNode的Web Server位置<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.rpc-address.ns1.nn3<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>nn3:9000<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定NameNode的RPC位置<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.http-address.ns1.nn3<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>nn3:50070<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定NameNode的Web Server位置<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.handler.count<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>77<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>namenode的工作线程数<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"></span><br><span class=\"line\"> <span class=\"comment\"><!-- journaldata配置,使得其他两个namenode同步第一个namenode数据 --></span> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.shared.edits.dir<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>qjournal://nn1:8485;nn2:8485;nn3:8485/ns1<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定用于HA存放edits的共享存储,通常是namenode的所在机器<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.journalnode.edits.dir<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>/data/journaldata/<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>journaldata服务存放文件的地址<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>ipc.client.connect.max.retries<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>10<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>namenode和journalnode的链接重试次数10次<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>ipc.client.connect.retry.interval<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>10000<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>重试的间隔时间10s<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"></span><br><span class=\"line\"> <span class=\"comment\"><!-- zkfc的配置 --></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.ha.fencing.methods<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>sshfence<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定HA做隔离的方法,缺省是ssh,可设为shell,稍后详述<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.ha.fencing.ssh.private-key-files<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>/home/hadoop/.ssh/id_rsa<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>杀死命令脚本的免密配置秘钥<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.client.failover.proxy.provider.ns1<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定客户端用于HA切换的代理类,不同的NS可以用不同的代理类以上示例为Hadoop 2.0自带的缺省代理类<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.client.failover.proxy.provider.auto-ha<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span> </span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.ha.automatic-failover.enabled<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>true<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t<span class=\"comment\"><!-- datanode配置 --></span></span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.datanode.data.dir<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>/data/datanode<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">description</span>></span>datanode本地文件存放地址<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.replication<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>3<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">description</span>></span>文件复本数<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.datanode.registration.ip-hostname-check<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>false<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.client.use.datanode.hostname<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>true<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.datanode.use.datanode.hostname<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>true<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"><span class=\"tag\"></<span class=\"name\">configuration</span>></span></span><br></pre></td></tr></table></figure>\n<h3 id=\"修改hadoop-env-sh\"><a href=\"#修改hadoop-env-sh\" class=\"headerlink\" title=\"修改hadoop-env.sh\"></a>修改<code>hadoop-env.sh</code></h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh</span><br></pre></td></tr></table></figure>\n\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 添加这两行</span></span><br><span class=\"line\"><span class=\"built_in\">source</span> /etc/profile </span><br><span class=\"line\"><span class=\"built_in\">export</span> HADOOP_HEAPSIZE_MAX=512</span><br></pre></td></tr></table></figure>\n<h3 id=\"分发这些配置文件\"><a href=\"#分发这些配置文件\" class=\"headerlink\" title=\"分发这些配置文件\"></a>分发这些配置文件</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">scp_all.sh /usr/local/hadoop/etc/hadoop/core-site.xml /usr/local/hadoop/etc/hadoop/</span><br><span class=\"line\">scp_all.sh /usr/local/hadoop/etc/hadoop/hdfs-site.xml /usr/local/hadoop/etc/hadoop/</span><br><span class=\"line\">scp_all.sh /usr/local/hadoop/etc/hadoop/hadoop-env.sh /usr/local/hadoop/etc/hadoop/</span><br></pre></td></tr></table></figure>\n<h3 id=\"集群初始化\"><a href=\"#集群初始化\" class=\"headerlink\" title=\"集群初始化\"></a>集群初始化</h3><ul>\n<li><p>需要先启动zookeeper集群</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh start</span><br></pre></td></tr></table></figure>\n\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 第一次启动先启动journalnode,便于3个namenode的元数据同步</span></span><br><span class=\"line\">ssh_all_zookeeper.sh hadoop-daemon.sh start journalnode</span><br></pre></td></tr></table></figure></li>\n<li><p><code>zkfc</code>搭建</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#在nn1节点执行 </span></span><br><span class=\"line\">hdfs zkfc -formatZK</span><br><span class=\"line\"><span class=\"comment\">#nn1 nn2 nn3启动zkfc </span></span><br><span class=\"line\">hadoop-daemon.sh start zkfc</span><br></pre></td></tr></table></figure></li>\n<li><p>初始化nn1的namenode,在nn1执行</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">hdfs namenode -format </span><br><span class=\"line\">hadoop-daemon.sh start namenode</span><br></pre></td></tr></table></figure></li>\n<li><p>格式化第二台和第三台namenode,并且启动namenode,在nn2、nn3执行</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">hdfs namenode -bootstrapStandby </span><br><span class=\"line\">hadoop-daemon.sh start namenode</span><br></pre></td></tr></table></figure></li>\n<li><p>修改<strong>workers</strong></p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /usr/local/hadoop/etc/hadoop/workers</span><br></pre></td></tr></table></figure>\n<p> 修改为</p>\n <figure class=\"highlight text\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">s1</span><br><span class=\"line\">s2</span><br><span class=\"line\">s3</span><br></pre></td></tr></table></figure>\n<p> 分发给其他机器</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">scp_all.sh /usr/local/hadoop/etc/hadoop/workers /usr/local/hadoop/etc/hadoop</span><br></pre></td></tr></table></figure></li>\n<li><p>启动datanode节点,在s1、s2、s3执行</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#启动各个节点的datanode</span></span><br><span class=\"line\">hadoop-daemons.sh start datanode</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h3 id=\"集群启动\"><a href=\"#集群启动\" class=\"headerlink\" title=\"集群启动\"></a>集群启动</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">start-dfs.sh</span><br></pre></td></tr></table></figure>","cover":false,"excerpt":"","more":"<h3 id=\"上传hadoop-3-1-4-tar-gz到-tmp,解压\"><a href=\"#上传hadoop-3-1-4-tar-gz到-tmp,解压\" class=\"headerlink\" title=\"上传hadoop-3.1.4.tar.gz到/tmp,解压\"></a>上传<code>hadoop-3.1.4.tar.gz</code>到<code>/tmp</code>,解压</h3><blockquote>\n<p>注意在六台机器均上传到<code>/tmp</code></p>\n</blockquote>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 在6台机器执行</span></span><br><span class=\"line\"><span class=\"built_in\">sudo</span> tar -zxvf /tmp/hadoop-3.1.4.tar.gz -C /usr/local/</span><br><span class=\"line\"><span class=\"comment\"># 分发到其他主机</span></span><br><span class=\"line\">ssh_root.sh <span class=\"built_in\">chown</span> -R hadoop:hadoop /usr/local/hadoop-3.1.4</span><br><span class=\"line\">ssh_root.sh <span class=\"built_in\">ln</span> -s /usr/local/hadoop-3.1.4/ /usr/local/hadoop</span><br></pre></td></tr></table></figure>\n<h3 id=\"配置环境变量\"><a href=\"#配置环境变量\" class=\"headerlink\" title=\"配置环境变量\"></a>配置环境变量</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">'export HADOOP_HOME=/usr/local/hadoop'</span> >> /etc/profile.d/myEnv.sh</span><br><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">'export PATH=$PATH:$HADOOP_HOME/bin'</span> >> /etc/profile.d/myEnv.sh</span><br><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">'export PATH=$PATH:$HADOOP_HOME/sbin'</span> >> /etc/profile.d/myEnv.sh</span><br></pre></td></tr></table></figure>\n\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 分发到nn2、nn3、s1、s2、s3</span></span><br><span class=\"line\">scp_all.sh /etc/profile.d/myEnv.sh /etc/profile.d/</span><br><span class=\"line\"><span class=\"comment\"># source 环境变量</span></span><br><span class=\"line\">ssh_root.sh <span class=\"built_in\">source</span> /etc/profile</span><br></pre></td></tr></table></figure>\n<blockquote>\n<p>还需要创建 <code>/data</code>这个目录,由于nn1、nn2、nn3已经创建<code>/data</code>,其他三台需要创建一下</p>\n</blockquote>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">### 在s1、s2、s3执行</span></span><br><span class=\"line\"><span class=\"built_in\">sudo</span> <span class=\"built_in\">mkdir</span> /data</span><br><span class=\"line\"><span class=\"built_in\">sudo</span> <span class=\"built_in\">chown</span> -R hadoop:hadoop /data</span><br></pre></td></tr></table></figure>\n\n<h3 id=\"修改core-site-xml\"><a href=\"#修改core-site-xml\" class=\"headerlink\" title=\"修改core-site.xml\"></a>修改core-site.xml</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /usr/local/hadoop/etc/hadoop/core-site.xml </span><br></pre></td></tr></table></figure>\n\n<figure class=\"highlight xml\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"tag\"><<span class=\"name\">configuration</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>fs.defaultFS<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>hdfs://ns1<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">description</span>></span>默认文件服务的协议和NS逻辑名称,和hdfs-site.xml里的对应此配置替代了1.0里的fs.default.name<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t</span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>hadoop.tmp.dir<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>/data/tmp<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">description</span>></span>数据存储目录<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t</span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>hadoop.proxyuser.root.groups<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>hadoop<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">description</span>></span></span><br><span class=\"line\">\t hdfs dfsadmin –refreshSuperUserGroupsConfiguration,</span><br><span class=\"line\">\t yarn rmadmin –refreshSuperUserGroupsConfiguration</span><br><span class=\"line\">\t 使用这两个命令不用重启就能刷新</span><br><span class=\"line\">\t <span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t</span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>hadoop.proxyuser.root.hosts<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>localhost<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">description</span>></span>本地代理<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t</span><br><span class=\"line\">\t<span class=\"comment\"><!-- zkfc的配置 --></span></span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span> </span><br><span class=\"line\">\t\t<span class=\"tag\"><<span class=\"name\">name</span>></span>ha.zookeeper.quorum<span class=\"tag\"></<span class=\"name\">name</span>></span> </span><br><span class=\"line\">\t\t<span class=\"tag\"><<span class=\"name\">value</span>></span>nn1:2181,nn2:2181,nn3:2181<span class=\"tag\"></<span class=\"name\">value</span>></span> </span><br><span class=\"line\">\t\t<span class=\"tag\"><<span class=\"name\">description</span>></span>HA使用的zookeeper地址<span class=\"tag\"></<span class=\"name\">description</span>></span> </span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"><span class=\"tag\"></<span class=\"name\">configuration</span>></span></span><br></pre></td></tr></table></figure>\n<h3 id=\"修改hdfs-site-xml\"><a href=\"#修改hdfs-site-xml\" class=\"headerlink\" title=\"修改hdfs-site.xml\"></a>修改<code>hdfs-site.xml</code></h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml </span><br></pre></td></tr></table></figure>\n\n<figure class=\"highlight xml\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br><span class=\"line\">9</span><br><span class=\"line\">10</span><br><span class=\"line\">11</span><br><span class=\"line\">12</span><br><span class=\"line\">13</span><br><span class=\"line\">14</span><br><span class=\"line\">15</span><br><span class=\"line\">16</span><br><span class=\"line\">17</span><br><span class=\"line\">18</span><br><span class=\"line\">19</span><br><span class=\"line\">20</span><br><span class=\"line\">21</span><br><span class=\"line\">22</span><br><span class=\"line\">23</span><br><span class=\"line\">24</span><br><span class=\"line\">25</span><br><span class=\"line\">26</span><br><span class=\"line\">27</span><br><span class=\"line\">28</span><br><span class=\"line\">29</span><br><span class=\"line\">30</span><br><span class=\"line\">31</span><br><span class=\"line\">32</span><br><span class=\"line\">33</span><br><span class=\"line\">34</span><br><span class=\"line\">35</span><br><span class=\"line\">36</span><br><span class=\"line\">37</span><br><span class=\"line\">38</span><br><span class=\"line\">39</span><br><span class=\"line\">40</span><br><span class=\"line\">41</span><br><span class=\"line\">42</span><br><span class=\"line\">43</span><br><span class=\"line\">44</span><br><span class=\"line\">45</span><br><span class=\"line\">46</span><br><span class=\"line\">47</span><br><span class=\"line\">48</span><br><span class=\"line\">49</span><br><span class=\"line\">50</span><br><span class=\"line\">51</span><br><span class=\"line\">52</span><br><span class=\"line\">53</span><br><span class=\"line\">54</span><br><span class=\"line\">55</span><br><span class=\"line\">56</span><br><span class=\"line\">57</span><br><span class=\"line\">58</span><br><span class=\"line\">59</span><br><span class=\"line\">60</span><br><span class=\"line\">61</span><br><span class=\"line\">62</span><br><span class=\"line\">63</span><br><span class=\"line\">64</span><br><span class=\"line\">65</span><br><span class=\"line\">66</span><br><span class=\"line\">67</span><br><span class=\"line\">68</span><br><span class=\"line\">69</span><br><span class=\"line\">70</span><br><span class=\"line\">71</span><br><span class=\"line\">72</span><br><span class=\"line\">73</span><br><span class=\"line\">74</span><br><span class=\"line\">75</span><br><span class=\"line\">76</span><br><span class=\"line\">77</span><br><span class=\"line\">78</span><br><span class=\"line\">79</span><br><span class=\"line\">80</span><br><span class=\"line\">81</span><br><span class=\"line\">82</span><br><span class=\"line\">83</span><br><span class=\"line\">84</span><br><span class=\"line\">85</span><br><span class=\"line\">86</span><br><span class=\"line\">87</span><br><span class=\"line\">88</span><br><span class=\"line\">89</span><br><span class=\"line\">90</span><br><span class=\"line\">91</span><br><span class=\"line\">92</span><br><span class=\"line\">93</span><br><span class=\"line\">94</span><br><span class=\"line\">95</span><br><span class=\"line\">96</span><br><span class=\"line\">97</span><br><span class=\"line\">98</span><br><span class=\"line\">99</span><br><span class=\"line\">100</span><br><span class=\"line\">101</span><br><span class=\"line\">102</span><br><span class=\"line\">103</span><br><span class=\"line\">104</span><br><span class=\"line\">105</span><br><span class=\"line\">106</span><br><span class=\"line\">107</span><br><span class=\"line\">108</span><br><span class=\"line\">109</span><br><span class=\"line\">110</span><br><span class=\"line\">111</span><br><span class=\"line\">112</span><br><span class=\"line\">113</span><br><span class=\"line\">114</span><br><span class=\"line\">115</span><br><span class=\"line\">116</span><br><span class=\"line\">117</span><br><span class=\"line\">118</span><br><span class=\"line\">119</span><br><span class=\"line\">120</span><br><span class=\"line\">121</span><br><span class=\"line\">122</span><br><span class=\"line\">123</span><br><span class=\"line\">124</span><br><span class=\"line\">125</span><br><span class=\"line\">126</span><br><span class=\"line\">127</span><br><span class=\"line\">128</span><br><span class=\"line\">129</span><br><span class=\"line\">130</span><br><span class=\"line\">131</span><br><span class=\"line\">132</span><br><span class=\"line\">133</span><br><span class=\"line\">134</span><br><span class=\"line\">135</span><br><span class=\"line\">136</span><br><span class=\"line\">137</span><br><span class=\"line\">138</span><br><span class=\"line\">139</span><br><span class=\"line\">140</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"tag\"><<span class=\"name\">configuration</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.name.dir<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>/data/namenode<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>namenode本地文件存放地址<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.nameservices<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>ns1<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>提供服务的NS逻辑名称,与core-site.xml里的对应<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"comment\"><!-- namenode的配置 --></span></span><br><span class=\"line\"> <span class=\"comment\"><!-- 主要的 --></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.ha.namenodes.ns1<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>nn1,nn2,nn3<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>列出该逻辑名称下的NameNode逻辑名称<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.rpc-address.ns1.nn1<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>nn1:9000<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定NameNode的RPC位置<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.http-address.ns1.nn1<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>nn1:50070<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定NameNode的Web Server位置<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.rpc-address.ns1.nn2<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>nn2:9000<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定NameNode的RPC位置<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.http-address.ns1.nn2<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>nn2:50070<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定NameNode的Web Server位置<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.rpc-address.ns1.nn3<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>nn3:9000<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定NameNode的RPC位置<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.http-address.ns1.nn3<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>nn3:50070<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定NameNode的Web Server位置<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.handler.count<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>77<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>namenode的工作线程数<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"></span><br><span class=\"line\"> <span class=\"comment\"><!-- journaldata配置,使得其他两个namenode同步第一个namenode数据 --></span> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.shared.edits.dir<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>qjournal://nn1:8485;nn2:8485;nn3:8485/ns1<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定用于HA存放edits的共享存储,通常是namenode的所在机器<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.journalnode.edits.dir<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>/data/journaldata/<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>journaldata服务存放文件的地址<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>ipc.client.connect.max.retries<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>10<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>namenode和journalnode的链接重试次数10次<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>ipc.client.connect.retry.interval<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>10000<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>重试的间隔时间10s<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"></span><br><span class=\"line\"> <span class=\"comment\"><!-- zkfc的配置 --></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.ha.fencing.methods<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>sshfence<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定HA做隔离的方法,缺省是ssh,可设为shell,稍后详述<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.ha.fencing.ssh.private-key-files<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>/home/hadoop/.ssh/id_rsa<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>杀死命令脚本的免密配置秘钥<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.client.failover.proxy.provider.ns1<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">description</span>></span>指定客户端用于HA切换的代理类,不同的NS可以用不同的代理类以上示例为Hadoop 2.0自带的缺省代理类<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.client.failover.proxy.provider.auto-ha<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span> </span><br><span class=\"line\"> </span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.ha.automatic-failover.enabled<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\"> <span class=\"tag\"><<span class=\"name\">value</span>></span>true<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\"> <span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t<span class=\"comment\"><!-- datanode配置 --></span></span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.datanode.data.dir<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>/data/datanode<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">description</span>></span>datanode本地文件存放地址<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.replication<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>3<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">description</span>></span>文件复本数<span class=\"tag\"></<span class=\"name\">description</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.namenode.datanode.registration.ip-hostname-check<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>false<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.client.use.datanode.hostname<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>true<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"><<span class=\"name\">property</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">name</span>></span>dfs.datanode.use.datanode.hostname<span class=\"tag\"></<span class=\"name\">name</span>></span></span><br><span class=\"line\">\t <span class=\"tag\"><<span class=\"name\">value</span>></span>true<span class=\"tag\"></<span class=\"name\">value</span>></span></span><br><span class=\"line\">\t<span class=\"tag\"></<span class=\"name\">property</span>></span></span><br><span class=\"line\"><span class=\"tag\"></<span class=\"name\">configuration</span>></span></span><br></pre></td></tr></table></figure>\n<h3 id=\"修改hadoop-env-sh\"><a href=\"#修改hadoop-env-sh\" class=\"headerlink\" title=\"修改hadoop-env.sh\"></a>修改<code>hadoop-env.sh</code></h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh</span><br></pre></td></tr></table></figure>\n\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 添加这两行</span></span><br><span class=\"line\"><span class=\"built_in\">source</span> /etc/profile </span><br><span class=\"line\"><span class=\"built_in\">export</span> HADOOP_HEAPSIZE_MAX=512</span><br></pre></td></tr></table></figure>\n<h3 id=\"分发这些配置文件\"><a href=\"#分发这些配置文件\" class=\"headerlink\" title=\"分发这些配置文件\"></a>分发这些配置文件</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">scp_all.sh /usr/local/hadoop/etc/hadoop/core-site.xml /usr/local/hadoop/etc/hadoop/</span><br><span class=\"line\">scp_all.sh /usr/local/hadoop/etc/hadoop/hdfs-site.xml /usr/local/hadoop/etc/hadoop/</span><br><span class=\"line\">scp_all.sh /usr/local/hadoop/etc/hadoop/hadoop-env.sh /usr/local/hadoop/etc/hadoop/</span><br></pre></td></tr></table></figure>\n<h3 id=\"集群初始化\"><a href=\"#集群初始化\" class=\"headerlink\" title=\"集群初始化\"></a>集群初始化</h3><ul>\n<li><p>需要先启动zookeeper集群</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh start</span><br></pre></td></tr></table></figure>\n\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 第一次启动先启动journalnode,便于3个namenode的元数据同步</span></span><br><span class=\"line\">ssh_all_zookeeper.sh hadoop-daemon.sh start journalnode</span><br></pre></td></tr></table></figure></li>\n<li><p><code>zkfc</code>搭建</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#在nn1节点执行 </span></span><br><span class=\"line\">hdfs zkfc -formatZK</span><br><span class=\"line\"><span class=\"comment\">#nn1 nn2 nn3启动zkfc </span></span><br><span class=\"line\">hadoop-daemon.sh start zkfc</span><br></pre></td></tr></table></figure></li>\n<li><p>初始化nn1的namenode,在nn1执行</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">hdfs namenode -format </span><br><span class=\"line\">hadoop-daemon.sh start namenode</span><br></pre></td></tr></table></figure></li>\n<li><p>格式化第二台和第三台namenode,并且启动namenode,在nn2、nn3执行</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">hdfs namenode -bootstrapStandby </span><br><span class=\"line\">hadoop-daemon.sh start namenode</span><br></pre></td></tr></table></figure></li>\n<li><p>修改<strong>workers</strong></p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim /usr/local/hadoop/etc/hadoop/workers</span><br></pre></td></tr></table></figure>\n<p> 修改为</p>\n <figure class=\"highlight text\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">s1</span><br><span class=\"line\">s2</span><br><span class=\"line\">s3</span><br></pre></td></tr></table></figure>\n<p> 分发给其他机器</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">scp_all.sh /usr/local/hadoop/etc/hadoop/workers /usr/local/hadoop/etc/hadoop</span><br></pre></td></tr></table></figure></li>\n<li><p>启动datanode节点,在s1、s2、s3执行</p>\n <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#启动各个节点的datanode</span></span><br><span class=\"line\">hadoop-daemons.sh start datanode</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h3 id=\"集群启动\"><a href=\"#集群启动\" class=\"headerlink\" title=\"集群启动\"></a>集群启动</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">start-dfs.sh</span><br></pre></td></tr></table></figure>"},{"title":"Hadoop集群Zookeeper配置","top_img":"/img/site01.jpg","top_img_height":"800px","abbrlink":61251,"date":"2024-09-11T14:45:40.000Z","_content":"\n### Zookeeper脚本配置\n- 拷贝ips\n ```bash\n cp ips ips_zookeeper\n ```\n 修改为\n ```bash\n nn1\n nn2\n nn3\n ```\n- 拷贝三个脚本\n ```bash\n cp scp_all.sh scp_all_zookeeper.sh \n cp ssh_all.sh ssh_all_zookeeper.sh \n cp ssh_root.sh ssh_root_zookeeper.sh\n ```\n- 修改脚本\n ```shell\n vim scp_all_zookeeper.sh \n vim ssh_all_zookeeper.sh \n vim ssh_root_zookeeper.sh \n ```\n\n 将三个脚本中的ips改为ips_zookeeper\n### Zookeeper安装\n- 上传到`/tmp`目录下,解压\n ```bash\n sudo tar -zxvf /tmp/zookeeper-3.4.8.tar.gz -C /usr/local/\n scp -r /usr/local/zookeeper-3.4.8/ root@nn2:/usr/local/\n scp -r /usr/local/zookeeper-3.4.8/ root@nn3:/usr/local/\n ssh_root_zookeeper.sh chown -R hadoop:hadoop /usr/local/zookeeper-3.4.8\n ssh_root_zookeeper.s ln -s /usr/local/zookeeper-3.4.8/ /usr/local/zookeeper\n ```\n### Zookeeper配置\n - zoo.cfg配置\n ```bash\n cd /usr/local/zookeeper/conf/\n cp zoo_sample.cfg zoo.cfg\n ```\n 然后`vim zoo.cfg`,修改如下:\n ```properties\n # 修改dataDir\n dataDir=/data/zookeeper\n # 添加一下内容\n server.1=nn1:2888:3888 \n server.2=nn2:2888:3888 \n server.3=nn3:2888:3888\n ```\n 分发给nn2、nn3\n `scp_all_zookeeper.sh /usr/local/zookeeper/conf/zoo.cfg /usr/local/zookeeper/conf/`\n\n- `zkEnv.sh`配置\n `vim /usr/local/zookeeper/bin/zkEnv.sh`\n \n 分发到nn2、nn3\n```bash\nscp_all_zookeeper.sh /usr/local/zookeeper/bin/zkEnv.sh /usr/local/zookeeper/bin/\n```\n- 创建zookeeper数据目录\n```bash\nssh_root_zookeeper.sh mkdir -p /data/zookeeper\nssh_root_zookeeper.sh chown -R hadoop:hadoop /data\n```\n- 创建myid文件\n ```bash\n ssh nn1 'echo \"1\" > /data/zookeeper/myid'\n ssh nn2 'echo \"2\" > /data/zookeeper/myid'\n ssh nn3 'echo \"3\" > /data/zookeeper/myid'\n ```\n- 配置Zookeeper环境变量\n ```bash\n # 在其他所有主机也执行\n sudo chown -R hadoop:hadoop /etc/profile.d/myEnv.sh\n ```\n\n ```bash\n echo 'export ZOOKEEPER_HOME=/usr/local/zookeeper' >> /etc/profile.d/myEnv.sh\n echo 'export PATH=$PATH:$ZOOKEEPER_HOME/bin' >> /etc/profile.d/myEnv.sh\n ```\n\n ```bash\n # 分发到nn2、nn3\n scp_all_zookeeper.sh /etc/profile.d/myEnv.sh /etc/profile.d/\n # source 环境变量\n ssh_all_zookeeper.sh source /etc/profile\n ```\n### Zookeeper的命令\n```bash\n#启动zk服务\nssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh start\n#查看每个机器ZK运行的状态\nssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh status\n#整体停止服务\nssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh stop \n#重启zk服务\nssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh restart\n```\n\n```shell\n#启动zookeeper客户端,并连接zookeeper集群\n/usr/local/zookeeper/bin/zkCli.sh -server nn1:2181\n# 可以简化为:\nzkCli.sh\n```\n\n","source":"_posts/bigdata/hadoop/zookeper.md","raw":"---\ntitle: Hadoop集群Zookeeper配置\ntop_img: /img/site01.jpg\ntop_img_height: 800px\nabbrlink: 61251\ndate: 2024-09-011 22:45:40\n---\n\n### Zookeeper脚本配置\n- 拷贝ips\n ```bash\n cp ips ips_zookeeper\n ```\n 修改为\n ```bash\n nn1\n nn2\n nn3\n ```\n- 拷贝三个脚本\n ```bash\n cp scp_all.sh scp_all_zookeeper.sh \n cp ssh_all.sh ssh_all_zookeeper.sh \n cp ssh_root.sh ssh_root_zookeeper.sh\n ```\n- 修改脚本\n ```shell\n vim scp_all_zookeeper.sh \n vim ssh_all_zookeeper.sh \n vim ssh_root_zookeeper.sh \n ```\n\n 将三个脚本中的ips改为ips_zookeeper\n### Zookeeper安装\n- 上传到`/tmp`目录下,解压\n ```bash\n sudo tar -zxvf /tmp/zookeeper-3.4.8.tar.gz -C /usr/local/\n scp -r /usr/local/zookeeper-3.4.8/ root@nn2:/usr/local/\n scp -r /usr/local/zookeeper-3.4.8/ root@nn3:/usr/local/\n ssh_root_zookeeper.sh chown -R hadoop:hadoop /usr/local/zookeeper-3.4.8\n ssh_root_zookeeper.s ln -s /usr/local/zookeeper-3.4.8/ /usr/local/zookeeper\n ```\n### Zookeeper配置\n - zoo.cfg配置\n ```bash\n cd /usr/local/zookeeper/conf/\n cp zoo_sample.cfg zoo.cfg\n ```\n 然后`vim zoo.cfg`,修改如下:\n ```properties\n # 修改dataDir\n dataDir=/data/zookeeper\n # 添加一下内容\n server.1=nn1:2888:3888 \n server.2=nn2:2888:3888 \n server.3=nn3:2888:3888\n ```\n 分发给nn2、nn3\n `scp_all_zookeeper.sh /usr/local/zookeeper/conf/zoo.cfg /usr/local/zookeeper/conf/`\n\n- `zkEnv.sh`配置\n `vim /usr/local/zookeeper/bin/zkEnv.sh`\n \n 分发到nn2、nn3\n```bash\nscp_all_zookeeper.sh /usr/local/zookeeper/bin/zkEnv.sh /usr/local/zookeeper/bin/\n```\n- 创建zookeeper数据目录\n```bash\nssh_root_zookeeper.sh mkdir -p /data/zookeeper\nssh_root_zookeeper.sh chown -R hadoop:hadoop /data\n```\n- 创建myid文件\n ```bash\n ssh nn1 'echo \"1\" > /data/zookeeper/myid'\n ssh nn2 'echo \"2\" > /data/zookeeper/myid'\n ssh nn3 'echo \"3\" > /data/zookeeper/myid'\n ```\n- 配置Zookeeper环境变量\n ```bash\n # 在其他所有主机也执行\n sudo chown -R hadoop:hadoop /etc/profile.d/myEnv.sh\n ```\n\n ```bash\n echo 'export ZOOKEEPER_HOME=/usr/local/zookeeper' >> /etc/profile.d/myEnv.sh\n echo 'export PATH=$PATH:$ZOOKEEPER_HOME/bin' >> /etc/profile.d/myEnv.sh\n ```\n\n ```bash\n # 分发到nn2、nn3\n scp_all_zookeeper.sh /etc/profile.d/myEnv.sh /etc/profile.d/\n # source 环境变量\n ssh_all_zookeeper.sh source /etc/profile\n ```\n### Zookeeper的命令\n```bash\n#启动zk服务\nssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh start\n#查看每个机器ZK运行的状态\nssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh status\n#整体停止服务\nssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh stop \n#重启zk服务\nssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh restart\n```\n\n```shell\n#启动zookeeper客户端,并连接zookeeper集群\n/usr/local/zookeeper/bin/zkCli.sh -server nn1:2181\n# 可以简化为:\nzkCli.sh\n```\n\n","slug":"bigdata/hadoop/zookeper","published":1,"updated":"2024-09-11T14:51:42.706Z","comments":1,"layout":"post","photos":[],"_id":"cm5w9lrdv000rtgah4ojt276r","content":"<h3 id=\"Zookeeper脚本配置\"><a href=\"#Zookeeper脚本配置\" class=\"headerlink\" title=\"Zookeeper脚本配置\"></a>Zookeeper脚本配置</h3><ul>\n<li>拷贝ips<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">cp</span> ips ips_zookeeper</span><br></pre></td></tr></table></figure>\n修改为<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">nn1</span><br><span class=\"line\">nn2</span><br><span class=\"line\">nn3</span><br></pre></td></tr></table></figure></li>\n<li>拷贝三个脚本<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">cp</span> scp_all.sh scp_all_zookeeper.sh </span><br><span class=\"line\"><span class=\"built_in\">cp</span> ssh_all.sh ssh_all_zookeeper.sh </span><br><span class=\"line\"><span class=\"built_in\">cp</span> ssh_root.sh ssh_root_zookeeper.sh</span><br></pre></td></tr></table></figure></li>\n<li>修改脚本<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim scp_all_zookeeper.sh </span><br><span class=\"line\">vim ssh_all_zookeeper.sh </span><br><span class=\"line\">vim ssh_root_zookeeper.sh </span><br></pre></td></tr></table></figure>\n\n将三个脚本中的ips改为ips_zookeeper</li>\n</ul>\n<h3 id=\"Zookeeper安装\"><a href=\"#Zookeeper安装\" class=\"headerlink\" title=\"Zookeeper安装\"></a>Zookeeper安装</h3><ul>\n<li>上传到<code>/tmp</code>目录下,解压 <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">sudo</span> tar -zxvf /tmp/zookeeper-3.4.8.tar.gz -C /usr/local/</span><br><span class=\"line\">scp -r /usr/local/zookeeper-3.4.8/ root@nn2:/usr/local/</span><br><span class=\"line\">scp -r /usr/local/zookeeper-3.4.8/ root@nn3:/usr/local/</span><br><span class=\"line\">ssh_root_zookeeper.sh <span class=\"built_in\">chown</span> -R hadoop:hadoop /usr/local/zookeeper-3.4.8</span><br><span class=\"line\">ssh_root_zookeeper.s <span class=\"built_in\">ln</span> -s /usr/local/zookeeper-3.4.8/ /usr/local/zookeeper</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h3 id=\"Zookeeper配置\"><a href=\"#Zookeeper配置\" class=\"headerlink\" title=\"Zookeeper配置\"></a>Zookeeper配置</h3><ul>\n<li><p>zoo.cfg配置</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">cd</span> /usr/local/zookeeper/conf/</span><br><span class=\"line\"><span class=\"built_in\">cp</span> zoo_sample.cfg zoo.cfg</span><br></pre></td></tr></table></figure>\n<p>然后<code>vim zoo.cfg</code>,修改如下:</p>\n<figure class=\"highlight properties\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 修改dataDir</span></span><br><span class=\"line\"><span class=\"attr\">dataDir</span>=<span class=\"string\">/data/zookeeper</span></span><br><span class=\"line\"><span class=\"comment\"># 添加一下内容</span></span><br><span class=\"line\"><span class=\"attr\">server.1</span>=<span class=\"string\">nn1:2888:3888 </span></span><br><span class=\"line\"><span class=\"attr\">server.2</span>=<span class=\"string\">nn2:2888:3888 </span></span><br><span class=\"line\"><span class=\"attr\">server.3</span>=<span class=\"string\">nn3:2888:3888</span></span><br></pre></td></tr></table></figure>\n<p>分发给nn2、nn3<br> <code>scp_all_zookeeper.sh /usr/local/zookeeper/conf/zoo.cfg /usr/local/zookeeper/conf/</code></p>\n</li>\n<li><p><code>zkEnv.sh</code>配置<br><code>vim /usr/local/zookeeper/bin/zkEnv.sh</code><br><img src=\"/../../../img/000001.png\" alt=\"000001.png\"><br>分发到nn2、nn3</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">scp_all_zookeeper.sh /usr/local/zookeeper/bin/zkEnv.sh /usr/local/zookeeper/bin/</span><br></pre></td></tr></table></figure></li>\n<li><p>创建zookeeper数据目录</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh_root_zookeeper.sh <span class=\"built_in\">mkdir</span> -p /data/zookeeper</span><br><span class=\"line\">ssh_root_zookeeper.sh <span class=\"built_in\">chown</span> -R hadoop:hadoop /data</span><br></pre></td></tr></table></figure></li>\n<li><p>创建myid文件</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh nn1 <span class=\"string\">'echo "1" > /data/zookeeper/myid'</span></span><br><span class=\"line\">ssh nn2 <span class=\"string\">'echo "2" > /data/zookeeper/myid'</span></span><br><span class=\"line\">ssh nn3 <span class=\"string\">'echo "3" > /data/zookeeper/myid'</span></span><br></pre></td></tr></table></figure></li>\n<li><p>配置Zookeeper环境变量</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 在其他所有主机也执行</span></span><br><span class=\"line\"><span class=\"built_in\">sudo</span> <span class=\"built_in\">chown</span> -R hadoop:hadoop /etc/profile.d/myEnv.sh</span><br></pre></td></tr></table></figure>\n\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">'export ZOOKEEPER_HOME=/usr/local/zookeeper'</span> >> /etc/profile.d/myEnv.sh</span><br><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">'export PATH=$PATH:$ZOOKEEPER_HOME/bin'</span> >> /etc/profile.d/myEnv.sh</span><br></pre></td></tr></table></figure>\n\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 分发到nn2、nn3</span></span><br><span class=\"line\">scp_all_zookeeper.sh /etc/profile.d/myEnv.sh /etc/profile.d/</span><br><span class=\"line\"><span class=\"comment\"># source 环境变量</span></span><br><span class=\"line\">ssh_all_zookeeper.sh <span class=\"built_in\">source</span> /etc/profile</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h3 id=\"Zookeeper的命令\"><a href=\"#Zookeeper的命令\" class=\"headerlink\" title=\"Zookeeper的命令\"></a>Zookeeper的命令</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#启动zk服务</span></span><br><span class=\"line\">ssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh start</span><br><span class=\"line\"><span class=\"comment\">#查看每个机器ZK运行的状态</span></span><br><span class=\"line\">ssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh status</span><br><span class=\"line\"><span class=\"comment\">#整体停止服务</span></span><br><span class=\"line\">ssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh stop </span><br><span class=\"line\"><span class=\"comment\">#重启zk服务</span></span><br><span class=\"line\">ssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh restart</span><br></pre></td></tr></table></figure>\n\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta prompt_\">#</span><span class=\"language-bash\">启动zookeeper客户端,并连接zookeeper集群</span></span><br><span class=\"line\">/usr/local/zookeeper/bin/zkCli.sh -server nn1:2181</span><br><span class=\"line\"><span class=\"meta prompt_\"># </span><span class=\"language-bash\">可以简化为:</span></span><br><span class=\"line\">zkCli.sh</span><br></pre></td></tr></table></figure>\n\n","cover":false,"excerpt":"","more":"<h3 id=\"Zookeeper脚本配置\"><a href=\"#Zookeeper脚本配置\" class=\"headerlink\" title=\"Zookeeper脚本配置\"></a>Zookeeper脚本配置</h3><ul>\n<li>拷贝ips<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">cp</span> ips ips_zookeeper</span><br></pre></td></tr></table></figure>\n修改为<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">nn1</span><br><span class=\"line\">nn2</span><br><span class=\"line\">nn3</span><br></pre></td></tr></table></figure></li>\n<li>拷贝三个脚本<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">cp</span> scp_all.sh scp_all_zookeeper.sh </span><br><span class=\"line\"><span class=\"built_in\">cp</span> ssh_all.sh ssh_all_zookeeper.sh </span><br><span class=\"line\"><span class=\"built_in\">cp</span> ssh_root.sh ssh_root_zookeeper.sh</span><br></pre></td></tr></table></figure></li>\n<li>修改脚本<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">vim scp_all_zookeeper.sh </span><br><span class=\"line\">vim ssh_all_zookeeper.sh </span><br><span class=\"line\">vim ssh_root_zookeeper.sh </span><br></pre></td></tr></table></figure>\n\n将三个脚本中的ips改为ips_zookeeper</li>\n</ul>\n<h3 id=\"Zookeeper安装\"><a href=\"#Zookeeper安装\" class=\"headerlink\" title=\"Zookeeper安装\"></a>Zookeeper安装</h3><ul>\n<li>上传到<code>/tmp</code>目录下,解压 <figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">sudo</span> tar -zxvf /tmp/zookeeper-3.4.8.tar.gz -C /usr/local/</span><br><span class=\"line\">scp -r /usr/local/zookeeper-3.4.8/ root@nn2:/usr/local/</span><br><span class=\"line\">scp -r /usr/local/zookeeper-3.4.8/ root@nn3:/usr/local/</span><br><span class=\"line\">ssh_root_zookeeper.sh <span class=\"built_in\">chown</span> -R hadoop:hadoop /usr/local/zookeeper-3.4.8</span><br><span class=\"line\">ssh_root_zookeeper.s <span class=\"built_in\">ln</span> -s /usr/local/zookeeper-3.4.8/ /usr/local/zookeeper</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h3 id=\"Zookeeper配置\"><a href=\"#Zookeeper配置\" class=\"headerlink\" title=\"Zookeeper配置\"></a>Zookeeper配置</h3><ul>\n<li><p>zoo.cfg配置</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">cd</span> /usr/local/zookeeper/conf/</span><br><span class=\"line\"><span class=\"built_in\">cp</span> zoo_sample.cfg zoo.cfg</span><br></pre></td></tr></table></figure>\n<p>然后<code>vim zoo.cfg</code>,修改如下:</p>\n<figure class=\"highlight properties\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 修改dataDir</span></span><br><span class=\"line\"><span class=\"attr\">dataDir</span>=<span class=\"string\">/data/zookeeper</span></span><br><span class=\"line\"><span class=\"comment\"># 添加一下内容</span></span><br><span class=\"line\"><span class=\"attr\">server.1</span>=<span class=\"string\">nn1:2888:3888 </span></span><br><span class=\"line\"><span class=\"attr\">server.2</span>=<span class=\"string\">nn2:2888:3888 </span></span><br><span class=\"line\"><span class=\"attr\">server.3</span>=<span class=\"string\">nn3:2888:3888</span></span><br></pre></td></tr></table></figure>\n<p>分发给nn2、nn3<br> <code>scp_all_zookeeper.sh /usr/local/zookeeper/conf/zoo.cfg /usr/local/zookeeper/conf/</code></p>\n</li>\n<li><p><code>zkEnv.sh</code>配置<br><code>vim /usr/local/zookeeper/bin/zkEnv.sh</code><br><img src=\"/../../../img/000001.png\" alt=\"000001.png\"><br>分发到nn2、nn3</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">scp_all_zookeeper.sh /usr/local/zookeeper/bin/zkEnv.sh /usr/local/zookeeper/bin/</span><br></pre></td></tr></table></figure></li>\n<li><p>创建zookeeper数据目录</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh_root_zookeeper.sh <span class=\"built_in\">mkdir</span> -p /data/zookeeper</span><br><span class=\"line\">ssh_root_zookeeper.sh <span class=\"built_in\">chown</span> -R hadoop:hadoop /data</span><br></pre></td></tr></table></figure></li>\n<li><p>创建myid文件</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br></pre></td><td class=\"code\"><pre><span class=\"line\">ssh nn1 <span class=\"string\">'echo "1" > /data/zookeeper/myid'</span></span><br><span class=\"line\">ssh nn2 <span class=\"string\">'echo "2" > /data/zookeeper/myid'</span></span><br><span class=\"line\">ssh nn3 <span class=\"string\">'echo "3" > /data/zookeeper/myid'</span></span><br></pre></td></tr></table></figure></li>\n<li><p>配置Zookeeper环境变量</p>\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 在其他所有主机也执行</span></span><br><span class=\"line\"><span class=\"built_in\">sudo</span> <span class=\"built_in\">chown</span> -R hadoop:hadoop /etc/profile.d/myEnv.sh</span><br></pre></td></tr></table></figure>\n\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">'export ZOOKEEPER_HOME=/usr/local/zookeeper'</span> >> /etc/profile.d/myEnv.sh</span><br><span class=\"line\"><span class=\"built_in\">echo</span> <span class=\"string\">'export PATH=$PATH:$ZOOKEEPER_HOME/bin'</span> >> /etc/profile.d/myEnv.sh</span><br></pre></td></tr></table></figure>\n\n<figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\"># 分发到nn2、nn3</span></span><br><span class=\"line\">scp_all_zookeeper.sh /etc/profile.d/myEnv.sh /etc/profile.d/</span><br><span class=\"line\"><span class=\"comment\"># source 环境变量</span></span><br><span class=\"line\">ssh_all_zookeeper.sh <span class=\"built_in\">source</span> /etc/profile</span><br></pre></td></tr></table></figure></li>\n</ul>\n<h3 id=\"Zookeeper的命令\"><a href=\"#Zookeeper的命令\" class=\"headerlink\" title=\"Zookeeper的命令\"></a>Zookeeper的命令</h3><figure class=\"highlight bash\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br><span class=\"line\">5</span><br><span class=\"line\">6</span><br><span class=\"line\">7</span><br><span class=\"line\">8</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"comment\">#启动zk服务</span></span><br><span class=\"line\">ssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh start</span><br><span class=\"line\"><span class=\"comment\">#查看每个机器ZK运行的状态</span></span><br><span class=\"line\">ssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh status</span><br><span class=\"line\"><span class=\"comment\">#整体停止服务</span></span><br><span class=\"line\">ssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh stop </span><br><span class=\"line\"><span class=\"comment\">#重启zk服务</span></span><br><span class=\"line\">ssh_all_zookeeper.sh /usr/local/zookeeper/bin/zkServer.sh restart</span><br></pre></td></tr></table></figure>\n\n<figure class=\"highlight shell\"><table><tr><td class=\"gutter\"><pre><span class=\"line\">1</span><br><span class=\"line\">2</span><br><span class=\"line\">3</span><br><span class=\"line\">4</span><br></pre></td><td class=\"code\"><pre><span class=\"line\"><span class=\"meta prompt_\">#</span><span class=\"language-bash\">启动zookeeper客户端,并连接zookeeper集群</span></span><br><span class=\"line\">/usr/local/zookeeper/bin/zkCli.sh -server nn1:2181</span><br><span class=\"line\"><span class=\"meta prompt_\"># </span><span class=\"language-bash\">可以简化为:</span></span><br><span class=\"line\">zkCli.sh</span><br></pre></td></tr></table></figure>\n\n"},{"title":"无法访问外网?需要订阅代理服务?","abbrlink":14011,"date":"2024-08-07T02:06:08.000Z","_content":"\n{% note info %}\n**由于中国大陆的GFW(防火墙)限制,无法访问外网网络,因此需要访问像GitHub、YouTube这样的\n的网站将被屏蔽拦截,接下来我将给出一种使用`VPN`服务的可行的方案来保证服务的可靠性。**\n{% endnote %}\n\n### 介绍\n> 根据测试,许多提供服务的提供商所在的网站需要使用`外部网络`才能打开,仅有少部分的网站(**比较贵**)可以直接使用\n> 国内网络环境打开直接购买订阅服务。\n>\n\n那么你现在可以有两个选择:\n1. **方案一**:使用无需`外部网络`便能开通订阅服务的VPN,费用高,如果你选择此方案,那么你可自行搜索解决,此处仅仅讨论方案二。\n2. **方案二**:如果使用此方案,详见下方。\n\n\n### 解决方案\n> 采用**方案二**方式\n> \n> 这是一些订阅服务推广的链接: https://9.234456.xyz/abc.html?t=638586217737356738 (此链接打开无需使用VPN,但进入对应的机场页面却仍无法打开)\n> \n> 此教程中我们使用的机场是 \n> 1. `一元机场`: https://xn--4gq62f52gdss.com/\n> 2. `赔钱机场`:https://xn--mes358aby2apfg.com/\n\n### 机场选择的建议:\n\n- `一元机场`\n \n 可以看到\n - `12元/年`,每月50GB的可用额度,下个月重置流量额度\n - `15元/季`,即为`60元/年`,每月有4000GB的可用额度,下个月重置流量额度\n - `7元/月`,即为`84元/年`,每个月8000GB的可用额度,下个月重置流量额度\n 根据我个人的使用情况,大多数情况下我每月的流量使用未超过50GB,如果没有频繁的流量使用,\n 建议选择`12元/年`,否则可以选择`15元/季`,这意味着每月将有4000GB的可用额度\n\n- `赔钱机场`\n\n \n `赔钱机场`的订阅共有9种方案,这里我仅显示自己正在使用的,个人认为十分优惠:\n - `34.99元/年`,每月500GB的可用额度,根据我观察和使用,这个订阅方案比`一元机场`的性价比更高,且流量使用额度也不用担心\n \n### 如何订阅?\n{% note success %}\n由于需要外部网络才能完成订阅服务的购买,你可以向我的邮箱`15202078626@163.com`发送你的订阅计划方案,\n扫描付款二维码,我将为你开通订阅(您只需要付款对应的订阅金额即可)\n{% endnote %}\n<img src=\"/img/dingyue.png\" width='150px'>\n\n### 完成订阅后如何使用?\n> 你可以在 `Windows`、`Mac`、`Android`等平台使用此服务\n> 使用订阅的对应链接: https://flowus.cn/shenjian/22f76d4f-e7b3-4b8a-8a89-561566f6eb60\n\n\n ","source":"_posts/net/jichang/jichang.md","raw":"---\ntitle: 无法访问外网?需要订阅代理服务?\ntags: 网络代理\nabbrlink: 14011\ndate: 2024-08-07 10:06:08\n---\n\n{% note info %}\n**由于中国大陆的GFW(防火墙)限制,无法访问外网网络,因此需要访问像GitHub、YouTube这样的\n的网站将被屏蔽拦截,接下来我将给出一种使用`VPN`服务的可行的方案来保证服务的可靠性。**\n{% endnote %}\n\n### 介绍\n> 根据测试,许多提供服务的提供商所在的网站需要使用`外部网络`才能打开,仅有少部分的网站(**比较贵**)可以直接使用\n> 国内网络环境打开直接购买订阅服务。\n>\n\n那么你现在可以有两个选择:\n1. **方案一**:使用无需`外部网络`便能开通订阅服务的VPN,费用高,如果你选择此方案,那么你可自行搜索解决,此处仅仅讨论方案二。\n2. **方案二**:如果使用此方案,详见下方。\n\n\n### 解决方案\n> 采用**方案二**方式\n> \n> 这是一些订阅服务推广的链接: https://9.234456.xyz/abc.html?t=638586217737356738 (此链接打开无需使用VPN,但进入对应的机场页面却仍无法打开)\n> \n> 此教程中我们使用的机场是 \n> 1. `一元机场`: https://xn--4gq62f52gdss.com/\n> 2. `赔钱机场`:https://xn--mes358aby2apfg.com/\n\n### 机场选择的建议:\n\n- `一元机场`\n \n 可以看到\n - `12元/年`,每月50GB的可用额度,下个月重置流量额度\n - `15元/季`,即为`60元/年`,每月有4000GB的可用额度,下个月重置流量额度\n - `7元/月`,即为`84元/年`,每个月8000GB的可用额度,下个月重置流量额度\n 根据我个人的使用情况,大多数情况下我每月的流量使用未超过50GB,如果没有频繁的流量使用,\n 建议选择`12元/年`,否则可以选择`15元/季`,这意味着每月将有4000GB的可用额度\n\n- `赔钱机场`\n\n \n `赔钱机场`的订阅共有9种方案,这里我仅显示自己正在使用的,个人认为十分优惠:\n - `34.99元/年`,每月500GB的可用额度,根据我观察和使用,这个订阅方案比`一元机场`的性价比更高,且流量使用额度也不用担心\n \n### 如何订阅?\n{% note success %}\n由于需要外部网络才能完成订阅服务的购买,你可以向我的邮箱`15202078626@163.com`发送你的订阅计划方案,\n扫描付款二维码,我将为你开通订阅(您只需要付款对应的订阅金额即可)\n{% endnote %}\n<img src=\"/img/dingyue.png\" width='150px'>\n\n### 完成订阅后如何使用?\n> 你可以在 `Windows`、`Mac`、`Android`等平台使用此服务\n> 使用订阅的对应链接: https://flowus.cn/shenjian/22f76d4f-e7b3-4b8a-8a89-561566f6eb60\n\n\n ","slug":"net/jichang/jichang","published":1,"updated":"2024-08-09T12:21:50.036Z","comments":1,"layout":"post","photos":[],"_id":"cm5w9lrdv000stgah26ty73mb","content":"<div class=\"note info flat\"><p><strong>由于中国大陆的GFW(防火墙)限制,无法访问外网网络,因此需要访问像GitHub、YouTube这样的<br>的网站将被屏蔽拦截,接下来我将给出一种使用<code>VPN</code>服务的可行的方案来保证服务的可靠性。</strong></p>\n</div>\n\n<h3 id=\"介绍\"><a href=\"#介绍\" class=\"headerlink\" title=\"介绍\"></a>介绍</h3><blockquote>\n<p>根据测试,许多提供服务的提供商所在的网站需要使用<code>外部网络</code>才能打开,仅有少部分的网站(<strong>比较贵</strong>)可以直接使用<br>国内网络环境打开直接购买订阅服务。</p>\n</blockquote>\n<p>那么你现在可以有两个选择:</p>\n<ol>\n<li><strong>方案一</strong>:使用无需<code>外部网络</code>便能开通订阅服务的VPN,费用高,如果你选择此方案,那么你可自行搜索解决,此处仅仅讨论方案二。</li>\n<li><strong>方案二</strong>:如果使用此方案,详见下方。</li>\n</ol>\n<h3 id=\"解决方案\"><a href=\"#解决方案\" class=\"headerlink\" title=\"解决方案\"></a>解决方案</h3><blockquote>\n<p>采用<strong>方案二</strong>方式</p>\n<p>这是一些订阅服务推广的链接: <a href=\"https://9.234456.xyz/abc.html?t=638586217737356738\">https://9.234456.xyz/abc.html?t=638586217737356738</a> (此链接打开无需使用VPN,但进入对应的机场页面却仍无法打开)</p>\n<p>此教程中我们使用的机场是 </p>\n<ol>\n<li><code>一元机场</code>: <a href=\"https://一元机场.com/\">https://xn--4gq62f52gdss.com/</a></li>\n<li><code>赔钱机场</code>:<a href=\"https://赔钱机场.com/\">https://xn--mes358aby2apfg.com/</a></li>\n</ol>\n</blockquote>\n<h3 id=\"机场选择的建议:\"><a href=\"#机场选择的建议:\" class=\"headerlink\" title=\"机场选择的建议:\"></a>机场选择的建议:</h3><ul>\n<li><p><code>一元机场</code><br><img src=\"/img/yiyuan.png\"><br>可以看到</p>\n<ul>\n<li><code>12元/年</code>,每月50GB的可用额度,下个月重置流量额度</li>\n<li><code>15元/季</code>,即为<code>60元/年</code>,每月有4000GB的可用额度,下个月重置流量额度</li>\n<li><code>7元/月</code>,即为<code>84元/年</code>,每个月8000GB的可用额度,下个月重置流量额度<br>根据我个人的使用情况,大多数情况下我每月的流量使用未超过50GB,如果没有频繁的流量使用,<br>建议选择<code>12元/年</code>,否则可以选择<code>15元/季</code>,这意味着每月将有4000GB的可用额度</li>\n</ul>\n</li>\n<li><p><code>赔钱机场</code></p>\n<p><img src=\"/img/peiqian.png\"><br><code>赔钱机场</code>的订阅共有9种方案,这里我仅显示自己正在使用的,个人认为十分优惠:</p>\n<ul>\n<li><code>34.99元/年</code>,每月500GB的可用额度,根据我观察和使用,这个订阅方案比<code>一元机场</code>的性价比更高,且流量使用额度也不用担心</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"如何订阅?\"><a href=\"#如何订阅?\" class=\"headerlink\" title=\"如何订阅?\"></a>如何订阅?</h3><div class=\"note success flat\"><p>由于需要外部网络才能完成订阅服务的购买,你可以向我的邮箱<code>15202078626@163.com</code>发送你的订阅计划方案,<br>扫描付款二维码,我将为你开通订阅(您只需要付款对应的订阅金额即可)</p>\n</div>\n<img src=\"/img/dingyue.png\" width='150px'>\n\n<h3 id=\"完成订阅后如何使用?\"><a href=\"#完成订阅后如何使用?\" class=\"headerlink\" title=\"完成订阅后如何使用?\"></a>完成订阅后如何使用?</h3><blockquote>\n<p>你可以在 <code>Windows</code>、<code>Mac</code>、<code>Android</code>等平台使用此服务<br>使用订阅的对应链接: <a href=\"https://flowus.cn/shenjian/22f76d4f-e7b3-4b8a-8a89-561566f6eb60\">https://flowus.cn/shenjian/22f76d4f-e7b3-4b8a-8a89-561566f6eb60</a></p>\n</blockquote>\n","cover":false,"excerpt":"","more":"<div class=\"note info flat\"><p><strong>由于中国大陆的GFW(防火墙)限制,无法访问外网网络,因此需要访问像GitHub、YouTube这样的<br>的网站将被屏蔽拦截,接下来我将给出一种使用<code>VPN</code>服务的可行的方案来保证服务的可靠性。</strong></p>\n</div>\n\n<h3 id=\"介绍\"><a href=\"#介绍\" class=\"headerlink\" title=\"介绍\"></a>介绍</h3><blockquote>\n<p>根据测试,许多提供服务的提供商所在的网站需要使用<code>外部网络</code>才能打开,仅有少部分的网站(<strong>比较贵</strong>)可以直接使用<br>国内网络环境打开直接购买订阅服务。</p>\n</blockquote>\n<p>那么你现在可以有两个选择:</p>\n<ol>\n<li><strong>方案一</strong>:使用无需<code>外部网络</code>便能开通订阅服务的VPN,费用高,如果你选择此方案,那么你可自行搜索解决,此处仅仅讨论方案二。</li>\n<li><strong>方案二</strong>:如果使用此方案,详见下方。</li>\n</ol>\n<h3 id=\"解决方案\"><a href=\"#解决方案\" class=\"headerlink\" title=\"解决方案\"></a>解决方案</h3><blockquote>\n<p>采用<strong>方案二</strong>方式</p>\n<p>这是一些订阅服务推广的链接: <a href=\"https://9.234456.xyz/abc.html?t=638586217737356738\">https://9.234456.xyz/abc.html?t=638586217737356738</a> (此链接打开无需使用VPN,但进入对应的机场页面却仍无法打开)</p>\n<p>此教程中我们使用的机场是 </p>\n<ol>\n<li><code>一元机场</code>: <a href=\"https://一元机场.com/\">https://xn--4gq62f52gdss.com/</a></li>\n<li><code>赔钱机场</code>:<a href=\"https://赔钱机场.com/\">https://xn--mes358aby2apfg.com/</a></li>\n</ol>\n</blockquote>\n<h3 id=\"机场选择的建议:\"><a href=\"#机场选择的建议:\" class=\"headerlink\" title=\"机场选择的建议:\"></a>机场选择的建议:</h3><ul>\n<li><p><code>一元机场</code><br><img src=\"/img/yiyuan.png\"><br>可以看到</p>\n<ul>\n<li><code>12元/年</code>,每月50GB的可用额度,下个月重置流量额度</li>\n<li><code>15元/季</code>,即为<code>60元/年</code>,每月有4000GB的可用额度,下个月重置流量额度</li>\n<li><code>7元/月</code>,即为<code>84元/年</code>,每个月8000GB的可用额度,下个月重置流量额度<br>根据我个人的使用情况,大多数情况下我每月的流量使用未超过50GB,如果没有频繁的流量使用,<br>建议选择<code>12元/年</code>,否则可以选择<code>15元/季</code>,这意味着每月将有4000GB的可用额度</li>\n</ul>\n</li>\n<li><p><code>赔钱机场</code></p>\n<p><img src=\"/img/peiqian.png\"><br><code>赔钱机场</code>的订阅共有9种方案,这里我仅显示自己正在使用的,个人认为十分优惠:</p>\n<ul>\n<li><code>34.99元/年</code>,每月500GB的可用额度,根据我观察和使用,这个订阅方案比<code>一元机场</code>的性价比更高,且流量使用额度也不用担心</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"如何订阅?\"><a href=\"#如何订阅?\" class=\"headerlink\" title=\"如何订阅?\"></a>如何订阅?</h3><div class=\"note success flat\"><p>由于需要外部网络才能完成订阅服务的购买,你可以向我的邮箱<code>15202078626@163.com</code>发送你的订阅计划方案,<br>扫描付款二维码,我将为你开通订阅(您只需要付款对应的订阅金额即可)</p>\n</div>\n<img src=\"/img/dingyue.png\" width='150px'>\n\n<h3 id=\"完成订阅后如何使用?\"><a href=\"#完成订阅后如何使用?\" class=\"headerlink\" title=\"完成订阅后如何使用?\"></a>完成订阅后如何使用?</h3><blockquote>\n<p>你可以在 <code>Windows</code>、<code>Mac</code>、<code>Android</code>等平台使用此服务<br>使用订阅的对应链接: <a href=\"https://flowus.cn/shenjian/22f76d4f-e7b3-4b8a-8a89-561566f6eb60\">https://flowus.cn/shenjian/22f76d4f-e7b3-4b8a-8a89-561566f6eb60</a></p>\n</blockquote>\n"}],"PostAsset":[],"PostCategory":[{"post_id":"cm5w9lrdn000dtgah04audthw","category_id":"cm5w9lrdp000htgahcgif26p4","_id":"cm5w9lrds000ltgahfnvufs59"}],"PostTag":[{"post_id":"cm5w9lrdi0005tgah797v3otl","tag_id":"cm5w9lrdk0008tgahcjy0gsmw","_id":"cm5w9lrdo000ftgahcer4h9z8"},{"post_id":"cm5w9lrdn000ctgah8ll3dor6","tag_id":"cm5w9lrdo000etgahbm4uhrtq","_id":"cm5w9lrdq000jtgah8bewbri1"},{"post_id":"cm5w9lrdn000dtgah04audthw","tag_id":"cm5w9lrdq000itgah0ue9cysm","_id":"cm5w9lrds000mtgahhjn02wyq"},{"post_id":"cm5w9lrdo000gtgah38tl6q9j","tag_id":"cm5w9lrdo000etgahbm4uhrtq","_id":"cm5w9lrds000ntgah8fy86a3s"},{"post_id":"cm5w9lrdv000stgah26ty73mb","tag_id":"cm5w9lrdw000ttgah4ix0bjqs","_id":"cm5w9lrdw000utgah31j22idn"}],"Tag":[{"name":"machinelearning","_id":"cm5w9lrdk0008tgahcjy0gsmw"},{"name":"uniapp","_id":"cm5w9lrdo000etgahbm4uhrtq"},{"name":"古文观止","_id":"cm5w9lrdq000itgah0ue9cysm"},{"name":"网络代理","_id":"cm5w9lrdw000ttgah4ix0bjqs"}]}} |