Hadoop分布式集群搭建以及案例运行-fs操作


Hadoop分布式集群搭建案例步骤(也可以叫分布式文件系统)
一:创建分布式集群环境
二:设置静态ip以及主机名与映射关系
三:创建用户、配置SSH无密登录
四:子机dn操作
五:配置主机jdk、hadoop的环境以及hadoop文件
六:打包、 远程传输至子机
七: 启动hadoop集群以及运行案例
基于hadoop的整体分布式模块交互
 1)分布式系统的定义
  把数据放到一个服务器集群上面,分为:主控服务器(Master/NameNode),数据服务器(ChunkServe r/DataNode),和客户服务器Client.HDFS和GFS都是按照这个架构模式来搭建的
 2)核心内容 文件的目录结构独立存储在一个NameNode上,二具体文件数据,拆分成若干块,冗余的存放在不
同的数据服务器上(DataNode)。存储目录结构的主控服务器,在GFS中称为Master,在HDFS中称为Na
meNode
基于Hadoop的HDFS
 HDFS采用master/slave架构。一个HDFS集群是有一个Namenode和一定数目的Datanode组成。Namenode是一个中心服务器,负责管理文件系统的namespace和客户端对文件的访问。一个文件其实分成一个或多个block,这些block存储在Datanode集合里。Namenode执行文件系统的namespace操作,比如打开、关闭、重命名文件和目录;同时决定block到具体Datanode节点的映射
 1)NameNode存放两种信息:文件和block的映射、block和DataNode的映射。文件和block的映射,固化在磁盘上。而block和DataNode的映射在DataNode启动时上报给NameNode,即blockReport
2)HDFS协议 ClientDatanodeProtocol :一个客户端和datanode之间的协议接口,用于数据块恢复;ClientProtocol :client与Namenode交互的接口,所有控制流的请求均在这里,如:创建文件、删除文件等;DatanodeProtocol : Datanode与Namenode交互的接口,如心跳、blockreport等;NamenodeProtocol :SecondaryNode与Namenode交互的接口;InterDatanodeProtocol:用于DataNode和DataNode通信

准备工作:
1)JDK下载Hadoop下载作用是为海量数据提供(HDFS)分布式存储和(YARN)分布式计算
博主这里的jdk是1.8的版本,hadoop是2.7,有的单位还会用hadoop-2.6.0-cdh5.7.0看个人需要去下载
2)红色字体是易疏忽出错的地方要注意
一:创建分布式集群环境
我这里克隆了一个主机(Hadoop NN)两个子机(DN138/139)

二:设置静态ip以及主机名与映射关系
2.1)设置静态ip :/etc/sysconfig/network-scripts/ifcfg-ens33
  TYPE=Ethernet
    BOOTPROTO=static
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens33
    UUID=e950fdd1-ae15-4a50-ae68-7b852d8e7e98
    DEVICE=ens33
    ONBOOT=yes
    PEERDNS=yes
    PEERROUTES=yes
    IPV6_PEERDNS=yes
    IPV6_PEERROUTES=yes
    IPV6_PRIVACY=no
    NETMASK=255.255.255.0
    NM_CONTROLLED=no
    GATEWAY=192.168.229.2
    DNS1=202.106.0.20
    IPADDR=192.168.229.137
我这里克隆的时候就已经配置了ens33文件,所以我只用在最后一行追加IPADDR就可以
echo IPADDR=192.168.229.137 >> /etc/sysconfig/network-scripts/ifcfg-ens33
重启配置文件:service network restart
检查IP以及网络是否可以连接:ping ip地址 / ping www.baidu.com
如果外网连接失败编辑resolv.conf文件配置nameserver IP或者8.8.8.8
# vi /etc/resolv.conf
2.2)设置主机名
echo 主机名 >> /etc/hostname(我这里设置的主机名是nn137)
2.3)配置映射
语法:echo IP 主机名 >> /etc/hosts
echo 192.168.229.137 nn37 >> /etc/hosts
echo 192.168.229.138 dn138 >> /etc/hosts
echo 192.168.229.139 dn139 >> /etc/hosts
备注:有多少台机子就配多少关系映射
2.4)重启连接: reboot
2.5)修改本地windows的映射
打开hosts文件在最下面手动加上IP 主机名,然后我们可以发现在cmd命令窗口ping 主机名也可以ping 通了

三:创建用户、配置SSH无密登录
3.1)创建hadoop用户组 :useradd -m hadoop -G root -s /bin/bash
3.2)设置hadoop用户密码 :echo hadoop | passwd 密码 --stdin(免输两次)
也可以用passwd hadoop 进行设置密码
设置hadoop用户权限 命令visudo 92行copy一下,把root改成hadoop

3.3)SSH无密码登录:
切换到hadoop用户下,如果没有.ssh目录输入ssh localhost命令即可

进到.ssh目录输入ssh-keygen -t rsa生成秘钥( 注意子机dn也要生成秘钥

生成之后会发现多了两个文件,其中id_rsa.pub里面存放的就是生成后的秘钥
然后在主机创建一个authorized_keys文件, 并修改其权限

将id_rsa.pub追加到authorized_keys中并发送给dn,命令如下:
cat id_rsa.pub >> authorized_keys
scp id_rsa.pub hadoop@dn138:~/.ssh
scp id_rsa.pub hadoop@dn139:~/.ssh
最后成功无密登录


四:子机dn
子机dn要做的准备是:
4.1) 二:设置静态ip以及主机名与映射关系
4.2) 三:创建用户
五:配置主机jdk、hadoop的环境以及hadoop文件
5.1) 在hadoop用户组下创建一个文件夹用来存放jdk以及hadoop,稍后配置好环境还要进行打包远程传输到子机系统上,这样节省了很多时间
5.2) 将下载好的jdk、hadoop安装包上传至app下进行解压重命名然后强制删除tar.gz安装包

5.3)配置jdk、hadoop环境:
切换hadoop用户下编辑 vi ~/.bashrc
#jdk
export JAVA_HOME=/home/hadoop/app/jdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar
#hadoop
export HADOOP_HOME=/home/hadoop/app/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

重新加载bashrc文件,让环境变量立即生效,然后查看环境是否配置成功
# source ~/.bashrc

5.4)hadoop配置文件
(注解:先把/app/hadoop/etc/hadoop目录下的mapred-site.xml.template 进行重命名方便后续查找。命令mv mapred-site.xml.template mapred-site.xml)

core-site.xml 配置文件服务类型:hdfs
hdfs-site.xml 备份数,数据存储位置
mapred-site.xml 启动yarn
yarn-site.xml 配置yarn的主机地址
slaves 配置所有子机(datanode)的主机名称
5.4.1)core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value> hdfs://主机名:9000</value>
</property>
</configuration>
5.4.2)hdfs-site.xml
(备份数默认是3,意思是一台主机三台从机,因为这里是一台主机两台从机所以这里是2)
<configuration>
<property>
<name>dfs.replication</name>
<value> 2</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value> 主机名:50070</value>
</property>
<!-- NameNode结点存储hadoop文件系统信息的本地系统路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/app/hadoop/tmp/name</value>
</property>
<!-- DataNode结点被指定要存储数据的本地文件系统路径,这个值只对NameNode有效,DataNode并不需要使用到它 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/app/hadoop/tmp/data</value>
</property>
</configuration>
5.4.3)mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5.4.4)yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value> 主机名</value>
</property>
</configuration>
5.4.5)slaves(子机名)

六:打包、 远程传输至子机
6.1) 打包:tar -czf 目录名tar.gz 打包名
6.2) 传输:scp 打包名 子机名 :~/
6.3) 将 ~/.bashrc 配置文件传输到子机:scp ~/.bashrc 子机名 :~/

6.4) 到子机(dn138/139)进行解压配置,重启配置文件
七: 启动hadoop集群以及简单案例
7.1)关闭防火墙( 子机照做 )
systemctl disable firewalld
systemctl stop firewalld

7.2)进程守护( 子机照做 )
# setenforce 0
# vi /etc/selinux/config 设置SELINUX=disabled
7.3)启动hadoop集群
7.3.1) 切换到hadoop用户下执行如下命令
hdfs namenode -format(第一次启动一定要对hadoop进行文件系统格式化(主机上),否则hadoop配置文件就得重新配置了)
status 显示为0,表示成功

7.3.2) 启动namenode,datanode
hadoop/sbin/目录下运行sh start-dfs.sh(关闭为sh stop-dfs.sh)
jps查看是否启动成功,成功之后可以在主机上看到 Jps、NameNode、SecondaryNameNode三个属性,子机上可以看到 Jps、DataNode。然后就可以访问 http://nn137:50070,可以看到hadoop集群的信息。这是我的主机名也可以用ip,你要查看换成你的主机ip


7.3.3) 启动resourceManager和nodeManager以及secondary( 集群中所有资源的统一管理和分配 )
sh start-yarn.sh(关闭为sh stop-yarn.sh)
7.3.4) 启动任务日志追踪
sh mr-jobhistory-daemon.sh start historyserver(关闭为sh mr-jobhistory-daemon.sh stop historyserver)
如果成功会在主机的节点上看到多了ResourceManager以及JobHistoryServer,子机的节点上会多一个NodeManager
7.3.5)执行分布式的事例
输入命令: hadoop fs -ls / 将显示 出文件系统中的根目录下的文件
创建用户目录: hadoop fs -mkdir -p /user/had oop
再创建一个:hadoop fs -mkdir -p datas
刷新页面点击Browse the file system可以看见我们创建的用户目录

namenode、datanode在本机上存储的位置cd /tmp/hadoop-ubuntu/dfs/name/current  ,namenode的当前信息,里面的fsimage_000...存的就是文件系统的镜像文件fsimage_00...,md5为校验版本
然后上传文件到datas目录下 运行MapReduce作业,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后将结果输出到 output 文件夹中
mapreduce目录:hadoop/share/hadoop/mapreduce
统计每个单词出现的次数:hadoop jar 文件名称 grep datas output 'dfs[a-z.]+'
查看结果:hadoop fs -text output /*

统计每个单词出现的次数:hadoop jar 文件名称 wordcount datas output1(跟上面所用到的方法不一样,但是结果是一样的)
查看结果:hadoop fs -text output1/*

统计property出现的次数也包括注释:hadoop jar 文件名称 grep datas output2 property
查看结果:hadoop fs -text output2/*
运行时输出与伪分布式的类似,会显示Job的进度,时间可能较长,耐心等待,如果长时间没有看到进度,可以尝试如下方式解决(具体操作找度娘吧) 
重启Hadoop集群,再次尝试 
增大虚拟机内存 
更改 YARN 的内存配置 
在Job进度中出现“Successfully”表示成功
成功后,我们可以在浏览器中访问 http://nn137:8088/cluster ,查看任务的运行信息
这里我们可以我们上面统计的三个信息

也可以在如下页面下载统计结果


遇到的问题以及解决思路:
1) :是否对Windows客户端中的host文件做host解析。到此路径下   C:\Windows\System32\drivers\etc\hosts  打开此文件,做host解析。当然,也需要在Linux环境下,做host文件解析
2):查看是否关闭selinux。cat etc/sysconfig/selinux。如果 没有关闭,执行下面的命令:sed -i 's#enforcing#disabled#' /etc/sysconfig/selinux
3):检查iptables是否关闭:
/etc/init.d/iptables status#查看是否关闭:
/etc/init.d/iptables stop#关闭iptables
chkconfig iptables off#开机关闭
4):查看你的$HADOOP_HOME/etc/hadoop下的 core-site.xml hdfs-site.xml 是否配置好
5):查看你的$HADOOP_HOME/etc/hadoop下的 slaves(子机名)配置文件是否正确

hadoop连接方式配置-fs操作-put
多个文件合并cat:cat core-site.xml ;cat yarn-site.xml ;cat hdfs-site.xml
选择启动哪种配置模式:
ln -s hadoop_pseudo hadoop(前提是剔除环境变量)
剔除环境变量:export HADOOP_CONF_DIR=
创建用户目录:
查看fs的根目录:hadoop fs -ls /    
递归查看fs的根目录:hadoop fs -ls -R /
-p是创建多级目录:hadoop fs -mkdir -p /user/$USER  
删除目录及目录下的所有文件:fs -rm -R /usr
可查看版本信息:cat VERSION    
查看帮助:
查看fs的所有帮助信息:hadoop fs
查看put的具体信息:hadoop fs -help put
往分布式文件系统上放文件:
1 先本地建一个hello.txt
cd ~
touch hello.txt
echo "hello world" >> hello.txt
hadoop fs -put hello.txt /user/ubuntu
hadoop fs -ls -R   ///该指令直接会查看/user/ubuntu/下的文件(非文件夹)
hadoop fs -ls -R /     ///查看是否有hello.txt 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值