ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

大数据系列——Hadoop部署及应用

2022-03-20 15:04:46  阅读:278  来源: 互联网

标签:bin yarn 系列 部署 Hadoop dfs hadoop usr proc


Hadoop有三种部署方式,分别为单机模式、伪集群模式、集群模式。

其中单机模式比较简单,自行查找;伪集群模式和集群模式基本一样,区别就是前者都在一台电脑上,后者在不同的电脑上。

下面以生产环境一般用的集群方式部署为例说明,按最小要求3台节点来介绍集群部署方式。本样例是在3台虚拟机下部署的,每个节点安装Centos7核心版(不带GUI)

3台机器分别规划如下:

hdp1:10.10.10.110

hdp2:10.10.10.112

hdp3:10.10.10.113

下面从如下几个方面介绍下其部署及应用:

相关配置

安装

固定配置

分发程序

启动

查看状态

基本操作

相关配置

挂载windows目录、 IP配置、hosts名称配置、关闭防火墙、SSH配置, 需要3台电脑网络互通且能相互SSH登录,

具体操作参见:

Linux系列——挂载Windows虚拟文件夹到Linux系统

Linux系列——配置SSH免密登录

Linux系列——常规基础操作

安装

先在其中任意一台上面安装。

1、需要先搭建好Zookeeper集群

   具体参见:大数据系列——ZooKeeper部署及应用

2、下载hadoop,直接解压就可以用(注意不是源码包)。例如:hadoop-3.3.1.tar.gz

下载地址

https://archive.apache.org/dist/hadoop/common/

3、解压到目标目录

$ cp /mnt/hdfs/vf/hadoopSetup/hadoop-3.3.1.tar /usr/proc/hadoop 从挂载目录将安装文件拷贝到目标路径

$ cd /usr/proc/hadoop  这里切换到zk安装目录(每台机器都要新建该目录,配好一台后后面两台直接用scp命令分发,具体路径可以自定义,推荐放在/usr下)

$ tar -zxvf hadoop-3.3.1.tar (解压后记着删除压缩文件)

固定配置

分别修改下列配置文件:位于/usr/proc/hadoop/hadoop-3.3.1/etc下

1hadoop-env.sh

export JAVA_HOME=/usr/local/jdk/jdk1.8.0_191

export HDFS_NAMENODE_USER=root

export HDFS_DATANODE_USER=root

export HDFS_JOURNALNODE_USER=root

export HDFS_ZKFCNODE_USER=root

export HDFS_SECONDARYNAMENODE_USER=root

export YARN_RESOURCEMANAGER_USER=root

export YARN_NODEMANAGER_USER=root

其中用户可以新建一个专有用户例如:hadoop, 本例统一管理都用root用户了。

2core-site.xml

<configuration>

 <property>

 <!-- 指定namenode的hdfs协议文件系统的通信地址 -->

 <name>fs.defaultFS</name>

 <value>hdfs://cluster007</value>

 </property>

 <property>

 <!-- 指定hadoop集群存储临时文件的目录 -->

 <name>hadoop.tmp.dir</name>

 <value>/usr/proc/hadoop/tmpdata</value>

 </property>

 <property>

 <!-- ZooKeeper集群的地址 -->

 <name>ha.zookeeper.quorum</name>

 <value>hdp1:2181,hdp2:2181,hdp3:2181</value>

 </property>

 <property>

 <!-- ZKFC连接到ZooKeeper超时时长 -->

 <name>ha.zookeeper.session-timeout.ms</name>

 <value>10000</value>

 </property>

</configuration>

3hdfs-site.xml

<configuration>

 <property>

 <!-- 指定HDFS副本的数量 -->

 <name>dfs.replication</name>

 <value>3</value>

 </property>

 <property>

 <!-- namenode节点数据(即元数据)的存放位置,可以指定多个目录实现容错,多个目录用逗号分隔 -->

 <name>dfs.namenode.name.dir</name>

 <value>/usr/proc/hadoop/namenode/data</value>

 </property>

 <property>

 <!-- datanode节点数据(即数据块)的存放位置 -->

 <name>dfs.datanode.data.dir</name>

 <value>/usr/proc/hadoop/datanode/data</value>

 </property>

 <property>

 <!-- 集群服务的逻辑名称 -->

 <name>dfs.nameservices</name>

 <value>cluster007</value>

 </property>

 <property>

 <!-- NameNode ID列表-->

 <name>dfs.ha.namenodes.cluster007</name>

 <value>nn1,nn2</value>

 </property>

 <property>

 <!-- nn1的RPC通信地址 -->

 <name>dfs.namenode.rpc-address.cluster007.nn1</name>

 <value>hdp1:8020</value>

 </property>

 <property>

 <!-- nn2的RPC通信地址 -->

 <name>dfs.namenode.rpc-address.cluster007.nn2</name>

 <value>hdp2:8020</value>

 </property>

 <property>

 <!-- nn1的http通信地址 -->

 <name>dfs.namenode.http-address.cluster007.nn1</name>

 <value>hdp1:50070</value>

 </property>

 <property>

 <!-- nn2的http通信地址 -->

 <name>dfs.namenode.http-address.cluster007.nn2</name>

 <value>hdp2:50070</value>

 </property>

 <property>

 <!-- NameNode元数据在JournalNode上的共享存储目录 -->

 <name>dfs.namenode.shared.edits.dir</name>

 <value>qjournal://hdp1:8485;hdp2:8485;hdp3:8485/cluster007</value>

 </property>

 <property>

 <!-- Journal Edit Files的存储目录 -->

 <name>dfs.journalnode.edits.dir</name>

 <value>/usr/proc/hadoop/journalnode/data</value>

 </property>

 <property>

 <!-- 配置隔离机制,确保在任何给定时间只有一个NameNode处于活动状态 -->

 <name>dfs.ha.fencing.methods</name>

 <value>sshfence</value>

 </property>

 <property>

 <!-- 使用sshfence机制时需要ssh免密登录 -->

 <name>dfs.ha.fencing.ssh.private-key-files</name>

 <value>/root/.ssh/id_rsa</value>

 </property>

 <property>

 <!-- SSH超时时间 -->

 <name>dfs.ha.fencing.ssh.connect-timeout</name>

 <value>30000</value>

 </property>

 <property>

 <!-- 访问代理类,用于确定当前处于Active状态的NameNode -->

 <name>dfs.client.failover.proxy.provider.cluster007</name>

 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

 </property>

 <property>

 <!-- 开启故障自动转移 -->

 <name>dfs.ha.automatic-failover.enabled</name>

 <value>true</value>

 </property>

</configuration>

4 mapred-site.xml

<configuration>

 <property>

 <!--指定mapreduce作业运行在yarn上-->

 <name>mapreduce.framework.name</name>

 <value>yarn</value>

 </property>

</configuration>

5 yarn-site.xml

<configuration>

 <property>

 <!--配置NodeManager上运行的附属服务。需要配置成mapreduce_shuffle后才可以在Yarn上运行MapReduce程序。-->

 <name>yarn.nodemanager.aux-services</name>

 <value>mapreduce_shuffle</value>

 </property>

 <property>

 <!-- 是否启用日志聚合(可选) -->

 <name>yarn.log-aggregation-enable</name>

 <value>true</value>

 </property>

 <property>

 <!-- 聚合日志的保存时间(可选) -->

 <name>yarn.log-aggregation.retain-seconds</name>

 <value>86400</value>

 </property>

 <property>

 <!-- 启用RM HA -->

 <name>yarn.resourcemanager.ha.enabled</name>

 <value>true</value>

 </property>

 <property>

 <!-- RM集群标识 -->

 <name>yarn.resourcemanager.cluster-id</name>

 <value>yarn-cluster007</value>

 </property>

 <property>

 <!-- RM的逻辑ID列表 -->

 <name>yarn.resourcemanager.ha.rm-ids</name>

 <value>rm1,rm2</value>

 </property>

 <property>

 <!-- RM1的服务地址 -->

 <name>yarn.resourcemanager.hostname.rm1</name>

 <value>hdp2</value>

 </property>

 <property>

 <!-- RM2的服务地址 -->

 <name>yarn.resourcemanager.hostname.rm2</name>

 <value>hdp3</value>

 </property>

 <property>

 <!-- RM1 Web应用程序的地址 -->

 <name>yarn.resourcemanager.webapp.address.rm1</name>

 <value>hdp2:8088</value>

 </property>

 <property>

 <!-- RM2 Web应用程序的地址 -->

 <name>yarn.resourcemanager.webapp.address.rm2</name>

 <value>hdp3:8088</value>

 </property>

 <property>

 <!-- ZooKeeper集群的地址 -->

 <name>yarn.resourcemanager.zk-address</name>

 <value>hdp1:2181,hdp2:2181,hdp3:2181</value>

 </property>

 <property>

 <!-- 启用自动恢复 -->

 <name>yarn.resourcemanager.recovery.enabled</name>

 <value>true</value>

 </property>

 <property>

 <!-- 用于进行持久化存储的类 -->

 <name>yarn.resourcemanager.store.class</name>

 <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>

 </property>

</configuration>

6 workers(之前版本是slaves,注意查看)

hdp1

hdp2

hdp3

分发程序(有点慢约10分钟,等待完成停止不动后,回车)

scp -r /usr/proc/hadoop  root@hdp2:/usr/proc/hadoop  分发到hdp2

scp -r /usr/proc/hadoop  root@hdp3:/usr/proc/hadoop  分发到hdp3

启动

1、分别启动3台机器上的ZooKeeper进程

$ cd /usr/proc/zk/apache-zookeeper-3.5.9-bin/ 切换到进程目录

$ ./zkServer.sh start

2、分别启动3台机器上的Journalnode进程,(注意进程路径是sbin

$ cd /usr/proc/hadoop/hadoop-3.3.1/sbin 切换到进程目录

$ ./hadoop-daemon.sh start journalnode

3、初始化NameNode(Active状态)(注意进程路径是bin

      然后将格式化后的元数据目录(dfs.namenode.name.dir约定目录)复制到另外一台namenode(Standby)上(scp xxx xxx)

$ cd /usr/proc/hadoop/hadoop-3.3.1/bin 切换到进程目录

$ hdfs namenode -format

scp -r /usr/proc/hadoop/namenode/data

 root@hdp2:/usr/proc/hadoop/namenode/data 分发到hdp2

4、初始化HA在任意一台namenode上,推荐在Active上做(注意进程路径是bin

$ cd /usr/proc/hadoop/hadoop-3.3.1/bin 切换到进程目录

$ hdfs zkfc -formatZK

5、启动HDFS (所有namenodedatanode都会启动,注意进程路径是sbin

$ cd /usr/proc/hadoop/hadoop-3.3.1/sbin 切换到进程目录

$ ./start-dfs.sh

6、启动Yarn(所有RMNodeM都会启动,注意进程路径是sbin

$ cd /usr/proc/hadoop/hadoop-3.3.1/sbin 切换到进程目录

$ ./start-yarn.sh

查看状态

1Zookeeper状态:

在3台机器都正确启动ZooKeeper进程后,进行查看状态,

$ cd /usr/proc/zk/apache-zookeeper-3.5.9-bin/ 切换到进程目录

$ ./zkServer.sh status

3台机器的状态,其中有一台是:leader,另外2台是:follower

2、执行JPS查看各进程状态

hdp1:

NameNode

DataNode

Journalnode

ZKFC

ResourceManager(Active)

hdp2:

SecondaryNameNode

DataNode

Journalnode

ZKFC

NodeManager

hdp3:

ResourceManager(Standby)

DataNode

Journalnode

NodeManager

3、查看Web UI

 HDFS:见hdfs-site.xml配置

dfs.namenode.http-address.cluster007.nn1

Yarn:见yarn-site.xml配置

yarn.resourcemanager.webapp.address.rm1

基本操作

分别启停Hdfs

bin/hadoop-daemon.sh start/stop

namenode/datanode/secondarynamenode

分别启停Yarn

bin/yarn-daemon.sh start/stop resourcemanager/nodemanager

集群整体启停Hdfs

bin/start-dfs.sh / stop-dfs.sh

集群整体启停Yarn

bin/start-yarn.sh / stop-yarn.sh

查看当前目录

bin/hadoop dfs -ls /

查看hdfs中的目录,例如:/user/proc/xx目录下的文件

bin/hadoop fs -lsr /user/proc/xx

创建目录,例如:/user/proc/tmp

bin/hadoop fs -mkdir /user/proc/tmp

递归创建多层文件夹输入, 例如:/usr/proc/a/b/c/file1.txt

bin/hadoop fs -mkdir -p /usr/proc/a/b/c/file1.txt

重命名目录,例如:tmp重命名tmp1

bin/hadoop dfs -mv /user/proc/tmp  /user/proc/tmp1

删除文件,例如:/user/proc/tmp/fileX

bin/hadoop fs -rm /user/proc/tmp/fileX

删除目录下所有文件,例如:/user/proc/tmp

bin/hadoop fs -rmr /user/proc/tmp

上传文件,例如:上传file1文件到newTmp目录

bin/hadoop fs –put /usr/proc/tmp/file1 /usr/proc/newTmp/

下载文件,例如:下载file1到tmp目录

bin/hadoop fs –get /usr/proc/newTmp/file1  /usr/proc/tmp

将指定目录下的所有内容merge成一个新文件,下载到本地

bin/hadoop dfs -getmerge /usr/proc  /usr/home/newfile

查看文件,例如:/usr/proc/tmp/file1

bin/hadoop fs –cat /usr/proc/tmp/file1

将目录拷贝到本地

bin/hadoop dfs -copyToLocal /home localdir

查看dfs的情况

bin/hadoop dfsadmin -report

标签:bin,yarn,系列,部署,Hadoop,dfs,hadoop,usr,proc
来源: https://blog.csdn.net/mql007007/article/details/123613232

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有