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
# 进入网口目录
[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 设置主机名
# 编辑hostname文件
[root@master network-scripts]# vim /etc/hostname
# 文件内容即为主机名,例如:
mater
# 重启就生效
2.5.1.3 关闭防火墙
# 查看防火墙状态
[root@master network-scripts]# systemctl status firewalld
# 永久关闭防火墙
[root@master network-scripts]# systemctl disable firewalld.service
2.5.1.4 ssh无密码登录
ssh-keygen -t rsa
cp ~/.ssh/xxx.pub ~/.ssh/authorized_keys
在目录~/.ssh/下会生成3个文件,其中.pub结尾的文件为ssh公钥,将该文件复制到需要远程登录机器的
~/.ssh/authorized_keys该目录下。
2.5.1.5 安装JDK
# 解压
tar -xzvf jdk-8u202-linux-x64.tar.gz
# 修改名字
mv jdk1.8.0_202/ jdk1.8
设置环境变量
[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是否安装成功
[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目录需要配置到环境变量中。
-
etc/hadoop:hadoop中的配置文件,安装hadoop需要修改该目录下的文件。
1 . hadoop-env.sh
export JAVA_HOME=/data/soft/jdk1.8
export Hadoop_LOG_DIR=/data/hadoop_repo/logs/hadoop
2 . core_site.xml
<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
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value> #只有一台集群
</property>
</configuration>
4 . mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5 . yarn-site.xml
<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
master
2.5.1.7 格式化HDFS文件系统
bin/hdfs namenode -format # 只能执行一次,类似于格式化硬盘,如果要重装需要先删掉/data/hadoop_repo这个目录
2.5.1.8 启动伪分布集群
sbin/start-all.sh # 启动所有服务
消除错误信息(缺失很多用户信息)
1 . start-dfs.sh
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
2 . stop-dfs.sh
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
3 . start-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
4 . stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
重新启动集群
sbin/start-all.sh # 启动所有服务
输入jps查看启动的服务
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 关闭伪分布集群
[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
# 进入网口目录
[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 **设置主机名
# 编辑hostname文件
[root@master network-scripts]# vim /etc/hostname
# 文件内容即为主机名,例如:
mater
# 重启就生效
2.5.2.3 **关闭防火墙
# 查看防火墙状态
[root@master network-scripts]# systemctl status firewalld
# 永久关闭防火墙
[root@master network-scripts]# systemctl disable firewalld
2.5.2.4 **ssh无密码登录
ssh-keygen -t rsa
在目录~/.ssh/下会生成3个文件,其中.pub结尾的文件为ssh公钥,将该文件复制到需要远程登录机器的
~/.ssh/authorized_keys该目录下。
2.5.2.5 **安装JDK
# 解压
tar -xzvf jdk-8u202-linux-x64.tar.gz
# 修改名字
mv jdk1.8.0_202/ jdk1.8
设置环境变量
export JAVA_HOME=/data/soft/jdk1.8
export PATH=.:$JAVA_HOME/bin:$PATH
查看java是否安装成功
[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文件
作用:使得机器之间能够相互识别
192.168.128.130 master
192.168.128.131 slave1
192.168.128.132 slave2
192.168.128.1 win
2.5.2.7 **同步时间
使得三台机器时间一致,避免在工作的时候出现问题(三台机器都要做)
# 下载ntpdate命令
yum install -y ntpdate
同步时间服务器(ntp.sjtu.edu.cn
)
ntpdate -u ntp.sjtu.edu.cn
添加到定时任务,使得每次开启集群自动同步时间
vim /etc/crontab
* * * * * root /usr/sbin/ntpdate -u ntp.sjtu.edu.cn
2.5.2.8 主节点无密码登录从节点
使用
scp工具将主节点的公钥信息发送给从节点
scp ~/.ssh/authorized_keys slave1:~/
scp ~/.ssh/authorized_keys slave2:~/
然后进入从节点将主节点的公钥追加到自己公钥后面
[root@slave1 ~]# cat authorized_keys >> ~/.ssh/authorized_keys
[root@slave2 ~]# cat authorized_keys >> ~/.ssh/authorized_keys
实现无密码登录
[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 . hadoop-env.sh
export JAVA_HOME=/data/soft/jdk1.8
export Hadoop_LOG_DIR=/data/hadoop_repo/logs/hadoop
2 . core_site.xml
<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
<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
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5 . yarn-site.xml
<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
slave1
slave2
2.5.2.10 修改分布式集群启动脚本
消除错误信息(缺失很多用户信息)
1 . start-dfs.sh
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
2 . stop-dfs.sh
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
3 . start-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
4 . stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
2.5.2.11 将修改好的hadoop文件发送给从节点
[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文件系统
bin/hdfs namenode -format # 只能执行一次,类似于格式化硬盘,如果要重装需要先删掉/data/hadoop_repo这个目录
2.5.2.13 启动hadoop
只需要在主节点中运行下面代码即可
[root@master hadoop-3.2.0]# sbin/start-all.sh
2.5.2.14 Hadoop的客户端节点
- 在实际工作中不建议直接连接集群中的节点来操作集群,直接把集群中的节点暴露给普通开发人员是不安全的
- 建议在业务机器上安装Hadoop,这样就可以在业务机器上操作Hadoop集群了,此机器就被称为是Hadoop的客户端节点