大数据系列(一)之hadoop介绍及集群搭建
文章最早发布来源,来源本人原创初版,同一个作者:
https://mp.weixin.qq.com/s/fKuKRrpmHrKtxlCPY9rEYg
系列介绍:本系列针对大数据这门综合技术逐一展开。
大数据必备技术栈
hadoop简介
大数据技术涉及两方面,一是数据存储,二是数据运算
hadoop是一种分布式框架,可利用集群对用户业务逻辑海量数据进行分布式处理,hadoop是一个生态圈,跟springcloud概念类似,包含多种技术,如下表
组件技术 | 描述 |
---|---|
hdfs | 分布式文件系统 |
MapReduce | 分布式计算框架 |
YARN | 分布式资源管理框架 |
zookeeper | 分布式协调服务 |
Oozie | 作业调度系统 |
Hive | 数据仓库工具 |
Hbase | 分布式数据库 |
Flume | 数据采集工具 |
Sqoop | 数据传输工具 |
后面会对hadoop生态圈中的技术细节进行展开。本文主要介绍hadoop集群的搭建及hdfs分布式文件系统。
hadoop版本介绍
目前hadoop版本到了hadoop3.0,hdfs和MapReduce是hadoop1.0的核心组件;
hadoop2.0版本多了YARN组件;
yarn负责作业调度与集群资源管理的框架。
1、基础环境准备
本文例子所用环境为本地虚拟机搭建,具体虚拟机搭建方式本文不做介绍。
本地环境地址如下:
ip地址 | 主机名 |
---|---|
192.168.40.110 | zht-master |
192.168.40.111 | zht-slave1 |
192.168.40.112 | zht-slave2 |
1.1 建立主机名与ip的映射关系
进入每一台服务器后台,修改hosts配置文件如下
[root@localhost ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.40.110 zht-master
192.168.40.111 zht-slave1
192.168.40.112 zht-slave2
1.2 配置免密登录
免密登录是为了后面hadoop集群各服务器之间的通信,操作如下,每一台服务器执行命令ssh-keygen -t rsa,生成私钥和公钥。
[root@localhost ~]# ssh -keygen -t rsa
Bad escape character 'ygen'.
[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:R8PLMMcZNMkA0TUCXUARhA/AXkQcgycTBUZh52mYwiw root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| oO@@@OXB. |
| o o==*oo+o= |
|E +.o=+oo B |
| . ... .* o |
| S + |
| . |
| |
| |
| |
+----[SHA256]-----+
[root@localhost ~]#
命令执行之后会生成id_rsa(私钥)和id_rsa.pub(公钥),每台机器需要将对应的公钥放入authorized_keys文件中,具体操作如下
(1) 将master机器的公钥写入文件authorized_keys
[root@localhost .ssh]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[root@localhost .ssh]# ll
total 12
-rw-r--r--. 1 root root 408 Sep 19 03:54 authorized_keys
-rw-------. 1 root root 1675 Sep 19 03:32 id_rsa
-rw-r--r--. 1 root root 408 Sep 19 03:32 id_rsa.pub
(2) 将对应的master机器上的authorized_keys 文件拷贝到zht-slave1机器上,具体命令如下所示:
[root@zht-master .ssh]# ll
total 12
-rw-r--r--. 1 root root 408 Sep 19 03:54 authorized_keys
-rw-------. 1 root root 1675 Sep 19 03:32 id_rsa
-rw-r--r--. 1 root root 408 Sep 19 03:32 id_rsa.pub
[root@zht-master .ssh]# scp authorized_keys root@zht-slave1:/root/.ssh/
The authenticity of host 'zht-slave1 (192.168.40.111)' can't be established.
ECDSA key fingerprint is SHA256:KIh8ybIUEHuuxE/f+oAc2/y3Vr9KWxK4behad8Rsq9s.
ECDSA key fingerprint is MD5:bf:09:7e:c6:8f:ea:1b:bf:48:e9:15:01:57:c9:62:2e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'zht-slave1,192.168.40.111' (ECDSA) to the list of known hosts.
root@zht-slave1's password:
authorized_keys 100% 408 112.1KB/s 00:00
[root@zht-master .ssh]#
(3)将zht-slave1上的公钥追加到对应的authorized_keys 文件中,并且将文件拷贝到zht-slave2机器上对应路径下
[root@zht-slave1 .ssh]# ll
total 12
-rw-r--r--. 1 root root 408 Sep 19 04:15 authorized_keys
-rw-------. 1 root root 1679 Sep 19 04:14 id_rsa
-rw-r--r--. 1 root root 397 Sep 19 04:14 id_rsa.pub
[root@zht-slave1 .ssh]# cat id_rsa.pub >> authorized_keys
[root@zht-slave1 .ssh]#
[root@zht-slave1 .ssh]#
[root@zht-slave1 .ssh]#
[root@zht-slave1 .ssh]#
[root@zht-slave1 .ssh]#
[root@zht-slave1 .ssh]#
[root@zht-slave1 .ssh]# scp authorized_keys root@zht-slave2:/root/.ssh/
The authenticity of host 'zht-slave2 (192.168.40.112)' can't be established.
ECDSA key fingerprint is SHA256:KIh8ybIUEHuuxE/f+oAc2/y3Vr9KWxK4behad8Rsq9s.
ECDSA key fingerprint is MD5:bf:09:7e:c6:8f:ea:1b:bf:48:e9:15:01:57:c9:62:2e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'zht-slave2,192.168.40.112' (ECDSA) to the list of known hosts.
root@zht-slave2's password:
authorized_keys 100% 805 110.4KB/s 00:00
[root@zht-slave1 .ssh]#
(4)将对应的zht-slave2机器上的公钥追加到authorized_keys 文件,然后将此机器上的authorized_keys 文件远程拷贝到之前的zht-master\zht-slave1机器上对应路径。以上这些步骤可以直接把每台机器上的公钥写入对应文件,然后将文件拷贝到各个服务器路径上面即可。
对应的文件内容每台机器一致如下
[root@zht-slave1 .ssh]# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAABAQDDQwjhSe9J0Qqe9XytVMSc1GdH4UgP3YDT5aHsWB4Fs9Vx3c3Zyma+8xswvh/FS8FE8L/l+JYlFsn5Fr94DIuERfoku63oM1NS/1j1yZ3nPCQhpliX0yhN6MRibRI+S+Zsi4HKpVxB7XlBP4+SQ1/prsMJfuj27pc7vNlHP1YW39R4EGTjTCRHx6XON0xSXqjkuMqCOTlM2YENE5TGrQ+DRISdqG5r+A0MHdtNytiCuJjTqHyF+0/FU0VEMP4VDlJKCz5nIVvjW/3RznwomzcgUxCtc9eoOFOsuUejYCeX24tMIcSWameN+LKv3o9cW/y8cr+Q5T6Z6dtHPuIcoOp root@zht-master
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAABAQDMyUodRqtQE1z4O8AE0BtnPbfQXTzrx/lsv2G3+pswpaPtmEfTPRGA8DznQSd7g0T96n4sZ7bikP5ZqP9FYKfr+NNgXctaNYssGHABta+YpFe48rTu60r8jNqiQqQAzKLVqQy0sHqWHltB9sMDLciN7QtzH0lhaI/BOY5SzH9gMpshXmXu+ipcqSdOgL8kTfkCiUrrRTY0omAdnBEvNkMbylZbeqZXP5Bp/YPte/7L0EQuzzStFF6xxhv3DOBv5wm/1Q7TUHhxOpNeVh+LspeZoeu1DmRJrG5zwsbPcv/fgwJIEItvBw1CUmJ3qzLhxW9b9V28KI+0xJ1WrgrlOE3 root@zht-slave1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAABAQCmX++hFiqcSvMXg+ZUw2eC9ahwt1VwdymZkCEFipNHyYYfKiUvDxG1ip0RlQhYe8uNtAOanzbjbDHAkspenM88SUxe9f5XximOSlG34t0xNCVDHkKuhUgUlckjA+QoSS6uEikFLjGSJKqkXAmtIc+PmkG10Dm0t27pZIuKJ/EwuA2sM04t0HLWqNc0D7HwdtTeXJUlsPg10fKhu50eI+VoiNLRqk8DPJr6+5FaqcDiSKgR8DEUnRmqNL8iC/UpRhpAaIKymDd6Yr/hhKgRam1qTnUUdUPwuKm2fqzY/K3XQu4JaZsAyinJJg5K9fAN676xcodfwhVMJjbZVtGNnxb root@zht-slave2
这里配置免密登录还有其他方式,自行选择。
2、hadoop集群搭建
2.1 核心配置文件
文件名 | 功能介绍 |
---|---|
hadoop-env.sh | 配置hadoop运行所需的环境变量 |
yarn-env.sh | 配置YARN运行所需的环境变量 |
core-site.xml | hadoop核心全局配置文件 |
hdfs-site.xml | hdfs配置文件,继承core-site.xml |
mapred-site.xml | MapReduce配置文件 |
yarn-site.xml | yarn配置文件 |
2.2 安装包下载
官网下载地址
https://hadoop.apache.org/releases.html
本文搭建的版本为2.10.0,最新版本到了3.3.0是2020年6月发布的
安装包下载地址:
https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-2.10.0/hadoop-2.10.0.tar.gz
如果下载很慢可以通过百度网盘下载,如下所示
链接:https://pan.baidu.com/s/15fhCGIBEddTRPDDwmymwTQ
提取码:dbu3
2.3 上传发布包
1 、添加用户hadoop
[root@zht-master hadoop]# sudo adduser hadoop
[root@zht-master hadoop]# passwd hadoop
Changing password for user hadoop.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
2、添加hadoop用户组
[root@zht-master hadoop]# sudo usermod -a -G hadoop hadoop
3、文件上传
创建/tpdata/hadoop目录,将hadoop包上传到对应目录下面
-rw-r--r--. 1 root root 392115733 Sep 19 23:32 hadoop-2.10.0.tar.gz
[root@zht-master hadoop]# pwd
/tpdata/hadoop
4、解压文件
tar -xzvf hadoop-2.10.0.tar.gz
解压之后文件组合如下:
[root@zht-master hadoop]# cd hadoop-2.10.0
[root@zht-master hadoop-2.10.0]# ll
total 128
drwxr-xr-x. 2 12334 systemd-journal 194 Oct 22 2019 bin
drwxr-xr-x. 3 12334 systemd-journal 20 Oct 22 2019 etc
drwxr-xr-x. 2 12334 systemd-journal 106 Oct 22 2019 include
drwxr-xr-x. 3 12334 systemd-journal 20 Oct 22 2019 lib
drwxr-xr-x. 2 12334 systemd-journal 239 Oct 22 2019 libexec
-rw-r--r--. 1 12334 systemd-journal 106210 Oct 22 2019 LICENSE.txt
-rw-r--r--. 1 12334 systemd-journal 15841 Oct 22 2019 NOTICE.txt
-rw-r--r--. 1 12334 systemd-journal 1366 Oct 22 2019 README.txt
drwxr-xr-x. 3 12334 systemd-journal 4096 Oct 22 2019 sbin
drwxr-xr-x. 4 12334 systemd-journal 31 Oct 22 2019 share
5、修改文件属组(非必须)
drwxr-xr-x. 9 12334 systemd-journal 149 Oct 22 2019 hadoop-2.10.0
-rw-r--r--. 1 root root 392115733 Sep 19 23:32 hadoop-2.10.0.tar.gz
[root@zht-master hadoop]# chown -R hadoop:hadoop hadoop-2.10.0
[root@zht-master hadoop]# ll
total 382928
drwxr-xr-x. 9 hadoop hadoop 149 Oct 22 2019 hadoop-2.10.0
-rw-r--r--. 1 root root 392115733 Sep 19 23:32 hadoop-2.10.0.tar.gz
6、添加hadoop的环境变量配置,vi /etc/profile
export HADOOP_HOME=/tpdata/hadoop/hadoop-2.10.0
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
执行 source /etc/profile 使配置生效
2.4 修改配置文件
2.4.1 hadoop-env.sh
进入 zht-master 机器中安装的hadoopj解压之后的目录下
/tpdata/hadoop/hadoop-2.10.0/etc/hadoop
找到文件中的JAVA_HOME配置,修改对应的jdk路径,这个是hadoop启动时需要的,能够执行守护进程
# The java implementation to use.
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_251
2.4.2 core-site.xml
修改文件中configuration中的内容,具体如下:
<configuration>
<property>
<!--临时数据存储目录-->
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<!--hdfs文件系统的名称,对应hadoop集群的主节点-->
<name>fs.default.name</name>
<value>hdfs://zht-master:9000</value>
</property>
<property>
<!--hdfs的缓存大小-->
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
</configuration>
2.4.3 hdfs-site.xml
此文件用于设置HDFS的NameNode和DataNode进程
/tpdata/hadoop/hadoop-2.10.0/hdfs/name 为hdfs名字节点存储目录,可以自定义创建;
/tpdata/hadoop/hadoop-2.10.0/hdfs/data 为hdfs数据节点存储数据块时的存放位置,可以自定义创建
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/tpdata/hadoop/hadoop-2.10.0/hdfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/tpdata/hadoop/hadoop-2.10.0/hdfs/data</value>
<final>true</final>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>zht-master:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
2.4.4 mapred-site.xml
此文件是MapReduce的核心配置文件
复制对应mapred-site.xml.template 模板文件到mapred-site.xml,然后修改配置
[root@zht-master hadoop]# cp mapred-site.xml.template mapred-site.xml
添加如下配置:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
<property>
<name>mapreduce.jobtracker.http.address</name>
<value>zht-master:50030</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>zht-master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>zht-master:19888</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>http://zht-master:9001</value>
</property>
2.4.5 yarn-site.xml
此文件为YARN集群的管理者,修改添加如下配置
<property>
<!--启动YARN的ResourceManager服务的主机-->
<name>yarn.resourcemanager.hostname</name>
<value>zht-master</value>
</property>
<property>
<!--NodeManager启动时加载Shuffle服务-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
2.4.6 配置从节点配置文件
1、将主节点上的hadoop拷贝到从节点
scp -r hadoop-2.10.0 root@zht-slave1:/tpdata/hadoop/
scp -r hadoop-2.10.0 root@zht-slave2:/tpdata/hadoop/
2、将主节点上的/etc/profile拷贝到从节点
scp /etc/profile root@zht-slave1:/etc/profile
scp /etc/profile root@zht-slave2:/etc/profile
3、从节点执行source /etc/profile 命令使环境变量生效
2.4.7 修改主节点上的slaves文件
此文件用于记录hadoop集群所有从节点的主机名,来配合使用脚本全部启动集群的从节点,但是必须要注意个节点之间是SSH免密登录的
cd /tpdata/hadoop/hadoop-2.10.0/etc/hadoop
[root@zht-master hadoop]# vi slaves
zht-master
zht-slave1
zht-slave2
2.4.8 格式化文件系统
初次启动集群需要对主节点进行初始化处理,后续再启动时不需要再次执行
[root@zht-master hadoop]# hdfs namenode -format
执行上述命令之后如下图所示则表明文件系统格式化成功
3 集群启动及查看
在主节点上依次执行执行命令start-dfs.sh,启动文件系统;
执行命令start-yarn.sh ,启动YARN
[root@zht-master hadoop-2.10.0]# start-dfs.sh
启动完成后查看主节点hadoop的进程,命令jps
[root@zht-master sbin]# jps
3202 SecondaryNameNode
3894 NodeManager
3799 ResourceManager
3927 Jps
3464 NameNode
3054 DataNode
[root@zht-master sbin]#
从节点hadoop进程
[root@zht-slave1 tpdata]# jps
3073 Jps
2899 NodeManager
2677 DataNode
[root@zht-slave1 tpdata]#
下期主题:hadoop之分布式文件系统探索