最近项目中在做千亿大数据存储检索需求,要把10T的文本数据进行解析处理存入数据库进行实时检索,文件的存储成为一个首要处理的问题,使用了多种存储方式,都不是很满足要求,最后使用 HDFS 分布式文件存储系统发现效率、管理等各方面都挺不错,就研究了一下搭建使用方式,特此记录文档
环境IP
hostname
角色
192.168.143.130
master
NameNode、ResourceManager
192.168.143.131
slave1
DataNode、NodeManager
192.168.143.132
slave2
DataNode、NodeManager
192.168.143.133
slave3
DataNode、NodeManager
192.168.143.134
slave4
DataNode、NodeManager
修改主机名# 按照上面环境配置修改每个机器的hostnamevi /etc/hostname# 使用hostname命令使其生效,就不用重启了hostname xxxx修改hosts文件vi /etc/hosts192.168.143.130 master192.168.143.131 slave1192.168.143.132 slave2192.168.143.133 slave3192.168.143.134 slave4配置免密登录ssh-keygen -t rsassh-copy-id -i ~/.ssh/id_rsa.pub masterssh-copy-id -i ~/.ssh/id_rsa.pub slave1ssh-copy-id -i ~/.ssh/id_rsa.pub slave2ssh-copy-id -i ~/.ssh/id_rsa.pub slave3ssh-copy-id -i ~/.ssh/id_rsa.pub slave4安装JDK(每台机器)apt-get install -y openjdk-8-jre-headless openjdk-8-jdk配置环境变量
在/etc/profile文件最后添加如下内容:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools/jarexport HADOOP_HOME=/usr/hadoop-3.3.0/export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/binexport HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoopexport HADOOP_COMMON_HOME=$HADOOP_HOMEexport HADOOP_HDFS_HOME=$HADOOP_HOMEexport HADOOP_MAPRED_HOME=$HADOOP_HOMEexport HADOOP_YARN_HOME=$HADOOP_HOMEexport HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native使环境变量生效
source /etc/profile创建目录(每天机器)创建目录的时候要注意,先通过df -h命令查看本机上的磁盘空间,确定好数据存储的磁盘,然后创建以下三个目录,在下面的配置文件hdfs-site.xml中修改对应的目录配置即可
mkdir -p /home/hadoop/dfs/namemkdir -p /home/hadoop/dfs/datamkdir -p /home/hadoop/temp安装配置Hadoop下载Hadoop安装包
# 解压后拷贝到/usr目录下tar -xzvf hadoop-3.3.0.tar.gzmv hadoop-3.3.0 /usr配置Hadoop配置文件在/usr/hadoop-3.3.0/etc/hadoop目录下
hadoop-env.shexport JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64export HDFS_NAMENODE_USER=rootexport HDFS_DATANODE_USER=rootexport HDFS_SECONDARYNAMENODE_USER=rootexport YARN_RESOURCEMANAGER_USER=rootexport YARN_NODEMANAGER_USER=rootcore-site.xml<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.作为存储,如果存满了集群就不能用了
slave1slave2slave3slave4将master上的/usr/hadoop-3.3.9拷贝到其他机器即可
scp /usr/hadoop-3.3.0 slave1:/usrscp /usr/hadoop-3.3.0 slave2:/usrscp /usr/hadoop-3.3.0 slave3:/usrscp /usr/hadoop-3.3.0 slave4:/usr格式化HDFS目录(在master机器)hdfs namenode-format启动Hadoop在master机器上执行就可以了,执行完以后可以使用jps命令在所有机器上查看进程状态
cd /usr/hadoop-3.3.0/sbin./start-all.sh查看进程状态在master和slave上分别执行jps命令
查看是否成功在浏览器上打开下面的网页,看能否正常访问
# Hadoop集群信息的对应配置。例如我在本机上进行操作,必须配置如下:
C:\Windows\System32\drivers\etc\hosts192.168.143.130 master192.168.143.131 slave1192.168.143.132 slave2192.168.143.133 slave3192.168.143.134 slave4安装库pip install hdfs操作连接from hdfs.client import Clientclient = Client(" 开发时,作为文件和图片存储库也是非常好的选择。