Hadoop简介
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS(Hadoop Distributed File System)。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算
。
docker搭建hadoop集群
1.拉取hadoop镜像
docker pull docker.io/sequenceiq/hadoop-docker
2.查看镜像
docker images
3.创建hadoop容器
创建master节点docker run --name hadoop1 -d
-p 50070:50070 -p 9000:9000 -p 8088:8088 -p 8040:8040 -p 8042:8042 -p 49707:49707 -p 50010:50010 -p 50075:50075 -p 50090:50090 -h master docker.io/sequenceiq/hadoop-docker
创建slave1节点
docker run --name hadoop2 -d -h
slave1 docker.io/sequenceiq/hadoop-docker
创建slave2节点
docker run --name hadoop3 -d -h
slave2 docker.io/sequenceiq/hadoop-docker
查看容器
docker ps -a
4.配置ssh生成秘钥,所有的节点都要配置
首先配置master节点,进入master容器
docker exec -it hadoop1 bash
启动ssh/etc/init.d/sshd start
生成秘钥,生成的秘钥在容器/root/.ssh目录下ssh-keygen -t rsa
进入.ssh目录
cd /root/.ssh
ls
将公钥导入authorized_keys文件
cat id_rsa.pub > authorized_keys
cat authorized_keys
退出master容器
exit
同样操作配置slave1节点
docker exec -it hadoop2 bash
/etc/init.d/sshd start
ssh-keygen -t rsa
cd /root/.ssh
cat id_rsa.pub > authorized_keys
exit
配置slave2节点
docker exec -it hadoop3 bash
/etc/init.d/sshd start
ssh-keygen -t rsa
cd /root/.ssh
cat id_rsa.pub > authorized_keys
exit
将容器中这3个节点的公钥也都复制到authorized_keys,也就是说每个authorized_keys 文件中存储的公钥都是3个而且是一样的。
创建文件夹
mkdir -p /home/hadoop
将容器中的公钥复制到centos本地
docker cp hadoop1:/root/.ssh/authorized_keys /home/hadoop/authorized_keys_master
docker cp hadoop2:/root/.ssh/authorized_keys /home/hadoop/slave1
docker cp hadoop3:/root/.ssh/authorized_keys /home/hadoop/slave2
将这三个公钥合并成一个文件
cd /home/hadoop
cat authorized_keys_master slave1 slave2 > authorized_keys
cat authorized_keys
将centos本地的文件复制到容器
docker cp /home/hadoop/authorized_keys hadoop1:/root/.ssh/authorized_keys
docker cp /home/hadoop/authorized_keys hadoop2:/root/.ssh/authorized_keys
docker cp /home/hadoop/authorized_keys hadoop3:/root/.ssh/authorized_keys
5.分别为每个节点配置ip地址
分别进入master、salve1、slave2容器查看ip
docker exec -it hadoop1 bash
ifconfig
为每个容器设置地址,master、slave1、slave2都要配置
vi /etc/hosts
在容器内ssh master 测试一下 ,测试成功
6.配置hadoop(配置文件的目录一般都在/usr/local/hadoop-2.7.0/etc/hadoop下面)
docker exec -it hadoop1 bash
cd /usr/local/hadoop-2.7.0/etc/hadoop/
ls
vi core-site.xml ,加入配置
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/tmp</value>
</property>
配置yarn-site.xml,加入配置
vi yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8089</value>
</property>
将这些参数发送到其它节点
scp /usr/local/hadoop-2.7.0/etc/hadoop/yarn-site.xml slave1:/usr/local/hadoop-2.7.0/etc/hadoop/
scp /usr/local/hadoop-2.7.0/etc/hadoop/yarn-site.xml slave2:/usr/local/hadoop-2.7.0/etc/hadoop/
7.运行hadoop
在master上格式化namenode
docker exec -it hadoop1 bash
cd /usr/local/hadoop-2.7.0/bin/
./hadoop namenode -format
在master上启动集群
cd /usr/local/hadoop-2.7.0/sbin/
./start-all.sh
如果报错告诉端口被占用
那么就先停止,然后再启动./stop-all.sh
./start-all.sh
jps 查看进程,查看到说明已启动