开发阶段本地远程请求服务器有点慢,于是自己本地安装一个HDFS
下载地址 https://hadoop.apache.org/releases.html 本人安装的3.1.3
①下载解压放到自己指定位置,Hadoop安装必须要安装JDK1.8以上,配置系统环境变量path中添加%HADOOP_HOME%\bin,和JAVA_HOME方式一致,linux自行安装配置
②JAVA_HOME安装目录不能有空格,不然启动hadoop会报错:Error: JAVA_HOME is incorrectly set.Please update D:\java\hadoop-3.1.3\etc\hadoop\hadoop-env.cmd 如果是windows的Program Files目录,则可以使用PROGRA~1代替
③hadoop在windows上运行需要winutils支持和hadoop.dll等文件,将文件拷贝至bin目录下,尽量不要和该目录下其他文件有冲突,如果有依赖性错误,拷贝至C:\Windows\System32下一份 https://github.com/steveloughran/winutils
修改hadoop-env.sh,mapred-site.xml,core-site.xml,hdfs-site.xml,yarn-site.xml。都在etc\hadoop目录下
1、hadoop-env.sh/hadoop-env.cmd 环境变量配置
错误的路径(路径不能有空格),linux同理,上面①有说道
正确的
windows系统下hadoop默认已经配置了,文件是hadoop-env.cmd。hadoop-env.sh为linux操作系统环境变量配置文件
两种方式都可以,二选其一
2、mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
3、core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9001</value>
<description>以前用的是fs.default.name,定义HadoopMaster的URI和端口,如hdfs://hadoopmaster:9000,映射hadoopmaster域名或者本机host文件</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/E:/java/hadoop-3.1.3/tmp</value>
<description>存放hadoop文件系统依赖的基本配置,安装hadoop的时候建议就进行配置,否则下次重启会清空tmp目录,</description>
</property>
</configuration>
创建tmp文件夹
fs.default.name和fs.defaultFS区别
用 fs.default.name还是用 fs.defaultFS ,要首先判断是否开启了 NN 的HA (namenode 的 highavaliable)namenode多节点。如果开启了nn ha,那么就用fs.defaultFS,在单一namenode的情况下,就用 fs.default.name
如果在单一namenode使用fs.defaultFS会报错:ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.java.lang.IllegalArgumentException: Invalid URI for NameNode address (check fs.defaultFS): file:/// has no authority.
最开始没有重新配置hadoop.tmp.dir,报错了,找到网上的说法是:必须重新配置,否则搭建成功后,下次重新运行直接报错,因为默认数据文件都是放置在tmp目录下,这个目录中文件会在服务器关闭情况下删除,路径从bin当前目录下开始算起.写相对路径,或者以“/”开头写绝对路径
4、hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>hdfs数据块的复制份数,默认3,设置复制数为1,即不进行复制,理论上份数越多跑数速度越快,但是需要的存储空间也更多。有钱人可以调5或者6</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/E:/java/hadoop-3.1.3/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/E:/java/hadoop-3.1.3/data/datanode</value>
</property>
<!--
<property>
<name>dfs.namenode.rpc-address</name>
<value>localhost:9010</value>
</property>
-->
</configuration>
创建data文件夹,data文件夹创建namenode和datanode文件夹
dfs.namenode.name.dir是保存FsImage镜像的目录,作用是存放hadoop的名称节点namenode里的metadata
dfs.datanode.data.dir是存放HDFS文件系统数据文件的目录,作用是存放hadoop的数据节点datanode里的多个数据块
dfs.namenode.rpc-address对应的是查看hdfs界面的链接地址
5、yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
6、hdfs namenode -format
以超级管理员运行命令 hdfs namenode -format,出现successfully说明format成功
7、启动hadoop
进入sbin目录下,双击start-all.cmd或者命令输入 .\start-all.cmd启动hadoop集群
出现下面四个窗口表示启动hadoop集群成功
hadoop namenode、hadoop datanode、yarn nodemanager、yarn resourcemanager
如果start-all.cmd启动hadoop报错
org.apache.hadoop.io.nativeio.NativeIO$POSIX.stat(Ljava/lang/String;)Lorg/apache/hadoop/io/nativeio/NativeIO$POSIX$Stat;
更换hadoop.dll和winutils.exe,我hadoop是3.1.3的,使用3.1.1的没问题
https://github.com/selfgrowth/apache-hadoop-3.1.1-winutils
浏览器输入http://localhost:8088/cluster查看集群状态
http://localhost:9870/查看namenode管理界面,3.1.3版本端口不是50070,据说3.0后是9870,3.0前是50070。官方没有找到具体说明。即使配了也没用,有待研究,知道了请留言告知,感谢。如果50070不行就用9870.