Hadoop集群搭建及Python操作

开发 后端 Hadoop
HDFS 文件存储集群的优点是:配置要求低、易于扩展、效率比较高、非常适合大批量文件存储,而且可以提供 web 管理页面,提供非常好的第三方库。在进行 web 开发时,作为文件和图片存储库也是非常好的选择。

 最近项目中在做千亿大数据存储检索需求,要把10T的文本数据进行解析处理存入数据库进行实时检索,文件的存储成为一个首要处理的问题,使用了多种存储方式,都不是很满足要求,最后使用 HDFS 分布式文件存储系统发现效率、管理等各方面都挺不错,就研究了一下搭建使用方式,特此记录文档

环境

修改主机名

  1. # 按照上面环境配置修改每个机器的hostname 
  2. vi /etc/hostname 
  3.  
  4. # 使用hostname命令使其生效,就不用重启了 
  5. hostname xxxx 

修改hosts文件

  1. vi /etc/hosts 
  2.  
  3. 192.168.143.130 master 
  4. 192.168.143.131 slave1 
  5. 192.168.143.132 slave2 
  6. 192.168.143.133 slave3 
  7. 192.168.143.134 slave4 

配置免密登录

  1. ssh-keygen -t rsa 
  2.  
  3. ssh-copy-id -i ~/.ssh/id_rsa.pub master 
  4. ssh-copy-id -i ~/.ssh/id_rsa.pub slave1 
  5. ssh-copy-id -i ~/.ssh/id_rsa.pub slave2 
  6. ssh-copy-id -i ~/.ssh/id_rsa.pub slave3 
  7. ssh-copy-id -i ~/.ssh/id_rsa.pub slave4 

安装JDK(每台机器)

  1. apt-get install -y openjdk-8-jre-headless openjdk-8-jdk 

配置环境变量

在/etc/profile文件最后添加如下内容:

  1. export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 
  2. export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools/jar 
  3. export HADOOP_HOME=/usr/hadoop-3.3.0/ 
  4. export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin 
  5. export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop 
  6. export HADOOP_COMMON_HOME=$HADOOP_HOME 
  7. export HADOOP_HDFS_HOME=$HADOOP_HOME 
  8. export HADOOP_MAPRED_HOME=$HADOOP_HOME 
  9. export HADOOP_YARN_HOME=$HADOOP_HOME 
  10. export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native" 
  11. export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 

使环境变量生效

  1. source /etc/profile 

创建目录(每天机器)

创建目录的时候要注意,先通过df -h命令查看本机上的磁盘空间,确定好数据存储的磁盘,然后创建以下三个目录,在下面的配置文件hdfs-site.xml中修改对应的目录配置即可

  1. mkdir -p /home/hadoop/dfs/name 
  2. mkdir -p /home/hadoop/dfs/data 
  3. mkdir -p /home/hadoop/temp 

安装配置Hadoop

下载Hadoop安装包

http://archive.apache.org/dist/hadoop/core/stable/hadoop-3.3.0.tar.gz

  1. # 解压后拷贝到/usr目录下 
  2. tar -xzvf hadoop-3.3.0.tar.gz 
  3. mv hadoop-3.3.0 /usr 

配置Hadoop

配置文件在

/usr/hadoop-3.3.0/etc/hadoop目录下

hadoop-env.sh

  1. export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 
  2. export HDFS_NAMENODE_USER=root 
  3. export HDFS_DATANODE_USER=root 
  4. export HDFS_SECONDARYNAMENODE_USER=root 
  5. export YARN_RESOURCEMANAGER_USER=root 
  6. export YARN_NODEMANAGER_USER=root 

core-site.xml

  1. <configuration> 
  2.   <property> 
  3.     <name>fs.defaultFS</name
  4.     <value>hdfs://master:9000</value> 
  5.   </property> 
  6.   <property> 
  7.     <name>hadoop.http.staticuser.user</name
  8.     <value>root</value> 
  9.   </property> 
  10.   <property> 
  11.     <name>dfs.permissions.enabled</name
  12.     <value>false</value> 
  13.   </property> 
  14. </configuration> 

hdfs-site.xml配置多个文件存储目录,使用逗号隔开即可

  1. <configuration> 
  2.   <property> 
  3.     <name>dfs.namenode.name.dir</name
  4.     <value>/home/hadoop/dfs/name</value> 
  5.   </property> 
  6.   <property> 
  7.     <name>dfs.dataname.data.dir</name
  8.     <value>/home/hadoop/dfs/data,/usr1/hadoop/dfs/data</value> 
  9.   </property> 
  10.   <property> 
  11.     <name>dfs.replication</name
  12.     <value>2</value> 
  13.   </property> 
  14. </configuration> 

mapred-site.xml

  1. <configuration> 
  2.   <property> 
  3.     <name>mapreduce.framework.name</name
  4.     <value>yarn</value> 
  5.   </property> 
  6. </configuration> 

yarn-site.xml

  1. <configuration> 
  2.   <property> 
  3.     <name>yarn.resourcemanager.hostname</name
  4.     <value>master</value> 
  5.   </property> 
  6.   <property> 
  7.     <name>yarn.resourcemanager.webapp.address</name
  8.     <value>master:8088</value> 
  9.   </property> 
  10.   <property> 
  11.     <name>yarn.nodemanager.aux-services</name
  12.     <value>mapreduce_shuffle</value> 
  13.   </property> 
  14. </configuration> 

 workers

这里配置的就是DataNode的存储机器,不建议用master作为存储,如果存满了集群就不能用了

  1. slave1 
  2. slave2 
  3. slave3 
  4. slave4 

将master上的/usr/hadoop-3.3.9拷贝到其他机器即可

  1. scp /usr/hadoop-3.3.0 slave1:/usr 
  2. scp /usr/hadoop-3.3.0 slave2:/usr 
  3. scp /usr/hadoop-3.3.0 slave3:/usr 
  4. scp /usr/hadoop-3.3.0 slave4:/usr 

格式化HDFS目录(在master机器)

  1. hdfs namenode-format 

启动Hadoop

在master机器上执行就可以了,执行完以后可以使用jps命令在所有机器上查看进程状态

  1. cd /usr/hadoop-3.3.0/sbin 
  2. ./start-all.sh 

查看进程状态

在master和slave上分别执行jps命令

查看是否成功

在浏览器上打开下面的网页,看能否正常访问

  1. # Hadoop集群信息 
  2. http://192.168.143.130:8088/cluster 
  3.  
  4. # HDFS地址 
  5. http://192.168.143.130:9870/dfshealth.html 
  6.  
  7. # DataNode地址 
  8. http://192.168.143.130:9864/datanode.html 
  9.  
  10. # NodeManager地址 
  11. http://192.168.143.130:8042/node 
  12.  
  13. # SecondaryNameNode 
  14. http://192.168.143.130:9868/status.html 

测试文件上传(master)

  1. hdfs dfs -mkdir /test 
  2. hdfs dfs -put start-dfs.sh /test 

HDFS操作命令

创建文件夹

  1. hdfs dfs -mkdir /myTask 

创建多层文件

  1. hdfs dfs -mkdir -p /myTask/input 

上传文件

  1. hdfs dfs -put /opt/wordcount.txt /myTask 

查看总目录下的文件和文件夹

  1. hdfs dfs -ls / 

查看myTask目录下的wordcount.txt文件内容

  1. hdfs dfs -cat /myTask/wordcount.txt 

删除文件或文件夹

  1. hdfs dfs -rm -r /myTask/wordcount.txt 

下载文件到本地

  1. hdfs dfs -get /myTask/wordcount.txt /opt 

Python操作hdfs

python操作hdfs时,如果要进行上传下载文件,必须在执行代码的机器上配置hosts文件,原因是hdfs的namenode和datanode注册后是以hostname进行记录的,如果不配置直接进行上传下载操作,那么将会采用hostname进行操作,因此需要在本机上配置hdfs集群机器IP和hostname的对应配置。例如我在本机上进行操作,必须配置如下:

  1. C:\Windows\System32\drivers\etc\hosts 
  2.  
  3. 192.168.143.130 master 
  4. 192.168.143.131 slave1 
  5. 192.168.143.132 slave2 
  6. 192.168.143.133 slave3 
  7. 192.168.143.134 slave4 

安装库

  1. pip install hdfs 

操作

连接

  1. from hdfs.client import Client 
  2. client = Client("http://192.168.143.130:9870"

创建目录

  1. client.makedirs(hdfs_path) 

删除文件

  1. client.delete(hdfs_path) 

上传文件

  1. client.download(hdfs_path, local_path) 

获取目录下文件列表

  1. client.list(hdfs_path) 

总结

HDFS 文件存储集群的优点是:配置要求低、易于扩展、效率比较高、非常适合大批量文件存储,而且可以提供 web 管理页面,提供非常好的第三方库。在进行 web 开发时,作为文件和图片存储库也是非常好的选择。

 

责任编辑:姜华 来源: 今日头条
相关推荐

2011-12-07 16:11:50

Hadoop集群搭建

2016-10-27 09:37:10

Hadoop集群配置

2010-06-03 19:02:31

Hadoop集群搭建

2010-06-04 18:17:50

Hadoop集群

2014-03-17 10:05:45

Hadoop集群

2012-11-01 17:15:04

2010-06-04 18:06:22

Hadoop集群搭建

2017-08-10 10:17:32

Hadoop分布式搭建

2016-01-07 09:36:20

Docker容器

2020-04-21 22:59:50

Redis搭建选举

2012-09-13 13:26:40

Hadoop集群

2015-05-27 10:29:41

DockerHadoopHadoop集群

2014-03-28 09:35:11

MongoDBSharding

2010-06-04 17:43:12

Hadoop集群搭建

2017-10-25 18:25:40

Hadoop伪分布式环境部署

2016-10-13 19:16:28

Python编程语言mysql

2010-05-24 14:59:29

Hadoop集群

2017-12-07 15:24:10

Hadoop大数据服务器

2017-05-11 17:36:50

2011-07-19 13:20:22

Xcode
点赞
收藏

51CTO技术栈公众号