ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Hadoop开发环境搭建实战:从JDK配置到MapReduce跑通全流程

Hadoop开发环境搭建实战:从JDK配置到MapReduce跑通全流程 这篇东西其实挺有意思的。我在不少技术社群里看到有人问“Hadoop开发插件怎么装”但细聊下来发现大家卡住的点五花八门有的连JDK都没配好有的是IDEA插件装了一大堆却连不上集群还有人压根不知道Hadoop开发到底该装哪些工具。这正好让我想把整套流程从零梳理一遍把我自己踩过的坑、试过的方案、以及最终沉淀下来的一套开发环境搭建流程一次性讲清楚。先说清楚一个概念Hadoop本身不是一个可以“双击安装”的IDE插件它是一套分布式基础架构。所谓“Hadoop开发插件”在实际开发场景里通常指两件事一是你在本地搭建好的Hadoop开发环境包括JDK、Hadoop本体、SSH等二是你在IDE里安装的用来写MapReduce、连接HDFS、跑Spark任务的那些辅助插件。这两者缺一不可。这篇文章适合刚起步的Hadoop学习者、准备搭开发机做实验的学生、以及想在自己电脑上整套完整Hadoop开发环境的开发者。我会从环境准备、核心插件安装、项目验证三个层面展开每一步都给出具体理由和经验尽量让你不用再翻几十篇零散的教程。1. 内容整体设计与思路拆解1.1 为什么“装插件”这件事会让人一头雾水先讲一个现象。你去搜索引擎搜“Hadoop开发插件安装”搜出来的结果特别分裂有人讲的是Eclipse里装一个叫hadoop-eclipse-plugin的jar包有人讲的是IDEA新建Maven项目加依赖还有人上来就让你装VMware、配虚拟机集群。这些说法都对但说的是不同阶段、不同场景下的事新手很容易被搞蒙。我的建议是先把“开发”和“部署”分开。如果你只是写MapReduce代码、跑本地调试、连远程HDFS做数据读写那你不需要去搭一套真正的多节点集群只需要一个伪分布式或单机Hadoop环境加上一个称手的IDE就行。反之如果你要研究集群调度、资源隔离、数据副本机制那你才需要去搞多台虚拟机甚至物理机。这篇文章面向的是前者也就是“开发调试”场景。我给的目标环境是Windows或Linux本机装好JDK和Hadoop在IDEA或VS Code里写代码通过Maven管理依赖跑通WordCount级别的任务。这套环境搭好之后你已经能覆盖大部分Hadoop开发学习和前期项目验证的需求了。1.2 工具选型背后的逻辑选哪些东西装其实背后是有逻辑的。我列一下我会用到的核心组件以及为什么选它们。第一JDK。Hadoop 3.x 要求Java 8或Java 11我自己用的是JDK 8系列稳定、兼容性好。这里有个很多人会忽略的点Hadoop的命令行脚本对JAVA_HOME环境变量特别敏感如果配不对启动时各种报错。第二Hadoop本体。我建议直接下载二进制压缩包解压即用不要去源码编译。源码编译要装protobuf、findbugs之类的一堆工具折腾半天意义不大。版本上推荐3.3.x或3.2.x这两个版本在Windows和Linux下踩坑资料都比较多遇到问题容易搜到解决方案。第三IDE。我自己主力是IDEA如果你习惯VS Code也一样能搞定。IDEA这边装一个Lombok插件、一个Maven Helper就够用不需要刻意去找什么“Hadoop插件”因为Hadoop开发在IDEA里主要靠Maven依赖体系IDE本身不需要针对Hadoop做特殊扩展。VS Code那边则可以装Remote-SSH这类插件后面我会单独讲为什么有用。第四Maven。这个是管理Hadoop客户端依赖的关键不用Maven的话你得手动把几十个jar包塞进classpath几乎必然出现版本冲突。第五辅助工具。包括Git代码版本管理、SSH客户端Windows下连伪分布式节点用、以及一个能看HDFS文件的工具。HDFS文件浏览器可以用Hadoop自带的命令行也可以装一个Hue或者大数据平台自带的UI但开发阶段命令行其实够用。这些工具选型的核心逻辑就是最小可用、问题可查、接近生产。我不想在开发机上灌一堆用不上的东西也不想把所有事都放到远程服务器上做导致调试一次要传半天代码。1.3 这套方案能解决什么问题这套方案搭完之后你能够做到以下几件事在本地IDE里新建Hadoop Maven工程编写MapReduce作业通过配置core-site.xml和hdfs-site.xml访问远程HDFS集群或者访问本机伪分布式HDFS提交作业到本机YARN上跑在IDE里直接查看日志和输出结果。换句话说你得到的是一个“能写、能跑、能调、能看结果”的完整开发闭环。和单纯看文档相比这种闭环会让你对Hadoop的运行机制有直观感受。我自己当初把第一个WordCount跑通时才真正理解了MapTask和ReduceTask的分工而不是只停留在“Map映射、Reduce归约”的概念上。2. 环境准备先把地基打牢2.1 JDK安装与JAVA_HOME配置的几个细节JDK安装本身不难但有几个细节我要单独拎出来说。一是JDK版本。Hadoop 3.3.x官方文档写的支持范围是Java 8和Java 11很多教程直接让你装Java 8。我也推荐Java 8但要注意去Oracle官网下载JDK 8需要注册账号嫌麻烦的话用Adoptium也就是Eclipse Temurin的OpenJDK 8完全免费而且使用体验没有差别。二是安装路径。很多Windows教程会让你把JDK装到C盘默认路径这没错但有了JAVA_HOME这个环境变量之后不要在后面加斜杠和binJAVA_HOME应该指向JDK的根目录。我之前见过有人把JAVA_HOME配成了C:\Program Files\Java\jdk1.8.0_281\bin结果命令行里java -version能用但Hadoop脚本启动时就找不到JVM。三是Path变量。在Path里新增一行%JAVA_HOME%\bin这个问题不大但Windows在修改环境变量后需要重启终端窗口甚至在部分情况下要重启电脑才生效。很多人配置完环境变量在新开的终端里执行java -version还是旧版本其实是终端缓存的问题。验证方式很简单新开一个终端窗口依次执行java -version javac -version echo %JAVA_HOME%三条命令都能正常输出JDK这步就算过了。2.2 SSH免密登录配置与伪分布式场景的关系Linux环境下做Hadoop伪分布式搭建SSH免密几乎是必配项。Hadoop的脚本会通过SSH登录localhost来启动和停止各个守护进程如果不配免密每次启动都要输入密码实验时极其痛苦。配置步骤我记得很清楚就三步ssh-keygen -t rsa -P -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys然后执行一次ssh localhost测试如果不需要输密码就能登录说明配置成功。Windows用户在这块会麻烦一些。Hadoop 3.x在Windows上运行需要额外下载winutils.exe和hadoop.dll放到Hadoop的bin目录下。这也是为什么很多教程推荐你在Linux虚拟机或云服务器上装Hadoop而不是直接在Windows本机装。我自己是Windows本机装IDEALinux虚拟机里跑Hadoop伪分布式两边用SSH连这样两边都舒坦。后来我试过Windows自带的OpenSSH来做免密但Hadoop脚本启动时对SSH的实现有依赖Windows下容易出幺蛾子。所以如果你用的是Windows我还是建议装个VMware跑UbuntuHadoop放虚拟机里开发代码放本机。这也是网上一堆“VMware虚拟机组集群”教程存在的原因——不是大家喜欢折腾虚拟机是真的省心。2.3 Hadoop本体下载与解压的版本选择心得Hadoop本体下载推荐清华镜像或Apache官网。清华镜像速度快版本也比较全文件名格式一般是hadoop-3.3.6.tar.gz这样的。解压之后要改几个关键配置文件才能进入伪分布式模式。在$HADOOP_HOME/etc/hadoop/目录下至少要改这四个文件core-site.xml配置HDFS的NameNode地址和临时目录hdfs-site.xml配置数据副本数和NameNode元数据目录mapred-site.xml配置MapReduce运行框架为YARNyarn-site.xml配置YARN的资源管理地址拿core-site.xml举例核心配置就是property namefs.defaultFS/name valuehdfs://localhost:9000/value /property property namehadoop.tmp.dir/name value/home/user/hadoop_tmp/value /property第一行指定了默认的HDFS地址第二行是临时目录这个目录我们自己建一个专用的不要用默认的/tmp/hadoop-${user.name}因为系统重启后/tmp被清空你的HDFS元数据也没了到时候NameNode会无法启动血泪教训。副本数配置在hdfs-site.xml里伪分布式只有一台机器所以副本数要设置成1property namedfs.replication/name value1/value /property这个不设置的话默认是3伪分布式下会疯狂报错DataNode一直在尝试复制数据到不存在的节点上日志刷得飞起。3. 核心插件安装与开发环境配置3.1 IDEA里的Hadoop插件问题真正需要装的是什么先说结论IntelliJ IDEA不需要装任何专门的“Hadoop插件”。你搜到的那些把hadoop-eclipse-plugin jar包塞进Eclipse插件目录的教程属于比较过时的玩法。现代Hadoop开发完全是依托Maven依赖体系进行的IDEA只需要具备Maven支持自带、并装一个Lombok插件部分代码用到就够了。真正要花时间的是把Maven工程配好。新建一个Maven工程后在pom.xml里引入Hadoop客户端依赖。这里我不建议直接引一个巨大的hadoop-client包而是按需引。最常用的几个依赖如下dependency groupIdorg.apache.hadoop/groupId artifactIdhadoop-client/artifactId version3.3.6/version /dependency dependency groupIdorg.apache.hadoop/groupId artifactIdhadoop-hdfs/artifactId version3.3.6/version /dependency dependency groupIdorg.apache.hadoop/groupId artifactIdhadoop-common/artifactId version3.3.6/version /dependency为什么要按需引而不是直接抄一个大而全的依赖列表因为Hadoop的依赖树极其庞大引多了会出现各种令人崩溃的类冲突。比如guava版本不一致、protobuf-java版本不对跑MapReduce时会在最深处突然爆一个NoSuchMethodError排查起来特别耗时间。如果你嫌Maven下载依赖慢记得在settings.xml里配置阿里云镜像mirror idaliyunmaven/id mirrorOf*/mirrorOf name阿里云公共仓库/name urlhttps://maven.aliyun.com/repository/public/url /mirror这里要提醒一句Hadoop的依赖和Spring Boot、Flink那些框架混用时要格外小心别在同一个项目里同时引一堆大数据框架的依赖。我见过有人为了图省事把Hadoop、Hive、Spark的依赖一次性全引进去结果类冲突得连项目都起不来。正确的做法是一个项目只针对一个计算框架做开发。3.2 VS Code的Hadoop开发场景其实强弱项分明VS Code这几年在大数据开发圈子里存在感越来越强但它适合的Hadoop场景和IDEA不一样。我的判断是VS Code适合做轻量级编码和远程开发IDEA适合做重型Java工程调试。两者可以并存不用二选一。VS Code装几个必要的扩展之后体验能拉得很高Java Extension Pack提供Java语言支持这是写MapReduce代码的基础Maven for Java识别Maven工程结构直接在IDE里运行mvn packageRemote - SSH连接远程Linux服务器或虚拟机配合Hadoop集群使用非常方便Hadoop HDFS插件社区里有几款主要提供HDFS文件浏览功能用起来聊胜于无我自己在VS Code里用得最多的是Remote - SSH。场景是这样的代码写在本机Windows里但Hadoop跑在Linux虚拟机上。直接用VS Code的Remote-SSH连上去打开虚拟机上的代码目录直接在终端里跑hdfs dfs -ls /一边写代码一边验证数据体验特别流畅。这比在IDEA里配远程解释器要轻量得多。顺便提一下热词里“vscode嵌入式开发插件”这个搜索方向。嵌入式开发和Hadoop完全是两回事但如果你已经有VS Code的Embedded IDE插件也不用卸载插件之间基本不会冲突。VS Code的好处就在于扩展隔离做得不错不像IDEA装多了插件会导致启动变慢。3.3 Maven与Git的安装配置要点Maven和Git是Hadoop开发绕不开的基础工具这两个工具的安装流程很成熟我只挑几个容易出问题的点讲。Maven安装后第一件事不是跑mvn -v而是修改配置文件conf/settings.xml。需要改两处一是上面提到的阿里云镜像二是本地仓库路径。本地仓库默认在用户目录的.m2/repository下如果C盘空间紧张建议改到D盘。改法是在settings.xml里加一行localRepositoryD:/maven-repo/localRepositoryGit安装时注意一个问题Windows下安装Git Bash默认会带一套Unix工具这对于Hadoop开发非常有用。比如你需要在Windows下生成SSH密钥、执行Linux命令、处理shell脚本Git Bash能帮你省掉很多麻烦。安装时虽然选项很多但保持默认就能满足绝大多数开发需要。安装完这两个工具可以顺手在IDE里配置一下Maven的路径。IDEA自带Maven但版本可能和你本机装的Maven不一致这会导致项目构建行为和命令行不一致。我建议在Settings Build Tools Maven里把Maven home path指到你本机的Maven安装目录同时把User settings file指向你刚改过的settings.xml。3.4 其他常用辅助插件与工具整理除了上面这些核心工具围绕着Hadoop开发还有几类辅助工具和插件值得装一下它们单独使用可能感觉不到什么但组合起来效率提升非常明显。一是代码检查和格式化工具。IDEA里的CheckStyle或SonarLint插件可以帮你提前发现代码里的隐患尤其是写MapReduce时经常出现的资源未释放问题这类工具能给出提示。但这个事要注意度别把代码风格检查当作主要任务用默认规则即可。二是数据库和SQL工具。如果你后面要接触HiveIDEA自带的Database工具窗口在连接MySQL时非常好用省得单独开一个Navicat。Hive的元数据存放在MySQL里用IDEA的Database工具连上去可以直接查看表信息排查问题时效率很高。三是HDFS文件管理工具。除了命令行Windows下可以装一个叫HDFS Explorer的绿色小工具图形化浏览HDFS文件目录、查看文件内容。虽然后来我用得越来越少都是直接hdfs dfs -cat但对新手来说图形化界面还是能减少一些心理障碍。四是我强烈推荐的终端工具。Windows下建议装Windows TerminalLinux下用系统自带的就行。Hadoop开发免不了在终端里敲各种命令一个顺手的终端能减少很多烦躁感。4. 实操过程从零到跑通第一个MapReduce4.1 伪分布式Hadoop的启动与验证前面配置文件的细节都处理完之后就可以真正启动Hadoop了。首次启动前要先格式化NameNode。这个操作要特别注意只在第一次启动时执行以后尽量不要重复执行否则会把HDFS上的所有数据清空。命令是hdfs namenode -format格式化成功后在sbin目录下执行启动脚本start-dfs.sh start-yarn.sh有的教程会建议直接用start-all.sh但这个脚本在Hadoop 3.x里已经不建议使用了。原因很简单它一次性启动所有进程出了问题你都不知道该看哪个日志。我习惯分开启动方便定位问题。启动后可以用jps命令查看Java进程。伪分布式模式下你应该能看到以下5个进程NameNodeDataNodeSecondaryNameNodeResourceManagerNodeManager少任何一个都说明启动有问题要去对应的日志目录排查。日志在$HADOOP_HOME/logs/下文件名一般是hadoop-用户名-进程名-主机名.log。4.2 在IDEA里创建Hadoop项目和编写WordCount环境没问题之后回到IDEA里新建一个Maven项目。这里有个小技巧不要从零开始写pom.xml直接在Maven仓库搜索hadoop-client复制依赖代码进去能减少手打出错。WordCount是Hadoop的HelloWorld虽然网上代码一堆但我还是要说一下理解和踩坑。一个完整的MapReduce作业包含三个核心部分Mapper类、Reducer类、主方法中配置的Job对象。Mapper部分的核心逻辑是继承org.apache.hadoop.mapreduce.Mapper这个类重写map方法。它会逐行读取输入数据把每一行按空格拆分成单词然后用context.write输出(单词, 1)的键值对。这句描述看起来简单但你要注意key和value的类型必须用Hadoop的序列化类型比如Text对应StringIntWritable对应Integer不能用Java原生的String和Integer。这是很多新手第一次报错的地方。Reducer部分则负责把相同key的所有value收集起来求和最终输出(单词, 总次数)。主方法的Job配置里最需要注意的几行job.setMapperClass(WordCountMapper.class); job.setReducerClass(WordCountReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class);这里我在实际项目中犯过一个很低级的错误只设置了Mapper输出的key和value类型没有设置Reducer的输出类型结果运行时直接报类型不匹配。其实Job的setOutputKeyClass和setOutputValueClass设置的是最终输出也就是Reducer端的输出类型如果你的Mapper输出类型和Reducer输出类型不一样还需要额外通过job.setMapOutputKeyClass和job.setMapOutputValueClass来设置。4.3 提交作业到伪分布式集群并查看结果在IDEA里写完代码后用Maven打包mvn clean package -DskipTests然后通过命令行提交作业hadoop jar target/hadoop-demo-1.0-SNAPSHOT.jar com.example.WordCount /input /output这里要注意几个路径问题。/input和/output是HDFS上的路径不是本机路径。所以在提交作业之前得先把测试数据上传到HDFShdfs dfs -mkdir /input hdfs dfs -put local_test.txt /input//output这个路径不能事先存在否则也会报错。MapReduce框架要求输出路径不存在这样设计是为了防止误覆盖之前的结果。作业跑起来之后可以看到YARN打印的进度信息。这里其实有几个值得期待的瞬间Map阶段跑到100%、Reduce阶段开始执行、最终作业状态显示SUCCEEDED。我第一次成功跑通时日志里显示“completed successfully”的那一秒比后来跑好多复杂任务都有成就感。然后查看结果hdfs dfs -cat /output/part-r-000004.4 VS Code远程开发模式的实操流程说完了IDEA的流程再补充一下VS Code的远程开发部分。这块在Windows本机配Hadoop的时候特别实用。常规操作是这样首先在VS Code里装上Remote - SSH扩展然后在命令面板里执行Remote-SSH: Connect to Host输入你的Linux虚拟机IP和用户名。连接成功后VS Code会安装远程服务器端的插件然后你就可以像操作本机文件一样操作远程机器上的代码了。这里有个需要提前处理好的前提远程Linux服务器上必须装好JDK和Hadoop并把环境变量配好。SSH连上去之后在VS Code的终端里执行echo $JAVA_HOME能输出路径说明环境变量OK。VS Code远程开发对我的主要价值是Hadoop集群文件在服务器上代码也在服务器上调试时不用频繁上传下载文件同时VS Code的界面体验比直接在console里用vim强太多了。后面对接真实集群开发时这种本地编码、远端运行的模式会成为主流工作方式。5. 常见问题与排查技巧实录5.1 NameNode无法启动的排查思路NameNode起不来是伪分布式搭建中遇到概率最高的问题十个人有八个人会碰到。最典型的现象是执行start-dfs.sh后jps看不到NameNode进程或者日志里报Incompatible namespaceIDs之类的异常。这个问题绝大部分原因是你之前格式化过NameNode但DataNode的元数据还没同步导致两者记录的集群ID不一致。解决办法有两种思路——第一种是在搭完环境后DataNode首次启动前格式化NameNode第二种是已经乱了那就把Hadoop临时目录下的所有数据清掉重新走一遍“格式化→启动”流程。实际操作中第二种更常用rm -rf /home/user/hadoop_tmp/* hdfs namenode -format start-dfs.sh这个坑我在新手期踩过至少三次后来养成了习惯每次格式化之前先看一眼临时目录下是否有残留数据。5.2 集群启动成功但网页打不开的问题NameNode和DataNode都启动了9000端口也监听了但浏览器访问http://localhost:9870时页面显示不出来。这个情况多半是端口问题。Hadoop 3.x版本中NameNode的Web UI端口是9870很多教程还在写2.x时代的50070照着老教程操作自然打不开。如果你确认端口没错但依然打不开检查一下是不是防火墙拦截了。Linux下执行sudo ufw status sudo ufw allow 9870/tcpWindows本机访问虚拟机里的Hadoop时同样要确认虚拟机防火墙允许放行9870和8088端口。5.3 MapReduce作业卡住不动的原因分析和解决作业提交成功了YARN也接受了但界面上看一直卡在ACCEPTED状态。这种情况最常见的原因是集群资源不够。本地虚拟机一般就分配了两个CPU核和4G内存而YARN默认的调度器配置可能要求每个容器占用很大比例的资源。处理办法是去yarn-site.xml里调小资源分配property nameyarn.nodemanager.resource.memory-mb/name value2048/value /property property nameyarn.scheduler.minimum-allocation-mb/name value256/value /property调完之后重启YARN集群。我把这个参数从默认的4G加最小1G调整到2G加最小256M之后本机跑作业的速度明显提升很多之前卡住不动的任务也都能正常跑完了。核心原因就是默认配置里每个容器的最小内存要求对于小机器来说太高了。5.4 依赖冲突与版本不一致的快速定位Maven项目里跑Hadoop代码最容易出问题的是依赖冲突。我之前碰到过一次很经典的情况MapReduce程序编译顺利但运行到一半就报java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument。这类错误十有八九是项目中引入了多个不同版本的guava两个jar包互相打架。排查方法有几种。一种是在IDEA的Maven工具窗口里右键项目选择Show Dependencies在依赖图里搜索冲突的包。另一种是命令行里用Maven自带插件mvn dependency:tree -Dverbose输出结果里可以看到哪些包被重复引用了以及依赖路径在哪里分叉。找到重复引用的地方在pom.xml里用exclusions排除掉不需要的版本即可dependency groupIdorg.apache.hadoop/groupId artifactIdhadoop-common/artifactId version3.3.6/version exclusions exclusion groupIdcom.google.guava/groupId artifactIdguava/artifactId /exclusion /exclusions /dependency5.5 Windows下Hadoop运行异常的补充说明如果你执意要在Windows本机跑Hadoop伪分布式除了装winutils.exe和hadoop.dll之外还有几个Windows特有的问题会遇到。其一是在hadoop-env.cmd里手动设置JAVA_HOME因为Windows环境下环境变量传递经常有问题。其二是Hadoop在Windows下对路径分隔符的解析和Linux不同某些配置文件的路径写法要格外注意只能用正斜杠。我的建议是Windows本机只做开发编码实际跑Hadoop还是放到Linux虚拟机或服务器上。这不是偷懒而是把有限的精力花在学习和开发本身上而不是浪费在兼容性问题的排查上。5.6 常见问题速查表为了方便快速排查我把上面提到的典型问题和对应的解决方法汇总成一个速查表问题现象可能原因解决动作jps看不到NameNode进程NameNode和DataNode的namespaceID不一致清空临时目录重新格式化并启动访问9870页面无响应防火墙拦截放行对应端口作业卡在ACCEPTED状态YARN容器资源最小分配过大调小minimum-allocation-mb运行时报NoSuchMethodError依赖版本冲突排除冲突包或统一版本Windows下Hadoop脚本报错缺少winutils和hadoop.dll下载对应版本放入bin目录SSH连接localhost需要输密码免密配置失败检查authorized_keys权限6. 开发环境稳定后还能怎么玩6.1 如何继续深入Hadoop生态环境搭好、WordCount跑通之后下一步的切入点很关键。我个人的建议是不要急着搭Spark或Flink集群先把HDFS的命令行操作练熟然后去研究HDFS的存储原理比如数据块是怎么分布的、副本策略是怎么实现的。这些概念理解了后面学Hive、Spark都是事半功倍。当你想要进一步体验完整集群的时候可以在VMware里克隆几台虚拟机搭建一个真正的多节点集群。网上关于Hadoop集群搭建的实验手册有很多但建议你先独立完成一次伪分布式搭建并且完全理解了每个配置项的含义之后再去做多节点扩展。否则你会被一大堆分布式问题淹没根本分不清是配置错误还是网络问题。6.2 与Zookeeper整合的实践经验热词里提到了“hadoop和zookeeper整合实战”这块确实值得单独说一下。Hadoop 3.x版本自带的HDFS HA高可用解决方案就依赖Zookeeper来管理NameNode的选举和状态切换。如果你已经搭好了一个多节点集群下一步非常建议试着整合Zookeeper进去让HDFS具备故障自动切换能力。这里有一个思路要提前理清Zookeeper本身是独立于Hadoop的中间件它的主要职责是协调分布式系统的元数据而不是存储业务数据。所以在整合之前你需要先单独搭一套Zookeeper集群然后在Hadoop的hdfs-site.xml和core-site.xml里配置HA相关的参数指向Zookeeper的地址。整合过程涉及的配置项比较多主要是dfs.nameservices、dfs.ha.namenodes.ns1、dfs.namenode.rpc-address等一不小心就会配错。我的建议是先把Zookeeper的集群启动起来并确保可用再改Hadoop的配置而且每改一个文件就检查一次语法不要一次性改完所有配置再启动否则出了问题很难定位。6.3 开发环境到生产环境的思维转换最后想聊一个观念上的问题。很多人在本机搭好环境后会直接把本地那套操作习惯带到生产环境去结果处处碰壁。比如生产环境不可能让你随便格式化NameNode不可能每个作业都用hadoop jar手动提交更不可能让你在服务器上装IDEA写代码。但恰恰是因为你完整走过一遍本地搭建和开发流程你才能理解生产环境里为什么需要有权限管控、为什么要有统一的作业调度平台、为什么要做配置管理。我的个人感受是本地开发环境的价值不在于它和生产环境有多像而在于它能用最低的成本让你把核心原理搞清楚。当你理解了原理再去看生产环境的架构设计很多设计自然就说得通了。最后分享一个自己经常用的习惯把完整的Hadoop开发环境搭建过程整理成一份自己的手记包括每个配置项的含义、每个问题的解决方式。这个东西的价值过半年你再回头看会发现它比网上任何教程都更有参考意义。
返回列表