Hadoop集群搭建及Python操作

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

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

环境

修改主机名

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

修改hosts文件

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

配置免密登录

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

安装JDK(每台机器)

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

配置环境变量

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

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

使环境变量生效

source /etc/profile 
  • 1.

创建目录(每天机器)

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

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

安装配置Hadoop

下载Hadoop安装包

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

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

配置Hadoop

配置文件在

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

hadoop-env.sh

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

core-site.xml

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

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

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

mapred-site.xml

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

yarn-site.xml

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

 workers

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

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

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

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

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

hdfs namenode-format 
  • 1.

启动Hadoop

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

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

查看进程状态

在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 
 
# SecondaryNameNode 
http://192.168.143.130:9868/status.html 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

测试文件上传(master)

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

HDFS操作命令

创建文件夹

hdfs dfs -mkdir /myTask 
  • 1.

创建多层文件

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

上传文件

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

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

hdfs dfs -ls / 
  • 1.

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

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

删除文件或文件夹

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

下载文件到本地

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

Python操作hdfs

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

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

安装库

pip install hdfs 
  • 1.

操作

连接

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

创建目录

client.makedirs(hdfs_path) 
  • 1.

删除文件

client.delete(hdfs_path) 
  • 1.

上传文件

client.download(hdfs_path, local_path) 
  • 1.

获取目录下文件列表

client.list(hdfs_path) 
  • 1.

总结

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

 

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

2011-12-07 16:11:50

Hadoop集群搭建

2016-10-27 09:37:10

Hadoop集群配置

2010-06-04 18:17:50

Hadoop集群

2010-06-03 19:02:31

Hadoop集群搭建

2014-03-17 10:05:45

Hadoop集群

2010-06-04 18:06:22

Hadoop集群搭建

2017-08-10 10:17:32

Hadoop分布式搭建

2012-11-01 17:15:04

2016-01-07 09:36:20

Docker容器

2020-04-21 22:59:50

Redis搭建选举

2015-05-27 10:29:41

DockerHadoopHadoop集群

2012-09-13 13:26:40

Hadoop集群

2014-03-28 09:35:11

MongoDBSharding

2010-06-04 17:43:12

Hadoop集群搭建

2016-10-13 19:16:28

Python编程语言mysql

2017-10-25 18:25:40

Hadoop伪分布式环境部署

2017-12-07 15:24:10

Hadoop大数据服务器

2017-05-11 17:36:50

2010-05-24 14:59:29

Hadoop集群

2011-07-19 13:20:22

Xcode
点赞
收藏

51CTO技术栈公众号