Hadoop集群的搭建

#===========================================================================#

ALL 表示所有主机

NODE 表示 node1 node2 node3 

NN1: 表示 namenode

ALL:所有节点能相互ping 通(配置/etc/hosts

ALL:安装java-1.8.0-openjdk-devel

NN1:ssh免密登录所有集群主机,包括自己(不能提示输入yes,ssh 免密登录,修改 /etc/ssh/ssh_config 

添加设置:StrictHostKeyChecking no

#===========================================================================#

192.168.1.10   nn01       namenode,secondary,ResourceManager

192.168.1.11   node1      datanode,NodeManager

192.168.1.12   node2      datanode,NodeManager

192.168.1.13   node3      datanode,NodeManager

#===========================================================================#

[root@roompc901 ~]#cd /var/lib/libvirt/images/

[root@roompc901 images]# qemu-img create -b demo.img -f qcow2 node1.img 16G

[root@roompc901 images]# qemu-img create -b demo.img -f qcow2 node2.img 16G

[root@roompc901 images]# qemu-img create -b demo.img -f qcow2 node3.img 16G

[root@roompc901 images]# qemu-img create -b demo.img -f qcow2 nn01.img 16G

[root@roompc901 ~]# cd /etc/libvirt/qemu/

[root@roompc901 qemu]# sed 's/node/node1/' node.xml   > /etc/libvirt/qemu/node1.xml

[root@roompc901 qemu]# sed 's/node/node2/' node.xml   > /etc/libvirt/qemu/node2.xml

[root@roompc901 qemu]# sed 's/node/node3/' node.xml   > /etc/libvirt/qemu/node3.xml

[root@roompc901 qemu]# sed 's/node/nn01/' node.xml   > /etc/libvirt/qemu/nodenn01.xml

[root@roompc901 qemu]# virsh define node1.xml

[root@roompc901 qemu]# virsh define node2.xml 

[root@roompc901 qemu]# virsh define node3.xml 

[root@roompc901 qemu]# virsh define nn01.xml 

[root@roompc901 qemu]# virsh start node1

[root@roompc901 qemu]# virsh start node2

[root@roompc901 qemu]# virsh start node3

[root@roompc901 qemu]# virsh start nn01

[root@roompc901 qemu]# virsh console nn01

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 

[root@localhost ~]# systemctl restart network

[root@localhost ~]# hostnamectl set-hostname nn01

......

#===========================================================================#

[root@nn01 hadoop]# ssh-keygen 

[root@nn01 hadoop]# for i in {0..3}; do ssh-copy-id  192.168.1.1$i; done

[root@nn01 hadoop]# vim /etc/hosts

192.168.1.10   nn01     

192.168.1.11   node1    

192.168.1.12   node2   

192.168.1.13   node3

[root@nn01 hadoop]# for i in {0..3}; do  scp /etc/hosts   192.168.1.1$i:/etc/; done

#===========================================================================#

安装java环境

[root@nn01 ~]# yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel

[root@roompc901 arthitecture 05]# scp hadoop/ 192.168.1.10:/root/

[root@nn01 ~]# cd hadoop/

[root@nn01 hadoop]# tar -zvxf hadoop-2.7.6.tar.gz 

[root@nn01 hadoop-2.7.6]# cd hadoop-2.7.6/

 

• HDFS 完全分布式系统配置

– 配置 hadoop-env.sh

– 配置 core-site.xml

– 配置 hdfs-site.xml

Hadoop 单机模式安装配置

1 hadoop 单机配置

[root@nn01 ~]# mkdir /usr/local/hadoop/

[root@nn01 ~]# cp -r /hadoop/hadoop-2.7.6/*    /usr/local/hadoop

[root@nn01 hadoop]# which java

/usr/bin/java

[root@nn01 hadoop]# readlink -f $(which java)

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre/bin/java

[root@nn01 ~]# /usr/local/hadoop/etc/hadoop/hadoop-env.sh

修改以下两行:

......

export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre"

export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"

......

分析单词出现的次数

./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount oo xx

[root@nn01 hadoop]# ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount oo xx

[root@nn01 ~]# cd /usr/local/hadoop

[root@nn01 hadoop]# mkdir input

[root@nn01 hadoop]# cp *.txt input/

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

#===========================================================================#

官方网址:

http://hadoop.apache.org

找到指导文档:

Documentation===>Release 2.7.6(找到对应的版本2.7.6)===>Configuration(配置)

 

[root@nn01 ~]# cd /usr/local/hadoop/etc/hadoop/

#=============================================#

NN1: 配置 core-site.xml 

#=============================================#

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

<configuration>

    <property>

        <name>fs.defaultFS</name>

        <value>hdfs://nn01:9000</value>

    </property>

    <property>

        <name>hadoop.tmp.dir</name>

        <value>/var/hadoop</value>

    </property>

</configuration>

ALL: 创建文件夹 /var/hadoop

[root@nn01 hadoop]# mkdir  /var/hadoop

[root@nn01 hadoop]# ssh node1  mkdir /var/hadoop

[root@nn01 hadoop]# ssh node2  mkdir /var/hadoop

[root@nn01 hadoop]# ssh node3  mkdir /var/hadoop

#=============================================#

NN1: 配置 hdfs-site.xml

#=============================================#

<configuration>

    <property>

        <name>dfs.namenode.http-address</name>

        <value>nn01:50070</value>

    </property>

    <property>

        <name>dfs.namenode.secondary.http-address</name>

        <value>nn01:50090</value>

    </property>

    <property>

        <name>dfs.replication</name>

        <value>2</value>

    </property>

</configuration>

 

ALL:

[root@nn01 hadoop]# jps

13207 Jps

[root@nn01 hadoop]# ssh node2 jps

10270 Jps

[root@nn01 hadoop]# ssh node3 jps

10268 Jps slaves

 

NODE:

NN1: 配置slaves  (节点)

root@nn01 ~]# vim /usr/local/hadoop/etc/hadoop/slaves

node1

node2

node3

ALL: 同步配置到所有主机

root@nn01 ~]# for i in {1..3}; do scp -r /usr/local/hadoop/  192.168.1.1$i:/usr/local/     ; done 

NN01: 格式化 namenode

./bin/hdfs namenode -format

[root@nn01 hadoop]# ./bin/hdfs  namenode -format

NN01: 启动集群

[root@nn01 ~]# cd /usr/local/hadoop/

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

 

./sbin/start-dfs.sh

停止集群可以使用 ./sbin/stop-dfs.sh

ALL: 验证角色 jps

NN01: 验证集群是否组建成功

./bin/hdfs dfsadmin -report

服务启动日志路径 /usr/local/hadoop/logs

#=============================================#

                       配置完全分布式hadoop集群:

#=============================================#

mapred-site.xml 配置

#=============================================#

#复制模板文件并更名:

[root@nn01 hadoop]# cp mapred-site.xml.template mapred-site.xml

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

<configuration>

    <property>

        <name>mapreduce.framework.name</name>

        <value>yarn</value>

    </property>

</configuration>

 

#=============================================#

yarn-site.xml 配置

#=============================================#

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

<configuration>

<!-- Site specific YARN configuration properties -->

    <property>

        <name>yarn.resourcemanager.hostname</name>

        <value>nn01</value>

    </property>

    <property>

        <name>yarn.nodemanager.aux-services</name>

        <value>mapreduce_shuffle</value>

    </property>

</configuration>

ALL: 同步配置到主机

[root@nn01 ~]# for i in {1..3}; do scp -r /usr/local/hadoop/    192.168.1.1$i:/usr/local/; done

NN1: 启动服务 ./sbin/start-yarn.sh

[root@nn01 hadoop]# ./sbin/start-yarn.sh

ALL: 验证角色 jps 

[root@nn01 hadoop]# for i in nn01 node{1..3}; do  echo "#---------------------$i-------------------#" && ssh $i jps; done;

[root@nn01 hadoop]# jps

2230 NodeManager

1959 ResourceManager

1001 NameNode

1289 SecondaryNameNode

2345 Jps

NN1: 验证节点状态 ./bin/yarn node -list

[root@nn01 hadoop]# ./bin/yarn node -list

namenode web 地址 http://192.168.1.10:50070

sedondary namenode web 地址 http://192.168.1.10:50090

yarn resourcemanager 管理地址 http://192.168.1.10:8088

datanode web 地址 http://192.168.1.11:50075

nodemanager web 地址 http://192.168.1.11:8042

#===========================================================================#

增加修复节点

按照单机方法安装一台机器,部署运行的 java 环境

拷贝 namenode 的文件到本机

启动 datanode

./sbin/hadoop-daemons.sh start datanode

设置同步带宽

./bin/hdfs dfsadmin -setBalancerBandwidth 60000000

./sbin/start-balancer.sh

– 1、启动一个新的系统,禁用 selinux、禁用 firewalld

– 2、设置 ssh 免密码登录

– 3、在所有节点增加新新节点的主机信息 /etc/hosts

– 4、安装 java openjdk 运行环境

– 5、拷贝namnode的 /usr/local/hadoop 到本机

– 6、修改namenodeslaves文件增加该节点

– 7、在该节点启动datanode           

./sbin/hadoop-daemon.sh start datanode

– 增加节点 续 ... ...

– 8、设置同步带宽,并同步数据

./bin/hdfs dfsadmin -setBalancerBandwidth 67108864

./sbin/start-balancer.sh

– 9、查看集群状态

./bin/hdfs dfsadmin -report 

HDFS 修复节点

– 修复节点比较简单,不增加节点基本一致

– 需要注意新节点的 ip 不 主机名 要不损坏节点一致

– 启动服务

./sbin/hadoop-daemon.sh start datanode

– 数据恢复是自动的

– 我们上线以后会自动恢复数据,如果数据量非常巨大,可能需要一定的时间

#===========================================================================#

恢复数据需注意:新添加节点后,不能立即下线要修复的节点。要等到数据更新完成才能下线。

• HDFS 删除节点

– 配置NameNode的 hdfs-site.xml

– 增加 dfs.hosts.exclude 配置

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

<property>

<name>dfs.hosts.exclude</name>

<value>/usr/local/hadoop/etc/hadoop/exclude</value>

</property>

– 增加 exclude 配置文件,写入要删除的节点 主机名

[root@nn01 hadoop]# cat /usr/local/hadoop/etc/hadoop/exclude

node4

 

– 更新数据

./bin/hdfs dfsadmin -refreshNodes

[root@nn01 hadoop]# ./bin/hdfs dfsadmin -refreshNodes

Refresh nodes successful

• HDFS 删除节点状态

– 查看状态 ./bin/hdfs dfsadmin -report

– Normal 正常状态

– Decommissioned in Program 数据正在迁移(此时千万不能动机器)

– Decommissioned 数据迁移完成

– 注意:只有当状态变成 Decommissioned 才能 down

机下线。

#=================================================#

NFS网关

#=================================================#

• 调试不日志排错

– 在配置 NFS 网关过程中经常会碰到各种各样的错误,

如果出现了错误,打开调试日志是一个不错的选择

• log4j.property

– log4j.logger.org.apache.hadoop.hdfs.nfs=DEBUG

– log4j.logger.org.apache.hadoop.oncrpc=DEBUG

 

• 配置代理用户

– 在 namenode 和 nfsgw 上添加代理用户

– 代理用户的 uid gid 用户名 必须完全相同

– 如果因特殊原因客户端的用户和NFS网关的用户 uid

丌能保持一致需要我们配置 nfs.map 的静态映射关系

– nfs.map 

NFS 网关

配置 /etc/hosts (NFSGW)

192.168.1.10 nn01

192.168.1.11 node1

192.168.1.12 node2

192.168.1.13 node3

192.168.1.15 nfsgw

[root@nfswg ~]# cat /etc/hosts

192.168.1.10   nn01      

192.168.1.11   node1     

192.168.1.12   node2     

192.168.1.13   node3     

192.168.1.14   nfsgw 

添加用户(nfsgw, nn01)

[root@nn01 hadoop]# groupadd -g 500 nsd1804

[root@nn01 hadoop]# useradd -u 500 -g 500 nsd1804

[root@nfswg ~]# groupadd -g 500 nsd1804

[root@nfswg ~]# adduser -u 500 -g 500 nsd1804

NN01: 3 停止集群

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

NN01: 4 增加配置 core-site.xml

    <property>

        <name>hadoop.proxyuser.nsd1804.groups</name>

        <value>*</value>

    </property>

    <property>

        <name>hadoop.proxyuser.nsd1804.hosts</name>

        <value>*</value>

    </property>

NN01: 5 同步配置到 node1 node2 node3

NN01: 6 启动集群   ./sbin/start-dfs.sh

NN01: 7 查看状态

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

#===========================================================================#

--------------------------------------------------------------------------------------------------------------------------

• 配置步骤(nfsgw)

– 1、启动一个新的系统,禁用 selinux、禁用 firewalld

– 2、卸载 rpcbind nfs-utils

– 3、配置 /etc/hosts,添加所有 namenode 

datanode 的主机名不 ip 对应关系

– 4、安装 java openjdk 的运行环境

NFSGW: 安装 java-1.8.0-openjdk-devel

NFSGW: 同步 nn01 的 /usr/local/hadoop NFSGW的相同目录下

NFSGW: hdfs-site.xml 增加配置

– 5、同步 namenode 的 /usr/local/hadoop 到本机

– 6、配置 hdfs-site.xml

– 7、启动服务

 

• 配置文件 hdfs-site.xml

• nfs.exports.allowed.hosts

– 默认情况下,export可以被任何客户端挂载。为了更好的控制访问,可以设置属性。值字符串为机器名和访问策略,通过空格来分割。机器名的格式可以是单一的主机,Java的正则表达式或者IPv4地址。访问权限使用rwro来挃定导出目录的读/写或机器只读访问。如果访问策略没被提供,默认为只读的。每个条目使“;”来分割。

– nfs.exports.allowed.hosts

– 配置 * rw

... ...

<property>

<name>nfs.exports.allowed.hosts</name>

<value>* rw</value>

</property>

... ...

 

• nfs.dump.dir

– 用户需要更新文件转储目录参数。NFS客户端经常重新安排写操作,顺序的写操作会以随机到达NFS网关。这个目录常用于临时存储无序的写操作。对于每个文件,无序的写操作会在他们积累在内存中超过一定阈值(如。1 mb)被转储。需要确保有足够的空间的目录。例如,如果应用上传10100M,那么这个转储目录推荐有1GB左右的空间,以便每个文件都发生最坏的情况。只有NFS网关需要在设置该属性后重启。

• 配置文件 hdfs-site.xml

– nfs.dump.dir

... ...

<property>

<name>nfs.dump.dir</name>

<value>/var/nfstmp</value>

</property>

... ...

– 配置完该属性后要创建 /var/nfstmp 文件夹

mkdir /var/nfstmp

– 并且把该文件夹的属组改成 代理用户

--------------------------------------------------------------------------------------------------------------------------

#===========================================================================#

 

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

 ......

   <property>

        <name>nfs.exports.allowed.hosts</name>

        <value>*  rw</value>

    </property>

    <property>

        <name>nfs.dump.dir</name>

        <value>/var/nfstmp</value>

    </property>

.......

 

– 配置完该属性后要创建 /var/nfstmp 文件夹

 

NFSGW: 创建转储目录,并给用户 nsd1804 赋权

[root@nsfgw hadoop]# mkdir /var/nfstmp

[root@nsfgw hadoop]# chown nsd1804:nsd1804 /var/nfstmp

 

NFSGW: 给 /usr/local/hadoop/logs 赋权

[root@nsfgw hadoop]# setfacl -m u:nsd1804:rwx  /usr/local/hadoop/logs 

 

创建数据根目录 /var/hadoop

[root@nsfgw hadoop]# mkdir /var/hadoop

 

#===========================================================================#

---------------------------------------------------------------------------------------------------------------------------

启动不挂载

– 设置 /usr/local/hadoop/logs 权限,为代理用户赋予

读写执行的权限

setfacl -m user:proxyuser:rwx /usr/local/hadoop/logs

– 必须使用(root)用户启动 portmap 服务

./sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap

 

[root@nsfgw hadoop]# ./sbin/hadoop-daemon.sh --script ./bin/hdfs start portmap

 

– 必须使用代理用户(nsd1804)启动 nfs3

./sbin/hadoop-daemon.sh --script ./bin/hdfs start nfs3

 

[root@nsfgw hadoop]# su - nsd1804

[nsd1804@nsfgw ~]$ cd /usr/local/hadoop/

[nsd1804@nsfgw hadoop]$ ./sbin/hadoop-daemon.sh --script ./bin/hdfs start nfs3

 

这里要特别注意:

– 启动 portmap 需要使用 root 用户

– 启动 nfs3 需要使用 core-site 里面设置的代理用户

– 必须先启动 portmap 之后再启动 nfs3

– 如果 portmap 重启了,在重启之后 nfs3 也需要重启

 

• 启动不挂载

– 强烈建议使用安装选项“sync,因为它可以最小化

戒避免重新排序写入,这将导致更可预测的吞吏量。

未挃定同步选项可能会导致上传大文件时出现丌可靠

的行为

– 启动一台机器安装 nfs-utils 

Client: 安装 nfs-utils 

yum install nfs-utils

– 挂载 nfs

mount  -t  nfs  -o  vers=3,proto=tcp,noatime,nolock,sync,noacl  192.168.1.15:/   /mnt/

查看注册服务

rpcinfo -p 192.168.1.15

查看共享目录

showmount -e 192.168.1.15

 

posted on 2018-09-05 10:59  清风老道  阅读(140)  评论(0编辑  收藏  举报

导航