虚拟机centos7系统3台,hadoop v3.2.1,分别设置了固定ip已经hostname:hadoop101,hadoop102,hadoop103,并设置ssh免密码登录。
开发环境windows10,idea2020
hdfs:
hadoop101:namenode、dataname
hadoop102:secondary-namenode、datanode、zookeeper
hadoop103:datanode
yarn:
hadoop101:resource-manager(rm1)、nodemanager
hadoop102:nodemanager
hadoop103:resource-manager(rm2)、nodemanager
最终配置文件core-site.xml
fs.defaultFS hdfs://hadoop101:9000 hadoop.tmp.dir /tmp/my-hadoop/ hadoop.http.staticuser.user hadoop
hdfs-site.xml
dfs.replication 2 dfs.namenode.secondary.http-address hadoop102:50090 dfs.permissions.enabled false dfs.namenode.http-address hadoop101:9870
yarn-site.xml
yarn.nodemanager.aux-services mapreduce_shuffle yarn.nodemanager.env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME yarn.resourcemanager.ha.enabled true yarn.resourcemanager.cluster-id cluster1 yarn.resourcemanager.ha.rm-ids rm1,rm2 yarn.resourcemanager.hostname.rm1 hadoop101 yarn.resourcemanager.hostname.rm2 hadoop103 yarn.resourcemanager.webapp.address.rm1 hadoop101:8088 yarn.resourcemanager.webapp.address.rm2 hadoop103:8088 yarn.resourcemanager.zk-address hadoop102:2181 ZooKeeper服务的地址,多个地址使用逗号隔开 yarn.nodemanager.resource.memory-mb 1024 yarn.nodemanager.resource.cpu-vcores 1
mapred-site.xml
问题1:start-dfs.sh 启动集群,datanode无法全部启动,需要登录每台机分别执行一次才能启动所有datanodemapreduce.framework.name yarn mapreduce.application.classpath $HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/* yarn.app.mapreduce.am.resource.mb 1024 mapreduce.jobhistory.address hadoop102:10020 mapreduce.jobhistory.webapp.address hadoop101:19888
解决:修改hadoop/etc/hadoop/workers,把localhost改为3台dn的host即可,注意不能有多余的空格
问题2:windows idea中执行代码无法访问hdfs解决:
a) windows环境下载3.2版本hadoop并解压,然后配置hadoop环境变量:HADOOP_HOME, HADOOP_USER_NAME ,编辑window hosts文件,设置hadoop101/102/103对应的ip地址
b) 需要下载win-utils: GitHub - kennywgx/apache-hadoop-3.1.0-winutils: HADOOP 3.1.0 winutils
将winutil.exe和hadoop.dll复制到hadoop/bin目录下
c) hadoop集群中关闭用户权限校验并重启,vim hdfs-site.xml
dfs.permissions.enabled false
至此,win命令行终于可以访问hdfs了,idea中程序访问也正常不会报错了
问题3:jdk环境变量带空格
过程中还是遇到了一个奇怪的报错:JAVA_HOME is incorrectly set. Please update xxx/hadoop-env.sh
解决:java_home是正确配置了的,所以百度该错误,了解到原因是我的JDK环境变量的值中带了空格:D:Program FilesJavajdk1.8.0_191,于是把jdk挪到另一个文件夹:D:jdkJavajdk1.8.0_191,并重新配置环境变量即可。
问题4:windows提交yarn任务到集群报错:fg: no job control解决:根据博客:/bin/bash: line 0: fg: no job control一般解决方法_fansy1990的专栏-CSDN博客
了解到原因是windows下提交作业到linux的hadoop集群时:生成的命令参数中对于环境变量的引用方式不同,导致的平台兼容性问题
# 生成的命令如下,%JAVA_HOME% 在Linux下不能识别,故报错:fg: no job control exec /bin/bash -c "%JAVA_HOME%/bin/java -Djava.io.tmpdir=%PWD%/tmp -Dlog4j.configuration=container-log4j.properties xxx
博客中描述的解决方案比较复杂,我在翻阅官方文档时看到这个设置:mapreduce.app-submission.cross-platform
文档中解释该开启该配置正是用于从windows客户端提交作业到linux服务器这种跨平台的情况下使用的,于是我愉快的应用该配置到我window下的mapred-site.xml中
mapreduce.app-submission.cross-platform true
保存生效,重新提交任务,成功!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)