保姆级Hadoop集群部署

简介: 🍅程序员小王的博客:程序员小王的博客🍅 欢迎点赞 👍 收藏 ⭐留言 📝🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕

目录

一、准备三台linux并实现三台机器机器免密码登录

1、三台机器生成公钥与私钥

2、拷贝公钥到同一台机器

3、复制第一台机器的认证到其他机器

二、三台机器时钟同步

三、hadoop集群搭建

1、解压

2、修改配置文件

3、创建数据和临时文件夹

4、分发安装包到其它机器

5、在每个节点配置环境变量

6、格式化HDFS

7、启动集群

8、访问

一、准备三台linux并实现三台机器机器免密码登录

  • 为什么要免密登录
  • Hadoop 节点众多, 所以一般在主节点启动从节点, 这个时候就需要程序自动在主节点登录到从节点中, 如果不能免密就每次都要输入密码, 非常麻烦


免密 SSH 登录的原理

  1. 需要先在 B节点 配置
  2. A节点 的公钥节点 请求 B节点 要求登录
  3. B节点 使用 A节点 的公钥, 加密一段随机文本
  4. A节点 使用私钥解密, 并发回给 B节点
  5. B节点 验证文本是否正确


1、三台机器生成公钥与私钥

  • 在三台机器执行以下命令,生成公钥与私钥
ssh-keygen -t rsa

执行该命令之后,按下三个回车即可



2、拷贝公钥到同一台机器

三台机器将拷贝公钥到第一台机器


  • 三台机器执行命令:
ssh-copy-id node1


  • 如果报错及解决办法
1. /usr/bin/ssh-copy-id: ERROR: ssh: Could not resolve hostname node1: 
2. Name or service not known
  • 解决办法:在集群上的所有机器上执行vi /etc/hosts
1. 192.168.43.129 node1
2. 192.168.43.130 node2
3. 192.168.43.131 node3

3、复制第一台机器的认证到其他机器

将第一台机器的公钥拷贝到其他机器上


在第一台机器上面指向以下命令


scp /root/.ssh/authorized_keys node2:/root/.ssh
scp /root/.ssh/authorized_keys node3:/root/.ssh


二、三台机器时钟同步

为什么需要时间同步

  • 因为很多分布式系统是有状态的, 比如说存储一个数据, A节点 记录的时间是 1, B节点 记录的时间是 2, 就会出问题


## 安装
yum install -y ntp
## 启动定时任务
crontab -e

随后在输入界面键入

*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com;


三、hadoop集群搭建

image.png


怎么将ip地址设置主机名参考我的博客:http://t.csdn.cn/3wpT6


1、解压

tar xzvf hadoop-3.1.1.tar.gz
#修改名字
mv hadoop-3.1.1 hadoop

2、修改配置文件

配置文件的位置在 hadoop/etc/hadoop

core-site.xmlll  

     

<configuration>
    <property>
                <name>fs.defaultFS</name>
                <value>hdfs://node1:8020</value>
        </property>
        <!-- 临时文件存储目录 -->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/usr/apps/hadoop/tmp</value>
        </property>
    <!--  缓冲区大小,实际工作中根据服务器性能动态调整 -->
        <property>
                <name>io.file.buffer.size</name>
                <value>8192</value>
        </property>
    <!--  开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟 -->
        <property>
                <name>fs.trash.interval</name>
                <value>10080</value>
        </property>
</configuration>


  • hadoop-env.sh[2]
1. #java,自己的java地址
2. export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64/

hdfs-site.xml

<configuration>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:///usr/apps/hadoop/datas/datanode/datanodeDatas</value>
        </property>
        <property>
                <name>dfs.blocksize</name>
                <value>134217728</value>
        </property>
        <property>
                <name>dfs.namenode.handler.count</name>
                <value>10</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:///usr/apps/hadoop/datas/datanode/datanodeDatas</value>
        </property>
        <property>
                <name>dfs.namenode.http-address</name>
                <value>node1:50070</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <property>
                <name>dfs.permissions.enabled</name>
                <value>false</value>
        </property>
        <property>
                <name>dfs.namenode.checkpoint.edits.dir</name>
                <value>file:///usr/apps/hadoop/datas/dfs/nn/snn/edits</value>
        </property>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>node1.hadoop.com:50090</value>
        </property>
        <property>
                <name>dfs.namenode.edits.dir</name>
                <value>file:///usr/apps/hadoop/datas/dfs/nn/edits</value>
        </property>
        <property>
                <name>dfs.namenode.checkpoint.dir</name>
                <value>file:///usr/apps/hadoop/datas/dfs/snn/name</value>
        </property>
</configuration>


mapred-site.xml

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.map.memory.mb</name>
                <value>1024</value>
        </property>
        <property>
                <name>mapreduce.map.java.opts</name>
                <value>-Xmx512M</value>
        </property>
        <property>
                <name>mapreduce.reduce.memory.mb</name>
                <value>1024</value>
        </property>
        <property>
                <name>mapreduce.reduce.java.opts</name>
                <value>-Xmx512M</value>
        </property>
        <property>
                <name>mapreduce.task.io.sort.mb</name>
                <value>256</value>
        </property>
        <property>
                <name>mapreduce.task.io.sort.factor</name>
                <value>100</value>
        </property>
        <property>
                <name>mapreduce.reduce.shuffle.parallelcopies</name>
                <value>25</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>node1.hadoop.com:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>node1.hadoop.com:19888</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.intermediate-done-dir</name>
                <value>/usr/apps/hadoop/datas/jobhsitory/intermediateDoneDatas</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.done-dir</name>
                <value>/usr/apps/hadoop/datas/jobhsitory/DoneDatas</value>
        </property>
        <property>
          <name>yarn.app.mapreduce.am.env</name>
          <value>HADOOP_MAPRED_HOME=/usr/apps/hadoop</value>
        </property>
        <property>
          <name>mapreduce.map.env</name>
          <value>HADOOP_MAPRED_HOME=/usr/apps/hadoop/</value>
        </property>
        <property>
          <name>mapreduce.reduce.env</name>
          <value>HADOOP_MAPRED_HOME=/usr/apps/hadoop</value>
        </property>
</configuration>


yarn-site.xml

<configuration>
  <property>
    <name>dfs.namenode.handler.count</name>
    <value>100</value>
  </property>
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.resourcemanager.address</name>
    <value>node1:8032</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>node1:8030</value>
  </property>
  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>node1:8031</value>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>node1:8033</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>node1:8088</value>
  </property>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>node1</value>
  </property>
  <property>
    <name>yarn.scheduler.minimum-allocation-mb</name>
    <value>1024</value>
  </property>
  <property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>2048</value>
  </property>
  <property>
    <name>yarn.nodemanager.vmem-pmem-ratio</name>
    <value>2.1</value>
  </property>
  <!-- 设置不检查虚拟内存的值,不然内存不够会报错 -->
  <property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
  </property>
  <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>1024</value>
  </property>
  <property>
    <name>yarn.nodemanager.resource.detect-hardware-capabilities</name>
    <value>true</value>
  </property>
  <property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>file:///usr/apps/hadoop/datas/nodemanage/nodemanagerLogs</value>
  </property>
  <property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>file:///usr/apps/hadoop/datas/nodemanage/nodemanagerLogs</value>
  </property>
  <property>
    <name>yarn.nodemanager.log.retain-seconds</name>
    <value>10800</value>
  </property>
  <property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/usr/apps/hadoop/datas/remoteAppLog/remoteAppLogs</value>
  </property>
  <property>
    <name>yarn.nodemanager.remote-app-log-dir-suffix</name>
    <value>logs</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>18144000</value>
  </property>
  <property>
    <name>yarn.log-aggregation.retain-check-interval-seconds</name>
    <value>86400</value>
  </property>
  <!-- yarn上面运行一个任务,最少需要1.5G内存,虚拟机没有这么大的内存就调小这个值,不然会报错 -->
  <property>
        <name>yarn.app.mapreduce.am.resource.mb</name>
        <value>1024</value>
  </property>
</configuration>

worker

node1
node2
node3


3、创建数据和临时文件夹

mkdir -p /usr/apps/hadoop/datas/tmp
mkdir -p /usr/apps/hadoop/datas/dfs/nn/snn/edits
mkdir -p /usr/apps/hadoop/datas/namenode/namenodedatas
mkdir -p /usr/apps/hadoop/datas/datanode/datanodeDatas
mkdir -p /usr/apps/hadoop/datas/dfs/nn/edits
mkdir -p /usr/apps/hadoop/datas/dfs/snn/name
mkdir -p /usr/apps/hadoop/datas/jobhsitory/intermediateDoneDatas
mkdir -p /usr/apps/hadoop/datas/jobhsitory/DoneDatas
mkdir -p /usr/apps/hadoop/datas/nodemanager/nodemanagerDatas
mkdir -p /usr/apps/hadoop/datas/nodemanager/nodemanagerLogs
mkdir -p /usr/apps/hadoop/datas/remoteAppLog/remoteAppLogs

4、分发安装包到其它机器

 scp -r /usr/apps/hadoop node2:/usr/apps/hadoop
 scp -r /usr/apps/hadoop node3:/usr/apps/hadoop

5、在每个节点配置环境变量

vi /etc/profile

#hadoop
export HADOOP_HOME=/usr/apps/hadoop/
export PATH=:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

6、格式化HDFS

为什么要格式化HDFS


HDFS需要一个格式化的过程来创建存放元数据(image, editlog)的目录


bin/hdfs namenode -format

7、启动集群

# 会登录进所有的worker启动相关进行, 也可以手动进行, 但是没必要
/usr/apps/hadoop/sbin/start-dfs.sh 
/usr/apps/hadoop/sbin/start-yarn.sh mapred --daemon start historyserver

8、访问

此时便可以通过如下三个URL访问Hadoop了


HDFS: http://192.168.43.129:50070/dfshealth.html#tab-startup-progress


Yarn: http://192.168.43.129:8088/cluster



报错:设置hadoop-env.sh


export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"


相关文章
|
6月前
|
分布式计算 Hadoop Java
Hadoop分布式集群部署
Hadoop分布式集群部署
62 0
|
11月前
|
存储 分布式计算 资源调度
Hadoop集群部署和启动与关闭
Hadoop集群部署和启动与关闭
|
存储 分布式计算 资源调度
吐血整理的Hadoop最全开发指南【完全分布式集群部署篇】(开发重点)(下)
吐血整理的Hadoop最全开发指南【完全分布式集群部署篇】(开发重点)(下)
154 0
|
分布式计算 资源调度 安全
吐血整理的Hadoop最全开发指南【完全分布式集群部署篇】(开发重点)(上)
吐血整理的Hadoop最全开发指南【完全分布式集群部署篇】(开发重点)
462 0
|
分布式计算 资源调度 Hadoop
Hadoop运行模式(二)、SSH无密登录配置、生成公钥和私钥、集群配置、集群部署规划、默认配置文件、核心配置文件、HDFS配置文件、YARN配置文件、MapReduce配置文件、在集群上分发配置好的
ssh文件夹下(~/.ssh)的文件功能解释、ssh连接时出现Host key verification failed的解决方法、免密登录原理、将公钥拷贝到要免密登录的目标机器上、NameNode和SecondaryNameNode不要安装在同一台服务器、ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上、Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值、.
384 1
Hadoop运行模式(二)、SSH无密登录配置、生成公钥和私钥、集群配置、集群部署规划、默认配置文件、核心配置文件、HDFS配置文件、YARN配置文件、MapReduce配置文件、在集群上分发配置好的
|
消息中间件 分布式计算 资源调度
hadoop集群部署(yarn)
伴随着各大互联网公司开源自己的大数据框架,大数据处理领域的框架已经比较完善。到现在所谓大数据的框架已经用过habase(后来换成了elasticsearch)、zookeeper、kafka、storm,根据项目计划,接下来还要使用spark。
436 0
|
分布式计算 资源调度 Hadoop
Hadoop集群部署实战
Hadoop 集群搭建 目录 集群简介 服务器准备 环境和服务器设置 JDK环境安装 Hadoop安装部署 启动集群 测试 集群简介 在进行集群搭建前,我们需要大概知道搭建的集群都是些啥玩意。
1921 1
|
分布式计算 资源调度 Hadoop
Hadoop集群部署实战
Hadoop 集群搭建 目录 集群简介 服务器准备 环境和服务器设置 JDK环境安装 Hadoop安装部署 启动集群 测试 集群简介 在进行集群搭建前,我们需要大概知道搭建的集群都是些啥玩意。
1862 0
|
存储 分布式计算 Hadoop
hadoop-2.7.7 HA完全分布式集群部署详解
Hadoop NameNode官方开始支持HA集群默认是从2.0开始,之前的版本均是不支持NameNode HA的高可用的。
3300 1