目录
1、本地(独立)模式——Standalone Operation
2、伪分布模式——Pseudo-Distributed Operation
3、完全分布模式——Fully-Distributed Mode
一、hadoop简介
官方网站:
Apache Hadoophttps://hadoop.apache.org/
二、hadoop的下载及安装
下载网站:
hadoop部署安装网教程:
为了方便实验,先创建一个hadoop用户,以下所有操作都在hadoop用户中实现。
1、解压
hadoop需要jdk至支持,因此需要找到合适版本的jdk。为方便起见,对这两个目录创建个软链接
[hadoop@server1 ~]$ tar zxf hadoop-3.2.1.tar.gz [hadoop@server1 ~]$ tar zxf jdk-8u181-linux-x64.tar.gz [hadoop@server1 ~]$ ln -s hadoop-3.2.1 hadoop [hadoop@server1 ~]$ ln -s jdk1.8.0_181/ java
2、配置hadoop的环境变量
#编辑hadoop用到的java环境目录 [hadoop@server1 hadoop]$ vim /home/hadoop/hadoop/etc/hadoop/hadoop-env.sh 54 export JAVA_HOME=/home/hadoop/java
3、运行hadoop
hadoop的运行命令就在刚才解压的文件中的</bin/hadoop>
[hadoop@server1 ~]$ /home/hadoop/hadoop/bin/hadoop
三、hadoop的使用模式及平台搭建
1、本地(独立)模式——Standalone Operation
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ mkdir input
[hadoop@server1 hadoop]$ cp etc/hadoop/*.xml input
#实现数据的过滤功能
[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
[hadoop@server1 hadoop]$ cat output/*
2、伪分布模式——Pseudo-Distributed Operation
(1)设置分布式的master
#设置分布式的master
[hadoop@server1 hadoop]$ vim etc/hadoop/core-site.xml
19 <configuration>
20 <property>
21 <name>fs.defaultFS</name>
22 <value>hdfs://localhost:9000</value> //设置master
23 </property>
24 </configuration>
(2)设置副本数
#设置副本数为1
[hadoop@server1 hadoop]$ vim etc/hadoop/hdfs-site.xml
18 <configuration>
19 <property>
20 <name>dfs.replication</name>
21 <value>1</value> //副本数
22 </property>
23 </configuration>
(3)对localhost实现免密访问
#添加密钥
[hadoop@server1 ~]$ ssh-keygen
[hadoop@server1 ~]$ ssh-copy-id localhost
#免密访问本机
[hadoop@server1 ~]$ ssh localhost
Last login: Fri Apr 1 10:37:14 2022
(4)对namenode实现初始化并启动dfs
[hadoop@server1 ~]$ cd hadoop
#初始化namenode
[hadoop@server1 hadoop]$ bin/hdfs namenode -format
#启动dfs
[hadoop@server1 hadoop]$ sbin/start-dfs.sh
(5)将java目录下的bin指令添加到系统环境变量
添加完成后就可以使用java的命令了
[hadoop@server1 ~]$ vim .bash_profile
[hadoop@server1 ~]$ source .bash_profile
(6)测试
伪分布式安装完成后,会在localhost上开启一个9870端口,可以通过浏览器直接访问
#创建用户目录
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user/hadoop
#上传input目录
[hadoop@server1 hadoop]$ bin/hdfs dfs -put input
上传完成后,在浏览器可以看到已经上传到分布式文件系统的文件
(7)再次测试:
执行这条命令时,它的“input”直接是从上一步中的分布式文件系统取的,而不是本地的;并且输出的“output”也是在分布式文件系统中的
#统计input中的数据量
[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount input output
8、分布式文件系统的使用
“伪分布式模式”下的数据都存放在分布式文件系统中,本地操作只是一个客户端,无论输入还是输出都在分布式文件系统,因此可能会面临查看数据,下载数据等操作。
#查看hadoop用户下的文件
[hadoop@server1 hadoop]$ bin/hdfs dfs -ls
Found 2 items
drwxr-xr-x - hadoop supergroup 0 2022-04-01 11:09 input
drwxr-xr-x - hadoop supergroup 0 2022-04-01 11:15 output
#查看output下的数据
[hadoop@server1 hadoop]$ bin/hdfs dfs -cat output/*
#下载output到本地
[hadoop@server1 hadoop]$ bin/hdfs dfs -get output
关闭“伪分布式”及重新初始化。hadoop的数据默认存储在</tmp/*>下,删除后可以重新进行初始化。
#关闭“伪分布式”
[hadoop@server1 hadoop]$ sbin/stop-dfs.sh
#初始化hadoop
[hadoop@server1 hadoop]$ rm -fr /tmp/*
3、完全分布模式——Fully-Distributed Mode
实验环境:用server1做master(NameNode节点),server2/3做worker节点(Datanode节点),server4作为测试用的扩容节点(还是weoker节点、Datanode节点)
并通过nfs网络文件系统实现数据共享,可以很方便地部署分布式节点
在server1上 [root@server1 ~]# yum install -y nfs-utils //安装nfs [root@server1 ~]# systemctl enable --now nfs //开机启动nfs [root@server1 ~]# vim /etc/exports //编辑nfs的共享目录 1 /home/hadoop *(rw,anonuid=1000,anongid=1000) [root@server1 ~]# exportfs -rv //重新载入nfs的配置 在server2/3上 [root@server2 ~]# yum install -y nfs-utils //安装nfs [root@server2 ~]# useradd hadoop //创建hadoop用户 [root@server2 ~]# mount 172.25.254.1:/home/hadoop/ /home/hadoop/ //挂载server1的网络文件系统到本地
1、master和worker节点的部署
(1)设置分布式的master(只在server1中执行)
#设置分布式的master [hadoop@server1 ~]$ cd hadoop [hadoop@server1 hadoop]$ vim etc/hadoop/core-site.xml 19 <configuration> 20 <property> 21 <name>fs.defaultFS</name> 22 <value>hdfs://172.25.254.1:9000</value> //设置master 23 </property> 24 </configuration>
(2)设置副本数(只在server1中执行)
#设置副本数为1 [hadoop@server1 ~]$ cd hadoop [hadoop@server1 hadoop]$ vim etc/hadoop/hdfs-site.xml 18 <configuration> 19 <property> 20 <name>dfs.replication</name> 21 <value>1</value> //副本数为2,设置server2/3作为worker节点 22 </property> 23 </configuration>
(3)添加workers节点(只在server1中执行)
[hadoop@server1 hadoop]$ vim etc/hadoop/wokers //添加workers节点名称 [hadoop@server1 hadoop]$ cat etc/hadoop/wokers server2 server3
(4)初始化并启动dfs(只在server1中执行)
# bin/hdfs namenode -format //初始化 # sbin/start-dfs.sh //启动dfs
(5)测试:向分布式存储创建目录并上传文件
#创建用户目录 [hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user [hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user/hadoop #在上一目录下创建input目录 [hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir input #上传文件 [hadoop@server1 hadoop]$ bin/hdfs dfs -put etc/hadoop/*.xml input //上传到input目录下 [hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+' //从input目录中过滤数据并上传到output目录下 #查看output目录下的文件 [hadoop@server1 hadoop]$ bin/hdfs dfs -cat output/*
(2)worker节点的扩容(Datanode节点的扩容)
第一步:新节点的准备工作
1 yum install -y nfs-utils //安装nfs插件
2 useradd hadoop //创建hadoop用户
3 showmount -e 172.25.254.1 //在server1中查找nfs设备
4 mount 172.25.254.1:/home/hadoop/ /home/hadoop/ //挂载nfs设备到本地
第二步:在master节点上添加新节点名称
#添加新节点名称
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ vim etc/hadoop/workers
[hadoop@server1 hadoop]$ cat etc/hadoop/workers
server2
server3
server4
第三步:在srever4上执行加入集群的命令
[hadoop@server4 ~]$ cd hadoop
[hadoop@server4 hadoop]$ bin/hdfs --daemon start datanode //加入集群并作为datanode
[hadoop@server4 hadoop]$ jps //查看java进程状态
4102 Jps
4042 DataNode
(3)yarn管理器的使用
第一步:添加mapred配置
[hadoop@server1 hadoop]$ vim etc/hadoop/mapred-site.xml
19 <configuration>
20 <property>
21 <name>mapreduce.framework.name</name>
22 <value>yarn</value>
23 </property>
24 <property>
25 <name>mapreduce.application.classpath</name>
26 <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
27 </property>
28 </configuration>
#添加hadoop环境变量(上一步中设置的变量需要全局定义)
[hadoop@server1 hadoop]$ vim etc/hadoop/hadoop-env.sh
59 export HADOOP_MAPRED_HOME=/home/hadoop/hadoop
第二步:添加yarn配置
[hadoop@server1 hadoop]$ vim etc/hadoop/yarn-site.xml
16 <configuration>
17 <property>
18 <name>yarn.nodemanager.aux-services</name>
19 <value>mapreduce_shuffle</value>
20 </property>
21 <property>
22 <name>yarn.nodemanager.env-whitelist</name>
23 <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ ,HADOOP_MAPRED_HOME</value>
24 </property>
25 </configuration>
第三步:启动yarn管理器
启动以后,会在所有的master节点启动一个<resourcemanager>管理器,简称<rm>;在所有的worker节点启动一个<nodemanagers>管理器,简称<nm>
[hadoop@server1 hadoop]$ cd etc/hadoop/
[hadoop@server1 hadoop]$ sbin/start-yarn.sh
Starting resourcemanager
Starting nodemanagers
第四步:测试
启动后yarn管理器后,会在master节点上开启一个“8088”的端口,浏览器访问界面如下。
四、hadoop高可用平台部署——hdfs的高可用
实验环境:在之前的基础上,总共准备5台虚拟机。其中server1/5作为master(也称NameNode),server2/3/4作为woker(也称DataNode)
节点准备:在master节点上停止hadoop服务,并删除所有节点上的hadoop数据。在server5上挂载server1的hadoop用户根目录。
#在server1上,停止hadoop服务 [hadoop@server1 ~]$ cd hadoop [hadoop@server1 hadoop]$ sbin/stop-all.sh #在所有节点上执行,删除之前实验数据,避免对本实验造成影响 [hadoop@server1 hadoop]$ rm -fr /tmp/* #在server5上 [root@server5 ~]# yum install -y nfs-utils [root@server5 ~]# useradd hadoop [root@server5 ~]# mount 172.25.254.1:/home/hadoop /home/hadoop [root@server5 ~]# su - hadoop
(1)安装并配置zookeeper集群
第一步:安装zookeeper-3.4.9
[hadoop@server1 ~]$ tar zxf zookeeper-3.4.9.tar.gz //解压zookeeper [hadoop@server1 ~]$ ln -s zookeeper-3.4.9 zookeeper //创建软连接 [hadoop@server1 ~]$ cd zookeeper/conf [hadoop@server1 conf]$ cp zoo_sample.cfg zoo.cfg //从模板生成主配置文件
第二步:编辑主配置文件
[hadoop@server1 ~]$ cd zookeeper/conf/ [hadoop@server1 conf]$ vim zoo.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/tmp/zookeeper //指定数据目录 clientPort=2181 server.1=172.25.254.2:2888:3888 server.2=172.25.254.3:2888:3888 server.3=172.25.254.4:2888:3888
第三步:创建数据目录并设置节点ID
#在server2/3/4上创建数据目录 [hadoop@server2 ~]$ mkdir /tmp/zookeeper #指定各节点的id号,id号和上一步的配置文件中一致 [hadoop@server2 ~]$ echo 1 > /tmp/zookeeper/myid [hadoop@server3 ~]$ echo 2 > /tmp/zookeeper/myid [hadoop@server4 ~]$ echo 3 > /tmp/zookeeper/myid
第四步:启动zookeeper服务
#在server2/3/4上分别执行启动zk服务命令 [hadoop@server4 ~]$ cd zookeeper [hadoop@server4 zookeeper]$ bin/zkServer.sh start //启动zk服务 [hadoop@server4 zookeeper]$ bin/zkServer.sh status //查看zk服务状态 [hadoop@server4 zookeeper]$ bin/zkServer.sh stop //停止zk服务
(2)更改hadoop配置
第一步:<etc/hadoop/core-site.xml>
#在server1中配置
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ vim etc/hadoop/core-site.xml
19 <configuration>
20 <property>
21 <name>fs.defaultFS</name>
22 <value>hdfs://masters</value> //这一步和以前的不一样
23 </property>
24
25 <property>
26 <name>ha.zookeeper.quorum</name>
27 <value>172.25.254.2:2181,172.25.254.3:2181,172.25.254.4:2181</value>
28 </property>
29 </configuration>
第二步: <etc/hadoop/hdfs-site.xml>
#在server1中配置
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ vim etc/hadoop/hdfs-site.xml
18 <configuration>
19 <property>
20 <name>dfs.replication</name>
21 <value>3</value>
22 </property>
23
24 <property>
25 <name>dfs.nameservices</name>
26 <value>masters</value>
27 </property>
28
29 <property>
30 <name>dfs.ha.namenodes.masters</name>
31 <value>h1,h2</value>
32 </property>
33
34 <property>
35 <name>dfs.namenode.rpc-address.masters.h1</name>
36 <value>172.25.254.1:9000</value>
37 </property>
38
39 <property>
40 <name>dfs.namenode.http-address.masters.h1</name>
41 <value>172.25.254.1:9870</value>
42 </property>
43
44 <property>
45 <name>dfs.namenode.rpc-address.masters.h2</name>
46 <value>172.25.254.5:9000</value>
47 </property>
48
49 <property>
50 <name>dfs.namenode.http-address.masters.h2</name>
51 <value>172.25.254.5:9870</value>
52 </property>
53
54 <property>
55 <name>dfs.namenode.shared.edits.dir</name>
56 <value>qjournal://172.25.254.2:8485;172.25.254.3:8485;172.25.254.4:8485/masters</value>
57 </property>
58
59 <property>
60 <name>dfs.journalnode.edits.dir</name>
61 <value>/tmp/journaldata</value>
62 </property>
63
64 <property>
65 <name>dfs.ha.automatic-failover.enabled</name>
66 <value>true</value>
67 </property>
68
69 <property>
70 <name>dfs.client.failover.proxy.provider.masters</name>
71 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
72 </value>
73 </property>
74
75 <property>
76 <name>dfs.ha.fencing.methods</name>
77 <value>
78 sshfence
79 shell(/bin/true)
80 </value>
81 </property>
82
83 <property>
84 <name>dfs.ha.fencing.ssh.private-key-files</name>
85 <value>/home/hadoop/.ssh/id_rsa</value>
86 </property>
87
88 <property>
89 <name>dfs.ha.fencing.ssh.connect-timeout</name>
90 <value>30000</value>
91 </property>
92
93 </configuration>
配置如下:
(3)启动hdfs集群(按顺序启动)
第一步:在三个DN节点上依次启动 journalnode(第一次启动 hdfs 必须先启动 journalnode)
#在所有DN节点(server2/3/4)上启动journalnode
[hadoop@server2 ~]$ cd hadoop
[hadoop@server2 hadoop]$ bin/hdfs --daemon start journalnode
第二步:格式化hdfs集群(在server1上)
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ bin/hdfs namenode -format
Namenode 数据默认存放在/tmp,需要把数据拷贝到h2(即从server1复制到server2)
[hadoop@server1 hadoop]$ scp -r /tmp/hadoop-hadoop 172.25.254.5:/tmp
第三步:格式化 zookeeper (只需在 h1 上执行即可)
[hadoop@server1 hadoop]$ bin/hdfs zkfc -formatZK
第四步:启动 hdfs 集群(只需在 h1 上执行即可)
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ sbin/start-dfs.sh
(4)测试:在浏览器访问master端
可以看到,server1为“active”是主机,server5为“standby”是备用机。
第一步:在主机master节点(server1)上传数据
#创建目录并上传数据
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user/hadoop
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir input //创建目录
[hadoop@server1 hadoop]$ bin/hdfs dfs -put etc/hadoop/*.xml input //上传数据
在浏览器中看到只有server1中有数据,standby的节点(server5)没有数据
第二步:模拟server1节点故障
结束server1中的“NameNode”进程
通过浏览器查看server5已经成为了“activate”端,数据已经从server1切换到了server5上。
第三步:server1节点恢复正常
server1节点恢复正常后,仍然只是从节点standby状态,成为了备用机。可以理解为:谁先注册zk,谁就是主master,其他节点就是备用master。
五、hadoop高可用平台部署——yarn的高可用
第一步:编辑 mapred-site.xml 文件
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ vim etc/hadoop/mapred-site.xml
19 <configuration>
20 <property>
21 <name>mapreduce.framework.name</name>
22 <value>yarn</value>
23 </property>
24 <property>
25 <name>mapreduce.application.classpath</name>
26 <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
27 </property>
28 </configuration>
第二步:编辑<etc/hadoop/yarn-site.xml>文件
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ vim etc/hadoop/yarn-site.xml
16 <configuration>
17 <property>
18 <name>yarn.nodemanager.aux-services</name>
19 <value>mapreduce_shuffle</value>
20 </property>
21 <property>
22 <name>yarn.nodemanager.env-whitelist</name>
23 <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ ,HADOOP_MAPRED_HOME</value>
24 </property>
25
26 <property>
27 <name>yarn.resourcemanager.ha.enabled</name>
28 <value>true</value>
29 </property>
30
31 <property>
32 <name>yarn.resourcemanager.cluster-id</name>
33 <value>RM_CLUSTER</value>
34 </property>
35
36 <property>
37 <name>yarn.resourcemanager.ha.rm-ids</name>
38 <value>rm1,rm2</value>
39 </property>
40
41 <property>
42 <name>yarn.resourcemanager.hostname.rm1</name>
43 <value>172.25.254.1</value>
44 </property>
45
46 <property>
47 <name>yarn.resourcemanager.hostname.rm2</name>
48 <value>172.25.254.5</value>
49 </property>
50
51 <property>
52 <name>yarn.resourcemanager.recovery.enabled</name>
53 <value>true</value>
54 </property>
55
56 <property>
57 <name>yarn.resourcemanager.store.class</name>
58 <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
59 </property>
60
61 <property>
62 <name>yarn.resourcemanager.zk-address</name>
63 <value>172.25.254.2:2181,172.25.254.3:2181,172.25.254.4:2181</value>
64 </property>
65
66
67 </configuration>
第三步:启动yarn进程
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ sbin/start-yarn.sh
第四步:查看启动结果
浏览器访问server1和server5的8088端口,看到server1是activate状态,server5是standby状态。
第五步:server1故障测试
在server1上手动结束RM进程,查看状态.server5已经成为新的activate节点,server1无法访问了。
第六步:重新在server1启动RM
[hadoop@server1 hadoop]$ bin/yarn --daemon start resourcemanager
server1在server5之后,因此只能是standby状态,只有当server5的RM也宕掉后,才会切换到server1.
六、hadoop高可用平台部署——Hbase分布式部署
第一步:hbase下载(在主master节点)
[hadoop@server1 ~]$ tar zxf hbase-1.2.4-bin.tar.gz
[hadoop@server1 ~]$ ln -s hbase-1.2.4 hbase
第二步:编辑hbase的配置文件(在主master节点)
[hadoop@server1 ~]$ cd hbase
[hadoop@server1 hbase]$ vim conf/hbase-env.sh
27 export JAVA_HOME=/home/hadoop/java
128 export HBASE_MANAGES_ZK=false
129 export HADOOP_HOME=/home/hadoop/hadoop
[hadoop@server1 ~]$ cd hbase
[hadoop@server1 hbase]$ vim conf/hbase-site.xml
23 <configuration>
24 <property>
25 <name>hbase.rootdir</name>
26 <value>hdfs://masters/hbase</value>
27 </property>
28
29 <property>
30 <name>hbase.cluster.distributed</name>
31 <value>true</value>
32 </property>
33
34 <property>
35 <name>hbase.zookeeper.quorum</name>
36 <value>172.25.254.2,172.25.254.3,172.25.254.4</value>
37 </property>
38
39 <property>
40 <name>dfs.replication</name>
41 <value>3</value>
42 </property>
43
44 <property>
45 <name>hbase.master</name>
46 <value>h1</value>
47 </property>
48 </configuration>
添加woker节点名:
[hadoop@server1 ~]$ cd hbase
[hadoop@server1 hbase]$ vim conf/regionservers
1 server2
2 server3
3 server4
第三步:启动hbase(在主master节点)
[hadoop@server1 ~]$ cd hbase
[hadoop@server1 hbase]$ bin/start-hbase.sh
启动完成后,查看java进程,会出现一个“HMaster”
第四步:添加备用机节点(在备用机节点运行)
[hadoop@server5 ~]$ cd hbase
[hadoop@server5 hbase]$ bin/hbase-daemon.sh start master
server5备用机节点hbase启动完成后,查看java进程,也是“HMaster”
第五步:查看hbase运行状态
HBase Master 默认端口时 16000,还有个 web 界面默认在 Master 的 16010 端口上,HBase RegionServers 会默认绑定 16020 端口,在端口 16030 上有一个展示信息的界面。
第六步:测试
直接进入hbase自带的shell,创建信息
[hadoop@server5 hbase]$ bin/hbase shell
然后人为使server5的HMaser服务停止,模拟故障
通过浏览器访问,在server5中创建的数据已经同步到server1中了
重新启动server5中的hbase服务
[hadoop@server5 hbase]$ bin/hbase-daemon.sh start master
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/24641.html