1、Volume(大量)
2、Velocity(告诉)
3、Variety(多样)
4、Value(低价值密度)
高可靠性:多个数据副本,不会导致数据丢失
高扩展性:横向扩展
高效性:Hadoop并行工作,加快处理速度
高容错性:能够自动将失败的任务重新分配
1.x HDFS(数据存储)+ MapReduce(计算 + 资源调度) + Common(辅助工具)
2.x HDFS(数据存储)+ MapReduce(计算)+ Yarn(资源调度)+ Common(辅助工具)
解偶
The project includes these modules:
HDFS(Hadoop Distributed File System)
1.NameNode(nn): 存储文件的 元数据,如文件名、文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等。
2.DataNode(dn): 在本地文件系统存储文件块数据,以及块数据的校验和。
——真实数据
3.Secondary NameNode(2nn): 每隔一段时间对NameNode元数据备份。
——辅助NameNode工作,不能替换
1.ResourceManager(RM) ——管理集群中所有资源(每个DataNode上的资源)
(1)处理客户端请求
(2)启动或监控ApplicationMaster
(3)监控Nodemanager
(4)资源的分配和调度
2.NodeManager(NM) ——管理单个节点的资源(单个DataNode资源)
(1)管理单个节点上的资源
(2)处理来自ResourceManager的命令
(3)处理来自ApplicationMaster的命令
3.ApplicationMaster(AM) ——每个MapReduce(MR)任务会启动一个MrAppMaster, 负责为MapReduce向ResourceManager申请资源(MrAppMaster是AM的子类)
(1)负责数据的切分
(2)为应用程序申请资源并分配给内部的任务
(3)任务的监控与容错
4.Container:——对资源的封装,防止资源被侵占
Containe是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等
举例:
运行一个MapReduce任务,MapReduce需要启动2个MapTask 和 1个 ReduceTask,也就是总共3个Task
首先会启动一个MrAppMaster ,需要用到资源,假如2G内存,此时RM会在有资源的NM上分配资源,运行MrAppMaster[此时就有1个container]
接下来 MrAppMaster 会根据MapReduce的情况, 比如需要总共启动3个Task , MrAppMaster会向RM申请资源,假如
一个Task需要1G的内存, RM会在有资源的NM上分配, 来运行Task. 每个Task单独运行,占用1G内存。此时又有3个Container
需要解释的是 MrAppMaster和所有的Task可以运行在不同的服务器.
最后当所有的Task都运行完成后,MrAppMaster会想RM注销自己,RM回收资源。
MapReduce将计算过程分为两个阶段:Map和Reduce
1)Map阶段并行处理输入数据
2)Reduce阶段对Map结果进行汇总
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FhGJIfeB-1587564742487)(/Users/vanas/Library/Application Support/typora-user-images/截屏2020-04-08下午6.44.05.png)]
根据前两篇 设置 然后继续
1)虚拟机配置要求如下:
单台虚拟机:内存4G,硬盘50G,安装必要环境(最小化安装)
补充安装各种指令、
sudo yum install -y epel-release
sudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop
修改克隆虚拟机的静态IP(按照自己机器的网络设置进行修改)
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
2)修改主机名:
修改主机名称
sudo vim /etc/hostname
配置主机名称映射,打开/etc/hosts
sudo vim /etc/hosts
3)关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
4)创建用户
sudo useradd vanas
sudo passwd 123456
5)配置用户具有root权限
sudo vi /etc/sudoers
修改/etc/sudoers文件,找到下面一行(91行),在root下面添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
Vanas ALL=(ALL) NOPASSWD:ALL
主机联动host映射文件之前已经写好就不用再改了
切换用户
su vanas
6)在/opt目录下创建文件夹
注意目前用户已经不是root
在/opt目录下创建module、software文件夹
sudo mkdir module
sudo mkdir software
修改module、software文件夹的所有者
sudo mkdir /opt/module /opt/software
sudo chown vanas:vanas /opt/module /opt/software
记得重启
reboot
将JDK安装包上传到Linux /opt/software目录下
解压JDK到/opt/module目录下
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
3)配置JDK环境变量
新建/etc/profile.d/my_env.sh文件
sudo vim /etc/profile.d/my_env.sh
#JAVA_HOME
JAVA_HOME=/opt/module/jdk1.8.0_212
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME
保存后退出
:wq
source /etc/profile
java -version
Hadoop下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/
将hadoop安装包上传到/opt/software目录下
解压安装文件到/opt/module下面
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
ls /opt/module/
hadoop-3.1.3
获取Hadoop安装路径
pwd
/opt/module/hadoop-3.1.3
打开/etc/profile.d/my_env.sh文件(shift+g)
#JAVA_HOME
JAVA_HOME=/opt/module/jdk1.8.0_212
#HADOOP_HOME
HADOOP_HOME=/opt/module/hadoop-3.1.3
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export PATH JAVA_HOME HADOOP_HOME
保存后退出
:wq
让修改后的文件生效
source /etc/profile
hadoop version
Hadoop 3.1.3
sync
sudo reboot
(1)配置集群
[vanas@hadoop132 ~]$ cd /opt/
[vanas@hadoop132 opt]$ cd module/hadoop-3.1.3/etc/hadoop/
[vanas@hadoop132 hadoop]$ vim hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_212
[vanas@hadoop132 hadoop]$ vim core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop132:9820</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data/tmp</value>
</property>
[vanas@hadoop132 hadoop]$ vim hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
格式化后多处data 和logs
[vanas@hadoop132 hadoop]$ cd ..
[vanas@hadoop132 etc]$ cd ..
[vanas@hadoop132 hadoop-3.1.3]$ ll
总用量 204
drwxr-xr-x. 2 vanas vanas 4096 9月 12 2019 bin
drwxr-xr-x. 3 vanas vanas 4096 9月 12 2019 etc
drwxr-xr-x. 2 vanas vanas 4096 9月 12 2019 include
drwxrwxr-x. 2 vanas vanas 4096 4月 8 16:43 input
drwxr-xr-x. 3 vanas vanas 4096 9月 12 2019 lib
drwxr-xr-x. 4 vanas vanas 4096 9月 12 2019 libexec
-rw-rw-r--. 1 vanas vanas 147145 9月 4 2019 LICENSE.txt
-rw-rw-r--. 1 vanas vanas 21867 9月 4 2019 NOTICE.txt
-rw-rw-r--. 1 vanas vanas 1366 9月 4 2019 README.txt
drwxr-xr-x. 3 vanas vanas 4096 9月 12 2019 sbin
drwxr-xr-x. 4 vanas vanas 4096 9月 12 2019 share
[vanas@hadoop132 hadoop-3.1.3]$ hdfs namenode -format
[vanas@hadoop132 hadoop-3.1.3]$ ll
总用量 212
drwxr-xr-x. 2 vanas vanas 4096 9月 12 2019 bin
drwxrwxr-x. 3 vanas vanas 4096 4月 10 09:49 data
drwxr-xr-x. 3 vanas vanas 4096 9月 12 2019 etc
drwxr-xr-x. 2 vanas vanas 4096 9月 12 2019 include
drwxrwxr-x. 2 vanas vanas 4096 4月 8 16:43 input
drwxr-xr-x. 3 vanas vanas 4096 9月 12 2019 lib
drwxr-xr-x. 4 vanas vanas 4096 9月 12 2019 libexec
-rw-rw-r--. 1 vanas vanas 147145 9月 4 2019 LICENSE.txt
drwxrwxr-x. 2 vanas vanas 4096 4月 10 09:49 logs
-rw-rw-r--. 1 vanas vanas 21867 9月 4 2019 NOTICE.txt
-rw-rw-r--. 1 vanas vanas 1366 9月 4 2019 README.txt
drwxr-xr-x. 3 vanas vanas 4096 9月 12 2019 sbin
drwxr-xr-x. 4 vanas vanas 4096 9月 12 2019 share
(2)启动、测试集群增、删、查
注意:jps是JDK中的命令,不是Linux命令。不安装JDK不能使用jps
[vanas@hadoop132 hadoop-3.1.3]$ hdfs --daemon start namenode
[vanas@hadoop132 hadoop-3.1.3]$ hdfs --daemon start datanode
[vanas@hadoop132 hadoop-3.1.3]$ jps
14027 Jps
13149 NameNode
13694 DataNode
[vanas@hadoop132 hadoop-3.1.3]$ hdfs dfs -mkdir /input
[vanas@hadoop132 hadoop-3.1.3]$ hdfs dfs -put input/my.txt /input
[vanas@hadoop132 hadoop-3.1.3]$ hdfs dfs -ls /
Found 1 items
drwxr-xr-x - vanas supergroup 0 2020-04-10 11:57 /input 1
[vanas@hadoop132 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
web端查看HDFS文件系统
http://hadoop132:9870
(1)配置集群在YARN上运行MR
[vanas@hadoop132 logs]$ cd ..
[vanas@hadoop132 hadoop-3.1.3]$ cd etc/hadoop/
[vanas@hadoop132 hadoop]$ vim yarn-site.xml
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop132</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>
[vanas@hadoop132 hadoop]$ vim mapred-site.xml
<!-- 指定MR运行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
(2)启动、测试集群增、删、查
[vanas@hadoop132 hadoop]$ cd ..
[vanas@hadoop132 etc]$ cd ..
[vanas@hadoop132 hadoop-3.1.3]$ jps
94464 Jps
13149 NameNode
13694 DataNode
[vanas@hadoop132 hadoop-3.1.3]$ yarn --daemon start resourcemanager
[vanas@hadoop132 hadoop-3.1.3]$ yarn --daemon start nodemanager
[vanas@hadoop132 hadoop-3.1.3]$ jps
97376 Jps
97207 NodeManager
13149 NameNode
95791 ResourceManager
13694 DataNode
(3)在YARN上执行WordCount案例
[vanas@hadoop132 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
[vanas@hadoop132 hadoop-3.1.3]$ hdfs dfs -ls /
Found 4 items
drwxr-xr-x - vanas supergroup 0 2020-04-10 11:57 /input
drwxr-xr-x - vanas supergroup 0 2020-04-10 12:55 /output
drwx------ - vanas supergroup 0 2020-04-10 11:04 /tmp
[vanas@hadoop132 hadoop-3.1.3]$ hdfs dfs -ls /output
Found 2 items
-rw-r--r-- 1 vanas supergroup 0 2020-04-10 12:55 /output/_SUCCESS
-rw-r--r-- 1 vanas supergroup 30 2020-04-10 12:55 /output/part-r-00000
[vanas@hadoop132 hadoop-3.1.3]$ hdfs dfs -cat /output/part-r-00000
2020-04-10 12:56:23,251 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
dfs0509 1
dfs111 1
dfsvanas 1
YARN的浏览器页面查看
http://hadoop132:8088
Daemon | App | Hadoop2 | Hadoop3 |
---|---|---|---|
NameNode Port | Hadoop HDFS NameNode | 8020 / 9000 | 9820 |
Hadoop HDFS NameNode HTTP UI | 50070 | 9870 | |
Hadoop HDFS NameNode HTTPS UI | 50470 | 9871 | |
Secondary NameNode Port | Secondary NameNode HTTP | 50091 | 9869 |
Secondary NameNode HTTP UI | 50090 | 9868 | |
DataNode Port | Hadoop HDFS DataNode IPC | 50020 | 9867 |
Hadoop HDFS DataNode | 50010 | 9866 | |
Hadoop HDFS DataNode HTTP UI | 50075 | 9864 | |
Hadoop HDFS DataNode HTTPS UI | 50475 | 9865 |
记下:
NameNode 9820(内部通信) 9870(web端)
2NN 9868(web端)
ResourceManager 8088(web端)
HistoryServer 19888(web端)
克隆三台虚拟机 完成环境准备
sudo mkdir /opt/module /opt/software
sudo chown -R vanas:vanas /opt/module /opt/software
scp(secure copy)安全拷贝
rsync 远程同步工具
选项 | 功能 |
---|---|
-a | 归档拷贝 |
-v | 显示复制过程 |
rsync用的比较多
scp -r /opt/module/* vanas@hadoop134:/opt/moudle/
<!]--拉过去 -->
scp -r vanas@hadoop132:/opt/module/* /opt/module
scp -r vanas@hadoop132:/opt/module/* vanas@hadoop133:/opt/module/
rsync -av /opt/module/* vanas@hadoop133:/opt/module/
[vanas@hadoop133 opt]$ scp -r vanas@hadoop132:/opt/module vanas@hadoop133:/opt/module
[vanas@hadoop132 bin]$ rsync -av /opt/module/ vanas@hadoop130:/opt/module
[vanas@hadoop130 hadoop]$ cd ~
[vanas@hadoop130 ~]$ mkdir bin
[vanas@hadoop130 ~]$ cd bin
[vanas@hadoop130 bin]$ touch xsync
[vanas@hadoop130 bin]$ vim xsync
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop133 hadoop134
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
[vanas@hadoop130 bin]$ chmod 777 xsync
[vanas@hadoop130 bin]$ ll
总用量 4
-rwxrwxrwx. 1 vanas vanas 621 4月 10 16:03 xsync
测试xsync是否好用
[vanas@hadoop130 bin]$ cd /opt/module/hadoop-3.1.3/
[vanas@hadoop130 hadoop-3.1.3]$ touch aaa.txt
[vanas@hadoop130 hadoop-3.1.3]$ ll
[vanas@hadoop130 hadoop-3.1.3]$ xsync aaa.txt
==================== hadoop133 ====================
The authenticity of host 'hadoop133 (192.168.69.133)' can't be established.
ECDSA key fingerprint is SHA256:yLxOgG/cw1It+0IgoLqv08WlIRDlFBh3jNoPkR7XU48.
ECDSA key fingerprint is MD5:e1:5d:77:03:df:e1:e6:8d:4d:e4:61:8b:a3:c9:9d:3c.
Are you sure you want to continue connecting (yes/no)? yest^H
Warning: Permanently added 'hadoop133,192.168.69.133' (ECDSA) to the list of known hosts.
vanas@hadoop133's password:
vanas@hadoop133's password:
sending incremental file list
aaa.txt
sent 103 bytes received 35 bytes 55.20 bytes/sec
total size is 0 speedup is 0.00
==================== hadoop134 ====================
The authenticity of host 'hadoop134 (192.168.69.134)' can't be established.
ECDSA key fingerprint is SHA256:yLxOgG/cw1It+0IgoLqv08WlIRDlFBh3jNoPkR7XU48.
ECDSA key fingerprint is MD5:e1:5d:77:03:df:e1:e6:8d:4d:e4:61:8b:a3:c9:9d:3c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hadoop134,192.168.69.134' (ECDSA) to the list of known hosts.
vanas@hadoop134's password:
vanas@hadoop134's password:
sending incremental file list
aaa.txt
sent 103 bytes received 35 bytes 39.43 bytes/sec
total size is 0 speedup is 0.00
分别查看hadoop133、和hadoop134都已存在
1个NameNode 3个DataNode 1个SecondaryNameNode 1个ResourceManager 3个NodeManager
理论情况: 需要有6个机器
实际情况: 3台机器
因为NameNode 、SecondaryNameNode 、 ResourceManager运行中需要的资源比较多,因此分布到不同的节点中.
Hadoop130 | Hadoop133 | Hadoop134 | |
---|---|---|---|
HDFS | NameNode DataNode |
DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager |
NodeManager |
(1)核心配置文件
配置core-site.xml
[vanas@hadoop130 hadoop-3.1.3]$ cd etc/hadoop/
[vanas@hadoop130 hadoop]$ vim core-site.xml
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop130:9820</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.data.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 下面是兼容性配置,先跳过 -->
<!-- 配置该atguigu(superUser)允许通过代理访问的主机节点 -->
<property>
<name>hadoop.proxyuser.vanas.hosts</name>
<value>*</value>
</property>
<!-- 配置该atguigu(superuser)允许代理的用户所属组 -->
<property>
<name>hadoop.proxyuser.vanas.groups</name>
<value>*</value>
</property>
<!-- 配置该atguigu(superuser)允许代理的用户-->
<property>
<name>hadoop.proxyuser.vanas.users</name>
<value>*</value>
</property>
</configuration>
(2)HDFS配置文件
配置hdfs-site.xml
[vanas@hadoop130 hadoop]$ vim hdfs-site.xml
<configuration>
<!-- 指定NameNode数据的存储目录 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.data.dir}/name</value>
</property>
<!-- 指定Datanode数据的存储目录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.data.dir}/data</value>
</property>
<!-- 指定SecondaryNameNode数据的存储目录 -->
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file://${hadoop.data.dir}/namesecondary</value>
</property>
<!-- 兼容配置,先跳过 -->
<property>
<name>dfs.client.datanode-restart.timeout</name>
<value>30s</value>
</property>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop130:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop134:9868</value>
</property>
</configuration>
(3)YARN配置文件
配置yarn-site.xml
[vanas@hadoop130 hadoop]$ vim yarn-site.xml
<configuration>
<!--指定mapreduce走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop133</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>
(4)MapReduce配置文件
配置mapred-site.xml
<configuration>
<!-- 指定MR运行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
在集群上分发配置好的hadoop
[vanas@hadoop130 hadoop]$ cd ..
[vanas@hadoop130 etc]$ xsync hadoop
==================== hadoop133 ====================
vanas@hadoop133's password:
vanas@hadoop133's password:
sending incremental file list
hadoop/
hadoop/core-site.xml
hadoop/hdfs-site.xml
hadoop/yarn-site.xml
sent 4,305 bytes received 114 bytes 1,262.57 bytes/sec
total size is 108,704 speedup is 24.60
==================== hadoop134 ====================
vanas@hadoop134's password:
vanas@hadoop134's password:
sending incremental file list
hadoop/
hadoop/core-site.xml
hadoop/hdfs-site.xml
hadoop/yarn-site.xml
[vanas@hadoop130 etc]$ cd /etc/profile.d
[vanas@hadoop130 profile.d]$ sudo vim my_env.sh
#JAVA_HOME
JAVA_HOME=/opt/module/jdk1.8.0_212
#HADOOP_HOME
HADOOP_HOME=/opt/module/hadoop-3.1.3
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export PATH JAVA_HOME HADOOP_HOME
[vanas@hadoop130 profile.d]$ sudo scp -r ./my_env.sh root@hadoop133:/etc/profile.d/
The authenticity of host 'hadoop133 (192.168.69.133)' can't be established.
ECDSA key fingerprint is SHA256:yLxOgG/cw1It+0IgoLqv08WlIRDlFBh3jNoPkR7XU48.
ECDSA key fingerprint is MD5:e1:5d:77:03:df:e1:e6:8d:4d:e4:61:8b:a3:c9:9d:3c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hadoop133,192.168.69.133' (ECDSA) to the list of known hosts.
root@hadoop133's password:
my_env.sh 100% 146 211.6KB/s 00:00
[vanas@hadoop130 profile.d]$ sudo scp -r ./my_env.sh root@hadoop134:/etc/profile.d/
The authenticity of host 'hadoop134 (192.168.69.134)' can't be established.
ECDSA key fingerprint is SHA256:yLxOgG/cw1It+0IgoLqv08WlIRDlFBh3jNoPkR7XU48.
ECDSA key fingerprint is MD5:e1:5d:77:03:df:e1:e6:8d:4d:e4:61:8b:a3:c9:9d:3c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hadoop134,192.168.69.134' (ECDSA) to the list of known hosts.
root@hadoop134's password:
my_env.sh 100% 146 386.8KB/s 00:00
[vanas@hadoop130 profile.d]$ source /etc/profile
[vanas@hadoop133 profile.d]$ source /etc/profile
[vanas@hadoop134 profile.d]$ source /etc/profile
启动HDFS
初始化前注意清空data和logs
[vanas@hadoop130 hadoop-3.1.3]$ rm -rf data/ logs/
[vanas@hadoop133 hadoop-3.1.3]$ rm -rf data/ logs/
[vanas@hadoop134 hadoop-3.1.3]$ rm -rf data/ logs/
[vanas@hadoop130 profile.d]$ hdfs namenode -format
[vanas@hadoop130 hadoop-3.1.3]$ hdfs --daemon start namenode
[vanas@hadoop130 hadoop-3.1.3]$ hdfs --daemon start datanode
[vanas@hadoop130 hadoop-3.1.3]$ jps
36872 NameNode
39448 DataNode
39630 Jps
[vanas@hadoop133 profile.d]$ hdfs --daemon start datanode
[vanas@hadoop134 hadoop-3.1.3]$ hdfs --daemon start datanode
[vanas@hadoop134 hadoop-3.1.3]$ hdfs --daemon start secondarynamenode
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8IFo08td-1587564742488)(https://tva1.sinaimg.cn/large/00831rSTgy1gdox3qrvzgj315g0u0n6c.jpg)]
启动yarn
[vanas@hadoop133 hadoop-3.1.3]$ yarn --daemon start resourcemanager
[vanas@hadoop130 hadoop-3.1.3]$ yarn --daemon start nodemanager
[vanas@hadoop130 hadoop-3.1.3]$ jps
52467 Jps
52339 NodeManager
36872 NameNode
39448 DataNode
[vanas@hadoop133 hadoop-3.1.3]$ yarn --daemon start nodemanager
[vanas@hadoop133 hadoop-3.1.3]$ jps
56788 Jps
40039 DataNode
56044 NodeManager
49724 ResourceManager
[vanas@hadoop134 hadoop-3.1.3]$ yarn --daemon start nodemanager
[vanas@hadoop134 hadoop-3.1.3]$ jps
56384 NodeManager
43090 SecondaryNameNode
57557 Jps
41535 DataNode
集群id问题
集群是否需要每次都格式化?
不需要. 正常情况下, 一个新配置好的集群需要格式化,后续就不要再进行格式化操作。
除非整个集群的数据都不要了,集群遇到严重的问题,需要重新搭建,等搭建好后需要格式化.
如果要重新格式化集群需要注意什么问题?
如果要重新格式化需要删除 data目录 和 logs目录 。
如果不删除 , 重新格式化会生成新的集群id, 而DN记录的还是之前的集群id
当DN启动以后找不到NN,然后DN直接下线.
DN启动起来以后,会自动找NN进行注册.
无密钥配置
[vanas@hadoop130 hadoop-3.1.3]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vanas/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/vanas/.ssh/id_rsa.
Your public key has been saved in /home/vanas/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:RnHv4HI/XnZlKv0gXt/IjsjSF5H5YU1dR9UTZ8xXJm8 vanas@hadoop130
The key's randomart image is:
+---[RSA 2048]----+
| . . .=^|
| o . *X|
| . . .o oE|
| . . o+ o..|
| S o .+ .o|
| . o ....o.|
| . =.B .|
| ...+.X *.|
| .o.+.+ +|
+----[SHA256]-----+
[vanas@hadoop130 ~]$ ll -a
总用量 40
drwx------. 4 vanas vanas 4096 4月 10 19:38 .
drwxr-xr-x. 3 root root 4096 4月 2 19:59 ..
-rw-------. 1 vanas vanas 1714 4月 10 20:32 .bash_history
-rw-r--r--. 1 vanas vanas 18 4月 11 2018 .bash_logout
-rw-r--r--. 1 vanas vanas 193 4月 11 2018 .bash_profile
-rw-r--r--. 1 vanas vanas 231 4月 11 2018 .bashrc
drwxrwxr-x. 2 vanas vanas 4096 4月 10 16:03 bin
drwx------. 2 vanas vanas 4096 4月 11 09:29 .ssh
-rw-------. 1 vanas vanas 5701 4月 10 19:38 .viminfo
[vanas@hadoop130 ~]$ cd .ssh/
[vanas@hadoop130 .ssh]$ ll
总用量 12
-rw-------. 1 vanas vanas 1675 4月 11 09:29 id_rsa //私钥
-rw-r--r--. 1 vanas vanas 397 4月 11 09:29 id_rsa.pub //公钥
-rw-r--r--. 1 vanas vanas 372 4月 10 18:07 known_hosts
[vanas@hadoop130 .ssh]$ ssh-copy-id hadoop133
[vanas@hadoop130 .ssh]$ ssh-copy-id hadoop134
[vanas@hadoop130 .ssh]$ ssh hadoop133
Last login: Sat Apr 11 09:19:19 2020 from hadoop130
[vanas@hadoop133 ~]$ exit
登出
Connection to hadoop133 closed.
[vanas@hadoop130 .ssh]$ ssh-copy-id hadoop130
[vanas@hadoop130 .ssh]$ ll
总用量 16
-rw-------. 1 vanas vanas 397 4月 11 09:36 authorized_keys
-rw-------. 1 vanas vanas 1675 4月 11 09:29 id_rsa
-rw-r--r--. 1 vanas vanas 397 4月 11 09:29 id_rsa.pub
-rw-r--r--. 1 vanas vanas 558 4月 11 09:36 known_hosts
.ssh文件夹下(~/.ssh)的文件功能解释
known_hosts | 记录ssh访问过计算机的公钥(public key) |
---|---|
id_rsa | 生成的私钥 |
id_rsa.pub | 生成的公钥 |
authorized_keys | 存放授权过的无密登录服务器公钥 |
133、134也如此操作,以134为例
[vanas@hadoop134 ~]$ ssh-keygen -t rsa
[vanas@hadoop134 ~]$ ssh-copy-id hadoop130
[vanas@hadoop134 ~]$ ssh-copy-id hadoop133
[vanas@hadoop134 ~]$ ssh-copy-id hadoop134
当前操作只对当前用户vanas管用
注意:
如果需用root
还需要在hadoop130上采用root账号,配置一下无密登录到hadoop130、hadoop133、hadoop134
还需要在hadoop133上采用vanas账号配置一下无密登录到hadoop130、hadoop133、hadoop134服务器上
配置workers
千万别多 换行 或者 空格
[vanas@hadoop130 hadoop]$ vim workers
hadoop130
hadoop133
hadoop134
[vanas@hadoop130 hadoop]$ xsync workers
启动hdfs
namenode的服务器
[vanas@hadoop130 hadoop]$ start-dfs.sh
启动yarn
注意在rm在哪个服务器上
[vanas@hadoop133 .ssh]$ start-yarn.sh
关闭集群
stop-yarn.sh
stop-dfs.sh
注意关机前最好要先关闭集群
群起脚本
[vanas@hadoop130 ~]$ cd bin
[vanas@hadoop130 bin]$ vim mycluster
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input Error!!!!!"
exit
fi
case $1 in
"start")
echo "======================== start hdfs ========================== "
ssh hadoop130 /opt/module/hadoop-3.1.3/sbin/start-dfs.sh
echo "======================== start yarn ========================== "
ssh hadoop133 /opt/module/hadoop-3.1.3/sbin/start-yarn.sh
;;
"stop")
echo "======================== stop yarn ========================== "
ssh hadoop133 /opt/module/hadoop-3.1.3/sbin/stop-yarn.sh
echo "======================== stop hdfs ========================== "
ssh hadoop130 /opt/module/hadoop-3.1.3/sbin/stop-dfs.sh
;;
*)
echo "Input Args Error!!!!!"
;;
esac
[vanas@hadoop130 bin]$ vim myjps
#!/bin/bash
for i in hadoop130 hadoop133 hadoop134
do
echo "====================== $i JPS ======================="
ssh $i /opt/module/jdk1.8.0_212/bin/jps
done
[vanas@hadoop130 bin]$ chmod 777 myjps
[vanas@hadoop130 bin]$ chmod 777 mycluster
集群基本测试
[vanas@hadoop130 ~]$ hdfs dfs -put /opt/module/hadoop-3.1.3/input/my.txt /user/vanas/input
[vanas@hadoop130 ~]$ cd /opt/module/hadoop-3.1.3/
[vanas@hadoop130 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/vanas/input /user/vanas/output
查看程序的历史运行情况,需要配置一下历史服务器
配置mapred-site.xml
[vanas@hadoop130 etc]$ cd hadoop/
[vanas@hadoop130 hadoop]$ vi mapred-site.xml
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop130:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop130:19888</value>
</property>
[vanas@hadoop130 hadoop]$ xsync mapred-site.xml
[vanas@hadoop130 bin]$ mapred --daemon start historyserver
[vanas@hadoop130 bin]$ jps
82579 DataNode
83714 Jps
82391 NameNode
83113 NodeManager
83563 JobHistoryServer
http://hadoop130:19888/jobhistory
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager
配置yarn-site.xml
[vanas@hadoop130 hadoop-3.1.3]$ cd etc/hadoop/
[vanas@hadoop130 hadoop]$ vim yarn-site.xml
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop130:19888/jobhistory/logs</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
[vanas@hadoop101 hadoop]$ xsync yarn-site.xml
[vanas@hadoop133 .ssh]$ stop-yarn.sh
[vanas@hadoop130 hadoop]$ mapred --daemon stop historyserver
[vanas@hadoop133 .ssh]$ start-yarn.sh
[vanas@hadoop130 hadoop]$ mapred --daemon start historyserver
[vanas@hadoop130 hadoop]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/vanas/input /user/vanas/output1
//设置虚拟内存超出
[vanas@hadoop130 hadoop]$ vim yarn-site.xml
<property>
<description>Whether virtual memory limits will be enforced for
containers.</description>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>true</value>
</property>
http://hadoop130:19888/jobhistory
here查看详情
时间服务器配置(必须root用户)
在所有节点关闭ntp服务和自启动(130,133,134都关闭)
修改ntp配置文件
[vanas@hadoop130 hadoop]$ su root
密码:
[root@hadoop130 hadoop]# systemctl stop ntpd
[root@hadoop130 hadoop]# systemctl disable ntpd
[root@hadoop130 hadoop]# vim /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 10
[root@hadoop130 hadoop]# vim /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes
[root@hadoop130 hadoop]# systemctl start ntpd
[root@hadoop130 hadoop]# systemctl enable ntpd
其他机器配置(必须root用户)
[root@hadoop133 ~]# crontab -e
[root@hadoop133 ~]# crontab -l
*/1 * * * * /usr/sbin/ntpdate hadoop130
[root@hadoop133 ~]# systemctl start ntpd
[root@hadoop133 ~]# systemctl enable ntpd
关闭
[root@hadoop133 ~]# crontab -e
主要解决数据量大到一定程度磁盘空间存储能力不足的问题.
HDFS中的默认3副本方案在存储空间中具有200%的额外开销。但是,对于I/O活动相对较少冷数据集,在正常操作期间很少访问其他块副本,但仍然会消耗与第一个副本相同的资源量。
纠删码能勾在不到50%数据冗余的情况下提供和3副本相同的容错能力,因此,使用纠删码作为副本机制的改进是自然而然,也是未来的趋势.
重写了Shell脚本,修改了之前版本长期存在的一些错误,并提供了一些新功能,在尽可能保证兼容性的前提下,一些新变化仍然可能导致之前的安装出现问题。
例如:
l 所有Hadoop Shell脚本子系统现在都会执行hadoop-env.sh这个脚本,它允许所有环节变量位于一个位置;
l 守护进程已通过*-daemon.sh选项从*-daemon.sh移动到了bin命令中,在Hadoop3中,我们可以简单的使用守护进程来启动、停止对应的Hadoop系统进程;
之前Hadoop客户端操作的Maven依赖为hadoop-client,这个依赖直接暴露了Hadoop的下级依赖,当用户和Hadoop使用相同依赖的不同版本时,可能造成冲突。
Hadoop3.0引入了提供了hadoop-client-api 和hadoop-client-runtime依赖将下级依赖隐藏起来,一定程度上来解决依赖冲突的问题
MapReduce引入了一个NativeMapOutputCollector的本地化(C/C++)实现,对于shuffle密集的任务,可能提高30%或者更高的性能
HDFS NameNode高可用性的初始实现为单个Active NameNode 和 单个 Standby NameNode, 将edits复制到三个JournalNode。 该体系结构能够容忍系统中一个NN或者一个JN故障.但是,某些部署需要更高程序的容错能力,Hadoop3.x允许用户运行一个Active NameNode 和 多个 Standby NameNode。
Hadoop3.x之前,多个Hadoop服务的默认端口位于Linux临时端口范围(63768~61000). 这意味着在启动时,由于与另一个应用程序冲突,服务有时无法绑定到端口.
在Hadoop3.x中,这些可能冲突的端口已移出临时范围,受影响的有NameNode ,
SecondaryNamenode , DataNode 和 KMS
添加对Microsoft Azure Data Lake 和 阿里云对象存储系统的支持
DataNode内部实现Balancer
一个DN管理多个磁盘,当正常写入时,多个磁盘是平均分配的。然而当添加新磁盘时,这种机制会造成DN内部严重的倾斜。
之前的DataNode Balancer只能实现DN之间的数据平衡,Hadoop3.x实现了内部的数据平衡。
已实现根据服务器自动配置堆内存,HADOOP_HEAPSIZE变量失效。简化MapTask 和ReduceTask的堆内存配置,现已不必同时在配置中和Java启动选项中指定堆内存大小,旧有配置不会受到影响。
对于HDFS Federation, 添加了一个对统一命名空间的RPC路由层 。 和原来的HDFS Federation没有变化,只是目前挂在管理不必在客户端完成,而是放在的服务器,从而简化了HDFS Federation访问。
Yarn的时间线服务是MRJobHistory的升级版,提供了在Yarn上运行第三方程序的历史支持,该服务在Hadoop3.0升级为第二版
现在容量调度器可以实现通过REST API来改变配置,从而让管理员可以实现调度器自动配置。
Yarn调度器现已可以通过配置实现用户自定义的资源管理。现在Yarn可以根据CPU和内存意外的资源管理其任务队列