赞
踩
分布式文件系统是大型项目中不可缺少的模块,主要可以解决两类问题。一是服务分布式部署访问文件,二是大文件的存储。
HDFS是Hadoop两大核心(HDFS、MapReduce)之一,旨在解决大数据(文件)的存储问题。HDFS的设计思路是分块(Block)存储大文件,由Java编写。
HDFS通常是集群方式部署。因其本身有文件管理的web页面,所以本人在CentOS上部署一个单点系统当网络文件传输管理器……以下是部署步骤。
cd /usr/local
wget https://archive.apache.org/dist/hadoop/core/hadoop-3.3.1/hadoop-3.3.1.tar.gz
tar -zxvf hadoop-3.3.1.tar.gz
vi /etc/profile
export HADOOP_HOME=/usr/local/hadoop-3.3.1
export PATH=.:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$JAVA_HOME/bin:$PATH
source /etc/profile
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
/usr/local/hadoop-3.3.1/etc/hadoop
目录下。
export JAVA_HOME=/usr/local/java11
export HADOOP_SSH_OPTS="-p ssh端口"
<configuration>
<property>
<!--DataNode将发送心跳到NameNode的端口-->
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<!--临时文件存储目录,没有则新建-->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-3.3.1/tmp</value>
</property>
</configuration>
<configuration> <!--单点,配置备份为1--> <property> <name>dfs.replication</name> <value>1</value> </property> <!--分块大小--> <property> <name>dfs.blocksize</name> <value>698351616</value> </property> <!--NameNode存储目录,没有则新建--> <property> <name>dfs.name.dir</name> <value>/usr/local/hadoop-3.3.1/hdfs/name</value> </property> <!--DateNode存储目录,没有则新建--> <property> <name>dfs.data.dir</name> <value>/usr/local/hadoop-3.3.1/hdfs/data</value> </property> </configuration>
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
部署完成后即可启动,确保使用的端口都以开放。
/usr/local/hadoop-3.3.1/bin/hdfs namenode -format
/usr/local/hadoop-3.3.1/sbin/start-dfs.sh
/usr/local/hadoop-3.3.1/sbin/stop-dfs.sh
jps
firewall-cmd --state
systemctl stop firewalld.service
firewall-cmd --zone=public --list-ports
netstat -lnpt
firewall-cmd --zone=public --add-port=6666/tcp --permanent
firewall-cmd --zone=public --remove-port=6666/tcp --permanent
firewall-cmd --reload # 配置立即生效
启动成功后,可通过web管理页面http://IP:9870/
查看HDFS的使用情况,也可管理文件。
管理页面默认无密码,进入页面的人员都可操作,我们可以通过配置NameNode节点的jetty进行用户认证。
cd $HADOOP_HOME/share/hadoop/hdfs/webapps/hdfs/WEB-INF
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"> <security-constraint> <web-resource-collection> <web-resource-name>Protected</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>root</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> <realm-name>hdfsRealm</realm-name> </login-config> </web-app>
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Get name="securityHandler">
<Set name="loginService">
<New class="org.eclipse.jetty.security.HashLoginService">
<Set name="name">hdfsRealm</Set>
<Set name="config">
<SystemProperty name="hadoop.home.dir"/>/etc/hadoop/realm.properties
</Set>
</New>
</Set>
</Get>
</Configure>
vi /usr/local/hadoop-3.3.1/etc/hadoop/realm.properties
#
# This file defines users passwords and roles for a HashUserRealm
#
# The format is
# <username>: <password>[,<rolename> ...]
#
#plain: plain,user
user: password,root
Permission denied: user=dr.who, access=READ_EXECUTE, inode="/":root:supergroup:drwx------
hadoop fs -chmod -R 777 /
Couldn't upload the file
通过F12查看无法上传的原因,对症解决
查看日志排查问题
/usr/local/hadoop-3.3.1/logs
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。