• 环境准备(安装Linux系统和相关配置)
  1. 通过VMware创建Linux系统
    1. 略.
  2. 避免出现网络不通,在集群内部关闭防火墙。
  1. systemctl stop firewalld
  2. systemctl disable firewalld
  1. Linux有一个安全模块:SELinux,用以限制用户和程序的相关权限,来确保系统的安全稳定。我们需关闭SELinux功能,避免导致后面的软件运行出现问题
  1. vi /etc/sysconfig/selinux

  1. # 将第七行,SELINUX=enforcing 改为
  2. SELINUX=disabled
  3. # 保存退出后,重启虚拟机即可,千万要注意disabled单词不要写错,不然无法启动系统
  1. 更改用户名
  1. hostnamectl set-hostname node1
    1. 配置网卡信息
      1. 进入目录
  1. vi /etc/sysconfig/network-scripts/ifcfg-ens33
      1. 添加静态IP地址、网关
  1. BOOTPROTO=static       //修改:将dhcp修改为static,修改后为BOOTPROTO=static
  2. ONBOOT=yes               //修改为yes, 网卡开机自启动
  3. IPADDR=xxx.xxx.xxx.xxx    //新增:配置静态IP地址,按需配置
  4. NETMASK=255.xxx.xxx.xxx   //新增:配置子网掩码
  5. GATEWAY=xxx.xxx.xxx.xxx   //新增:配置网关
  6. DNS=xxx.xxx.xxx.xxx        //新增:配置DNS
      1. 重启网卡
  1. service network restart     //重启网卡
      1. 验证是否成功(查看IP)
  1. ip addr
  1. 设置hadoop用户
  1. useradd hadoop      //创建hadoop用户
  2. passwd hadoop       //设置hadoop用户密码为123456
  1. 配置JDK环境
    1. 创建文件夹,用来部署JDK,将JDK和hadoop等都安装部署到:/export/server
  1. mkdir -p /export/server
    1. 解压缩JDK安装文件
  1. tar -zxvf jdk-xxxx-linux-x64.tar.gz -C /export/server
    1. 配置JDK的软链接
  1. In -s /export/server/jdkxxxx/export/server/jdk
    1. 配置JAVA_HOME环境变量,以及将$JAVA_HOME/bin文件夹加入PATH环境变量中
  1. Vi /etc/profile

  1. # 编辑/etc/profile文件,在末尾添加下文
  2. # java
  3. export JAVA_HOME=/export/server/jdk
  4. export PATH=$PATH:SJAVA_HOME/bin
    1. 生效环境变量
  1. source /etc/profile
    1. 验证是否成功
  1. java -version
  2. javac -version
  1. 使用VMware提供的克隆功能,创建node2、node3
      1. 虚拟机右键管理>克隆
  2. 开启node2、node3,对node2、node3进行基础配置
    1. 执行步骤2.对虚拟机进行改名
    2. 执行步骤2.1.2对虚拟机进行修改IP地址
  3. 配置用户ssh免密连接
    1. 编辑3台虚拟机的/etc/hosts文件
  1. //原有内容下换行添加下面的内容
  2. xxx.xxx.xxx.xx1 node1
  3. xxx.xxx.xxx.xx2 node2
  4. xxx.xxx.xxx.xx3 node3
    1. 配置各节点间root用户的无密钥ssh登陆
      1. 每个节点输入下面的命令并一直回车
  1. ssh-keygen -t rsa
      1. 执行下面的命令
  1. ssh-copy-id node1
  2. ssh-copy-id node2
  3. ssh-copy-id node3
    1. 配置各节点间hadoop用户的无密钥ssh登陆
      1. 切换到hadoop用户
  1. su hadoop
      1. 每个节点输入下面的命令并一直回车
  1. ssh-keygen -t rsa
      1. 执行下面的命令
  1. ssh-copy-id node1
  2. ssh-copy-id node2
  3. ssh-copy-id node3

注:为防止出错,建议理由VMware创建快照功能,如果出现错误的时候,可以一键回到此 时间点。

节点

CPU

内存

node1

1核心

4GB

node2

1核心

2GB

node3

1核心

2GB

  • 部署HDFS

节点

服务

node1

NameNode、DataNode、SecondaryNameNode

node2

DataNode

node3

DataNode

  1. 上传Hadoop安装包到node1节点中
    1.  解压缩安装包到/export/server/中
  1. tar -zxvf hadoop-xxx.tar.gz -C /export/server
    1. 构建软链接
  1. cd /export/server
  2. ln -s /export/server/hadoop-3.3.4 hadoop
    1. 进入hadoop安装包内
  1. cd hadoop
  1. 修改配置文件,应用自定义设置
    1. 配置workers文件
  1. # 进入配置文件目录
  2. cd etc/hadoop
  3. # 编辑workers文件
  4. Vi workers
  5. # 填入如下内容
  6. node1
  7. node2
  8. node3
    1. 配置hadoop-env.sh文件
  1. # 填入如下内容
  2. export JAVA_HOME=/export/server/jdk  # 定义jdk环境
  3. export HADOOP_HOME=/export/server/hadoop  # 定义hadoop安装位置
  4. export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop  # 定义hadoop配置文件位置
  5. export HADOOP_LOG_DIR=$HADOOP_HOME/logs  # 定义日志文件存放位置,若空需自己创建
  6. export HDFS_NAMENODE_USER=hadoop  #定义namenode启动用户
  7. export HDFS_DATANODE_USER=hadoop  #定义datanode启动用户
  8. export HDFS_SECONDARYNAMENODE_USER=hadoop  #定义辅助节点SecondaryNameNode启动用户
  1. 配置core-site.xml文件
  1. 在文件内部填入如下内容
  2. <configuration>
  3.   <property>
  4.     <name>fs.defaultFS</name>
  5.     <value>hdfs://node1:8020</value>
  6.   </property>
  7. <property>
  8.   <name>hadoop.tmp.dir</name>
  9.   <value>${HADOOP_PATH}/tmp</value>
  10. </property>
  11.   <property>
  12.     <name>io.file.buffer.size</name>
  13.     <value>131072</value>
  14.   </property>
  15. </configuration>

  1. key:fs.defaultFS
  2. 含义:HDFS文件系统的网络通讯路径
  3. 值:hdfs://node1:8020
  4. 协议为hdfs://
  5. namenode为node1
  6. namenode通讯端口为8020
  7. key:io.file.buffer.size
  8. 含义:io操作文件缓冲区大小
  9. 值:131072 bit //默认为4096bit(4K)
  10. hdfs://node1:8020为整个HDFS内部的通讯地址,应用协议为hdfs://(Hadoop内置协议)
  11. 表明DataNode将和node1的8020端口通讯,node1是NameNode所在机器
  12. 此配置固定了node1必须启动NameNode进程
  13. Key:hadoop.tmp.dir
  14. 指定Hadoop临时文件存储的目录。
  1. 配置hdfs-site.xml文件
  1. # 在文件内部填入如下内容
  2. <configuration>
  3.   <property>
  4.     <name>dfs.datanode.data.dir.perm</name>
  5.     <value>700</value>
  6.   </property>
  7.   <property>
  8.     <name>dfs.namenode.name.dir</name>
  9.     <value>/data/nn</value>
  10.   </property>
  11.   <property>
  12.     <name>dfs.namenode.hosts</name>
  13.     <value>node1,node2,node3</value>
  14.   </property>
  15. <property>
  16.     <name>dfs.blocksize</name>
  17.     <value>268435456</value>
  18.   </property>
  19.   <property>
  20.     <name>dfs.namenode.handler.count</name>
  21.     <value>100</value>
  22.   </property>
  23.   <property>
  24.     <name>dfs.datanode.data.dir</name>
  25.     <value>/data/dn</value>
  26.   </property>
  27. </configuration>
  1. <property>
  2. <!-- HDFS中块的副本数,,默认为3-->
  3.        <name>dfs.replication</name>
  4.        <value>2</value>
  5. </property>

  1. key:dfs.datanode.data.dir.perm
  2. 含义:hdfs文件系统,默认创建的文件权限设置
  3. 值:700,即:rwx------
  4. key:dfs.namenode.name.dir
  5. 含义:NameNode元数据的存储位置
  6. 值:/data/nn,在node1节点的/data/nn目录下
  7. key:dfs.namenode.hosts
  8. 含义:NameNode允许哪几个节点的DataNode连接(即允许加入集群)
  9. 值:node1、node2、node3,这三台服务器被授权
  10. key:dfs.blocksize
  11. 含义:hdfs默认块大小
  12. 值:268435456256MB)
  13. key:dfs.namenode.handler.count
  14. 含义:namenode处理的并发线程数
  15. 值:100,以100个并行度处理文件系统的管理任务
  16. key:dfs.datanode.data.dir
  17. 含义:从节点DataNode的数据存储目录
  18. 值:/data/dn,即数据存放在node1、node2、node3,三台机器的/data/dn内
  1. 准备数据目录namenode数据存放node1的/data/nn

datanode数据存放node1、node2、node3的/data/dn

    1. 在node1节点:
  1. mkdir -p /data/nn
  2. mkdir /data/dn
  1. 在node2和node3节点:
  1. mkdir -p /data/dn
  1. 目前,已经基本完成Hadoop的配置操作,可以从node1将hadoop安装文件夹远程复制到node2、node3
    1. 在node1执行如下命令
  1. cd /export/server
  2. scp -r hadoop-3.3.4 node2:`pwd`/
  3. scp -r hadoop-3.3.4 node3:`pwd`
    1. 在node2、node3执行,为hadoop配置软链接
  1. ln -s /export/server/hadoop-xxx /export/server/hadoop
  1. 为Hadoop配置环境变量
  1. vi /etc/profile

  1. # 在/etc/profile文件底部追加如下内容
  2. export HADOOP_HOME=/export/server/hadoop
  3. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  1. 将文件传给node2、node3
  1. Scp /etc/profile node2:/etc/
  1. 在每个节点上生效环境变量
  1. source /etc/profile
  1. 以root身份,在node1、node2、node3三台服务器上均执行如下命令
  1. # 以root身份,在三台服务器上均执行
  2. chown -R hadoop:hadoop /data
  3. chown -R hadoop:hadoop /export
  1. 格式化Hadoop
  1. # 确保以hadoop用户执行
  2. su - hadoop
  3. # 格式化namenode
  4. hadoop namenode -format
  1. 启动/停止
  1. # 一键启动hdfs集群
  2. start-dfs.sh
  3. # 一键关闭hdfs集群
  4. stop-dfs.sh
  1. 查看HDFS WEBUI
  1. http://IP:9870

  • 部署YARM

主机

角色

node1

ResourceManager\NodeManager\ProxyServer

JobHistoryServer

node2

NodeManager

node3

NodeManager

  1. 修改MapReduce配置文件(在 $HADOOP_HOME/etc/hadoop 文件夹内)
    1. 在mapred-env.sh文件,添加如下环境变量
  1. export JAVA_HOME=/export/server/jdk  # 定义jdk环境
  2. export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000  设置JobHistoryServer进程内存为1G
  3. export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA   设置日志级别为INFO
    1. mapred-site.xml文件,添加如下配置信息
  1. <configuration>
  2.   <property>
  3.     <name>mapreduce.framework.name</name> 
  4.     <value>yarn</value>
  5.     <description>MaReduce的运行框架设置为YARN</description>
  6.   </property>
  7.   <property>
  8.     <name>mapreduce.jobhistory.address</name>
  9.     <value>node1:10020</value>
  10.     <description>历史服务器通讯端口为node1:10020</description>
  11.   </property>
  12.   <property>
  13.     <name>mapreduce.jobhistory.webapp.address</name>
  14.     <value>node1:19888</value>
  15.     <description>历史服务器web端口为node的19888</description>
  16.   </property>
  17.   <property>
  18.     <name>mapreduce.jobhistory.intermediate-done-dir</name>
  19.     <value>/data/mr-history/tmp</value>
  20.     <description>历史信息在HDFS的记录临时路径</description>
  21.   </property>
  22.   <property>
  23.     <name>mapreduce.jobhistory.done-dir</name>
  24.     <value>/data/mr-history/done</value>
  25.     <description>历史信息在HDFS的记录路径</description>
  26.   </property>
  27. <property>
  28.   <name>yarn.app.mapreduce.am.env</name>
  29.   <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
  30.    <description>MapReduce HOME设置为HADOOP_HOME</description>
  31. </property>
  32. <property>
  33.   <name>mapreduce.map.env</name>
  34.   <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
  35.   <description>MapReduce HOME设置为HADOOP_HOME</description>
  36. </property>
  37. <property>
  38.   <name>mapreduce.reduce.env</name>
  39.   <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
  40.   <description>MapReduce HOME设置为HADOOP_HOME</description>
  41. </property>
  42. </configuration>
  1. YARN配置文件
    1. yarn-env.sh文件,添加如下4行环境变量内容:
  1. export JAVA_HOME=/export/server/jdk
  2. export HADOOP_HOME=/export/server/hadoop 
  3. export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
  4. export HADOOP_LOG_DIR=$HADOOP_HOME/logs
    1. yarn-size.xml文件
  1. <property>
  2.     <name>yarn.log.server.url</name>
  3.     <value>http://node1:19888/jobhistory/logs</value>
  4.     <description>历史服务器URL</description>
  5. </property>
  6.   <property>
  7.     <name>yarn.web-proxy.address</name>
  8.     <value>node1:8089</value>
  9.     <description>proxy server hostname and port</description>
  10.   </property>
  11.   <property>
  12.     <name>yarn.log-aggregation-enable</name>
  13.     <value>true</value>
  14.     <description>Configuration to enable or disable log aggregation</description>
  15.   </property>
  16.   <property>
  17.     <name>yarn.nodemanager.remote-app-log-dir</name>
  18.     <value>/tmp/logs</value>
  19.     <description>Configuration to enable or disable log aggregation程序日志HDFS的存储路径</description>
  20.   </property>
  21. <!-- Site specific YARN configuration properties -->
  22.   <property>
  23.     <name>yarn.resourcemanager.hostname</name>
  24.     <value>node1</value>
  25.     <description>ResourceManage设置在node1节点</description>
  26.   </property>
  27.   <property>
  28.     <name>yarn.resourcemanager.scheduler.class</name>
  29.     <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
  30.     <description></description>
  31.   </property>
  32.   <property>
  33.     <name>yarn.nodemanager.local-dirs</name>
  34.     <value>/data/nm-local</value>
  35.     <description>Comma-separated list of paths on the local filesystem where intermediate data is written.</description>
  36.   </property>
  37.   <property>
  38.     <name>yarn.nodemanager.log-dirs</name>
  39.     <value>/data/nm-log</value>
  40.     <description>Comma-separated list of paths on the local filesystem where logs are written.</description>
  41.   </property>
  42.   <property>
  43.     <name>yarn.nodemanager.log.retain-seconds</name>
  44.     <value>10800</value>
  45.     <description>Default time (in seconds) to retain log files on the NodeManager Only applicable if log-aggregation is disabled.</description>
  46.   </property>
  47.   <property>
  48.     <name>yarn.nodemanager.aux-services</name>
  49.     <value>mapreduce_shuffle</value>
  50.     <description>Shuffle service that needs to be set for Map Reduce applications.</description>
  51.   </property>
    1. MapReduce和YARN的配置文件修改好后,需要分发到其它的服务器节点中。
  1. scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site,xml node2:'pwd'/
  2. scp mapred-env.sh mapred-site,xml yarn-env.sh yarn-site.xml node3:'pwd'/
  1. 一键启动YARN集群: $HADOOP_HOME/sbin/start-yarn.sh
  2. 一键停止YARN集群: $HADOOP_HOME/sbin/stop-yarn.sh
  3. 打开 http://node1:8088 即可看到YARN集群的监控页面(ResourceManager的WEB UI)
  • 部署hive

  • 部署zookeeper

更多推荐