Hadoop(HDFS+Yarn) 本地 伪分布 全分布
-
Hadoop安装—本地安装
(1)特点:没有HDFS和Yarn 只能够测试MR程序是否成功, 作为一个普通的java程序。
(2)修改文件:
vi hadoop-env.sh
set number
修改25行(行数不一 hadoop版本不一致)
JAVA_HOME=/usr/local/lib/jdk1.8.0_181cd /root/ mkdir temp touch a.txt vi a.txt
mapred-site.xml 默认没有,我克隆的文件里面有 这个文件没有被覆盖指定了yarn资源
-
Hadoop安装—本地安装伪分布模式
(1)特点:在一台机器上模拟一个分布式环境具备hadoop的所有功能。
HDFS:NameNode+DataNode+SecondarynameNode
Yarn:ResourceManager+NodeManager
(2)修改的文件:
第一步:hadoop-env.sh
JAVA_HOME=/usr/local/lib/jdk1.8.0_181
** 第二步:hdfs-site.xml**
<!--注释配置数据块的冗余度,默认是3-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--注释配置HDFS的权限检查,默认是true-->
<!--
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
-->
```
**第三步:core-site.xml**
```xml
<!--配置HDFS主节点,namenode的地址,9000是RPC通信端口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<!--配置HDFS数据块和元数据保存的目录,一定要修改-->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/dfs/tmp</value>
</property>
```
**第四步:mapred-site.xml(默认没有)**
cp mapred-site.xml.template mapred-site.xml
<!--配置MR程序运行的框架-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
**第五步:yarn-site.xml**
<!--配置Yarn的节点-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<!--NodeManager执行MR任务的方式是Shuffle洗牌-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
** 第六步:通过HDFS namenode 格式化**
在第4步中,hadoop.tmp.dir--格式化
命令:hdfs namenode -format
验证:是否格式化成功:
Storage directory /root/hadoop/dfs/tmp/dfs/name has been successfully formatted.
** 最后启动,通过start-all.sh启动**
验证:5314 SecondaryNameNode
5586 NodeManager
5476 ResourceManager
5126 DataNode
5878 Jps
5022 NameNode
web访问:http://10.1.255.124:8088 yarn
http://10.1.255.124:50070 HDFS
4、免密码登录的原理和配置
ssh不对称加密算法(加密和解密是两个文件)。(对称加密: 加密和解密文件是同一个)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190115070808143.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaXlhbmFmZmVjdGlvbg==,size_16,color_FFFFFF,t_70)
(1)公钥--锁:给出去 给其他机器。
(2)私钥--钥匙:自己留着,解密。
step1:ssh-keygen -t rsa(3次回车)
step2:ssh-copy-id -i ~/.ssh/id_rsa.pub root@bigdata124(自己也要拷贝给自己)
5、Hadoop安装---全分布模式(重点:以后用的就是全分布式)
(1)规划:
192.168.100.100 master
192.168.100.101 hdoop01
192.168.100.102 hdoop02
192.168.100.103 hdoop03
(2)准备工作:
step 1: jdk、防火墙、ssh免密码登录(3次拷贝)、在etc/hosts 添加主机名。
## 对于同时操作多台机器可通过 工具-》发送键输入到所有会话 在选项卡排列 实现 水平排列 ##
step 2:时间同步(如果能够上网) 使用网络时间(GUI设置)默认的都是一致的。
不能上网: date -s 2019-01-10(同时操作多台机器) 集群紊乱
ntp:在机器里面指定一个服务器 作为时钟服务器。
step 3: 修改配置文件()
### 主要在bigdata 121操作,其他机器通过scp拷贝。 ###
**1:hadoop-env.sh**
JAVA_HOME=/opt/moudle/jdk1.8.0_181
**2:hdfs-site.xml**
<!--注释配置数据块的冗余度,默认是3-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!--注释配置HDFS的权限检查,默认是true-->
<!--
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
-->
**3:core-site.xml**
<!--配置HDFS主节点,namenode的地址,9000是RPC通信端口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata124:9000</value>
</property>
<!--配置HDFS数据块和元数据保存的目录,一定要修改-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/moudle/hadoop-2.7.3/tmp</value>
</property>
**4:mapred-site.xml(默认没有)**
cp mapred-site.xml.template mapred-site.xml
<!--配置MR程序运行的框架-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
**5:yarn-site.xml**
<!--配置Yarn的节点-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata124</value>
</property>
<!--NodeManager执行MR任务的方式是Shuffle洗牌-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
**6:slaves(和自己的从节点机器名字一致)**
bigdata122
bigdata123
** 7:通过HDFS namenode 格式化**
hdfs namenode -format
成功的标志: Storage directory /opt/moudle/hadoop-2.7.3/tmp/dfs/name has been successfully formatted.
**8:通过scp拷贝**
scp -r /opt/moudle/hadoop-2.7.3/ root@bigdata122:/opt/moudle/
scp -r /opt/moudle/hadoop-2.7.3/ root@bigdata123:/opt/moudle/
** 最后启动,通过start-all.sh启动**
验证(5个):5314 SecondaryNameNode
5586 NodeManager
5476 ResourceManager
5126 DataNode
5022 NameNode
web访问:http://10.1.255.124:8088 yarn
http://10.1.255.124:50070 HDFS
学会看 vi /opt/moudle/hadoop-2.7.3/logs/hadoop-root-datanode-bigdata123.log Shift+G 看启动日志。
6.HDFS体系架构(Yarn资源放在后面)
HDFS-NameNode:名称节点
(1)职责:对HDFS的节点进行管理,管理员
接收客户端(命令行、java)的请求:创建目录、上传数据、下载数据和删除数据。
管理和维护HDFS的日志和元信息
(2)dfs/name:
a、current:主要存放日志和元信息 存贮路径:/opt/moudle/hadoop-2.7.3/tmp/dfs/name/current
edits文件:二进制文件,体现了HDFS的最新状态
hdfs oev -i edits_inprogress_0000000000000000003 -o ~/a.xml
o:表示 offline
inprogress:表示最新的。
<?xml version="1.0" encoding="UTF-8"?>
<EDITS>
<EDITS_VERSION>-63</EDITS_VERSION>
<RECORD>
<OPCODE>OP_START_LOG_SEGMENT</OPCODE>
<DATA>
<TXID>3</TXID>
</DATA>
</RECORD>
<RECORD>
<OPCODE>OP_MKDIR</OPCODE>
<DATA>
<TXID>4</TXID>
<LENGTH>0</LENGTH>
<INODEID>16386</INODEID>
<PATH>/input</PATH>
<TIMESTAMP>1547129194216</TIMESTAMP>
<PERMISSION_STATUS>
<USERNAME>root</USERNAME>
<GROUPNAME>supergroup</GROUPNAME>
<MODE>493</MODE>
</PERMISSION_STATUS>
</DATA>
</RECORD>
</EDITS>
b、元信息文件 fsimage:记录的数据块的位置信息和数据块冗余信息,没有体现HDFS的最新状态,二进制文件
hdfs oiv -i fsimage_0000000000000000002 -o ~/b.xml -p XML
(2)in_use.lock 避免同一文件被多使用,只能启动一个namenode
7、HDFS-DataNode:数据节点
(1)主要用来进行数据的存储。
1.x 64M
2.x 128M( hdfs-site.xml 可以修改 blocksize)
(2)数据块的表现形式就是一个个的blk文件
位置:/opt/moudle/hadoop-2.7.3/tmp/dfs/data/current/BP-### *933765109-10.1.255.124-1546784436341* ###/current/finalized/subdir0/subdir0
尝试上传一个 大于128M的文件(128*1024*1024)
Hadoop 3.x 有 纠删码技术,节约存储空间。
8、HDFS-SecondaryNameNode:第二名称节点
(1)进行日志信息的合并,根据checkpoint或者时间间隔(3600s)或者edits文件达到64M。
(2)edits文件合并到fsimage里面 edits文件可以清空
(下面是我的本机现在集群环境)
- CentOS7 虚拟机安装
(1)配置静态IP地址:
虚拟机网络模式使用NAT模式:
先ping宿主机ip(192.168.100.2)
然后ping www.baidu.com
都能ping通说明网络没有问题
IP(192.168.100.100)宿主机与虚拟机之前的网关IP(192.168.100.2)、
ping外网(baidu.com)都可以通则说明虚拟机固定IP设置成功。
root权限模式下使用:
cd /etc/sysconfig/network-scripts/
vim ifcfg-eth0
为:(提示:按a键进入insert模式,按esc后,按“:wq”保存退出)
TYPE=Ethernet
BOOTPROTO=static ?#设置静态Ip
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=4f40dedc-031b-4b72-ad4d-ef4721947439
DEVICE=eno16777736
ONBOOT=yes #这里如果为no的话就改为yes,表示网卡设备自动启动
PEERDNS=yes
PEERROUTES=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_PRIVACY=no
GATEWAY=192.168.100.2 #这里的网关地址就是第二步获取到的那个网关地址
IPADDR=192.168.100.200 #配置ip,在第二步已经设置ip处于192.168.100.xxx这个范围
NETMASK=255.255.255.0 #子网掩码
DNS1=8.8.8.8 #dns服务器1,填写你所在的网络可用的dns服务器地址即可
DNS2=223.5.5.5 #dns服器2
IPADDR=192.168.100.101
NETMASK=255.255.255.0
GATEWAY=192.168.100.2
DNS1=8.8.8.8
DNS2=223.5.5.5
然后执行命令重新启动网卡:
service network restart
1-> 集群的准备工作
1)关闭防火墙(进行远程连接)
systemctl stop firewalld
systemctl -disable firewalld
2)永久修改设置主机名
vi /etc/hostname
注意:需要重启生效->reboot
3)配置映射文件
vi /etc/hosts
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.100 master
192.168.100.101 hdoop01
192.168.100.102 hdoop02
192.168.100.103 hdoop03
4)配置ssh免密登录
-》ssh-keygen 生成密钥对
-》 ssh-copy-id 自己
ssh-copy-id 其它
ssh-copy-id 其它
2-> 安装jdk
删除CentOS自带的openJDK:
rpm -qa | grep java
rpm -e --nodeps java-1.7.0-openjdk-headless java-1.7.0-openjdk
rpm -qa | grep java
rpm -e --nodeps javamail javapackages-tools java-1.8.0-openjdk
rpm -qa | grep java
rpm -e --nodeps java-1.8.0-openjdk-headless
rpm -qa | grep java
1)上传tar包
alt+p
2)解压tar包
tar -zxvf jdk
3)配置环境变量
vi /etc/profile
设置java环境变量:
# set java environment
export JAVA_HOME=/usr/local/lib/jdk1.8.0_181
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=$PATH:${JAVA_HOME}/bin
# set tomcat
export TOMCAT_HOME=/usr/local/apache-tomcat-8.5.31
注意:加载环境变量 source /etc/profile
4)发送到其它机器
scp -r /usr/local/lib/jdk1.8.0_181 hadoop01:/usr/local/lib/
scp -r /usr/local/lib/jdk1.8.0_181 hadoop02:/usr/local/lib/
scp -r /usr/local/lib/jdk1.8.0_181 hadoop03:/usr/local/lib/
scp -r /etc/profile hadoop01:/etc/
scp -r /etc/profile hadoop02:/etc/
scp -r /etc/profile hadoop03:/etc/
注意:加载环境变量 source /etc/profile
5)配置ssh免密登录
-》ssh-keygen 生成密钥对
-》 ssh-copy-id 自己
ssh-copy-id 其它
ssh-copy-id 其它
3-> 配置HDFS集群
1) 修改hadoop-env.sh
export JAVA_HOME=/usr/local/lib/jdk1.8.0_181
2) 修改core-site.xml
<configuration>
//配置hdfs
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
3) 修改hdfs-site.xml
<configuration>
//配置元数据存储位置
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/hadoop/dfs/name</value>
</property>
//配置数据存储位置
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/hadoop/dfs/data</value>
</property>
</configuration>
4)格式化namenode
hadoop namemode -format
5)分发hadoop到其它机器
scp -r /root/hadoop-2.9.1/ hadoop01:/root/
scp -r /root/hadoop-2.9.1/ hadoop02:/root/
scp -r /root/hadoop-2.9.1/ hadoop03:/root/
6)配置hadoop环境变量
export JAVA_HOME=/root/hd/jdk1.8.0_141
export HADOOP_HOME=/root/hd/hadoop-2.8.4
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
6)分发hadoop环境变量
scp -r /etc/profile hadoop01:/etc
scp -r /etc/profile hadoop02:/etc
scp -r /etc/profile hadoop03:/etc
注意:加载环境变量 source /etc/profile
7)启动namenode
hadoop-daemon.sh start namenode
8)启动datanode
hadoop-daemon.sh start datanode
9)访问namenode提供的web端口:50070
4-> 自动批量的启动脚本
1)修改配置文件slaves
hadoop01
hadoop02
hadoop03
2)执行启动命令
start-dfs.sh
start-dfs.sh