hadoop入门学习

 

1.hadoop1.0,2.0架构演进(都说3.0不稳定,以后再看)

 

hadoop入门学习_第1张图片

 

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查看各个节点进程

hadoop入门学习_第2张图片

执行计算,直接拿来。例如单词统计:

#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 

 

hadoop入门学习_第3张图片

 

hadoop入门学习_第4张图片

 

参考连接:

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

 

 

你可能感兴趣的:(hadoop,hadoop)