Hadoop3.3.1 踩坑笔记

Hadoop3.3.1 踩坑笔记,第1张

安装

目标:安装Hadoop3.3.1 伪分布式

  1. 确认已经与java开发环境(java -version)

  2. 下载hadoop.tar.zip安装包链接

  3. 解压到指定位置(建议/usr/local/hadoop)

  4. 配置环境变量(.bashrc)

  5. 修改配置文件(在hadoop/etc/hadoop/):core-site.xml,hdfs-site.xml,hadoop-env.sh[后面的不需要配,mapred-site.xml,yarn-site.xml],文件路径根据自己情况设置

    1. core-site.xml
    <configuration>
    	
    	<property>
    	    <name>fs.defaultFSname>
    	    <value>hdfs://0.0.0.0:9000value>
    	property>
    	
    	<property>
    	    <name>hadoop.tmp.dirname>
    	    <value>/usr/local/hadoop/tmpvalue>
    	 property>
    	<property>
    	    <name>hadoop.tmp.dirname>
    	    <value>/usr/local/hadoop/tmpvalue>
    	property>
    configuration>
    
    1. hdfs-site.xml
    <configuration>
    	<property>
    	    <name>dfs.data.dirname>
    	    <value>/usr/local/hadoop/hdfs/datavalue>
    	    <description>datanode上数据块的物理存储位置description>
    	property>
    	
    	
    	<property>
    	    <name>dfs.replicationname>
    	    <value>1value>
    	property>
    	
    	<property>
    	    <name>dfs.permissionsname>
    	    <value>falsevalue>
    	property>
    	
    	<property>
    	  <name>dfs.datanode.hostnamename>
    	  <value>hadoopvalue>
    	property>
    
    configuration>
    
    1. hadoop-env.sh,在# export JAVA_HOME=处新增,JAVA_HOME配自己的路径,root改为自己的用户名
    export JAVA_HOME=/usr/lib/jvm/java
    
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    

export YARN_NODEMANAGER_USER=root
```

  1. 相关命令
    # 启动hadoop所有节点
    start-all.sh 
    # 关闭
    stop-all.sh
    # 查看java进程,正常应该有Jps,Namenode,Datanode,ResourceManager,NodeManager
    jps
    # 关闭安全模式,不关闭 HBase会出错
    hdfs dfsadmin -safemode leave
    
  2. 正常流程
# 确认java环境
[root@main ~]# java -version
java version "1.8.0_321"
Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)

# 启动hadoop集群
[root@main ~]# start-all.sh
Starting namenodes on [0.0.0.0]
上一次登录:五 325 12:29:55 CST 2022pts/0 上
Starting datanodes
上一次登录:五 325 12:30:19 CST 2022pts/0 上
Starting secondary namenodes [main]
上一次登录:五 325 12:30:22 CST 2022pts/0 上
Starting resourcemanager
上一次登录:五 325 12:30:32 CST 2022pts/0 上
Starting nodemanagers
上一次登录:五 325 12:30:46 CST 2022pts/0 上

# 查看java进程
[root@main ~]# jps
206288 Jps
204005 DataNode
205508 NodeManager
203691 NameNode
204558 SecondaryNameNode
205181 ResourceManager

# 查看hdfs能否在本地正常访问,只截取了部分
[root@main ~]# hadoop fs -ls /
Found 7 items
drwxr-xr-x   - root   supergroup          0 2022-03-24 15:24 /hbase
-rw-r--r--   1 wuhf   supergroup          0 2022-03-24 17:54 /jjy.jpg
-rw-r--r--   1 dr.who supergroup      15986 2022-03-18 18:53 /skeleton.png

# 关闭hadoop集群
[root@main ~]# stop-all.sh
Stopping namenodes on [0.0.0.0]
上一次登录:五 325 12:30:49 CST 2022pts/0 上
Stopping datanodes
上一次登录:五 325 12:31:25 CST 2022pts/0 上
Stopping secondary namenodes [main]
上一次登录:五 325 12:31:27 CST 2022pts/0 上
Stopping nodemanagers
上一次登录:五 325 12:31:30 CST 2022pts/0 上
Stopping resourcemanager
上一次登录:五 325 12:31:35 CST 2022pts/0 上

参考
1
2

遇到的问题
  1. 使用hdfs命令时有警告
[hadoop@main ~]$ hadoop fs -ls /
2022-03-18 13:42:49,610 WARN util.NativeCodeLoader: 
Unable to load native-hadoop library for your platform... 
using builtin-java classes where applicable

解决方法:(可以忽略警告),修改hadoop/etc/hadoop/log4j.properties文件,新增

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR

参考:1

  1. start-all.sh报错:只能被root执行
[hadoop@main ~]$ start-all.sh
WARNING: Attempting to start all Apache Hadoop daemons as hadoop in 10 seconds.
WARNING: This is not a recommended production deployment configuration.
WARNING: Use CTRL-C to abort.

Starting namenodes on [0.0.0.0]
ERROR: namenode can only be executed by root.
Starting datanodes
ERROR: datanode can only be executed by root.
Starting secondary namenodes [main]
ERROR: secondarynamenode can only be executed by root.
Starting resourcemanager
ERROR: resourcemanager can only be executed by root.
Starting nodemanagers
ERROR: nodemanager can only be executed by root.

解决方法:修改hadoop/etc/hadoop/hadoop-env.sh,将最后的’root’替换为执行’命令的用户名(我的是root)’

export HDFS_NAMENODE_USER=hadoop
export HDFS_DATANODE_USER=hadoop
export HDFS_SECONDARYNAMENODE_USER=hadoop
export YARN_RESOURCEMANAGER_USER=hadoop
export YARN_NODEMANAGER_USER=hadoop
  1. start-all.sh报错:无法写logs
[hadoop@main ~]$ start-all.sh
WARNING: Attempting to start all Apache Hadoop daemons as hadoop in 10 seconds.
WARNING: This is not a recommended production deployment configuration.
WARNING: Use CTRL-C to abort.
Starting namenodes on [0.0.0.0]
0.0.0.0: Warning: Permanently added '0.0.0.0' (ECDSA) to the list of known hosts.
0.0.0.0: ERROR: Unable to write in /usr/local/hadoop/logs. Aborting.
Starting datanodes
localhost: ERROR: Unable to write in /usr/local/hadoop/logs. Aborting.
Starting secondary namenodes [main]
main: Warning: Permanently added 'main,172.17.43.2' (ECDSA) to the list of known hosts.
main: ERROR: Unable to write in /usr/local/hadoop/logs. Aborting.
Starting resourcemanager
ERROR: Unable to write in /usr/local/hadoop/logs. Aborting.
Starting nodemanagers
localhost: ERROR: Unable to write in /usr/local/hadoop/logs. Aborting.

解决办法:给权限,执行sudo chmod -R 777 logs

  1. start-all.sh执行后,datanode未被启动
    原因:多次执行初始化命令hadoop namenode –format
    解决方法:
    • 不保留文件:删除hadoop/hdfs/data后,重新启动hdaoop
    • 保留文件:把namenodedatanodeclusterID改为一致

参考
1
2

  1. hadoop网页无法访问
    解决方法:

    1. hadoop2.x端口为50070,hadoop3.x端口为9870
    2. 对应端口没有放通:服务器的防火墙,云服务器的安全策略
  2. 网页内无法上传文件
    原因:域名使用的是hadoop机器名
    解决方法:

    1. 使用其他工具上传文件
    2. 修改C:\Windows\System32\drivers\etc\hosts,进行域名映射
  3. 在win10的IDEA上使用Big Data Tools时,各种错误

    1. 没找到HADOOP_HOME环境变量:下载残血版hadoop,只保留bin目录,并修改环境变量HADOOP_HOMEpath
    2. 缺少文件(winutils.exe hadoop.dll)无法运行:下载并添加进hadoop/bin
    3. 端口不对:hadoop3.x使用9000端口
    4. core-site.xmlfs.defaultFS不是0.0.0.0

    1&2 参考
    1&2 一次解决,链接参考里的

  4. 使用IDEA开发HDFS程序上传文件,文件名有,内容为空
    原因:请求的namenode,需要把数据传给datanode;(同6,但6的解决办法不适用)但datanode使用的是hadoop机器名,不是真实的域名
    解决方法:我也不知道怎么办了,啊啊啊啊

    // Configuration conf = new Configuration();
    // 加上下面这一句,直接使用真实域名
    conf.set("dfs.client.use.datanode.hostname", "true");
    

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/563180.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存