Hadoop--HDFS集群的搭建

1 HADOOP介绍

1.1 介绍

大数据处理的技术栈

1、 HADOOP是apache旗下的一套开源软件平台

2、 HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理

3、 HADOOP的核心组件有

a) HDFS(分布式文件系统)—存储数据

b) YARN(运算资源调度系统)—分配和调度硬件资源(cpu、内存)给mapreduce

c) MAPREDUCE(分布式运算编程框架)—对存储的数据进行统计、计算 —Spark

1.2 Hdfs与Spark关系

Spark可以通过本地、standalone或者yarn运行模式计算本地文件或者内存中集合中数据。

而海量数据保存在hdfs,spark要对海量数据进行处理,就必须搭建Hdfs

1.3 Hdfs原理

Hadoop--HDFS集群的搭建_第1张图片

1.4 搭建集群前需要先安装jdk

1、删除原有jdk

在这里插入图片描述

[root@localhost jdk]# rpm -qa|grep jdk

java-1.6.0-openjdk-1.6.0.38-1.13.10.4.el6.x86_64

java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64

[root@localhost jdk]# rpm -e --nodeps java-1.6.0-openjdk-1.6.0.38-1.13.10.4.el6.x86_64

[root@localhost jdk]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64

[root@localhost jdk]# rpm -qa | grep jdk

[root@localhost jdk]# java -version

-bash: /usr/bin/java: 没有那个文件或目录

Hadoop--HDFS集群的搭建_第2张图片

2、jdk的安装

2.1 将jdk压缩包上传至服务
Hadoop--HDFS集群的搭建_第3张图片
上传成功,如图:

在这里插入图片描述
2.2 解压
在这里插入图片描述

2.3 创建安装目录
在这里插入图片描述

2.4 将解压后的目录移动到安装目录
在这里插入图片描述

2.5 配置环境变量

修改/etc/profile文件

vi /etc/profile

Hadoop--HDFS集群的搭建_第4张图片

(注意路径不要写错了,可测试下)

JAVA_HOME=/usr/local/jdk/jdk1.7.0_51
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME
export PATH
export CLASSPATH


2.6 环境变量立即生效

source /etc/profile

2.7 测试

Hadoop--HDFS集群的搭建_第5张图片

2.8 安装好jdk 就可以完整克隆出3 台虚拟机器(mini2,mini3,mini4),并做如下修改

1、 设置主机名

hostname 查看当前系统主机名
一种方法用命令直接更改
hostnamectl set-hostname  mini1 

2.关闭防火墙

1.查看防火墙状态
firewall-cmd --state

2.停止firewall
systemctl stop firewalld.service

3.禁止firewall开机启动
systemctl disable firewalld.service

3、设置时间同步

命令行输入:yum install ntp 下载ntp插件 ,
下载完成后 命令行输入:ntpdate -u ntp1.aliyun.com
然后命令行输入:date
出现当前的时间,并且四台都时间同步。

4、 修改host文件

我们希望三个主机之间都能够使用主机名称的方式相互访问而不是IP,我们需要在hosts中配置其他主机的host。

[root@node21 ~]# vi /etc/hosts
配置主机host
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.244.134   mini1
192.168.244.135   mini2
192.168.244.136   mini3
将配置发送到其他主机(同时在其他主机上配置)
[root@node21 ~]# scp -r /etc/hosts root@mini2:/etc/
[root@node21 ~]# scp -r /etc/hosts root@mini3:/etc/
[root@node21 ~]# scp -r /etc/hosts root@mini4:/etc/
然后分别执行  /bin/hostname hostsname  使之生效
测试
[root@node21 ~]# ping node21
[root@node21 ~]# ping node22
[root@node21 ~]# ping node23

再 本地映射配置 C:\Windows\System32\drivers\etc\hosts

5、配置ssh无密码访问

生成公钥密钥对
在每个节点上分别执行:
命令行输入:ssh-keygen -t rsa
一直按回车直到生成结束
然后将秘钥,分发给各个节点包括自己,这样就可以免秘钥执行自己的脚本,和登录其他的几点
[root@ mini1 ~]# ssh-copy-id mini2
[root@ mini1~]# ssh-copy-id mini3
[root@ mini1~]# ssh-copy-id mini4
[root@ mini1~]# ssh-copy-id mini1

测试 看是否成功,执行

ssh mini2
ssh mini3
ssh mini4

能够登录则说明设置成功。

2 HDFS集群安装

ü 上传HADOOP安装包到mini1

ü 规划安装目录 /root/hadoopsoft/hadoop-2.5.1

ü 解压安装包 tar zvxf hadoop-2.5.1

ü 修改配置文件 /root/hadoopsoft/hadoop-2.5.1/etc/hadoop/

hadoop-env.sh core-site.xml

hdfs-site.xml slaves

2.1 上传、解压

安装版本hadoop2.5.2

上传至mini,对其进行配置

Hadoop--HDFS集群的搭建_第6张图片

[root@mini1 hadoopsoft]# tar zxvf hadoop-2.5.1_x64.tar.gz

2.2 Hadoop-env.sh

/root/hadoopsoft/hadoop-2.5.1/etc/hadoop/ hadoop-env.sh

得到JAVA_HOME环境变量值

修改脚本中JAVA_HOME的值

[root@mini1 hadoop-2.5.1]# echo ${JAVA_HOME}

/usr/local/jdk/jdk1.7.0_51

[root@mini1 hadoop-2.5.1]# vi etc/hadoop/hadoop-env.sh

Hadoop--HDFS集群的搭建_第7张图片

2.3 core-site.xml

[root@mini1 hadoop-2.5.1]# vi etc/hadoop/core-site.xml

² 配置内容

fs.defaultFS hdfs://mini1:9000 hadoop.tmp.dir /opt/hadoop

Hadoop可以hdfs作为文件系统,还可以使用gfs、tfs、nfs以及file://本地文件系统

hdfs://mini1:9000配置声明Hadoop使用hdfs文件系统,客户端向mini1主机的9000端口获取文件

mini1是namenode节点,记录文件在各个节点保存的信息

—hdfs主节点—

fs.defaultFS

hdfs://mini1:9000

—hadoop临时文件

不需要opt目录下创建hadoop目录

格式化命令会自动在opt下创建hadoop目录

hadoop.tmp.dir

/opt/hadoop

在这里插入图片描述

2.4 hdfs-site.xml

[root@mini1 hadoop-2.5.1]# vi etc/hadoop/hdfs-site.xml

配置内容

dfs.replication 2

dfs.replication=2

客户端将文件数据保存到hdfs,如果hdfs仅仅将数据保存一份,如果保存数据的机器宕掉,那么客户端无法从hdfs获取到文件数据。

Hdfs默认replication值为3

Hadoop--HDFS集群的搭建_第8张图片

2.5 Slaves文件

Hdfs集群和yarn集群启动脚本读取都会读取slaves文件内容,启动文件中定义各个datanode节点或者nodemanager节点

[root@mini1 hadoop-2.5.1]# vi etc/hadoop/slaves
在这里插入图片描述

2.6 配置Hadoop环境变量

Hadoop命令在bin目录中,故在其他目录执行Hadoop命令,每次需要到bin目录中。

可以在环境变量文件profile中设置HADOOP_HOME环境变量,这样在不同目录下都可以执行Hadoop命令

hadoop –fs

² 给mini1设置环境变量

[root@mini1 hadoop-2.5.1]# vi /etc/profile

JAVA_HOME=/usr/local/jdk/jdk1.7.0_51HADOOP_HOME=/root/hadoopsoft/hadoop-2.5.1PATH= P A T H : PATH: PATH:JAVA_HOME/bin: H A D O O P H O M E / b i n : HADOOP_HOME/bin: HADOOPHOME/bin:HADOOP_HOME/sbinCLASSPATH=.: J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar export JAVA_HOMEexport HADOOP_HOMEexport PATHexport CLASSPATH

修改前

Hadoop--HDFS集群的搭建_第9张图片

[root@mini1 hadoop-2.5.1]# source /etc/profile

² 给mini2、mini3、mini4设置环境变量,且让环境变量生效,将环境变量文件复制到mini2/mini3/mini4

[root@mini1 hadoop-2.5.1]scp /etc/profile mini2:/etc/

2.7 其他节点配置

[root@mini1 hadoopsoft]# scp -r hadoop-2.5.1 root@mini2:/root/hadoopsoft/

[root@mini1 hadoopsoft]# scp -r hadoop-2.5.1 root@mini3:/root/hadoopsoft/

[root@mini1 hadoopsoft]# scp -r hadoop-2.5.1 root@mini4:/root/hadoopsoft/

2.8 格式化

只需要在namenode节点(即主机mini1)进行格式化处理

[root@mini1 hadoopsoft]# hadoop namenode -format
在这里插入图片描述

Hdfs格式化得到初始目录,记录分布式文件的信息

3 HDFS集群操作

3.1 启动集群

在master中通过start-dfs.sh脚本启动整个HDFS集群

[root@mini1 hadoop-2.5.1]# ./sbin/start-dfs.sh

3.2 访问****HDFS集群

如果访问失败 则需要在 mini1 上关闭防火墙

1、在root 的账号下 查看防火墙的状态

#firewall-cmd --state

若为running 则需要关闭

2、关闭防火墙

#systemctl stop firewalld.service

再查看防火墙是否关闭,若为 not running 则已经关闭

3、再访问 http://mini1:50070/

如果 用主机名 访问失败,而IP 能正常访问的 需要在 windows 下C:\Windows\System32\drivers\etc 找到host文件

添加主机名和 IP 的映射。

3.3 查看文件

hadoop fs -ls /

3.4 上传文件

3.4.1 <128M

[root@mini4 ~]# ls

anaconda-ks.cfg hadoopsoft install.log install.log.syslog temp

[root@mini4 ~]# echo abcdefg > hello.txt

[root@mini4 ~]# ls

anaconda-ks.cfg hadoopsoft hello.txt install.log install.log.syslog temp

[root@mini4 ~]# hadoop fs -put hello.txt /

在这里插入图片描述

通过本地命令查看上传hadoop的文件

[root@mini4 hadoop]# tree

.

└── dfs

​ └── data

​ ├── current

​ │ ├── BP-1470236278-192.168.136.61-1534309556569

​ │ │ ├── current

​ │ │ │ ├── finalized

​ │ │ │ │ ├── blk_1073741825 hello.txt保存找blk_1073741825块中

​ │ │ │ │ └── blk_1073741825_1001.meta

​ │ │ │ ├── rbw

​ │ │ │ └── VERSION

​ │ │ ├── dncp_block_verification.log.curr

​ │ │ ├── dncp_block_verification.log.prev

​ │ │ └── tmp

​ │ └── VERSION

​ └── in_use.lock

8 directories, 7 files

[root@mini4 hadoop]# cd dfs/data/current/BP-1470236278-192.168.136.61-1534309556569/current/finalized/

[root@mini4 finalized]# cat blk_1073741825

abcdefg

查看另外一个备份文件(mini1是namenode节点,负责管理文件的元信息,不会保存文件)

[root@mini3 hadoop]# tree

.

└── dfs

​ └── data

​ ├── current

​ │ ├── BP-1470236278-192.168.136.61-1534309556569

​ │ │ ├── current

​ │ │ │ ├── finalized

​ │ │ │ │ ├── blk_1073741825

​ │ │ │ │ └── blk_1073741825_1001.meta

​ │ │ │ ├── rbw

​ │ │ │ └── VERSION

​ │ │ ├── dncp_block_verification.log.curr

​ │ │ ├── dncp_block_verification.log.prev

​ │ │ └── tmp

​ │ └── VERSION

​ └── in_use.lock

8 directories, 7 files

[root@mini3 hadoop]# cd dfs/data/current/BP-1470236278-192.168.136.61-1534309556569/current/finalized/

[root@mini3 finalized]# cat blk_1073741825

abcdefg

3.4.2 大于128M

在mini1(namenode节点)上传

上传大于128M,观察hdfs分片

apps cenos-6.5-hadoop-2.6.4.tar.gz hdpdata hello.avi[hadoop@mini4 ~]$ hadoop fs -put cenos-6.5-hadoop-2.6.4.tar.gz /[hadoop@mini4 ~]$ hadoop fs -ls /Found 2 items-rw-r–r-- 2 hadoop supergroup 180813065 2018-06-26 02:10 /cenos-6.5-hadoop-2.6.4.tar.gz-rw-r–r-- 2 hadoop supergroup 11 2018-06-26 00:53 /hello.avi[hadoop@mini4 ~]$

实际存储路径

Hadoop--HDFS集群的搭建_第10张图片
Hadoop--HDFS集群的搭建_第11张图片

Hadoop--HDFS集群的搭建_第12张图片

合并mini1中分片数据到tmp.file中,对tmp.file进行解压操作

[hadoop@mini2 subdir0]$ cat blk_1073741826 >> tmp.file[hadoop@mini2 subdir0]$ cat blk_1073741827 >> tmp.file[hadoop@mini2 subdir0]$ tar zxvf tmp.file[hadoop@mini2 subdir0]$ ll总用量 354540-rw-rw-r–. 1 hadoop hadoop 134217728 6月 26 02:10 blk_1073741826-rw-rw-r–. 1 hadoop hadoop 1048583 6月 26 02:10 blk_1073741826_1002.meta-rw-rw-r–. 1 hadoop hadoop 46595337 6月 26 02:10 blk_1073741827-rw-rw-r–. 1 hadoop hadoop 364035 6月 26 02:10 blk_1073741827_1003.metadrwxrwxr-x. 9 hadoop hadoop 4096 3月 8 2016 hadoop-2.6.4-rw-rw-r–. 1 hadoop hadoop 180813065 6月 26 02:14 tmp.file

从hdfs中得到文件

[hadoop@mini1 ~]$ lsapps cenos-6.5-hadoop-2.6.4.tar.gz hdpdata[hadoop@mini1 ~]$ rm -f cenos-6.5-hadoop-2.6.4.tar.gz [hadoop@mini1 ~]$ lsapps hdpdata[hadoop@mini1 ~]$ hadoop fs -get /cenos-6.5-hadoop-2.6.4.tar.gz[hadoop@mini1 ~]$ lsapps cenos-6.5-hadoop-2.6.4.tar.gz hdpdata[hadoop@mini1 ~]$

4 python操作

4.1 hdfs集群设置

mini1-namenode,设置离开安装模式

[root@mini1 ~]# hadoop dfsadmin -safemode leave

4.2 hdfscli.cfg

**[global]default.alias=dev[dev.alias]url=http://mini1:50070**user=root

4.3 hdfs_test.py

#!/usr/bin/env python*# encoding: utf-8from hdfs import Config from hdfs.client import Client from hdfs.ext.dataframe import read_dataframe, write_dataframe import pandas as pd def put_to_hdfs(client,local_path,hdfs_path): client.upload(hdfs_path, local_path,cleanup=True) # *删除hdfs文件def delete_hdfs_file(client, hdfs_path): client.delete(hdfs_path)

4.4 config.py

修改源文件config.py的内容

default_path = osp.expanduser(‘hdfscli.cfg’) # default_path = osp.expanduser(’~/.hdfscli.cfg’)

Hadoop--HDFS集群的搭建_第13张图片

from hdfs.ext.dataframe import read_dataframe, write_dataframe import pandas as pd def put_to_hdfs(client,local_path,hdfs_path): client.upload(hdfs_path, local_path,cleanup=True) # 删除hdfs文件def delete_hdfs_file(client, hdfs_path): client.delete(hdfs_path)

4.4 config.py

修改源文件config.py的内容

default_path = osp.expanduser(‘hdfscli.cfg’) # default_path = osp.expanduser(’~/.hdfscli.cfg’)

Hadoop--HDFS集群的搭建_第14张图片

你可能感兴趣的:(数据分析)