注:该图片来自上面链接
步骤
首先第一步就是HDFS的搭建,也就是hadoop的搭建,下面具体介绍一下步骤和问题。
参考文档:Apache Hadoop 2.10.2 – Hadoop: Setting up a Single Node Cluster.(官网)
由于没有机器,先做一个简单的单机版架构了。
各个文件说明
bin:存放操作Hadoop相关服务(HDFS、Yarn)的脚本,但是通常使用sbin目录下的脚本。
etc:存放Hadoop配置文件,主要包含core-site.xml、hdfs-site.xml、mapred-site.xml等从Hadoop1.0继承而来的配置文件和yarn-site.xml等Hadoop2.0新增的配置文件。
include:对外提供的编程库头文件(具体动态库和静态库在lib目录中),这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce程序。
lib:该目录包含了Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用。
libexec:各个服务对用的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息。
sbin:该目录存放Hadoop管理脚本,主要包含HDFS和YARN中各类服务的启动/关闭脚本。
share:Hadoop各个模块编译后的jar包所在的目录。
src:Hadoop的源码包。
按照官网说明,需要以下两个环境变量:
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_HOME=/Users/xxxx/opt/hadoop-2.10.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
然后直接运行
sbin/start-all.sh
常用地址
http://localhost:50070/dfshealth.html#tab-overview
http://localhost:8088/cluster
遇到问题
没有datanode
jps
5363 SecondaryNameNode
5477 ResourceManager
5017
5161 NameNode
5563 NodeManager
93981
5725 Jps
这会导致无法上传文件
hadoop fs -put etc/hadoop/* /input
22/06/01 11:51:13 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
22/06/01 11:51:14 WARN hdfs.DataStreamer: DataStreamer Exception
org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /input/capacity-scheduler.xml._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation.
at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1832)
at org.apache.hadoop.hdfs.server.namenode.FSDirWriteFileOp.chooseTargetForNewBlock(FSDirWriteFileOp.java:265)
解决方案:
由于是第一次搭建,直接删除文件系统:
找到创建hdfs的地址,删除就行了,重新启动
安装验证
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar grep /input /output 'dfs[a-z.]+'
该版本 hadoop里面不支持相对路径,所以注意必须要加上根目录