首页 > 其他分享 >Hadoop集群搭建

Hadoop集群搭建

时间:2024-01-16 16:35:01浏览次数:34  
标签:opt hadoop module Hadoop 集群 yarn 3.1 master 搭建

Hadoop集群搭建

1、服务器配置

服务器名称 配置
master 2C 2G
slave1 2C 2G
slave2 1C 2G

1.1 修改主机名

#Centos永久修改主机名命令
hostnamectl set-hostname master

1.2 主机映射

vim /etc/hosts

#需要设置的服务器:ip为内网,其他服务器:ip为外网
172.16.0.3 master master
1.94.5.165 slave1 slave1
123.249.87.176 slave2 slave2

测试是否能ping通

若ping不同,根据文档云服务器 实例 IP 地址 ping 不通-故障处理-文档中心-腾讯云 (tencent.com)进行故障排查

若想自己的电脑上通过主机名的方式访问服务器,需要修改本地的 “C:\Windows\System32\drivers\etc\hosts” 文件,将主机名和IP填入(全都是公网IP)

# 修改hosts文件
117.72.37.12	master
1.94.5.165		slave1
123.249.87.176	slave2

然后打开命令行,执行ipconfig /flushdns命令刷新DNS缓存

1.3 SSH免密登录

先创建hadoop用户

# 创建hadoop用户
sudo useradd hadoop
# 设置密码
sudo passwd hadoop      # zxyjw1314
# 添加hadoop用户到Hadoop组中
sudo usermod -a -G Hadoop hadoop

chmod u+w /etc/sudoers
vim /etc/sudoers
添加hadoop=(ALL)ALL

再设置免密登录

#生成公钥和私钥
ssh-keygen -t rsa

#将公钥复制到要免密登录的服务器上:ssh-copy-id 服务器名
#如要在master上免密登录slave1
ssh-copy-id slave1

1.4 安装Java和Hadoop

将jdk和hadoop压缩包通过xftp传输到服务器

# 在/opt下新建module和software文件夹
sudo mkdir /opt/module
sudo mkdir /opt/software

# 解压缩
tar -zxvf jdk-8u381-linux-x64.tar.gz -C /opt/module/
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

#配置环境变量
cd /etc/profile.d/
sudo vim my_env.sh

# my_env.sh
# JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_381
export PATH=$PATH:$JAVA_HOME/bin
# HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

source /etc/profile

1.5 scp和rsync命令

1.5.1 scp(secure copy)安全拷贝

  1. scp定义

    scp可以实现服务器与服务器之间的数据拷贝

  2. 基本语法

    scp   -r   $pdir/$fname         $user@host:$pdir/$fname
    命令   递归  要拷贝的文件路径/名称   目的地用户@主机:目的地路径/名称
    
  3. 案例

    前提:在master、slave1、slave2上都已经创建好了/opt/module和/opt/software两个目录,并且把这两个目录修改为hadoop:hadoop

    sudo chown hadoop:hadoop -R /opt/module
    
    • 在master上,将master中/opt/module/jdk_1.8.0_381目录拷贝到slave1上

      scp -r /opt/module/jdk1.8.0_381 hadoop@slave1:/opt/module/
      

1.5.2 rsync远程同步工具

rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

rsync和scp区别:用rsync做文件的复制要比scp速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

  1. 基本语法

    rsync  -av      $pdir/$fname         $user@host:$pdir/$fname
    命令    选项参数  要拷贝的文件路径/名称   目的地用户@主机:目的地路径/名称
    
    选项参数说明
    -a   归档拷贝
    -v   显示复制过程
    
  2. 案例

    • 删除master中/opt/module/hadoop-3.1.3/wcinput

      rm -rf wcinput/
      
    • 同步master中的/opt/module/hadoop-3.1.3到slave1

      rsync -av hadoop-3.1.3/ hadoop@slave1:/opt/module/hadoop-3.1.3/
      

1.5.3 xsync集群分发脚本

  1. 需求:循环复制文件到所有节点的相同目录下

  2. 需求分析:

    1. rsync命令原始拷贝

      rsync -av /opt/module  hadoop@slave1:/opt/
      
    2. 期望脚本

      xsync fname(要同步的文件名称)

    3. 期望脚本在任何路径都能使用(把脚本放在声明了全局环境变量的路径 /home/hadoop/bin)

  3. 脚本实现

    1. 在/home/hadoop/bin目录下创建xsync文件

      cd /home/hadoop
      mkdir bin
      cd bin
      vim xsync
      
      # 在xsync文件中编写代码
      # !/bin/bash
      
      #1. 判断参数个数
      if [ $# -lt 1 ]
      then
          echo Not Enough Arguenment!
          exit
      fi
      
      #2. 遍历集群所有机器
      for host in master slave1 slave2
      do
          echo ============  $host  ============
          #3. 遍历所有目录,逐一发送
      
          for file in $@
          do
              #4. 判断文件是否存在
              if [ -e $file ]
                  then
                      #5. 获取父目录
                      pdir=$(cd -P $(dirname $file); pwd)
      
                      #6. 获取当前文件的名称
                      fname=$(basename $file)
                      ssh $host "mkdir -p $pdir"
                      rsync -av $pdir/$fname $host:$pdir
                  else
                      echo $file does not exists!
              fi
          done
      done
      
    2. 修改脚本xsync具有执行权限

      chmod 777 xsync
      

2、集群配置

2.1 集群部署规划

  • NameNode和SecondaryNameNode不要安装再同一台服务器
  • ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在一台服务器
Master Slave1 Slave2
HDFS NameNode
DataNode
DataNode SecondaryNameNode
DataNode
YARN NodeManager ResourceManager
NodeManager
NodeManager

2.2 配置文件

  1. core-site.xml

    <configuration>
    	<!-- 指定NameNode的地址 -->
    	<property>
    		<name>fs.defaultFS</name>
    		<value>hdfs://cloud1:8020</value>
    	</property>
    	<!-- 指定hadoop数据的存储目录 -->
    	<property>
    		<name>hadoop.tmp.dir</name>
    		<value>/opt/module/hadoop-3.1.3/data</value>
    	</property>
    	<!-- 配置HDFS网页登录使用的静态用户为hadoop -->
        <property>
            <name>hadoop.http.staticuser.user</name>
            <value>hadoop</value>
        </property>
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/var/log/hadoop/tmp</value>
        </property>
    </configuration>
    
  2. hdfs-site.xml

    <configuration>
    	<!-- nn web端访问地址 -->
    	<property>
    		<name>dfs.namenode.http-address</name>
    		<value>cloud1:9870</value>
    	</property>
    	<!-- 2nn web端访问地址 -->
    	<property>
    		<name>dfs.namenode.secondary.http-address</name>
    		<value>cloud3:9868</value>
    	</property>
    	
    	<property> 
    		<name>dfs.namenode.name.dir</name>
    		<value>/opt/module/hadoop-3.1.3/hdfs/name</value>
            <final>true</final>
        </property> 
        <property> 
        	<name>dfs.datanode.data.dir</name> 
        	<value>/opt/module/hadoop-3.1.3/hdfs/data</value> 
        	<final>true</final>
        </property> 
        <property> 
        	<name>dfs.http.address</name>
        	<value>cloud1:50070</value>
        </property>
        <property>
        	<name>dfs.permissions</name>
        	<value>false</value>
        </property>
    </configuration>
    
  3. yarn-site.xml

    <configuration>
    	<!-- 指定MR走shuffle -->
    	<property>
    		<name>yarn.nodemanager.aux-services</name>
    		<value>mapreduce_shuffle</value>
    	</property>
    	<!-- 指定ResourceManager的地址 -->
    	<property>
    		<name>yarn.resourcemanager.hostname</name>
    		<value>cloud2</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>
    </configuration>
    
  4. mapred-site.xml

    <configuration>
    	<!-- 指定MapReduce程序运行在Yarn上 -->
    	<property>
    		<name>mapreduce.framework.name</name>
    		<value>yarn</value>
    	</property>
    	<!-- 历史服务器端地址 -->
        <property>
            <name>mapreduce.jobhistory.address</name>
            <value>cloud1:10020</value>
        </property>
    
        <!-- 历史服务器web端地址 -->
        <property>
            <name>mapreduce.jobhistory.webapp.address</name>
            <value>cloud1:19888</value>
        </property>
    
    	<property>
        	<name>yarn.app.mapreduce.am.env</name>
        	<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
    	</property>
    	<property>
        	<name>mapreduce.map.env</name>
        	<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
    	</property>
    	<property>
        	<name>mapreduce.reduce.env</name>
        	<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
    	</property>
    </configuration>
    

    在/opt/module/hadoop-3.1.3/etc目录下执行 xsync hadoop/ 命令,将配置文件分发到另外两个服务器

内存配置调优

  1. yarn-site.xml

    <!-- yarn-site.xml -->
    
    <!-- ResourceManager配置 -->
    
    <!-- 设置NodeManager的最大内存,单位为MB,根据实际情况调整 -->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>2048</value> 
    </property>
    
    
     <!-- 设置每个容器的最小内存,单位为MB -->
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
    </property>
    
    
    <!-- 设置每个容器的最大内存,单位为MB,根据实际情况调整 -->
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>2048</value> 
    </property>
    
  2. mapred-site.xml

    <!-- mapred-site.xml -->
    
    <!-- MapReduce任务运行时的内存配置 -->
    <!-- 设置Map任务的内存,单位为MB -->
    <property>
        <name>mapreduce.map.memory.mb</name>
        <value>512</value>
    </property>
    
    <!-- 设置Reduce任务的内存,单位为MB -->
    <property>
        <name>mapreduce.reduce.memory.mb</name>
        <value>1024</value>
    </property> 
    

2.3 群起集群

配置worker

# 在/opt/module/hadoop-3.1.3/etc/hadoop目录下
vim workers

# 在文件中增加以下内容
master
slave1
slave2

# 注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行

# 同步所有节点配置文件
xsync workers

启动集群

  1. 如果集群是第一次启动,需要在master节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到以往数据。如果集群在运行过程中报错,需要重新格式话NameNode的话,一定要先停止NameNode和DataNode进程,并且要删除所有机器上的data和logs目录,然后再进行格式化。

    rm -rf data/ logs/

    hdfs namenode -format

  2. 启动HDFS

    sbin/start-dfs.sh

  3. 在配置了ResourceManager的节点(slave1)启动YARN

    sbin/start-yarn.sh

  4. Web端查看HDFS的NameNode

  5. Web端查看YARN的ResourceManager

配置历史服务器

  1. 配置mapred-site.xml

    <!-- 历史服务器端地址 -->
    <property>
    	<name>mapreduce.jobhistory.address</name>
    	<value>master:10020</value>
    </property>
    
    <!-- 历史服务器web端地址 -->
    <property>
    	<name>mapreduce.jobhistory.webapp.address</name>
    	<value>master:19888</value>
    </property>
    
  2. 启动历史服务器

    bin/mapred --daemon start historyserver

配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到JHDFS系统上。

开启日志聚集功能需要重新启动NodeManager、ResourceManager和HistoryServer。

  1. 配置yarn-site.xml

    # 在该文件里增加如下配置
    <!-- 开启日志聚集功能 -->
    <property>
    	<name>yarn.log-aggregation-enable</name>
    	<value>true</value>
    </property>
    
    <!-- 设置日志聚集服务器地址 -->
    <property>
    	<name>yarn.log.server.url</name>
    	<value>http://cloud1:19888/jobhistory/logs</value>
    </property>
    
    <!-- 设置日志保存时间为7天 -->
    <property>
    	<name>yarn.log-aggregation.retain-seconds</name>
    	<value>604800</value>
    </property>
    
    # 分发节点
    xsync yarn-site.xml
    
  2. 重启YARN

2.4 集群启动和关闭

集群启停脚本/home/hadoop/bin目录下,myhadoop.sh

#!/bin/bash

if [ $# -lt 1 ]
then
	echo "No Args Input..."
	exit;
fi

case $1 in
"start")
		echo " ========== 启动 hadoop集群 ========== "
		
		echo " -------- 启动 hdfs -------- "
		ssh master "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
		echo " -------- 启动 yarn -------- "
		ssh slave1 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
		echo " -------- 启动 historyserver -------- "
		ssh master "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
		echo " ========== 关闭 hadoop集群 ========== "
		echo " -------- 关闭 historyserver -------- "
		ssh master "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
		echo " -------- 关闭 yarn -------- "
		ssh slave1 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
		echo " -------- 关闭 hdfs -------- "
		ssh master "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
	echo "Input Args Error..."
;;
esac

查看三台服务器Java进程脚本:jpsall

#!/bin/bash

for host in master slave1 slave2
do
		echo ========== $host ==========
		ssh $host jps
done

保存后退出,然后赋予脚本执行权限

chmod +x jpsall

2.5 集群启动过程中遇到的问题

2.5.1 端口号被占用

  1. 报错日志

    # 报错日志
    ERROR org.apache.hadoop.yarn.server.nodemanager.NodeManager: Error starting NodeManager
    org.apache.hadoop.yarn.exceptions.YarnRuntimeException: java.net.BindException: Problem binding to [0.0.0.0:8040] java.net.BindException: Address already in use; For more details see:  http://wiki.apache.org/hadoop/BindException
    
  2. 解决方案

    # 1.首先查询被占用端口号
    netstat -anp | grep 8040
    
    tcp        0      0 192.168.0.104:8088      0.0.0.0:*               LISTEN      13425/java
    
    # 2.然后查看进程的具体信息
    ps -ef | grep 13425
    
    # 3.杀死进程
    kill 13425
    

3、WC程序运行

# 在hdfs创建input文件夹
hadoop fs -mkdir /input

# 将本地文件拷贝到hdfs
hadoop fs -put word.txt /input

标签:opt,hadoop,module,Hadoop,集群,yarn,3.1,master,搭建
From: https://www.cnblogs.com/coke0914/p/17967972

相关文章

  • nginx如何搭建集群
    搭建Nginx集群的主要目的是为了提高网站的可用性、负载均衡以及处理高并发请求。以下是一个简化的步骤,说明如何搭建一个基本的Nginx服务集群:基本Nginx集群搭建步骤:硬件与环境准备:准备多台服务器(例如,server1, server2,...),确保它们都安装了Linux或类Unix操作系统。保证所有服务器......
  • java调用jmeter集群服务压力测试 jmeter数据库压测
    目录〇、前言。一、jmeter工具安装。二、数据库驱动插件jar包安装。三、脚本开发与调试。四、加压设置。五、数据监听。  正文〇、前言。依据云栖大会项目部分数据库压测经验编写。一、jmeter工具安装。1、Apache官网下载地址:https://jmeter.apache.org/download_j......
  • Linux篇---ftp服务器的搭建
    一、前述企业中linux搭建ftp服务器还是很实用的,所以本文针对centoos7和centoos6搭建服务器教程做个总结。二、具体1、显示如下图则表示已安装vsftp软件。如果未显示则需要安装vsftpd软件。如果没有则通过yarm源进行安装yuminstall-yvsftpd2、安装完成之后进入到ftp的......
  • vue入门页面,搭建localhost官方默认页面
    按照提示操作可以做出下图效果:idea中的vue目录层级为:1.下载node.js(nodes.js是前端的运行环境,类似于后端中的jdk,没有node.js后续操作无法进行,具体流程百度)2.新建文件夹(这个文件夹就是你之后vue的目录)点进去新建的文件夹3.输入cmd回车4.输入命令:npmconfigsetreistryht......
  • Hadoop集群常用组件的命令
    1.Hadoop(1).HDFS:启动HDFS:start-dfs.sh关闭HDFS:stop-dfs.sh格式化NameNode:hdfsnamenode-format查看文件系统状态:hdfsdfsadmin-report创建目录:hdfsdfs-mkdir/path/to/directory上传本地文件到HDFS:hdfsdfs-put/path/to/local/file/path/to/hdfs/directory下载HDFS文件......
  • TTS-Text-to-speech-服务docker搭建-转化文本内容为语音
    title:TTS(Text-to-speech)服务docker搭建转化文本内容为语音tags:[TTS,docker,语音,AI,docker-compose]新版原文:https://query.carlzeng.top:3/appsearch?q=TTS版权声明:本博客所有文章除特别声明外,均采用BY-NC-SA许可协议。转载请注明出处!date:2024-01-0715:12:46......
  • 【开源项目推荐】——纯中文本地GPT知识库搭建项目.assets
    大家好,我是独孤风。又到了本周的开源项目推荐。近一年多的时间,人工智能迎来了大爆发。GPT相关的大模型的发展让很多领域都发生了巨大的变化。但是虽然GPT的自然语言识别功能异常的强大,但回答给我们的知识内容并不尽如人意。那么,有没有可以在本地部署搭建的AI知识库项目呢?今天为......
  • nodeJS搭建简单socket测试
    背景:有个小伙伴使用vue连不上公司的socket,但又要想做连接测试。网上搜索,安装node环境,其实就是下载个安装包:https://nodejs.org/en/download,安装成功后,配置一下环境变量,配置后win+R,输入cmd打开命令框,输入node-v,可以正常输出node的版本号,说明node安装完成。然后就是如何创建一个n......
  • 接口自动化框架是如何搭建的?
    1框架文件架构2优势:(1)     采用的yaml作为测试用例,对测试用例做了非常严格的规范,name,request(method,url),validator,(2)     支持多种请求方式和传参方式  Get:params,Post:表单和json传参,也支持文件上传,同时包括内置MD5,Base64,签名和加密算法(3)     支持轻量......
  • 你们公司没有通用的接口自动化框架吗,为什么还要你来搭建这套框架?
    因为公司每个项目组业务都比较复杂,每个项目组的需求都不一样,所以需要做自动化项目组需要自己搭建自动化框架,这样更符合项目的业务场景,使用起来更加高效你主要负责哪部分框架搭建,你们是怎么合作?      我主要负责requests的统一请求封装以及接口关联,以及规范yaml用例和日志......