1.hadoop1.0,2.0架构演进(都说3.0不稳定,以后再看)
2.环境搭建(直接拉取阿里的docker镜像搭建)
环境准备:linux系统(物理机或者虚拟机皆可),笔者是物理机Cenos7,请在root权限操作
a) 获取镜像
从阿里拉去hadoop镜像 :
docker pull registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop
验证是否下载成功:可以查看到镜像
docker images
b)创建3个容器,
需要开三个终端,每个运行一个容器
创建Master namenode节点
docker run -i -t --name Master -h Master -p 50070:50070 registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop /bin/bash
创建Slave1 datanode节点
docker run -i -t --name Slave1 -h Slave1 registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop /bin/bash
创建Slave2 datanode节点
docker run -i -t --name Slave2 -h Slave2 registry.cn-hangzhou.aliyuncs.com/kaibb/hadoop /bin/bash
c)ssh相互通信配置
每个节点执行一下步骤:
首先将ssh打开(坑点,踩了)
/etc/init.d/ssh start
rsa生成公钥私钥,overwrite哪里y就行
ssh-keygen -t rsa
然后进入到/root/.ssh目录下操作
cd /root/.ssh
将三个节点的公钥里面的内容都复制到Master 中的authorized_keys中,然后从Master节点copy到另外两个节点(可直接覆盖文件,也可以copy内容覆盖)
最后的效果是三个节点中的authorized_keys中内容是一样的,是三个节点中的公钥之和,其实就是相互免密。
d)将ip地址映射到主机名称
ip addr查看三个节点各自的ip,然后修改每个节点的/etc/hosts文件,为其添加其他两个节点的ip主机名映射
vim /etc/hosts
#文件的最后几行
172.17.0.2 Master
172.17.0.3 Slave1
172.17.0.4 Slave2
验证ssh免密登陆是否正常
ssh Slave1
登陆进去则成功,如果需要密码或者拒绝登陆,则重新配置
执行exit命令退出Slave1,返回到Master节点下
e)配置hadoop的5个配置文件
进入到hadoop安装目录
笔者目录
cd /opt/tools/hadoop/etc/hadoop/
五个文件是hadoop-env.sh, core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml
hadoop-env.sh:修改有关java的环境,这里只修改jdk的环境变量
#如果已经是${JAVA_HOME},可以不用修改
export JAVA_HOME=/opt/tools/jdk1.8.0_77
#修改core-site.xml
fs.defaultFS
hdfs://Master:9000
hadoop.tmp.dir
/hadoop/tmp
#修改hdfs-site.xml
dfs.replication
1
dfs.datanode.data.dir
/hadoop/data
dfs.namenode.name.dir
/hadoop/name
#修改mapred-site.xml
mapreduce.framework.name
yarn
#修改yarn-site.xml
yarn.resourcemanager.address
Master:8032
yarn.resourcemanager.scheduler.address
Master:8030
yarn.resourcemanager.resource-tracker.address
Master:8031
yarn.resourcemanager.admin.address
Master:8033
yarn.resourcemanager.webapp.address
Master:8088
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.nodemanager.aux-services.mapreduce.shuffle.class
org.apache.hadoop.mapred.ShuffleHandler
修改slaves文件中内容如下
#替换localhost为一下内容
Master
Slave1
Slave2
根节点创建相关目录,并和配置文件一起分发到数据节点
#所以我这里datanode有3个,每个节点各一个,namenode只有一个,在Master上
#相关目录最好需要手动创建,然后分发给其他节点上
mkdir /hadoop/data
mkdir /hadoop/name
mkdir /hadoop/tmp
scp -r hadoop root@Slave1:/
scp -r hadoop root@Slave2:/
然后将这些文件通过scp发送到Slave1节点上覆盖原来的文件:
scp core-site.xml hadoop-env.sh hdfs-site.xml mapred-site.xml yarn-site.xml Slave1:/opt/tools/hadoop/etc/hadoop/
发送到各个Slave2节点上覆盖原来的文件:
scp core-site.xml hadoop-env.sh hdfs-site.xml mapred-site.xml yarn-site.xml Slave2:/opt/tools/hadoop/etc/hadoop/
f)运行hadoop
初始化hadoop
#切记切记!!如果需要重新格式化,则需要删除/hadoop/tmp文件,否则会运行出错 !!
hadoop namenode -format
进入到hadoop/sbin目录下运行./start-all.sh命令,启动hadoop集群
cd /opt/tools/hadoop/sbin
./start-all.sh
查看个节点信息
hadoop dfsadmin -report
jps查看各个节点进程
执行计算,直接拿来。例如单词统计:
#hsfs上创建一个文件夹:
hadoop fs -mkdir /input
#现在hsfs上创建一个文件夹:
hadoop fs -ls /
#上传文件到hdfs,这里直接将当前目录的README.txt进行上传
hadoop fs -put README.txt /input/
#在/opt/tools/hadoop/share/hadoop/mapreduce目录中执行:
hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output
可以查看一下统计结果:
hadoop fs -cat /output/part-r-00000
参考连接:
1.https://blog.csdn.net/Leafage_M/article/details/72633408
2.https://www.jianshu.com/p/30604c820e9d
3.https://blog.csdn.net/wh_19910525/article/details/7433164