项目近期在做千亿级大数据的存储和检索需求。需要对10T文本数据进行分析处理,存入数据库,供实时检索。文件的存储成为首要问题。多种存储方式都不是很令人满意。最后使用HDFS分布式文件存储系统,发现效率、管理等方面都相当不错。我研究了如何构建和使用它。在此记录下文件环境和修改主机名#根据上面的环境配置修改每台机器的主机名vi/etc/hostname#使用hostname命令使其生效,不需要重启hostnamexxxx来修改hosts文件vi/etc/hosts192.168.143.130master192.168.143.131slave1192.168.143.132slave2192.168.143.133slave3192.168.143。134slave4配置免密码登录ssh-keygen-trsassh-copy-id-i~/.ssh/id_rsa.pubmasterssh-copy-id-i~/.ssh/id_rsa.pubslave1ssh-copy-id-i~/.ssh/id_rsa.pubslave2ssh-copy-id-i~/.ssh/id_rsa.pubslave3ssh-copy-id-i~/.ssh/id_rsa.pubslave4安装JDK(每台机器)apt-getinstall-yopenjdk-8-jre-headlessopenjdk-8-jdk配置环境变量在/etc/profile文件末尾添加如下内容:exportJAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64exportCLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools/jarexportHADOOP_HOME=/usr/hadoop-3.3.0/exportPATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/binexportHADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoopexportHADOOP_COMMON_HOME=$哈多P_HOMEexportHADOOP_HDFS_HOME=$HADOOP_HOMEexportHADOOP_MAPRED_HOME=$HADOOP_HOMEexportHADOOP_YARN_HOME=$HADOOP_HOMEexportHADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"创建环境变量exportHADOOP_COMMON_LIB_NATIVE_HOME=$HADOOP_HOMEexportHADOOP_YARN_HOME=$HADOOP_HOMEexportHADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"创建环境变量exportHADOOP_COMMON_LIB_NATIVE_HOME=$HADOOP_HOME注意磁盘/libsource目录上的空间machine通过df-h命令,确定数据存放的磁盘,然后创建如下三个目录,在下面的配置文件hdfs-site.xml中修改相应的目录配置即可mkdir-p/home/hadoop/dfs/namemkdir-p/home/hadoop/dfs/datamkdir-p/home/hadoop/temp安装配置Hadoop下载Hadoop安装包http://archive.apache.org/dist/hadoop/core/stable/hadoop-3.3.0.tar.gz#解压后复制到/usr目录下-3.3.0/etc/hadoop目录下hadoop-env.shexportJAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64exportHDFS_NAMENODE_USER=rootexportHDFS_DATANODE_USER=rootexportHDFS_SECONDARYNAMENODE_USER=rootexportYARN_RESOURCEMANAGER_USER=rootexportYARN_NODEMANAGER_USER=rootcore-site.xmlfs.defaultFShdfs://master:9000hadoop.http.staticuser.userrootdfs.permissions.enabledfalsehdfs-site.xml配置多个文件存储目录,使用访问号隔开即可dfs.namenode.name.dir/home/hadoop/dfs/namedfs.dataname.data.dir/home/hadoop/dfs/data,/usr1/hadoop/dfs/datadfs.replication2mapred-site.xmlmapreduce.framework.nameyarnyarn-site.xml<配置>yarn.resourcemanager.hostnamemasteryarn.resourcemanager.webapp.addressmaster:8088yarn.nodemanager.aux-servicesmapreduce_shuffleworkers这里配置为DataNodeStorage机器,不建议用master做存储,如果集群满了,就不能用slave1slave2slave3slave4了,把master上的/usr/hadoop-3.3.9复制到其他机器上就可以了scp/usr/hadoop-3.3.0slave1:/usrscp/usr/hadoop-3.3.0slave2:/usrscp/usr/hadoop-3.3.0slave3:/usrscp/usr/hadoop-3.3.0slave4:/usr格式HDFS目录(master机器上)hdfsnamenode-format启动Hadoopmastermachine在电脑上执行。执行后可以在所有机器上使用jps命令查看进程状态cd/usr/hadoop-3.3.0/sbin./start-all.sh查看进程状态。分别在master和slave上执行jps命令查看是否成功在浏览器打开如下网页查看是否可以访问#Hadoop集群信息http://192.168.143.130:8088/cluster#HDFS地址http://192.168.143.130:9870/dfshealth.html#DataNode地址http://192.168.143.130:9864/datanode.html#NodeManager地址http://192.168.143.130:8042/node#SecondaryNameNodehttp://192.168.143.130:9868/status.html测试文件上传(master)hdfsdfs-mkdir/testhdfsdfs-putstart-dfs。sh/testHDFS运行命令创建文件夹hdfsdfs-mkdir/myTask创建多层文件hdfsdfs-mkdir-p/myTask/input上传文件hdfsdfs-put/opt/wordcount.txt/myTask查看通用目录下的文件和文件夹hdfsdfs-ls/查看myTask目录下的wordcount.txt文件内容hdfsdfs-cat/myTask/wordcount.txt删除文件或文件夹hdfsdfs-rm-r/myTask/wordcount.txt下载文件到本地hdfsdfs-get/myTask/wordcount.txt/当optPython操作hdfs和python操作hdfs时,如果要上传下载文件,必须在执行代码的机器上配置hosts文件。原因是hdfs的namenode和datanode在注册后是通过hostname来记录的。如果不直接配置上传下载操作,那么会使用hostname进行操作,所以需要在本机上配置相应的hdfs集群机器IP和hostname的配置比如我在本机上操作,必须配置如下:C:\Windows\System32\drivers\etc\hosts192.168.143.130master192.168.143.131slave1192.168.143.132slave2192.168.143.133slave3192.168.143.134slave4安装librarypipinstalloperationconnectionfromhdfs.clientimportClientclient=Client("http://192.168.143.130:9870")创建目录client.makedirs(hdfs_path)删除文件client.delete(hdfs_path)上传文件client.download(hdfs_path,local_path)获取目录下的文件列表client.list(hdfs_path)总结了HDFS文件存储集群的优点:配置要求低,易扩展,效率高,非常适合海量文件存储,可以提供web管理页面,很好第三方库。在进行Web开发时,作为文件和图像存储库也很棒。