linux之hadoop

情到浓时终转凉″ 提交于 2019-12-02 03:47:30

hadoop架构

 

 

MapReduce:分布式计算架构

HDFS:分布式文件系统

YARN:集群资源管理系统

 

 

HDFS结构:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

hadoop单机模式

搭建步骤:

搭建四台服务器,分别为:server、node1、node2、node3

1、关闭防火墙和selinux

2、保证server到每一个node节点可以免密码登陆,配置无密码登陆

 

 

 [root@Server ~]# vim /etc/ssh/ssh_config

 

 

 

2、配置本地域名解析,每一台都需要配置

   59  ssh root@node1 yum -y install rsync
   60  ssh root@node2 yum -y install rsync
   61  ssh root@node3 yum -y install rsync
   62  ssh root@node4 yum -y install rsync
   63  ssh root@node5 yum -y install rsync

 

把集群中的每一台设备的本地域名解析文件进行同步

 [root@Server ~]#  for i in {11..15} ; do rsync -a /etc/hosts root@192.168.1.${i}:/etc/hosts -e 'ssh' & done

 

3、安装java

查询java安装包

 

 [root@Server ~]# yum -y install java-1.8.0-openjdk-devel.x86_64

检测是否安装成功

 

 

 4、下载:hadoop-2.7.7.tar.gz

 https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz

 下载后上传到 /usr/local/hadoop目录下并解压

[root@Server hadoop]# tar -xf hadoop-2.7.7.tar.gz

 

 

5、修改环境变量

查找java路径

[root@Server ~]# find / -name java

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre

[root@Server]cd /usr/local/hadoop/hadoop-2.7.7/etc/hadoop

[root@Server hadoop]# vim hadoop-env.sh

需要修改一下部分

 

 退到主文件下,进行测试,有以下显示,表示修改成功

 

修改hadoop配置文件路径

 

 

6、测试执行

[root@Server hadoop-2.7.7]# ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount  input/ output

jar:表示应用的时jar计算模块

share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar--------计算模块文件(程序)

wordcount:使用的计算方式,此方法为统计input文件中每个单词出现的数量,并将统计结果输出到output文件中

计算搜首字母不是h的nfs的数量

[root@Server hadoop-2.7.7]# ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount grep input/ output '(?<=h)nfs'

 

hadoop完全布式配置

按单机模式的配置好后,继续一下配置

 

 

----Xml文件配置方式

[root@Server ~]# cd /usr/local/hadoop/hadoop-2.7.7/etc/hadoop/

 

配置vim core-site.xml文件的参考文档

https://hadoop.apache.org/docs/r2.8.5/hadoop-project-dist/hadoop-common/core-default.xml

[root@Server hadoop]# vim core-site.xml---------在该文件下添加一下内容

<configuration>
     <property>
         <name>fs.defaultFS</name>------------------------------------------------------文件系统
         <value>hdfs://server:9000</value>-----------------------------------------------9000表示端口号,用的是集群文件系统,"file:///"表示用本地文件系统
     </property>
     <property>
         <name>hadoop.tmp.dir</name>
         <value>/var/hadoop</value>-------------------------------------------------------数据存放的路径,该路径下Hadoop文件需要进群中的每一台上都要创建
     </property>
     <property>
         <name>hadoop.proxyuser.nfsuser.groups</name>
         <value>*</value>
     </property>
     <property>
         <name>hadoop.proxyuser.nfsuser.hosts</name>
         <value>*</value>
     </property>
</configuration>

 

修改hdfs-site.xml文件,参考文档

https://hadoop.apache.org/docs/r2.8.5/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

[root@Server ~]# vim /usr/local/hadoop/hadoop-2.7.7/etc/hadoop/hdfs-site.xml

<configuration>
    <property>
         <name>dfs.namenode.http-address</name>
         <value>server:50070</value>----------------------------------------设置namenode地址(设置namenode的服务器是谁),端口号不能变
     </property>
    <property>
         <name>dfs.namenode.secondary.http-address</name>
         <value>server:50090</value>-----------------------------------------设置namenode.secondary地址,端口号不能变
     </property>
    <property>
         <name>dfs.replication</name>---------------------------------------设置文件备份数量
         <value>2</value>
     </property>
 <property>
         <name>nfs.exports.allowed.hosts</name>
         <value>* rw</value>          
     </property>
     <property>
         <name>nfs.namenode.accesstime.precision</name>
         <value>3600000</value>
     </property>
     <property>
         <name>nfs.dump.dir</name>
         <value>/var/hdfs-nfs</value>
     </property>
     <property>
         <name>nfs.rtmax</name>
         <value>4194304</value>
     </property>
     <property>
         <name>nfs.wtmax</name>
         <value>1048576</value>
     </property>
     <property>
         <name>nfs.port.monitoring.disabled</name>
         <value>true</value>
     </property>
</configuration>

 

 

如果在/usr/local/hadoop/hadoop-2.7.7/etc/hadoop/该目录下没有slaves这个文件,需要出创建这个文件--mkdir slaves

[root@Server ~]# cd /usr/local/hadoop/hadoop-2.7.7/etc/hadoop/

[root@Server hadoop]# vim slaves-----添加下面内容

node1
node2
node3

 

将配置好的hadoop文件整个文件夹分发发到每一个节点上

for i in node{1..3}; do rsync -a --delete /usr/local/hadoop ${i}:/usr/local/ -e 'ssh' & done

 

启动相应服务:(只在master主服务器上执行)

[root@Server ~]#cd /usr/local/hadoop/hadoop-2.7.7

[root@Server hadoop-2.7.7]# ./bin/hdfs namenode -format-------------------------格式化

 

 出现上面的显示,表示格式化成功

[root@Server hadoop-2.7.7]# ./sbin/start-dfs.sh

 

 在节点上可以看到

 

 

[root@Server hadoop-2.7.7]# ./bin/hdfs dfsadmin -report-------可以看到三个节点的信息

至此hadoop集群配置成功

测试:

HDFS基本使用

[root@Server hadoop-2.7.7]# ./bin/hadoop fs -ls /

[root@Server hadoop-2.7.7]# ./bin/hadoop fs -mkdir /abc

[root@Server hadoop-2.7.7]# ./bin/hadoop fs -put *.txt /abc/-------------------上传文件

[root@Server hadoop-2.7.7]# ./bin/hadoop fs -get  /abc/--------------------------下载文件

 

 

 

 

 

 

 

配置mapred-site.xml文件,参考文档

https://hadoop.apache.org/docs/r2.8.5/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

 

 

[root@Server ~]#  vim /usr/local/hadoop/hadoop-2.7.7/etc/hadoop/mapred-site.xml

<configuration>
     <property>
         <name>mapreduce.framework.name</name>
         <value>yarn</value>-------------------------------------------------------------使用yarn管理进群系统
     </property>                                                 
     <property>                                                                  
         <name>mapreduce.jobtracker.http.address</name>          
         <value>server:50030</value>------------------------------------------------- 设置 jobtracker地址                          
     </property>                                                 
</configuration>

 

配置yarn-site.xml文件,参考手册

https://hadoop.apache.org/docs/r2.8.5/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

[root@Server ~]# vim /usr/local/hadoop/hadoop-2.7.7/etc/hadoop/yarn-site.xml

<configuration>
     <property>
         <name>yarn.resourcemanager.hostname</name>
         <value>server</value>----------------------------------------------配置yarn的主机
     </property>
     <property>
         <name>yarn.nodemanager.aux-services</name>
         <value>mapreduce_shuffle</value>
     </property>                                                                           
</configuration>

 

 

配置好后测试:

进行数据分析

 

 

 

 

 

 查看分析结果

 

 

 

 

NFS网关

 

 

 

 

 

 

 

 

 

 

 

 

1、新建一台虚机,命名为nfsgw,将hadoop文件拷贝得到/usr/local/hadoop/

查询这两个软件有没有安装,如果安装了,需要卸载掉

[root@nfsgw hadoop-2.7.7]# rpm -qa | grep nfs

[root@nfsgw hadoop-2.7.7]# rpm -qa | grep rpcbind

2、保证nfsgw网关服务器到每一个节点和主服务器都可以免密登陆

3、配置

 

 

 

 

 

 

 

 

 

 

 

 

3、添加用户

[root@node4 hadoop]# useradd  -g 10 nfsuser

 

 

4、配置文件

[root@nfsgw hadoop]# vim core-site.xml

<configuration>
     <property>
         <name>fs.defaultFS</name>
         <value>hdfs://server:9000</value>
     </property>
     <property>
         <name>hadoop.tmp.dir</name>
         <value>/var/hadoop</value>
     </property>
     <property>
         <name>hadoop.proxyuser.nfsuser.groups</name>----------------用户名:nfsuser,新建的用户是什么就用什么
         <value>*</value>---------------------------允许那些用户访问,*表示允许所用用户访问
     </property>
     <property>
         <name>hadoop.proxyuser.nfsuser.hosts</name>----------主机用户名:nfsuser,新建的用户是什么就用什么
         <value>*</value>---------------允许那些主机挂载,*表示允许所有主机挂载
     </property>
</configuration>                 

 

 

[root@nfsgw hadoop]# vim hdfs-site.xml

<configuration>
    <property>
         <name>dfs.namenode.http-address</name>
         <value>server:50070</value>
     </property>
    <property>
         <name>dfs.namenode.secondary.http-address</name>
         <value>server:50090</value>
     </property>
    <property>
         <name>dfs.replication</name>
         <value>2</value>
     </property>
     <property>
         <name>nfs.exports.allowed.hosts</name>-----------设置那些主机的读写权限
         <value>* rw</value> --------------“*” “rw”   表是给所有主机读写权限     
     </property>
     <property>
         <name>nfs.namenode.accesstime.precision</name>-------设置访问更新时间
         <value>3600000</value>-----1小时
     </property>
     <property>
         <name>nfs.dump.dir</name>----------------设置转储目录
         <value>/var/hdfs-nfs</value>
     </property>
     <property>
         <name>nfs.rtmax</name>-----------------设置读取文件的大小
         <value>4194304</value>
     </property>
     <property>
         <name>nfs.wtmax</name>-----------------设置写文件的大小
         <value>1048576</value>
     </property>
     <property>
         <name>nfs.port.monitoring.disabled</name>-------设置允许没有权限的客户端挂在
         <value>true</value>------true是允许。false表示不允许
     </property>
</configuration>

 

[root@nfsgw hadoop]mkdir /var/hdfs-nfs

[root@nfsgw hadoop]# chown nfsuser.10 /var/hdfs-nfs/

[root@nfsgw hadoop]# chmod 755 /var/hdfs-nfs/

 

 

5、在主服务器上配置

 

[root@Server ]#cd /usr/local/hadoop/hadoop-2.7.7/etc/hadoop

[root@Server hadoop]# mkdir nfs.map

[root@Server hadoop]# vim nfs.map

uid 1000 0 # Map the remote UID 1000 to the local UID 0

[root@nfsgw hadoop-2.7.7]# id nfsuser
uid=1000(nfsuser) gid=10(wheel) 组=10(wheel)

[root@Server hadoop-2.7.7]# ./sbin/stop-all.sh

[root@Server hadoop-2.7.7]# ./sbin/start-dfs.sh

[root@Server hadoop-2.7.7]# ./bin/hdfs dfsadmin -report-------------检测节点是否链接成功

[root@Server ~]# adduser -g 10 -u 1000 nfsuser

 

在nfs服务器上

[root@nfwgw hadoop-2.7.7]# ./sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap-------启动服务

[root@nfsgw hadoop-2.7.7]# netstat -ltunp------------查看111端口是否被监听

 

启动nfs服务必须切换到nfsuser用户下启动,也就是在core-site.xml配置文件中定义的用户来启动

[root@nfsgw hadoop-2.7.7]# su -l nfsuser

[nfsuser@nfsgw~]$ cd /usr/local/hadoop/hadoop-2.7.7

[nfsuser@nfsgw hadoop-2.7.7]$ ./sbin/hadoop-daemon.sh --script ./bin/hdfs start nfs3

 

 

 

5、到测试机进行挂载

[root@node5 ~]# mount /dev/cdrom /mnt/iso/

[root@node5 ~]# mount -v -t nfs -o vers=3,proto=tcp,nolock,noatime,noacl,sync 192.168.1.14:/ /mnt/test/-------地址为nfs网关服务器地址

 

6、停止服务

[nfsuser@nfsgw~]$ cd /usr/local/hadoop/hadoop-2.7.7

[nfsuser@nfsgw hadoop-2.7.7]$ ./sbin/hadoop-daemon.sh --script ./bin/hdfs stop nfs3

[root@nfwgw hadoop-2.7.7]# ./sbin/hadoop-daemon.sh --script ./bin/hdfs stop portmap

 

 

 

增加节点node

 

 

 1、在主节点server上变更配置

[root@Server ~]# vim /usr/local/hadoop/hadoop-2.7.7/etc/hadoop/slaves------添加新增节点名字node5

 

 

 [root@Server ~]# vim /etc/hosts-----------------添加新增节点的主机名

 

 

 

2、到需要新增节点的主机上配置

从主节点上拷贝hadoop(含已配置的文件)文件

[root@node5]# scp -r server:/usr/local/hadoop/ /usr/local/hadoop/

启动服务

[root@node5 hadoop-2.7.7]# ./sbin/hadoop-daemon.sh start datanode

 

3、到主服务器上配置

 

 

[root@Server hadoop-2.7.7]# ./bin/hdfs dfsadmin -report------------------查看新增节点

[root@Server hadoop-2.7.7]# ./bin/hdfs dfsadmin -setBalancerBandwidth 67108864----设置同步带宽为64M

[root@Server hadoop-2.7.7]# ./sbin/start-balancer.sh -threshold 5-----启动5个线程同步数据

 

 

 

删除节点node

 

 

 

在主服务器配置

[root@Server hadoop]# vim hdfs-site.xml-------在该文件中增加一个配置

     <property>
         <name>dfs.hosts.exclude</name>
         <value>/usr/local/hadoop/etc/hadoop/exclude</value>exclude
     </property>

保存

[root@Server hadoop]# touch exclude----该文件名exclude需要和<value>/usr/local/hadoop/etc/hadoop/exclude</value>exclude里面的名字一致

[root@Server hadoop]# vim exclude------------添加要删除的节点主机名

node5

 

[root@Server hadoop-2.7.7]# ./bin/hdfs dfsadmin -refreshNodes---------更新节点数据

[root@Server hadoop-2.7.7]# ./bin/hdfs dfsadmin -report

 

 显示红框内容,表示数据已迁移结束,完整的从集群中删除

 

[root@Server hadoop-2.7.7]# vim etc/hadoop/slaves-------在该文件中删除节点node5

删除exclude文件

[root@Server hadoop]# vim hdfs-site.xml-------删除配置文件中的该内容

     <property>
         <name>dfs.hosts.exclude</name>
         <value>/usr/local/hadoop/etc/hadoop/exclude</value>exclude
     </property>

 

重启namenode服务

[root@Server hadoop-2.7.7]# ./sbin/hadoop-daemon.sh stop namenode

[root@Server hadoop-2.7.7]# ./sbin/hadoop-daemon.sh start  namenode

 

到删除的节点上停止服务

[root@node5 hadoop-2.7.7]# ./sbin/hadoop-daemon.sh stop datanode

 

 

修复节点

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!