天天看点

华为云Centos7搭建hadoop集群三:jdk,hadoop安装

华为云Centos7搭建hadoop集群三:jdk,hadoop安装

使用hadoop用户,在/opt下面创建module文件夹,并将权限赋值给hadoop用户

–如果使用root用户 直接创建即可

sudo chown hadoop:hadoop module/

第一个用户是属主信息,第二个用户是属组信息

华为云Centos7搭建hadoop集群三:jdk,hadoop安装

将jdk,hadoop上传到云服务器后,解压到指定文件夹

sudo tar -zxvf /data/jdk-8u212-linux-x64.tar.gz -C /opt/module/

sudo tar -zxvf /data/hadoop-3.1.3.tar.gz -C /opt/module/

华为云Centos7搭建hadoop集群三:jdk,hadoop安装

配置环境变量,新建环境变量文件配设置hadoop与jdk目录,配置后记得source生效,java与hadoop验证版本

sudo vi /etc/profile.d/my_env.sh 每个节点都配置

source /etc/profile

java -version

hadoop version

华为云Centos7搭建hadoop集群三:jdk,hadoop安装

另外两个节点创建/opt/module 目录

将jdk与hadoop分发到另外两台节点

华为云Centos7搭建hadoop集群三:jdk,hadoop安装

安装hadoop,进入hadoop文件夹

我配置的是高可用的namenode,节点选择hadoop01.hadoop02

高可用的resourcemanager,节点选择hadoop01,hadoop02

yarn历史服务器,节点选择hadoop03

因为配置高可用,所以需要先安装zookeeper,节点三台全部安装

先将zookeeper上传解压到/opt/module/并重命名

tar -zxvf /data/apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/

mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7

在zk目录下新建data文件夹

mkdir data

进入zk的conf目录

将zoo_sample.cfg 为 zoo.cfg

修改zoo.cfg配置文件,将dataDir修改为创建的data文件夹,增加zk的server信息

server分别为服务器编号,服务器节点,内部与leader通信端口,选举leader端口,zk对外的连接端口为2181

华为云Centos7搭建hadoop集群三:jdk,hadoop安装

进入zk的data目录下,新建一个myid文件,配置与server对应的节点编号对应,如hadoop01,就配置1来对应Server.1

华为云Centos7搭建hadoop集群三:jdk,hadoop安装

将zk从01分到到02,03节点,过程省略,并且要记得修改另外两台节点的myid信息,因为同步的数据myid为1可以使用vi,或者

使用echo 2 > myid ,这里的 > 表示覆盖写入的意思,03节点对应echo 3 > myid

华为云Centos7搭建hadoop集群三:jdk,hadoop安装

配置完毕后,可以启动三台的zk节点,并检查,可以将zk环境变量配置到/etc/profile.d/my_env.sh中,,方便使用

可以看到启动后检查状态02是leader,01是follower,没问题

华为云Centos7搭建hadoop集群三:jdk,hadoop安装

zk配置完毕后,配置hadoop

首先进入hadoop目录

增加java环境变量的配置

cd /opt/module/hadoop-3.1.3/etc/hadoop

vi hadoop-env.sh

华为云Centos7搭建hadoop集群三:jdk,hadoop安装

配置集群的节点

vi workers

hadoop01

hadoop02

hadoop03

华为云Centos7搭建hadoop集群三:jdk,hadoop安装

配置文件信息

配置core-site.xml文件
<!-- 指定集群名称 -->
<property>
	<name>fs.defaultFS</name>
	<value>hdfs://mycluster</value>
</property>
<!-- 指定 hadoop 运行时产生文件的存储目录 -->
<property>
	<name>hadoop.tmp.dir</name>
	<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 指定zk集群连接信息名称 -->
<property>
	<name>ha.zookeeper.quorum</name>
	<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<!-- 指定hadoop用户可以访问hdfs的节点  proxyuser后的hadoop指的是用户-->
<property>
	<name>hadoop.proxyuser.hadoop.hosts</name>
	<value>*</value>
</property>
<!-- 指定hadoop用户可以访问hdfs的节点的所属组  proxyuser后的hadoop指的是用户-->
<property>
	<name>hadoop.proxyuser.hadoop.groups</name>
	<value>*</value>
</property>
配置hdfs-site.xml文件,下面关于yarn部分配置不要照搬,已经声明
<!-- namenode存放数据的位置 hadoop.tmp.dir在core-site.xml中已经配置-->
<property>
	<name>dfs.namenode.name.dir</name>
	<value>file://${hadoop.tmp.dir}/name</value>
</property>
<!-- datanode存放数据的位置-->
<property>
	<name>dfs.datanode.data.dir</name>
	<value>file://${hadoop.tmp.dir}/data</value>
</property>
<!-- journalnode存放数据的位置-->
<property>
	<name>dfs.journalnode.edits.dir</name>
	<value>${hadoop.tmp.dir}/jn</value>
</property>
<!-- 完全分布式集群名称 -->
<property>
	<name>dfs.nameservices</name>
	<value>mycluster</value>
</property>
<!-- 集群中 NameNode 节点都有哪些 -->
<property>
	<name>dfs.ha.namenodes.mycluster</name>
	<value>nn1,nn2</value>
</property>
<!-- nn1 的 RPC 通信地址 -->
<property>
	<name>dfs.namenode.rpc-address.mycluster.nn1</name>
	<value>hadoop01:8020</value>
</property>
<!-- nn2 的 RPC 通信地址 -->
<property>
	<name>dfs.namenode.rpc-address.mycluster.nn2</name>
	<value>hadoop02:8020</value>
</property>
<!-- nn1 的 http 通信地址 -->
<property>
	<name>dfs.namenode.http-address.mycluster.nn1</name>
	<value>hadoop01:9870</value>
</property>
<!-- nn2 的 http 通信地址 -->
<property>
	<name>dfs.namenode.http-address.mycluster.nn2</name>
	<value>hadoop02:9870</value>
</property>
<!-- 指定 NameNode 元数据在 JournalNode 上的存放位置 -->
<property>
	<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/mycluster</value>
</property>
<!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
<property>
	<name>dfs.ha.fencing.methods</name>
	<value>sshfence</value>
</property>
<!-- 使用隔离机制时需要 ssh 无秘钥登录,这里的hadoop指的是用户-->
<property>
	<name>dfs.ha.fencing.ssh.private-key-files</name>
	<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 访问代理类:client,mycluster,active 配置失败自动切换实现方式-->
<property>
	<name>dfs.client.failover.proxy.provider.mycluster</name>
	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
	<name>dfs.ha.automatic-failover.enabled</name>
	<value>true</value>
</property>
配置yarn-site.xml
<!--shuffle方式-->
<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>
<!--启用 resourcemanager ha-->
<property>
	<name>yarn.resourcemanager.ha.enabled</name>
	<value>true</value>
</property>
<!--声明两台 resourcemanager 的地址-->
<property>
	<name>yarn.resourcemanager.cluster-id</name>
	<value>cluster-yarn1</value>
</property>
<property>
	<name>yarn.resourcemanager.ha.rm-ids</name>
	<value>rm1,rm2</value>
</property>
<!--指定rm1的主机名-->
<property>
	<name>yarn.resourcemanager.hostname.rm1</name>
	<value>hadoop01</value>
</property>
<!--指定rm1的web地址-->
<property>
	<name>yarn.resourcemanager.webapp.address.rm1</name>
	<value>hadoop01:8088</value>
</property>
<!--指定rm1的内部通信地址-->
<property>
	<name>yarn.resourcemanager.address.rm1</name>
	<value>hadoop01:8032</value>
</property>
<!--指定nm向rm1汇报的地址-->
<property>
	<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
	<value>hadoop01:8031</value>
</property>
<!--指定am向rm1申请资源的地址-->
<property>
	<name>yarn.resourcemanager.scheduler.address.rm1</name>
	<value>hadoop01:8030</value>
</property>
<!--指定rm1的主机名-->
<property>
	<name>yarn.resourcemanager.hostname.rm2</name>
	<value>hadoop02</value>
</property>
<!--指定rm2的web地址-->
<property>
	<name>yarn.resourcemanager.webapp.address.rm2</name>
	<value>hadoop02:8088</value>
</property>
<!--指定rm2的内部通信地址-->
<property>
	<name>yarn.resourcemanager.address.rm2</name>
	<value>hadoop02:8032</value>
</property>
<!--指定nm向rm2汇报的地址-->
<property>
	<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
	<value>hadoop02:8031</value>
</property>
<!--指定am向rm2申请资源的地址-->
<property>
	<name>yarn.resourcemanager.scheduler.address.rm2</name>
	<value>hadoop02:8030</value>
</property>
<!--指定 zookeeper 集群的地址-->
<property>
	<name>yarn.resourcemanager.zk-address</name>
	<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<!--启用自动恢复-->
<property>
	<name>yarn.resourcemanager.recovery.enabled</name>
	<value>true</value>
</property>
<!--指定 resourcemanager 的状态信息存储在 zookeeper 集群-->
<property>
	<name>yarn.resourcemanager.store.class</name>
	<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!--环境变量继承-->
<property>
	<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是 true ,使用虚拟机推荐关闭-->
<property>
	<name>yarn.nodemanager.pmem-check-enabled</name>
	<value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是 true,使用虚拟机推荐关闭 -->
<property>
	<name>yarn.nodemanager.vmem-check-enabled</name>
	<value>false</value>
</property>
<!--下面的配置根据资源不同,不推荐直接照搬,是之前我虚拟机的配置,云服务的配置还没修改好-->
<!--设置节点可用的物理内存大小 对应真实内存*虚拟内存比-->
<property>
	<name>yarn.nodemanager.resource.memory-mb</name>
	<value>6144</value>
</property>
<!--设置节点可用的core大小 对应真实core*虚拟核比-->
<property>
	<name>yarn.nodemanager.resource.cpu-vcores</name>
	<value>4</value>
</property>
<!--设置节点申请资源最小的MB-->
<property>
	<name>yarn.scheduler.minimum-allocation-mb</name>
	<value>1024</value>
</property>
<!--设置节点申请资源最小的核数-->
<property>
	<name>yarn.scheduler.minimum-allocation-vcores</name>
	<value>1</value>
</property>
<!--设置节点申请资源最大的MB-->
<property>
	<name>yarn.scheduler.maximum-allocation-mb</name>
	<value>5120</value>
</property>
<!--设置节点申请资源最大的核数-->
<property>
	<name>yarn.scheduler.maximum-allocation-vcores</name>
	<value>2</value>
</property>
<!--设置节点的虚拟内存比例-->
<property>
	<name>yarn.nodemanager.vmem-pmem-ratio</name>
	<value>2</value>
</property>
<!--设置节点的虚拟core比例-->
<!--设置节点的规整化因子-->
<property>
	<name>yarn.scheduler.increment-allocation-mb</name>
	<value>1024</value>
</property>
配置mapred-site.xml
<!--history 内部通信端口-->
<property>
	<name>mapreduce.jobhistory.address</name>
	<value>hadoop03:10020</value>
</property>
<!--history 外部查看服务端口-->
<property>
	<name>mapreduce.jobhistory.webapp.address</name>
	<value>hadoop03:19888</value>
</property>
           

重新分发hadoop

华为云Centos7搭建hadoop集群三:jdk,hadoop安装

文件配置完毕,需要检查:

hadoop jdk zk环境变量是否配置,三台都需要配置

一定要检查是否已经分发了hadoop jdk 看下另外两台的hdfs-site.xml中是否有内容

zk的myid是否已经修改 hadoop文件是否已经分发

启动hadoop集群

初始化hadoop,先确保三台zk服务都已经启动,检查zk状态

zkServer.sh status

1.启动三台节点的journalnode----三台需要全部启动,一定要先启动journalnode

hdfs --daemon start journalnode

2.在其中一台namenode上执行初始化,我选择01节点启动,初始化操作只需要做一次,如果在01初始化,不要在02重新执行这条命令

hdfs namenode -format

3.在01格式化集群后,在01节点启动namenode,启动是在02同步数据前执行的

hdfs --daemon start namenode

4.在02节点,同步01的集群信息,如果设置多个namenode,要多个都同步并启动

hdfs namenode -bootstrapStandby

5.在02节点同步后,启动02节点的namenode

hdfs --daemon start namenode

6.在01,02节点都启动后,初始化zkfc并启动zkfc,我选择01初始化zkfc,初始化zkfc命令只需要执行一次,不要重复执行

hdfs zkfc -formatZK

7.在01,02上启动zkfc服务

hdfs --daemon start zkfc

8.启动三台的datanode

hdfs --daemon start datanode

9.在01节点启动yarn服务

start-yarn.sh

10.如果忘记同步或配置文件错误,可以将hadoop文件夹下data和logs目录删除,重新执行,如果有异常可以根据提示处理,如提示/tmp文件等,可以直接清理掉

11.上面测试完成后,先停止yarn,后停止hdfs,最后停止zk

12.启动顺序相反,先启动zk,再启动hdfs,最后启动yarn和yarn历史服务器

一些常用的命令

Hadoop 命令

hadoop fs

命令驼峰命名,首字母小写

文件上传

-copyFromLocal

复制上传

-moveFromLocal

剪切上传,本地文件清除

-put

复制上传

-put 上传文件 路径或新文件名称

-appendToFile

将文件追加到存在的文件末尾

文件下载

-copyToLocal

复制下载 下载文件/文件夹 路径或新文件/文件夹名称,

-moveToLocal

剪切下载

-get

等同copyToLocal

文件查看

-cat

查看文件内容

-ls

查看目录下文件列表

-tail

查看文件末尾1KB数据

-count

统计文件个数

HDFS内数据移动创建删除

-mv

将数据移动到指定路径

-cp

将数据复制到指定路径

-mkdir

创建文件夹

-rm

-rm -r

删除文件或文件夹或递归删除

-du

统计文件夹大小,-s -h

-s表示整个文件夹,没有-s表示统计文件夹下单独文件大小

-setrep

设置文件的副本数

如果设置副本数大于datanode节点数不生效,等到节点数等于副本数才会够

-chmod

设置权限

-chown

设置用户组

hdfs haadmin 高可用的一些设置

hdfs haadmin -getServiceState nn1

获取节点的状态

–transitionToActive

将节点转为active状态

–transitionToStandby

将节点转为standby状态

验证服务进程

华为云Centos7搭建hadoop集群三:jdk,hadoop安装
华为云Centos7搭建hadoop集群三:jdk,hadoop安装
华为云Centos7搭建hadoop集群三:jdk,hadoop安装

将02的namenode停止,看下hadoop01状态,并启动02节点的namenode

华为云Centos7搭建hadoop集群三:jdk,hadoop安装

重启02namenode后

华为云Centos7搭建hadoop集群三:jdk,hadoop安装

继续阅读