淘先锋技术网

首页 1 2 3 4 5 6 7

一、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时区。命令如下:
验证每个节点运行时间:uptimedate

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>