基本知识
核心组件:
hdfs文件存储
yarn资源任务调度
mapreduce分布式运算变成框架,数据计算
Hdfs:
NameNode
Hdfs核心,master ,
仅内存存储hdfs元素据, 如文件目录结构,块列表和位置
对元数据的修改会在备份在fileSystemImage文件镜像中
不持久化各个块信息(由DataNode上传)
是hadoop集群单点故障
通常会放在内存较大的节点
DataNode
存分块的数据,slave
与NameNode保持通讯(如心跳,默认3秒),启动时发送自己节点上块信息
通常会放在硬盘较大的节点
Yarn : ResourceManager NodeManager
Docker上的操作
我是下载一个centos镜像 , 然后创建容器 , 安装基础软件 , 如:ssh ,jdk
然后再打包成新的镜像node , 都是docker命令 , 在另一篇文章里面
然后就可以创建容器 , 这里创建三个节点 , 分布如下
Node1 NameNode DataNode ResourceManager
Node2 DataNode NodeManager SecondaryNameNode
Node3 DataNode NodeManager
然后可以把node1的22端口映射到主机上的9922 , 然后就可以通过工具直接ssh连上主机的9922直接连上容器(非必需)
创建network , 创建容器可以指定ip , 也可以用docker默认的(非必需)
docker network create --subnet=10.10.10.0/16 hadoopnetwork
创建容器
用到的属性简单解释
-p 是把容器的端口映射出来
privileged=true和/usr/sbin/init 是给容器更多的权限
--name 指定容器名
--hostname 指定容器hostname
--add-host 是容器IP映射出来,需要同时使用--network
命令:
docker run -itd -p 9922:22 --privileged=true \
--name=node1 --hostname=node1 \
--network=hadoopnetwork --ip=10.10.10.1 \
--add-host=node1:10.10.10.1 \
--add-host=node2:10.10.10.2 \
--add-host=node3:10.10.10.3 \
node:latest /usr/sbin/init
docker run -itd --privileged=true \
--name=node2 --hostname=node2 \
--network=hadoopnetwork --ip=10.10.10.2 \
--add-host=node1:10.10.10.1 \
--add-host=node2:10.10.10.2 \
--add-host=node3:10.10.10.3 \
node:latest /usr/sbin/init
docker run -itd --privileged=true \
--name=node3 --hostname=node3 \
--network=hadoopnetwork --ip=10.10.10.3 \
--add-host=node1:10.10.10.1 \
--add-host=node2:10.10.10.2 \
--add-host=node3:10.10.10.3 \
node:latest /usr/sbin/init
操作容器
1同步时间
#手动同步集群个机器时间
date -s "2018-06-24 00:00:00"
或者
yum install ntpdate
ntpdate cn.pool.ntp.org
2设置各个主机名
centos6
vi /etc/sysconfig/network
NETWORKING=YES
HOSTNAME=node1
centos7
hostnamectl set-hostname node1
3配置ip映射
centos6
vi /etc/hostdate
centos7
vi /etc/hosts
172.17.0.2 node1
172.17.0.3 node2
172.17.0.4 node3
4配置ssh免密登陆
生成免登陆密钥,会生成id_rsa(私钥) id_rsa.pub(公钥)
ssh-keygen -t rsa
把公钥复制到免密登陆的机器上
ssh-copy-id node2
5配置防火墙,这里直接关了
service iptables stop
6jdk(已经安装的可以忽略)
卸载openjdk
rpm -qa | grep java
rpm -e --nodeps xxxxxxx
上传1.8jdk,解压
配置环境变量
vi /etc/profile
export JAVA_HOME=/../../jdk1.8..
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
刷新配置
source /etc/profile
7下载hadoop安装包,上传,解压
1 修改hadoop-evn.sh
vi hadoop../etc/hadoop/hadoop-evn.sh
export JAVA_HOME=/../../jdk1.8..
2 core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/hddata</value>
</property>
3 hdfs-site.xml
<!-- 指定HDFS副本的数量,默认3 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:50090</value>
</property>
4 mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
<!-- 指定mr运行时框架,指定yarn上,默认时local -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
5 yarn-site.xml
<!-- yarn主节点(resourceManager) -->
<property>
<name>yarn.resourceManagermanager.hostname</name>
<value>node1</value>
</property>
<!-- nodemanager上运行的附属服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
8Slaves文件编辑从节点所在的主机名称
Vi /home/hadoop-2.7.7/etc/hadoop/slaves
node1
node2
node3
9将hadoop添加到环境变量
vi /etc/profile
export HADOOP_HOME=/home/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
10复制hadoop到其他节点上
scp -r /home/hadoop-2.7.7 root@node2:/home/
scp -r /home/hadoop-2.7.7 root@node3:/home/
11复制/etc/profile到其他节点上
scp -r /etc/profile root@node2:/etc/
scp -r /etc/profile root@node3:/etc/
12格式化HDFS
在hdfs主节点格式化
hdfs namenode -format
13如果配置了etc/hadoop/slaves和免密登陆,则可以使用程序脚本启动
Hdfs : /home/hadoop-2.7.7/sbin/start-dfs.sh
Yarn : /home/hadoop-2.7.7/sbin/start-yarn.sh
关闭:
stop-dfs.sh stop-yarn.sh
14查看是否启动各节点
jps
安装后的简单操作hdfs
后面就可以去试试运行mapreduce了