目录
3.1 在本机下载ssh服务 openssh-serve 和 openssh-client
1.分布式集群的网络和节点规划
主机名 | IP地址 | 节点类型 |
master1 | 192.168.189.135 | master1 |
master2 | 192.168.189.137 | master2 |
slave01 | 192.168.189.136 | slave01 |
slave02 | 192.168.189.138 | slave02 |
节点规划
服务 | master | master02 | slave01 | slave02 | slave03 |
NameNode | √ | √ | |||
SecondNameNode | (取消) | ||||
DataNode | √ | √ | √ | √ | |
hbase | √ | √ | |||
zookeeper | √ | √ | √ |
2.分布式集群准备环境
2.1 配置主机名
1.将/etc/hostname中旧的主机名删除,并将新主机名写入
2.将/etc/hosts 中的映射修改
2.2 静态ip配置
1. 查看网卡名 我的是ens33 ifconfig命令
2.配置文件 /etc/netplan/01-........
文件最初内容:
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManagerethernets:
ens33: #ens33网卡
addresses:[192.168.189.135/24] #静态地址
gateway4: 192.168.189.2 #网关
nameservers: #设置DNS
addresses: [114.114.114.114,114.114.114.115]
ens37: #配置多个网卡直接加就行,ethernets只需要一个就可以了
2.3 配置清华源(软件源)
因为ubuntu自带的软件源,在国外,下载需要很长时间,所以可以用国内的软件源代替:
ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
代替步骤:
第一步:将原来的”软件源”备份,以防不时之需: mv /etc/apt/sources.list /etc/apt/sources.list.bak
第二步:将镜像提供的源给写入 vim /etc/apt/source.list 中
(详细步骤:Ubuntu apt-get 国内镜像源替换(新手必看,超详细!各种镜像源网站都有)_apt-get 镜像-优快云博客)
第三步:更新镜像: sudo apt update ; sudo apt upgrade
3.ssh免密登录
3.1 在本机下载ssh服务 openssh-serve 和 openssh-client
sudo apt-get install openssh-server
sudo apt-get install openssh-client
3.2 本机ssh登录一下 (类似于初始化)
ssh localhost
注: 不本地登录,找不到 ~/.ssh文件夹
3.3 设置免密登录
cd ~/.ssh
建立密钥
ssh-keygen -t rsa (一路空格)
免密配置:把密钥传到 authorized_keys
cat id_rsa.pub >> ./authorized_keys
尝试免密登录
ssh localhost
3.4 不同节点ssh免密登录
假设 A ,B ,C三个节点
eg:B 将 A公钥(id_rsa.pub)发给 B 并将内容写入B的 ~/.ssh/authority_keys中
实现: A免密登录B
4.jdk 配置
4.1 创建文件夹 用于存放java
4.2 下载jdk.tar.gz压缩包
4.3 将压缩包解压到4.1创建的文件夹中
4.4 配置环境变量
vim ~/.bashrc
将下列配置添进去
export JAVA_HOME=/home/hadoop/java-jdk/java.... #jdk下载的路径
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH #配置环境变量的格式,如下图格式
添加后应用环境
source ~/.bashrc
注解:bashrc 和 profile :bashrc是用户级,profile是系统级:环境变量配置文件
4.5检查
java -version
5.Hadoop集群配置
1. hadoop 下载
这里我推荐用迅雷下载,用xftp(一个软件)连接虚拟机传输
下载地址:Apache Downloads
1.1 下载并传输完成后解压
解压命令:
sudo tar -zxf~/download/hadoop-2.10.1.tar.gz -C /usr/lcoal //将Hadoop解压到/usr/lcoal下 cd /usr/local
sudo mv ./hadoop-2.10.1 ./hadoop //重命名为hadoop
sudo chown -R hadoop.hadoop ./hadoop //修改文件权限
注解:权限很重要一定要修改好:文件的权限,不然很大概率会在后续进展出错,后续所创建的文件夹都需要有权限
权限有两种:第一种是所属用户和所属组(chown命令)
第二种是权限大小(chmod命令)
1.2 配置hadoop文件环境
vim ~/.bashrc
将下边的代码添加到环境里面
export HADOOP_HOME=/usr/local/hadoop
#下边这个 PATH只用配一次,配置jdk的时候已经写过,只需要把:${HADOOP_HOME}/bin 添加进去就行
export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
1.3 验证 hadoop
hadoop version
2 配置hadoop文件
在下载的hadoop里面的 /etc/hadoop 配置 core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个文件
2.1 core-site.xml -----核心文件
<configuration> #原文件中有 这个标签了 ,不用写入
<property>
<name>fs.defaultFS</name> #默认文件系统
<value>hdfs://mycluster:8485</value> #Hadoop HA集群配置
</property><!-- 配置 hadoop.tmp.dir 路径到持久化目录 -->
<property>
<name>hadoop.tmp.dir</name> #
<value>/home/hadoop/tmp</value> #这里的路径注意修改为你自己的路径!!并且权限一定要属于用户自己,我这里自己在 桌面建立了tmp文件用来存储
</property><!--配置zookeeper-->
<property>
<name>ha.zookeeper.quorum</name>
<value>master1:2181,master2:2181,slave01:2181</value> #这个与zookeeper配置的接口有关
</property><!-- hadoop 链接 zookeeper 的超时时长设置 -->
<property>
<name>ha.zookeeper.session-timeout.ms</name>
<value>30000</value>#单位是ms
</property><property>
<name>fs.trash.interval</name>
<value>1440</value>
</property></configuration>
关于 hadoop.tmp.dir 理解及配置 - 简书 (jianshu.com)
hadoop fs.trash 详解_fs.trash.interval-优快云博客
2.2 hdfs-site.xml
<property>
<name>dfs.nameservices</name>
<value>mtcluster</value>
</property>
<!-- 集群中NameNode节点都有哪些 ,这里给出了namenode,对后面起
namenode进程及zookeeper主备切换都有作用-->
<property>
<name>dfs.ha.namenodes.mtcluster</name>
<value>nn1,nn2</value>
</property>
<!-- nn1,nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mtcluster.nn1</name>
<value>master1:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mtcluster.nn2</name>
<value>master2:9000</value>
</property>
<!-- nn1,nn2的HTTP通信地址 -->
<property>
<name>dfs.namenode.http-address.mtcluster.nn1</name>
<value>master1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mtcluster.nn2</name>
<value>master2:50070</value>
</property>
<!--保存FsImage镜像的目录,即namenode里的metadata-->
<property> #这个文件很重要
<name>dfs.namenode.name.dir.mtcluster</name>
<value>/home/hadoop/dfs/name</value>
</property>
<!-- 指定NameNode元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master1:8485;master2:8485;slave01:8485/mtcluster</value>
</property>
<!--声明journalnode服务器数据存储目录-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/data/jn</value>
</property>
<!--开启HDS HA 实现namenode层的主备切换-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mtcluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 这里添加shell(bin/true)-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence
shell(/bin/true)</value>
</property>
<!-- 关闭权限检查-->
<property>
<name>dfs.permissions.enable</name>
<value>false</value>
</property>
<!-- 使用隔离机制时需要ssh无秘钥登录,注意的是这里需要master1 和
master2的双向ssh-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master2:9001</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>master1:9001</value>
</property>
<!--这个参数用于确定将HDFS文件系统的数据保存在什么目录下-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/dfs/data</value>
</property>
<!--HDFS数据备份数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<!--HDFS节点-->
<property>
<name>dfs.hosts</name>
<value>/home/hadoop/hadoop/etc/hadoop/slaves</value>
</property>
<!--HDFS黑名单-->
<property>
<name>dfs.hosts.exclude</name>
<value>/home/hadoop/hadoop/etc/hadoop/exclude-slaves</value>
</property>
dfs.namenode.name.dir 和dfs.datanode.data.dir 优快云博客
关于hdfs-site.xml的dfs.replication属性-优快云博客
HDFS白名单和黑名单机制_dfs.hosts.exclude_军大_j的博客-优快云博客
2.3 yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master1:8035</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master1:8033</value>
</property>
<!--WEB页面端口>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master1:8088</value>
</property
2.4mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master1:19888</value>
</property>
2.5 配置 DataNoda的工作环境
在hadoop/etc/hadoop 下修改 slaves文件
master1
master2
slave01
slave02