hadoop基本知识及环境搭建(docker)

基本知识

核心组件:
	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
		
			fs.defaultFS
			hdfs://node1:8020
		
		
			hadoop.tmp.dir
			/export/data/hddata
		
	3 hdfs-site.xml
		
		
			dfs.replication
			2
		
		
			dfs.namenode.secondary.http-address
			node2:50090
		
	4 mapred-site.xml
		mv mapred-site.xml.template mapred-site.xml
		
		
			mapreduce.framework.name
			yarn
		
	5 yarn-site.xml
		
		
			yarn.resourceManagermanager.hostname
			node1
		
		
		
			yarn.nodemanager.aux-services
			mapreduce_shuffle
		

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

hadoop基本知识及环境搭建(docker)_第1张图片

后面就可以去试试运行mapreduce了

你可能感兴趣的:(hadoop)