Java数据类型与Hadoop数据类型的对应关系
Java |
Hadoop |
意义 |
Long |
LongWritable |
整数型 |
String |
Text |
字符串 |
|
|
1. 走进大数据
大数据4V特征
- Volume(量大):存储量大,计算量大
- Variety(多样):来源多,格式多
- Velocity(快速):数据增长速度快,处理速度要求快
- Value(价值):价值密度低,和数据总量的大小成反比
2. Hadoop
2.1 什么是Hadoop
我们生活在一个数据大爆炸的时代,数据飞快的增长,急需解决海量数据的存储和计算问题
Hadoop适合海量数据分布式存储和分布式计算。
2.2 Hadoop发行版介绍
目前Hadoop已经演变为大数据的代名词,形成了一套完整的大数据生态系统,所以针对Hadoop就出现了很多发行版
Apache Hadoop:官方版本,开源
Cloudera Hadoop(CDH):商业版本,对官方版本做了一些优化,提供收费技术支持,提供界面操作,方便集群运维管理
HortonWorks(HDP):开源,提供界面操作,方便运维管理
注意:目前HDP已经被CDH收购,都属于一个公司的产品
建议在实际工作中搭建大数据平台时选择CDH或者HDP,方便运维管理。
2.3 Hadoop版本演变历史
Hadoop1.x ——Hadoop2.x——Hadoop3.x
Hadoop3.x的细节优化
Java改为支持8及以上
HDFS支持纠删码
HDFS支持多NameNode
MR任务级本地优化
多重服务默认端口变更
2.4 Hadoop三大核心组件介绍
Hadoop主要包括三大组件:HDFS+MapReduce+YARN
- HDFS负责海量数据的分布式存储
- MapReduce是一个计算模型,负责海量数据的分布式计算
- YARN主要负责集群资源的管理和调度
2.5 Hadoop集群安装部署
- 伪分布集群安装:使用一台Linux机器【建议在后续学习阶段使用伪分布集群】
- 分布式集群安装:使用三台Linux机器
2.5.1 伪分布集群
2.5.1.1 设置静态IP
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
| # 进入网口目录 [root@master network-scripts]# cd /etc/sysconfig/network-scripts/ # 编辑ifcfg-ens33文件 [root@master network-scripts]# vim ifcfg-ens33 # 修改文件内容为 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static # 设置静态IP DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=ff5bf7ab-9679-4a06-bfc6-e2c91ed99c06 DEVICE=ens33 ONBOOT=yes # 是否开机启用
IPADDR=192.168.128.130 # IP地址 GATEWAY=192.168.128.2 # 网关 DNS1=192.168.128.2 # DNS服务器地址
|
2.5.1.2 设置主机名
1 2 3 4 5
| # 编辑hostname文件 [root@master network-scripts]# vim /etc/hostname # 文件内容即为主机名,例如: mater # 重启就生效
|
2.5.1.3 关闭防火墙
1 2 3 4
| # 查看防火墙状态 [root@master network-scripts]# systemctl status firewalld # 永久关闭防火墙 [root@master network-scripts]# systemctl disable firewalld.service
|
2.5.1.4 ssh无密码登录
1 2
| ssh-keygen -t rsa cp ~/.ssh/xxx.pub ~/.ssh/authorized_keys
|
在目录~/.ssh/下会生成3个文件,其中.pub结尾的文件为ssh公钥,将该文件复制到需要远程登录机器的
~/.ssh/authorized_keys该目录下。
2.5.1.5 安装JDK
1 2 3 4
| # 解压 tar -xzvf jdk-8u202-linux-x64.tar.gz # 修改名字 mv jdk1.8.0_202/ jdk1.8
|
设置环境变量
1 2 3 4 5 6
| [root@master network-scripts]# vim /etc/profile # 在底部加上 export JAVA_HOME=/data/soft/jdk1.8 export PATH=.:$JAVA_HOME/bin:$PATH # 重新载入profile文件 source /etc/profile
|
查看java是否安装成功
1 2 3 4
| [root@slave1 soft]# java -version java version "1.8.0_202" Java(TM) SE Runtime Environment (build 1.8.0_202-b08) Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
|
2.5.1.6 安装Hadoop
- bin:包含操作HDFS和YARN的一些脚本。
- sbin:包含启动和停止集群中的组件。
bin和sbin目录需要配置到环境变量中。
1 2
| export JAVA_HOME=/data/soft/jdk1.8 export Hadoop_LOG_DIR=/data/hadoop_repo/logs/hadoop
|
2 . core_site.xml
1 2 3 4 5 6 7 8 9 10
| <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop_repo</value> </property> </configuration>
|
3 . hdfs-site.xml
1 2 3 4 5 6
| <configuration> <property> <name>dfs.replication</name> <value>1</value> #只有一台集群 </property> </configuration>
|
4 . mapred-site.xml
1 2 3 4 5 6
| <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
|
5 . yarn-site.xml
1 2 3 4 5 6 7 8 9 10
| <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> </configuration>
|
6 . workers
2.5.1.7 格式化HDFS文件系统
1
| bin/hdfs namenode -format # 只能执行一次,类似于格式化硬盘,如果要重装需要先删掉/data/hadoop_repo这个目录
|
2.5.1.8 启动伪分布集群
1
| sbin/start-all.sh # 启动所有服务
|
消除错误信息(缺失很多用户信息)
1 . start-dfs.sh
1 2 3 4
| HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
|
2 . stop-dfs.sh
1 2 3 4
| HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
|
3 . start-yarn.sh
1 2 3
| YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
|
4 . stop-yarn.sh
1 2 3
| YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
|
重新启动集群
1
| sbin/start-all.sh # 启动所有服务
|
输入jps查看启动的服务
1 2 3 4 5 6 7
| jps 14560 ResourceManager 15700 Jps 14058 DataNode 14282 SecondaryNameNode 14714 NodeManager 13885 NameNode
|
如果看到6大组件都启动成功说明,集群启动成功。
此时在本地主机内输入http://master:8088/cluster 和 http://master:9870/dfshealth.html#tab-overview 可查看hadoop中的YEAR和HDFS服务页面。
设置主机名访问
修改主机hosts文件,加上
192.168.128.130 master
2.5.1.9 关闭伪分布集群
1 2 3 4 5 6 7 8 9 10 11 12 13
| [root@master hadoop-3.2.0]# sbin/stop-all.sh Stopping namenodes on [master] 上一次登录:二 11月 30 15:02:43 CST 2021从 192.168.128.1pts/2 上 Stopping datanodes 上一次登录:二 11月 30 15:47:32 CST 2021pts/1 上 Stopping secondary namenodes [master] 上一次登录:二 11月 30 15:47:34 CST 2021pts/1 上 Stopping nodemanagers 上一次登录:二 11月 30 15:47:36 CST 2021pts/1 上 Stopping resourcemanager 上一次登录:二 11月 30 15:47:38 CST 2021pts/1 上 [root@master hadoop-3.2.0]# jps 16638 Jps
|
2.5.2 分布式集群
所有机器完成2.5.1.1~2.5.1.5步骤。
也可以一台机器完成后再克隆2台,修改hostname和ip即可。
2.5.2.1 **设置静态IP
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
| # 进入网口目录 [root@master network-scripts]# cd /etc/sysconfig/network-scripts/ # 编辑ifcfg-ens33文件 [root@master network-scripts]# vim ifcfg-ens33 # 修改文件内容为 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static # 设置静态IP DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=ff5bf7ab-9679-4a06-bfc6-e2c91ed99c06 DEVICE=ens33 ONBOOT=yes # 是否开机启用
IPADDR=192.168.128.130 # IP地址,不同机器IP地址不能相同 GATEWAY=192.168.128.2 # 网关 DNS1=192.168.128.2 # DNS服务器地址
|
2.5.2.2 **设置主机名
1 2 3 4 5
| # 编辑hostname文件 [root@master network-scripts]# vim /etc/hostname # 文件内容即为主机名,例如: mater # 重启就生效
|
2.5.2.3 **关闭防火墙
1 2 3 4
| # 查看防火墙状态 [root@master network-scripts]# systemctl status firewalld # 永久关闭防火墙 [root@master network-scripts]# systemctl disable firewalld
|
2.5.2.4 **ssh无密码登录
在目录~/.ssh/下会生成3个文件,其中.pub结尾的文件为ssh公钥,将该文件复制到需要远程登录机器的
~/.ssh/authorized_keys该目录下。
2.5.2.5 **安装JDK
1 2 3 4
| # 解压 tar -xzvf jdk-8u202-linux-x64.tar.gz # 修改名字 mv jdk1.8.0_202/ jdk1.8
|
设置环境变量
1 2
| export JAVA_HOME=/data/soft/jdk1.8 export PATH=.:$JAVA_HOME/bin:$PATH
|
查看java是否安装成功
1 2 3 4
| [root@slave1 soft]# java -version java version "1.8.0_202" Java(TM) SE Runtime Environment (build 1.8.0_202-b08) Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
|
2.5.2.6 **修改/etc/hosts文件
作用:使得机器之间能够相互识别
1 2 3 4
| 192.168.128.130 master 192.168.128.131 slave1 192.168.128.132 slave2 192.168.128.1 win
|
2.5.2.7 **同步时间
使得三台机器时间一致,避免在工作的时候出现问题(三台机器都要做)
1 2
| # 下载ntpdate命令 yum install -y ntpdate
|
同步时间服务器(ntp.sjtu.edu.cn
)
1
| ntpdate -u ntp.sjtu.edu.cn
|
添加到定时任务,使得每次开启集群自动同步时间
1 2
| vim /etc/crontab * * * * * root /usr/sbin/ntpdate -u ntp.sjtu.edu.cn
|
2.5.2.8 主节点无密码登录从节点
使用
scp工具将主节点的公钥信息发送给从节点
1 2
| scp ~/.ssh/authorized_keys slave1:~/ scp ~/.ssh/authorized_keys slave2:~/
|
然后进入从节点将主节点的公钥追加到自己公钥后面
1 2
| [root@slave1 ~]# cat authorized_keys >> ~/.ssh/authorized_keys [root@slave2 ~]# cat authorized_keys >> ~/.ssh/authorized_keys
|
实现无密码登录
1 2 3 4 5 6 7 8
| [root@master /]# ssh slave1 Last login: Tue Nov 30 17:20:35 2021 from master [root@slave1 ~]# exit 登出 Connection to slave1 closed. [root@master /]# ssh slave2 Last login: Tue Nov 30 17:17:54 2021 from master [root@slave2 ~]#
|
2.5.2.9 hadoop安装
1 2
| export JAVA_HOME=/data/soft/jdk1.8 export Hadoop_LOG_DIR=/data/hadoop_repo/logs/hadoop
|
2 . core_site.xml
1 2 3 4 5 6 7 8 9 10
| <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop_repo</value> </property> </configuration>
|
3 . hdfs-site.xml
1 2 3 4 5 6 7 8 9 10
| <configuration> <property> <name>dfs.replication</name> <value>2</value> #多台机器 </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:50090</value> </property> </configuration>
|
4 . mapred-site.xml
1 2 3 4 5 6
| <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
|
5 . yarn-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> </configuration>
|
6 . workers
2.5.2.10 修改分布式集群启动脚本
消除错误信息(缺失很多用户信息)
1 . start-dfs.sh
1 2 3 4
| HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
|
2 . stop-dfs.sh
1 2 3 4
| HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
|
3 . start-yarn.sh
1 2 3
| YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
|
4 . stop-yarn.sh
1 2 3
| YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
|
2.5.2.11 将修改好的hadoop文件发送给从节点
1 2
| [root@master soft]# scp -rq hadoop-3.2.0 slave1:/data/soft/ [root@master soft]# scp -rq hadoop-3.2.0 slave2:/data/soft/
|
2.5.2.12 格式化HDFS文件系统
1
| bin/hdfs namenode -format # 只能执行一次,类似于格式化硬盘,如果要重装需要先删掉/data/hadoop_repo这个目录
|
2.5.2.13 启动hadoop
只需要在主节点中运行下面代码即可
1
| [root@master hadoop-3.2.0]# sbin/start-all.sh
|
2.5.2.14 Hadoop的客户端节点
- 在实际工作中不建议直接连接集群中的节点来操作集群,直接把集群中的节点暴露给普通开发人员是不安全的
- 建议在业务机器上安装Hadoop,这样就可以在业务机器上操作Hadoop集群了,此机器就被称为是Hadoop的客户端节点