14
2021
09

大数据 Hadoop完全分布式的部署

HQY

大数据(1) - 虚拟机集群搭建

使用工具:

1.VMware12 +,

2.CentOS-6.8 / CentOS-7 +,

3.jdk1.8

一、安装主服务器虚拟机

 

配置完成,点击启动虚拟机!

 

二、虚拟机网络设置

需要静态的方式配置ip,请参考链接: 设置静态IP

(1)重启网卡服务:

 

1
2
CentOS6.8: # service network restart
CentOS7.2: # systemctl restart network.service

 

 

(2)CRT远程连接Linux

 

(3)禁用SELinux

1
2
3
4
** Selinux:linux安全管理工具
** # vi /etc/sysconfig/selinux
** 编辑改动如下:
    SELINUX:disable

  

(4)禁用防火墙

1
2
3
4
5
6
7
8
** CentOS 6.8
    iptables
    # service iptables stop
    # chkconfig iptables off
 
** CentOS 7.2
    # systemctl stop firewalld.service
    # systemctl disable firewalld.service

  

(5)ping外网测试

1
ping www.baidu.com

  

 三、分配权限给普通管理员

1
2
3
4
5
6
su - root
 
visudo
 
添加:
shifu(对应账号)   ALL=(ALL)       NOPASSWD: ALL

  

四、修改ip与主机名的映射关系

1
2
3
4
5
6
$ sudo vi /etc/hosts
 
(对应你准备配置的ip)
192.168.1.213 linux01
192.168.1.214 linux02
192.168.1.215 linux03

  

五、更新yum与安装samba

参考更新优化linux链接:linux软件优化安装

参考安装samba链接 :安装samba

六、安装JDK

 (1)解压jdk包

1
2
3
4
5
6
7
8
在家目录创建两个文件夹:
cd ~
mkdir -p softwares/installtions
mkdir modules
 
在windows将jdk压缩包用samba拉到linux的installtions中,解压到modules中
 
tar -zxf jdk-8u131-linux-x64.gz -C /home/amidn/modules

  

(2)配置环境变量

1
2
3
4
5
6
7
8
9
10
11
12
vim /etc/profile
 
在文件最底部添加:
 
#JAVA_HOME
JAVA_HOME=/home/admin/modules/jdk1.8.0_121
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
 
保存后让配置生效:
 
source /etc/profile

  

(3)删除OpenJDK(CentOS 自带的JAVA环境)

1
2
3
4
5
6
查看相关的自带java文件:
rpm -qa | grep java
 
用无依赖的方式删除掉:
 
sudo rpm -e --nodeps (将查询到的文件复制到这里,一个一个的删掉)

(4)查看java版本

1
2
3
4
5
source /etc/profile
 
java -version
 
如果是你安装的版本,就完成啦

 

七、将linux01,克隆出linux02,linux03

(1)克隆

1
2
3
先关机
 
sudo shutdown -h now

  

 (2)修改后两台机器的网络配置

1
2
3
4
5
6
** 主机名
    $ sudo vi /etc/sysconfig/network
** 网卡MAC地址
    $ sudo vi /etc/udev/rules.d/70-persistent-net.rules
** IP地址
    $ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0

(3)使用CRT连接3台机器,测试

八、 配置SSH无秘钥访问(如下操作,需要在3台机器中分别执行)

1
2
3
4
5
6
7
8
9
10
** 生成密钥,猛点回车
    $ ssh-keygen -t rsa
 
** 分发公钥
    $ ssh-copy-id linux01;  ssh-copy-id linux02; ssh-copy-id linux03;
 
** ssh访问测试
    ssh linux01
    ssh linux02
    ssh linux03

九、关闭后两台机器的界面(linux02,linux03)

 

1
2
3
4
CentOS6:
    $ sudo vi /etc/inittab
CentOS7:
    $ sudo systemctl set-default multi-user.target

 

 

十、安装VMTool(只安装在linux01)

 

十一、配置时间服务器

 (1) 检查时区

1
2
3
4
$ date -R
    ** 如果时区不是+0800东八区区时的话,需要手动纠正
    $ sudo rm -rf /etc/localtime
    $ sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

(2)检查软件包

1
2
3
4
如果ntp工具不存在,则需要使用yum安装
    $ sudo rpm -qa | grep ntp
如果不存在则安装:
    $ sudo yum -y install ntp

(3)先以网络时间为标准,纠正集群的时间服务器的时间

1
$ sudo ntpdate pool.ntp.org

(4)修改ntp配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sudo vi /etc/ntp.conf
                 
修改为如下:
    #允许192.168.1.x网段上的所有机器和当前这台机器进行实践同步
    restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
 
#当该节点丢失网络连接,依然可以作为时间服务器为集群其他节点提供时间同步服务
    server 127.127.1.0
    fudge 127.127.1.0 stratum 10
 
    # Use public servers from the pool.ntp.org project.
    # Please consider joining the pool (http://www.pool.ntp.org/join.html).
    #server 0.centos.pool.ntp.org iburst
    #server 1.centos.pool.ntp.org iburst
    #server 2.centos.pool.ntp.org iburst
    #server 3.centos.pool.ntp.org iburst

 (5)重启ntp服务

1
2
3
4
5
6
CentOS6:
    $ sudo chkconfig ntpd on
    $ sudo service ntpd restart
CentOS7:
    $ sudo systemctl enable ntpd.service
    $ sudo systemctl restart ntpd.service

 

注意:出现报错为:the NTP socket is in use, exiting

解决办法:

1
2
3
service ntpd stop
 
ntpdate ntp.api.bz

(6)使用从节点,手动同步时间(linux02,linux03) 

1
$ sudo ntpdate linux01

(7)设置时间同步任务(linux02,linux03)

1
2
3
4
5
6
7
8
9
10
11
# crontab -e 编辑时间任务
    (尖叫提示:上面的#号代表root用户,下边的#号代表shell注释)
# .------------------------------------------minute(0~59)
# | .----------------------------------------hours(0~23)
# | | .--------------------------------------day of month(1~31)
# | | | .------------------------------------month(1~12)
# | | | | .----------------------------------day of week(0~6)
# | | | | | .--------------------------------command
# | | | | | |
# | | | | | |
*/10 * * * * /usr/sbin/ntpdate linux01

 (8)重启定时任务

1
2
3
4
CentOS6:
    # service crond restart
CentOS7:
    # systemctl restart crond.service

 十二、备份配置好的集群、(必须养成定期备份的习惯)

先关机:
$ sudo shutdown -h now
按照时间新建文件夹,将已经安装完成的3台虚拟机,备份到该文件夹中。



apache hadoop 官方文档

** Hadoop介绍
  ** HDFS:分布式存储文件
    角色:NameNode和DataNode
  ** YARN:分布式资源调度框架(Hadoop2.x以上才引用)
    角色:ResourceManager和NodeManager
  ** MapReduce:分布式数据处理框架

一、下载hadoop拉到linux中,并解压到指定目录

官方下载地址

tips:用smb把hadoop压缩包从window拉到linux时,请注意smb的登陆用户,会导致后面一堆坑,慎用root登陆smb。

(1)将压缩包拉到/home/admin/softwares/installtions/目录

   (2) 解压到/home/admin/modules目录

1
tar -zxf hadoop-2.7.2.tar.gz -C /home/admin/modules/

 

二、配置环境变量 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
vim /etc/profile
 
在最下面添加
 
export HADOOP_HOME=/home/admin/modules/hadoop-2.7.2/bin
export PATH=$PATH:$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
 
 
保存退出后
 
source /etc/profile

  

配置成功后可用 hadoop version 查看版本,注意没有横杠!

 

三、配置

** 最终配置效果:
linux01:namenode、datanode、nodemanager 

linux02:resourcemanager  、datanode 、nodemanager 

linux03:datanode、nodemanager

(1)删除windows脚本

1
2
3
** 进入到hadoop的etc/hadoop目录下
         
$ rm -rf *.cmd

  

(2)重命名文件

1
$ mv mapred-site.xml.template mapred-site.xml

 

(3)配置evn文件

查看java路径:

echo $JAVA_HOME,我的机器:/home/admin/modules/jdk1.8.0_131

配置hadoop-env.sh


配置yarn-env.sh


配置mapred-env.sh

 

(4)配置site文件

配置 core-site.xml

1
2
3
4
5
6
7
8
9
10
11
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://linux01:8020</value>
    </property>
 
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/admin/modules/hadoop-2.7.2/hadoop-data</value>
    </property>
</configuration>      

  

配置hdfs-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<configuration>
    <!-- 指定数据冗余份数 -->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
                         
    <!-- 关闭权限检查-->
    <property>
        <name>dfs.permissions.enable</name>
        <value>false</value>
    </property>
 
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>linux03:50090</value>
    </property>
 
    <property>
        <name>dfs.namenode.http-address</name>
        <value>linux01:50070</value>
    </property>
 
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
</configuration>

 配置yarn-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<configuration>
        <!-- Site specific YARN configuration properties -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
 
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>linux02</value>
    </property>
 
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
 
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>86400</value>
    </property>
 
    <property>
        <name>yarn.log.server.url</name>
        <value>http://linux01:19888/jobhistory/logs/</value>
    </property>
 
</configuration>       

  配置mapred-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>linux01:10020</value>
    </property>
 
    <!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>linux01:19888</value>
    </property>
</configuration>

  

(5)配置slaves文件

四、分发安装配置完成的hadoop到linux02以及linux03

1
2
$ scp -r hadoop-2.7.2/ linux02:/home/admin/modules/
$ scp -r hadoop-2.7.2/ linux03:/home/admin/modules/

  

五、 格式化namenode(在hadoop-2.7.2的根目录下执行)

1
$ bin/hdfs namenode -format

  如果正常格式化会生成haddop-data文件夹

六、启动服务

1
2
3
4
5
6
HDFS:(linux01)
    $ sbin/start-dfs.sh
YARN:(一定要在ResourceManager所在机器启动,linux02)
    $ sbin/start-yarn.sh
JobHistoryServer:(linux01)
    $ ssh admin@linux01 '/home/admin/modules/hadoop-2.7.2/sbin/mr-jobhistory-daemon.sh start historyserver' 

常见启动失败情况:

(1)hadoop处于安全模式,namenode启动失败,参考链接

  解决:磁盘空间不足,需要手动释放资源后再用命令 hdfs dfsadmin -safemode leave  离开安全模式

 

 全部完成后查看:

在浏览器输入192.168.1.213:50070,如果不在安全模式证明namenode启动正常

 

输入192.168.1.214:8088

七、关闭全部服务

1
$ sbin/stop-all.sh

  

八、将系统变量追加到用户变量中(3台机器都要操作)

1
2
3
$ cd ~
 
$ cat /etc/profile >> .bashrc

 生效 $ source ~/.bashrc

九、编写脚本批量操作三台机器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ cd ~
$ mkdir tools
$ vim /tools/jpsutil.sh
 
添加批量查看jps服务的脚本
 
#!/bin/bash
for in admin@linux01 admin@linux02 admin@linux03
do
    echo "==================$i==================="
    ssh $i 'jps'
done
 
保存后查看
 
sh jpsutil.sh

  

十、遇到问题

  关闭虚拟机后重启,重启集群时,namenode启动失败,需要使用命令:bin/hdfs namenode -format

格式化,才能启动。

  格式化后datanode又有异常,需要把/hadoop-2.7.2/hadoop-data/dfs/name/current/VERSION里面的clusterID复制下来,依次替换/hadoop-2.7.2/hadoop-data/dfs/data/current/VERSION里的clusterID,再执行:sbin/hadoop-daemon.sh start datanode(全部机器都要操作)

  格式化会导致集群原本存储的数据全部丢失,如何正常关机后,正常开启集群,这个有待研究。


HQY
« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。