一、Hadoop完全分布式集群搭建部署
centos版本:CentOS-7-x86_64-Minimal-1810.iso
准备的安装包:
jdk-8u181-linux-x64.tar.gz
hadoop-2.9.2.tar.gz
1、配置静态IP
搭建之前,先配置好1台centos服务器
登录以后,输入vi /etc/sysconfig/network-scripts/ifcfg-ens33
配置网络
修改 BOOTPROTO=static ONBOOT=yes
添加 IPADDR=设置IP地址
GATEWAY=网关
NETMASK=255.255.255.0
DNS1=网关(和GATEWAY一样)114.114.114.114 或(8.8.8.8)
说明:DNS1的114为国内电信、移动联通的解析服务,8的话为Google的,访问国外较多就推荐换8
完了后重启网卡:service network restart
验证:可以ip addr
验证下ens33的ip,还有ping www.baidu.com
一下,没报错就ok
2、关闭防火墙
搭建和学习阶段,需要关闭下防火墙,以下是关于防火墙一些命令:
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewalld
3、修改hostname 及 hosts映射
让3台机器vi /etc/hostname
让里面内容分别为hadoop01,hadoop02,hadoop03
然后所有的主机hosts文件均配置 vi /etc/hosts
添加以下内容:
192.168.26.11 hadoop01
192.168.26.12 hadoop02
192.168.26.13 hadoop03
主机名修改了重启即会更新
4、创建Hadoop账号
创建名hadoop的账号 useradd hadoop
给hadoop账号设置密码 passwd hadoop
给sudoers文件赋予写权限 chmod +w /etc/sudoers
打开sudoers文件并编辑 vi /etc/sudoers
在sudoers文件中添加 :
hadoop ALL=(ALL) All
或 hadoop ALL=(root)NOPASSWD:ALL
保存退出,取消sudoers文件写权限 chmod -w /etc/sudoers
然后克隆2台虚拟机,选择完整克隆,克隆完成后修改ip和主机名
5、配置SSH
每台节点(也就是服务器)切换root用户,如果在则不用切换:su root
输入ssh-keygen
生成私钥和公钥(效果等价ssh-keygen -t rsa
命令),然后一直回车
然后cd ~/.ssh
在hadoop01使用:
追加公钥内容cat id_rsa.pub >> authorized_keys
远程拷贝scp authorized_keys root@hadoop02:~/.ssh
在hadoop02使用:
追加公钥内容cat id_rsa.pub >> authorized_keys
远程拷贝scp authorized_keys root@hadoop03:~/.ssh
在hadoop03使用:
追加公钥内容cat id_rsa.pub >> authorized_keys
把id_rsa.pub文件远程拷贝其他节点scp authorized_keys root@hadoop01:~/.ssh
然后再拷贝一次scp authorized_keys root@hadoop02:~/.ssh
验证配置成功:可以在hadoop01节点或(hadoop02\hadoop03)输入ssh hadoop01
切换节点,第一次可以需要密码,后面不用密码就成功了,然后可以输入exit
退出这个节点
6、安装jdk
(先安装配置好1台,后远程拷贝到其他2台)
每台节点创建2个目录,使用mkdir -p /data/packs和mkdir /software
存放安装包和软件
把下载好的安装包放到第1台节点的/data/packs目录,使用命令:
tar zxvf /data/packs/jdk-8u181-linux-x64.tar.gz -C /software/
然后重命名一下mv /software/jdk1.8.0_181/ /software/java
vi /etc/profile
添加到环境变量
添加以下内容:
export JAVA_HOME=/software/java
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/sbin
环境变量同时添加bin和sbin目录是个好习惯,因为有些执行文件是bin或sbin目录下, 这样就不用特意去看目录了
激活环境变量. /etc/profile
(等价于source /etc/profile
)
验证java安装成功:java -version
7、修改时区
各个节点的时间如果不同步,会出现启动异常,或其他原因。这里将时间统一设置为Shanghai时区。命令如下:
验证每个节点运行时间:uptime
或date
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
会提示cp: overwrite /etc/localtime'? 输入
yes`
修改为中国的东八区
sudo vi /etc/sysconfig/clock
添加以下内容
ZONE="Asia/Shanghai"
UTC=false
ARC=false
输入reboot
重启每台节点后,再次验证下节点运行时间
8、安装Hadoop
(先安装配置好1台,后远程拷贝到其他2台)
把Hadoop安装包放/data/packs目录下,然后
输入tar zxvf /data/packs/hadoop-2.9.2.tar.gz -C /software/
重命名Hadoop目录 mv /software/hadoop-2.9.2/ /software/hadoop
vi /etc/profile
添加到环境变量
添加以下内容:
export HADOOP_HOME=/software/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
激活环境变量. /etc/profile
验证Hadoop安装成功:hadoop version
9、配置Hadoop文件
一共需要配置主要的7个文件:
hadoop/etc/hadoop/hadoop-env.sh
hadoop/etc/hadoop/yarn-env.sh
hadoop/etc/hadoop/core-site.xml
hadoop/etc/hadoop/yarn-site.xml 相关的job处理
hadoop/etc/hadoop/slave
hadoop/etc/hadoop/hdfs-site.xml 确定文件的备份个数及数据存放路径
hadoop/etc/hadoop/mapred-site.xml
1)配置 core-site.xml
先切换目录cd /software/hadoop/etc/hadoop
再vi core-site.xml 输入以下内容
<configuration>
<!-- 指定namenode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<!-- 用来指定使用hadoop时产生文件的存放目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/data/tmp/hadoop</value>
</property>
</configuration>
fs.defaultFS:HDFS的URI,文件系统://namenode标识:端口号
hadoop.tmp.dir:namenode上本地的hadoop临时文件夹
注:hadoop.tmp.dir 如果路径配置为 hadoop-x.x.x/tmp ,一但重新启动,所以的信息hadoop环境全部失效
2)配置 hdfs-site.xml
编辑文件vi hdfs-site.xml 添加以下内容
<configuration>
<!-- 指定hdfs保存数据的副本数量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 指定hdfs中namenode的存储位置 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/tmp/hadoop/name</value>
</property>
<!--指定hdfs中datanode的存储位置-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/tmp/hadoop/data</value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>hadoop02:50070</value>
</property>
</configuration>
3)配置yarn-site.xml
编辑文件vi yarn-site.xml 添加以下内容
<configuration>
<!-- nomenodeManager获取数据的方式是shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop01:8088</value>
</property>
</configuration>
4)配置mapred-site.xml
先把模板文件复制成一份配置文件格式cp mapred-site.xml.template mapred-site.xml
编辑文件vi mapred-site.xml 添加以下内容
<configuration>
<!-- 告诉hadoop以后MR(Map/Reduce)运行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5)配置slaves
hadoop01
hadoop02
hadoop03
6)配置hadoop-env.sh
只需要修改JAVA_HOME
为java的目录
7)配置yarn-env.sh
只需要添加JAVA_HOME
为java的目录
10、主机ping通centos
可以用yum install samba
,下载安装samba,安装完成后,然后执行 service nmb start
,启动程序后,执行 用iptables -F
,
然后用windows 就可以ping通Linux的名字了。比如Linux的主机名是:hadoop01, 在Windows的命令窗口执行:ping hadoop01
即可ping通。
8、远程下载和格式化
到其他2台节点输入命令下载配置好的Java和hadoop目录
scp -r hadoop@hadoop01:/software/
然后3台节点修改下hadoop目录所属用户和用户组:sudo chown hadoop:hadoop /software/
可以输入ll /查看用户和用户组是否修改成功
配置好其他2台节点环境变量和激活
格式化hdfs文件系统
hdfs namenode -format
11、启动hadoop进程
切换到root用户,
直接使用命令/software/hadoop/sbin/start-all.sh
可以同时启动hdfs和yarn服务
只想启动hdfs可以使用命令/software/hadoop/sbin/start-dfs.sh
只想启动yarn可以使用命令/software/hadoop/sbin/start-yarn.sh
可以输入jps命令查看每台节点是否分别有
namenode,datanode,SecondaryNameNode,nodemanager,resourcemanager
这5个进程,有的话就成功了
也可以在windows的浏览器输入
hadoop01:50070
查看Hadoop集群状态了(前提物理机能ping通节点)
可能遇到的问题:
1、Windows物理机下载的压缩包和文件无法通过finalshell等工具上传到centos下的文件夹上传失败或进度为0,可能是文件夹是所属root用户和用户组,需要使用命令修改放上传文件的文件夹所属用户
修改文件夹及子文件夹所有文件就用命令:
chown -R 用户名:用户组 文件夹名称
还没解决的话,当前用户也使用su root命令切换到root用户
2、报错hadoop02: /software/hadoop/sbin/hadoop-daemon.sh: line 177: /software/hadoop/logs/hadoop-hadoop-datanode-hadoop02.out: Permission denied
分析:可能权限不够
解决:把ssh改成root用户,root用户下使用命令
首先切换用户su root
然后删除掉每台节点的ssh目录rm -rf ~/.ssh
然后再ssh-keygen
,接下来自己重新配置下ssh免密
3、resourcemanager进程没启动
解决:修改yarn-site.xml文件,添加修改以下内容:
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop01:8088</value>
</property>
建议:搭建和启动时切换到root用户,能解决很多麻烦和报错
二、Zookeeper安装部署
准备安装包:zookeeper-3.4.14.tar.gz
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务
1、环境变量配置
首先解压下准备好的zookeeper安装包:tar zxvf /data/packs/zookeeper-3.4.14.tar.gz -C /software/
然后重命名:mv /software/zookeeper-3.4.14/ /software/zookeeper
使用vi /etc/profile
修改环境变量文件,添加以下内容:
export ZOOKEEPER_HOME=/software/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/sbin
然后使用. /etc/profile
激活下
2、配置zoo.cfg文件
启动zookeeper集群之前,需要配置zookeeper集群信息,可以将zookeeper目录下的conf/zoo_sample.cfg文件重命名为zoo.cfg
首先切换路径cd /software/zookeeper/conf
然后重命名配置文件mv zoo_sample.cfg zoo.cfg
编辑文件 vi zoo.cfg修改缓存数据目标文件夹,因为tmp是缓存的意思,一般/tmp下文件的缓存容易被清掉,所以我们需要修改路径
文件内容修改dataDir=/data/tmp/zookeeper
还有添加修改以下内容:
clientPort=2181
# 各个服务节点地址配置
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
3、创建myid文件
需要在配置的dataDir目录下创建一个myid文件,文件里写入1个0~255之间的整数,每个zookeeper节点上这个文件的数字应该是唯一的。文件的数字应和DataNode节点下zookeeper配置的数字保持一致。如server.1=hadoop01:2888:3888 那么hadoop01节点配置文件数字就写1,
先创建好dataDir的缓存文件夹:mkdir /data/tmp/zookeeper/
使用vi直接新建编辑文件:vi /data/tmp/zookeeper/myid
在hadoop01节点配置完后,其他节点也创建文件,hadoop02的/data/tmp/zookeeper/myid文件里内容写2,hadoop03文件里就写3
使用命令把/etc/profile环境变量文件和zookeeper目录拷贝到其他2台节点,
如:scp /etc/profile root@hadoop03:/etc/
和scp -r /software/zookeeper/ root@hadoop02:/software/
4、启动
启动zookeeper命令:zkServer.sh start
关闭zookeeper命令:zkServer.sh stop
查看zookeeper状态命令:zkServer.sh status
每台节点启动zookeeper后(hadoop只用主节点启动),输入jps命令,显示QuorumPeerMain进程,说明启动成功了,
也可以使用zkServer.sh status
查看,正常情况下,使用zkServer.sh status
命令,3个节点会出现1个leader和2个follower
三、Hbase安装部署
准备好安装包:hbase-2.2.3-bin.tar.gz
1、首先解压重命名配置环境变量
解压:tar zxvf /data/packs/hbase-2.2.3-bin.tar.gz -C /software/
重命名:mv /software/hbase-2.2.3/ /software/hbase
修改环境变量vi /etc/profile
,添加以下内容:
# hbase
export HBASE_HOME=/software/hbase
export PATH=$PATH:$HBASE_HOME/bin:$HBASE_HOME/sbin
激活:. /etc/profile
验证成功:hbase version
会显示版本号
之后将环境变量文件拷贝到其他2台节点,如:scp /etc/profile root@hadoop03:/etc/
2、编辑hbase-env.sh文件
切换路径:cd /software/hbase/conf/
编辑:vi hbase-env.sh
追加以下内容
export JAVA_HOME=/software/java
export HBASE_MANAGES_ZK=false
export HBASE_CLASSPATH=/software/hbase/conf
HBASE_MANAGES_ZK表示是否使用HBase自带的zookeeper环境,这里我们使用安装的,所有选择false
HBASE_CLASSPATH指向hbase配置文件的路径。
3、编辑hbase-site.xml文件
使用命令vi hbase-site.xml,在两个之间添加如下内容
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop01:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop01,hadoop02,hadoop03</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
配置项说明:
hbase.master:HBase主节点地址。
hbase.rootdir:HBase文件所存储的位置。
hbase.cluster.distributed:HBase是否为分布式模式。
hbase.zookeeper.quorum:这里是配置ZooKeeper的服务器的地方。
hbase.zookeeper.property.dataDir:这里表示HBase在ZooKeeper上存储数据的位置。
4、编辑 regionservers文件
使用命令vi regionservers添加以下内容:
hadoop01
hadoop02
hadoop03
5、拷贝hdfs-site.xml文件
需要把hadoop目录的配置文件hdfs-site.xml拷贝到hbase的配置文件目录下
cp /software/hadoop/etc/hadoop/hdfs-site.xml /software/hbase/conf/
6、启动hbase
启动命令:/software/hbase/bin/start-hbase.sh
每台节点都需要启动,会自动开启zookeeper进程,
启动后输入jps可以看到最后启动的节点是会有HMaster 和 HRegionServer进程,其他节点是HRegionServer进程。
可能遇到的问题:
Hbase的Hmster闪退,估计玩过hbase的人都遇到过,
解决方法1:把hadoop目录的配置文件hdfs-site.xml拷贝到hbase的配置文件目录下
cp /software/hadoop/etc/hadoop/hdfs-site.xml /software/hbase/conf/
解决方法2:关闭所有进程只留下jps,删除掉hdfs的缓存文件,再格式化hdfs的namenode
解决方法3:在hbase目录的conf目录下的hbase-site.xml文件加入以下内容:
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>