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通信



gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_fs操作


准备工作:



1)JDK下载Hadoop下载:作用是为海量数据提供(HDFS)分布式存储和(YARN)分布式计算



博主这里的jdk是1.8的版本,hadoop是2.7,有的单位还会用hadoop-2.6.0-cdh5.7.0看个人需要去下载



2)红色字体是易疏忽出错的地方要注意



一:创建分布式集群环境



我这里克隆了一个主机(Hadoop NN)两个子机(DN138/139)



gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_fs操作_02



二:设置静态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 通了



gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_fs操作_03



三:创建用户、配置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



gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_fs操作_04



3.3)SSH无密码登录:



切换到hadoop用户下,如果没有.ssh目录输入ssh localhost命令即可



gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_Hadoop分布式文件系统_05




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



gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_fs操作_06



生成之后会发现多了两个文件,其中id_rsa.pub里面存放的就是生成后的秘钥



然后在主机创建一个authorized_keys文件, 并修改其权限



gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_Hadoop分布式集群_07



将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



最后成功无密登录



gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_fs操作_08



gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_fs操作_09


四:子机dn



子机dn要做的准备是:



4.1) 二:设置静态ip以及主机名与映射关系



4.2) 三:创建用户



五:配置主机jdk、hadoop的环境以及hadoop文件



5.1) 在hadoop用户组下创建一个文件夹用来存放jdk以及hadoop,稍后配置好环境还要进行打包远程传输到子机系统上,这样节省了很多时间



5.2) 将下载好的jdk、hadoop安装包上传至app下进行解压重命名然后强制删除tar.gz安装包



gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_Hadoop分布式集群_10



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


gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_Hadoop分布式集群_11



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



# source ~/.bashrc



gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_Hadoop分布式集群_12



5.4)hadoop配置文件



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



gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_fs操作_13




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> 
 
 
 
hdfs://主机名:9000</value> 
 
 
 

   </property> 
 
 
 

   </configuration>



5.4.2)hdfs-site.xml



(备份数默认是3,意思是一台主机三台从机,因为这里是一台主机两台从机所以这里是2)

<configuration> 
 
 
 

   <property> 
 
 
 

   <name>dfs.replication</name> 
 
 
 
2</value> 
 
 
 

   </property> 
 
 
 

   <property> 
 
 
 

   <name>dfs.namenode.http-address</name> 
 
 
 
主机名: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> 
 
 
 

   </property> 
 
 
 

   </configuration>


5.4.5)slaves(子机名)



gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_Hadoop分布式文件系统_14



六:打包、 远程传输至子机



6.1) 打包:tar -czf 目录名tar.gz 打包名



6.2) 传输:scp 打包名 子机名 :~/



6.3) 将 ~/.bashrc 配置文件传输到子机:scp ~/.bashrc 子机名 :~/



gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_Hadoop分布式文件系统_15



6.4) 到子机(dn138/139)进行解压配置,重启配置文件



七: 启动hadoop集群以及简单案例



7.1)关闭防火墙( 子机照做 )



systemctl disable firewalld



systemctl stop firewalld




gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_Hadoop分布式集群_16



7.2)进程守护( 子机照做 )


# setenforce 0


# vi /etc/selinux/config 设置SELINUX=disabled


7.3)启动hadoop集群


7.3.1) 切换到hadoop用户下执行如下命令


hdfs namenode -format(第一次启动一定要对hadoop进行文件系统格式化(主机上),否则hadoop配置文件就得重新配置了)


status 显示为0,表示成功


gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_Hadoop分布式文件系统_17



7.3.2) 启动namenode,datanode


hadoop/sbin/目录下运行sh start-dfs.sh(关闭为sh stop-dfs.sh)


Jps、NameNode、SecondaryNameNode三个属性,子机上可以看到 Jps、DataNode。然后就可以访问 http://nn137:50070,可以看到hadoop集群的信息。这是我的主机名也可以用ip,你要查看换成你的主机ip


gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_Hadoop分布式集群_18


gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_Hadoop分布式集群_19



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可以看见我们创建的用户目录


gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_fs操作_20


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 /*


gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_Hadoop分布式文件系统_21



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


查看结果:hadoop fs -text output1/*


gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_Hadoop分布式文件系统_22


统计property出现的次数也包括注释:hadoop jar 文件名称 grep datas output2 property


查看结果:hadoop fs -text output2/*


运行时输出与伪分布式的类似,会显示Job的进度,时间可能较长,耐心等待,如果长时间没有看到进度,可以尝试如下方式解决(具体操作找度娘吧) 


重启Hadoop集群,再次尝试 


增大虚拟机内存 


更改 YARN 的内存配置 


在Job进度中出现“Successfully”表示成功


成功后,我们可以在浏览器中访问 http://nn137:8088/cluster ,查看任务的运行信息


这里我们可以我们上面统计的三个信息


gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_Hadoop分布式文件系统_23


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


gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_Hadoop分布式文件系统_24


gt hadoop分布式安装 lt 一 hadoop分布式环境搭建步骤_Hadoop分布式文件系统_25


遇到的问题以及解决思路:


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.xmlhdfs-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