Hadoop集群搭建
·
- 环境准备(安装Linux系统和相关配置)
- 通过VMware创建Linux系统
- 略.
- 避免出现网络不通,在集群内部关闭防火墙。
- systemctl stop firewalld
- systemctl disable firewalld
- Linux有一个安全模块:SELinux,用以限制用户和程序的相关权限,来确保系统的安全稳定。我们需关闭SELinux功能,避免导致后面的软件运行出现问题
- vi /etc/sysconfig/selinux
- # 将第七行,SELINUX=enforcing 改为
- SELINUX=disabled
- # 保存退出后,重启虚拟机即可,千万要注意disabled单词不要写错,不然无法启动系统
- 更改用户名
- hostnamectl set-hostname node1
- 配置网卡信息
- 进入目录
- 配置网卡信息
- vi /etc/sysconfig/network-scripts/ifcfg-ens33
-
- 添加静态IP地址、网关
-
- BOOTPROTO=static //修改:将dhcp修改为static,修改后为BOOTPROTO=static
- ONBOOT=yes //修改为yes, 网卡开机自启动
- IPADDR=xxx.xxx.xxx.xxx //新增:配置静态IP地址,按需配置
- NETMASK=255.xxx.xxx.xxx //新增:配置子网掩码
- GATEWAY=xxx.xxx.xxx.xxx //新增:配置网关
- DNS=xxx.xxx.xxx.xxx //新增:配置DNS
-
- 重启网卡
-
- service network restart //重启网卡
-
- 验证是否成功(查看IP)
-
- ip addr
- 设置hadoop用户
- useradd hadoop //创建hadoop用户
- passwd hadoop //设置hadoop用户密码为123456
- 配置JDK环境
- 创建文件夹,用来部署JDK,将JDK和hadoop等都安装部署到:/export/server
- mkdir -p /export/server
- 解压缩JDK安装文件
- tar -zxvf jdk-xxxx-linux-x64.tar.gz -C /export/server
- 配置JDK的软链接
- In -s /export/server/jdkxxxx/export/server/jdk
- 配置JAVA_HOME环境变量,以及将$JAVA_HOME/bin文件夹加入PATH环境变量中
- Vi /etc/profile
- # 编辑/etc/profile文件,在末尾添加下文
- # java
- export JAVA_HOME=/export/server/jdk
- export PATH=$PATH:SJAVA_HOME/bin
- 生效环境变量
- source /etc/profile
- 验证是否成功
- java -version
- javac -version
- 使用VMware提供的克隆功能,创建node2、node3
-
- 虚拟机右键管理>克隆
-
- 开启node2、node3,对node2、node3进行基础配置
- 执行步骤2.对虚拟机进行改名
- 执行步骤2.1.2对虚拟机进行修改IP地址
- 配置用户ssh免密连接
- 编辑3台虚拟机的/etc/hosts文件
- //原有内容下换行添加下面的内容
- xxx.xxx.xxx.xx1 node1
- xxx.xxx.xxx.xx2 node2
- xxx.xxx.xxx.xx3 node3
- 配置各节点间root用户的无密钥ssh登陆
- 每个节点输入下面的命令并一直回车
- 配置各节点间root用户的无密钥ssh登陆
- ssh-keygen -t rsa
-
- 执行下面的命令
-
- ssh-copy-id node1
- ssh-copy-id node2
- ssh-copy-id node3
- 配置各节点间hadoop用户的无密钥ssh登陆
- 切换到hadoop用户
- 配置各节点间hadoop用户的无密钥ssh登陆
- su hadoop
-
- 每个节点输入下面的命令并一直回车
-
- ssh-keygen -t rsa
-
- 执行下面的命令
-
- ssh-copy-id node1
- ssh-copy-id node2
- ssh-copy-id node3
注:为防止出错,建议理由VMware创建快照功能,如果出现错误的时候,可以一键回到此 时间点。
|
节点 |
CPU |
内存 |
|
node1 |
1核心 |
4GB |
|
node2 |
1核心 |
2GB |
|
node3 |
1核心 |
2GB |
- 部署HDFS
|
节点 |
服务 |
|
node1 |
NameNode、DataNode、SecondaryNameNode |
|
node2 |
DataNode |
|
node3 |
DataNode |
- 上传Hadoop安装包到node1节点中
- 解压缩安装包到/export/server/中
- tar -zxvf hadoop-xxx.tar.gz -C /export/server
- 构建软链接
- cd /export/server
- ln -s /export/server/hadoop-3.3.4 hadoop
- 进入hadoop安装包内
- cd hadoop
- 修改配置文件,应用自定义设置
- 配置workers文件
- # 进入配置文件目录
- cd etc/hadoop
- # 编辑workers文件
- Vi workers
- # 填入如下内容
- node1
- node2
- node3
- 配置hadoop-env.sh文件
- # 填入如下内容
- export JAVA_HOME=/export/server/jdk # 定义jdk环境
- export HADOOP_HOME=/export/server/hadoop # 定义hadoop安装位置
- export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop # 定义hadoop配置文件位置
- export HADOOP_LOG_DIR=$HADOOP_HOME/logs # 定义日志文件存放位置,若空需自己创建
- export HDFS_NAMENODE_USER=hadoop #定义namenode启动用户
- export HDFS_DATANODE_USER=hadoop #定义datanode启动用户
- export HDFS_SECONDARYNAMENODE_USER=hadoop #定义辅助节点SecondaryNameNode启动用户
- 配置core-site.xml文件
- 在文件内部填入如下内容
- <configuration>
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://node1:8020</value>
- </property>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>${HADOOP_PATH}/tmp</value>
- </property>
- <property>
- <name>io.file.buffer.size</name>
- <value>131072</value>
- </property>
- </configuration>
- key:fs.defaultFS
- 含义:HDFS文件系统的网络通讯路径
- 值:hdfs://node1:8020
- 协议为hdfs://
- namenode为node1
- namenode通讯端口为8020
- key:io.file.buffer.size
- 含义:io操作文件缓冲区大小
- 值:131072 bit //默认为4096bit(4K)
- hdfs://node1:8020为整个HDFS内部的通讯地址,应用协议为hdfs://(Hadoop内置协议)
- 表明DataNode将和node1的8020端口通讯,node1是NameNode所在机器
- 此配置固定了node1必须启动NameNode进程
- Key:hadoop.tmp.dir
- 指定Hadoop临时文件存储的目录。
- 配置hdfs-site.xml文件
- # 在文件内部填入如下内容
- <configuration>
- <property>
- <name>dfs.datanode.data.dir.perm</name>
- <value>700</value>
- </property>
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>/data/nn</value>
- </property>
- <property>
- <name>dfs.namenode.hosts</name>
- <value>node1,node2,node3</value>
- </property>
- <property>
- <name>dfs.blocksize</name>
- <value>268435456</value>
- </property>
- <property>
- <name>dfs.namenode.handler.count</name>
- <value>100</value>
- </property>
- <property>
- <name>dfs.datanode.data.dir</name>
- <value>/data/dn</value>
- </property>
- </configuration>
- <property>
- <!-- HDFS中块的副本数,,默认为3-->
- <name>dfs.replication</name>
- <value>2</value>
- </property>
- key:dfs.datanode.data.dir.perm
- 含义:hdfs文件系统,默认创建的文件权限设置
- 值:700,即:rwx------
- key:dfs.namenode.name.dir
- 含义:NameNode元数据的存储位置
- 值:/data/nn,在node1节点的/data/nn目录下
- key:dfs.namenode.hosts
- 含义:NameNode允许哪几个节点的DataNode连接(即允许加入集群)
- 值:node1、node2、node3,这三台服务器被授权
- key:dfs.blocksize
- 含义:hdfs默认块大小
- 值:268435456(256MB)
- key:dfs.namenode.handler.count
- 含义:namenode处理的并发线程数
- 值:100,以100个并行度处理文件系统的管理任务
- key:dfs.datanode.data.dir
- 含义:从节点DataNode的数据存储目录
- 值:/data/dn,即数据存放在node1、node2、node3,三台机器的/data/dn内
- 准备数据目录namenode数据存放node1的/data/nn
datanode数据存放node1、node2、node3的/data/dn
-
- 在node1节点:
- mkdir -p /data/nn
- mkdir /data/dn
- 在node2和node3节点:
- mkdir -p /data/dn
- 目前,已经基本完成Hadoop的配置操作,可以从node1将hadoop安装文件夹远程复制到node2、node3
- 在node1执行如下命令
- cd /export/server
- scp -r hadoop-3.3.4 node2:`pwd`/
- scp -r hadoop-3.3.4 node3:`pwd`
- 在node2、node3执行,为hadoop配置软链接
- ln -s /export/server/hadoop-xxx /export/server/hadoop
- 为Hadoop配置环境变量
- vi /etc/profile
- # 在/etc/profile文件底部追加如下内容
- export HADOOP_HOME=/export/server/hadoop
- export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- 将文件传给node2、node3
- Scp /etc/profile node2:/etc/
- 在每个节点上生效环境变量
- source /etc/profile
- 以root身份,在node1、node2、node3三台服务器上均执行如下命令
- # 以root身份,在三台服务器上均执行
- chown -R hadoop:hadoop /data
- chown -R hadoop:hadoop /export
- 格式化Hadoop
- # 确保以hadoop用户执行
- su - hadoop
- # 格式化namenode
- hadoop namenode -format
- 启动/停止
- # 一键启动hdfs集群
- start-dfs.sh
- # 一键关闭hdfs集群
- stop-dfs.sh
- 查看HDFS WEBUI
- http://IP:9870
- 部署YARM
|
主机 |
角色 |
|
node1 |
ResourceManager\NodeManager\ProxyServer JobHistoryServer |
|
node2 |
NodeManager |
|
node3 |
NodeManager |
- 修改MapReduce配置文件(在 $HADOOP_HOME/etc/hadoop 文件夹内)
- 在mapred-env.sh文件,添加如下环境变量
- export JAVA_HOME=/export/server/jdk # 定义jdk环境
- export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000 # 设置JobHistoryServer进程内存为1G
- export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA # 设置日志级别为INFO
- mapred-site.xml文件,添加如下配置信息
- <configuration>
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- <description>MaReduce的运行框架设置为YARN</description>
- </property>
- <property>
- <name>mapreduce.jobhistory.address</name>
- <value>node1:10020</value>
- <description>历史服务器通讯端口为node1:10020</description>
- </property>
- <property>
- <name>mapreduce.jobhistory.webapp.address</name>
- <value>node1:19888</value>
- <description>历史服务器web端口为node的19888</description>
- </property>
- <property>
- <name>mapreduce.jobhistory.intermediate-done-dir</name>
- <value>/data/mr-history/tmp</value>
- <description>历史信息在HDFS的记录临时路径</description>
- </property>
- <property>
- <name>mapreduce.jobhistory.done-dir</name>
- <value>/data/mr-history/done</value>
- <description>历史信息在HDFS的记录路径</description>
- </property>
- <property>
- <name>yarn.app.mapreduce.am.env</name>
- <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
- <description>MapReduce HOME设置为HADOOP_HOME</description>
- </property>
- <property>
- <name>mapreduce.map.env</name>
- <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
- <description>MapReduce HOME设置为HADOOP_HOME</description>
- </property>
- <property>
- <name>mapreduce.reduce.env</name>
- <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
- <description>MapReduce HOME设置为HADOOP_HOME</description>
- </property>
- </configuration>
- YARN配置文件
- yarn-env.sh文件,添加如下4行环境变量内容:
- export JAVA_HOME=/export/server/jdk
- export HADOOP_HOME=/export/server/hadoop
- export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
- export HADOOP_LOG_DIR=$HADOOP_HOME/logs
- yarn-size.xml文件
- <property>
- <name>yarn.log.server.url</name>
- <value>http://node1:19888/jobhistory/logs</value>
- <description>历史服务器URL</description>
- </property>
- <property>
- <name>yarn.web-proxy.address</name>
- <value>node1:8089</value>
- <description>proxy server hostname and port</description>
- </property>
- <property>
- <name>yarn.log-aggregation-enable</name>
- <value>true</value>
- <description>Configuration to enable or disable log aggregation</description>
- </property>
- <property>
- <name>yarn.nodemanager.remote-app-log-dir</name>
- <value>/tmp/logs</value>
- <description>Configuration to enable or disable log aggregation程序日志HDFS的存储路径</description>
- </property>
- <!-- Site specific YARN configuration properties -->
- <property>
- <name>yarn.resourcemanager.hostname</name>
- <value>node1</value>
- <description>ResourceManage设置在node1节点</description>
- </property>
- <property>
- <name>yarn.resourcemanager.scheduler.class</name>
- <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
- <description></description>
- </property>
- <property>
- <name>yarn.nodemanager.local-dirs</name>
- <value>/data/nm-local</value>
- <description>Comma-separated list of paths on the local filesystem where intermediate data is written.</description>
- </property>
- <property>
- <name>yarn.nodemanager.log-dirs</name>
- <value>/data/nm-log</value>
- <description>Comma-separated list of paths on the local filesystem where logs are written.</description>
- </property>
- <property>
- <name>yarn.nodemanager.log.retain-seconds</name>
- <value>10800</value>
- <description>Default time (in seconds) to retain log files on the NodeManager Only applicable if log-aggregation is disabled.</description>
- </property>
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- <description>Shuffle service that needs to be set for Map Reduce applications.</description>
- </property>
- MapReduce和YARN的配置文件修改好后,需要分发到其它的服务器节点中。
- scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site,xml node2:'pwd'/
- scp mapred-env.sh mapred-site,xml yarn-env.sh yarn-site.xml node3:'pwd'/
- 一键启动YARN集群: $HADOOP_HOME/sbin/start-yarn.sh
- 一键停止YARN集群: $HADOOP_HOME/sbin/stop-yarn.sh
- 打开 http://node1:8088 即可看到YARN集群的监控页面(ResourceManager的WEB UI)
- 部署hive
- 部署zookeeper
更多推荐
所有评论(0)