伪分布式模式介绍
1.特点
- 在⼀台机器上安装,使⽤的是分布式思想,即分布式⽂件系统,⾮本地⽂件系统。
- Hdfs涉及到的相关守护进程(namenode,datanode,secondarynamenode)都运⾏在⼀台机器上,都是独⽴的java进程。
2. ⽤途
⽐Standalone mode 多了代码调试功能,允许检查内存使⽤情况,HDFS输⼊输出,以及其他的守护进程交互
伪分布式搭建环境准备
- 总纲
1. 确保防⽕墙是关闭状态。
2. 确保NAT模式和静态IP的确定 (192.168.10.101)
3. 确保/etc/hosts⽂件⾥, ip和hostname的映射关系
4. 确保免密登陆localhost有效
5. jdk和hadoop的环境变量配置
- 防⽕墙关闭确认
[root@qianfeng01 ~]# systemctl stop firewalld
[root@qianfeng01 ~]# systemctl disable firewalld.service
[root@qianfeng01 ~]# systemctl stop NetworkManager
[root@qianfeng01 ~]# systemctl disable NetworkManager
#最好也把selinux关闭掉,这是linux系统的⼀个安全机制,进⼊⽂件中将SELINUX设置为disabled
[root@qianfeng01 ~]# vi /etc/selinux/config
.........
SELINUX=disabled
.........
- 配置/etc/hosts⽂件
-- 进⼊hosts⽂件,配置⼀下ip和hostname
[root@qianfeng01 ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4
localhost4.localdomain4
::1 localhost localhost.localdomain localhost6
localhost6.localdomain6
192.168.10.101 qianfeng01 <====添加本机的静态IP和本机的主机名之间的映射关系
- 确保ssh对localhost的免密登陆认证有效
# 1. 使⽤rsa加密技术,⽣成公钥和私钥。⼀路回⻋即可
[root@qianfeng01 ~]# ssh-keygen -t rsa
# 2. 进⼊~/.ssh⽬录下,使⽤ssh-copy-id命令
[root@qianfeng01 .ssh]# ssh-copy-id root@localhost
# 3. 进⾏验证,去掉第⼀次的询问(yes/no)
[hadoop@qianfeng01 .ssh]# ssh localhost
- 安装Jdk和Hadoop,配置相关环境变量
-1. 上传和解压两个软件包
[root@qianfeng01 ~]# tar -zxvf jdk-8u221-linux-x64.tar.gz -C /usr/local/
[root@qianfeng01 ~]# tar -zxvf hadoop-2.7.6.tar.gz -C /usr/local/
-2. 进⼊local⾥,给两个软件更名
[root@qianfeng01 ~]# cd /usr/local/
[root@qianfeng01 local]# mv 1.8.0_221/ jdk
[root@qianfeng01 local]# mv hadoop-2.7.6/ hadoop
-3. 配置环境变量
[hadoop@qianfeng01 local]# vi /etc/profile
.....省略...........
#java environment
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
#hadoop environment
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
伪分布式相关⽂件配置
- core-site.xml的配置
[root@qianfeng01 ~]# cd $HADOOP_HOME/etc/hadoop
[root@qianfeng01 hadoop]# vi core-site.xml
<configuration>
<!-- 配置分布式⽂件系统的schema和ip以及port,默认8020-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:8020/</value>
</property>
</configuration>
扩展: hadoop1.x的默认端⼝是9000,hadoop2.x的默认端⼝是8020,使⽤哪⼀个都可以
- hdfs-site.xml的配置
root@qianfeng01 hadoop]# vi hdfs-site.xml
<configuration>
<!-- 配置副本数,注意,伪分布模式只能是1。-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
- hadoop-env.sh的配置:指定jdk的环境
[root@qianfeng01 hadoop]# vi hadoop-env.sh
................
# The java implementation to use.
export JAVA_HOME=/usr/local/jdk
..................
格式化NameNode
- 格式化命令
[root@qianfeng01 hadoop]# hdfs namenode -format
- 格式化的⽇志解读
启动HDFS
- 启动伪分布式
[root@qianfeng01 hadoop]# start-dfs.sh
- 启动滚动信息说明
- jps命令查看守护进程
从上图我们可以看到,启动脚本会开启分布式⽂件系统上的相关进程:
namenode
datanode
secondarynamenode
WebUI查看
可以在浏览器上输⼊:192.168.10.101:50070 来查看⼀下伪分布式集群的信息
--1. 浏览⼀下⻚⾯上提示的ClusterID,BlockPoolID
--2. 查看⼀下活跃节点(Live Nodes)的个数,应该是1个
Compiled:编译 hadoop是由kshvachk⼯具集成的
Cluster ID:集群id
Block Pool ID:datanode节点的block池的id,每个datanode节点的都要⼀样
程序案例演示:wordcount程序
- 准备要统计的两个⽂件,存储到/root/data/下
--1. 创建data⽬录
[root@qianfeng01 hadoop]# mkdir ~/data
--2. 将以下两个⽂件上传到data⽬录下
- poetry1.txt
- poetry2.txt
- 在hdfs上创建存储⽬录
[root@qianfeng01 hadoop]# hdfs dfs -mkdir /input
- 将本地⽂件系统上的上传到hdfs上,并在web上查看⼀下
[root@qianfeng01 hadoop]$ hdfs dfs -put ~/data/poetry* /input/
- 运⾏⾃带的单词统计程序wordcount
[root@qianfeng01 hadoop]# cd $HADOOP_HOME
[root@qianfeng01 hadoop]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount /input /out
5.查看webui
6.查看part-r-00000⽂件
[root@qianfeng01 hadoop]# hdfs dfs -cat /out/part-r-00000