hadoop的分布集群和高可用

    xiaoxiao2022-07-05  154

    什么是hadoop?

    Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问

    Hadoop部署

    主机ipserver1172.25.26.11server2172.25.26.12server3172.25.26.13

    1.创建hadoop

    [root@server1 ~]# useradd -u 800 hadoop [root@server1 ~]# passwd hadoop

    2.切换到hadoop用户,安装jdk

    [root@server1 ~]# su - hadoop [hadoop@server1 ~]$ ls hadoop-3.0.3.tar.gz jdk-8u181-linux-x64.tar.gz zookeeper-3.4.9.tar.gz [hadoop@server1 ~]$ tar zxf jdk-8u181-linux-x64.tar.gz [hadoop@server1 ~]$ ls hadoop-3.0.3.tar.gz jdk1.8.0_181 jdk-8u181-linux-x64.tar.gz zookeeper-3.4.9.tar.gz [hadoop@server1 ~]$ ln -s jdk1.8.0_181 java [hadoop@server1 ~]$ ls hadoop-3.0.3.tar.gz jdk1.8.0_181 zookeeper-3.4.9.tar.gz java jdk-8u181-linux-x64.tar.gz [hadoop@server1 ~]$ cd java [hadoop@server1 java]$ ls bin jre README.html THIRDPARTYLICENSEREADME.txt COPYRIGHT lib release include LICENSE src.zip javafx-src.zip man THIRDPARTYLICENSEREADME-JAVAFX.txt

    解压jdk,做软连接。

    [hadoop@server1 ~]$ vim .bash_profile 10 PATH=$PATH:$HOME/bin:/home/hadoop/java/bin [hadoop@server1 ~]$ jps 1054 Jps

    修改环境变量。 3.安装配置hadoop

    [hadoop@server1 ~]$ tar zxf hadoop-3.0.3.tar.gz [hadoop@server1 ~]$ cd hadoop-3.0.3/etc/hadoop/ [hadoop@server1 hadoop]$ vim hadoop-env.sh 54 export JAVA_HOME=/home/hadoop/java

    [hadoop@server1 ~]$ cd hadoop-3.0.3 [hadoop@server1 hadoop-3.0.3]$ mkdir input [hadoop@server1 hadoop-3.0.3]$ cp etc/hadoop/*.xml input/ [hadoop@server1 hadoop-3.0.3]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce \ -examples-3.0.3.jar grep input output 'dfs[a-z.]+'

    [hadoop@server1 hadoop-3.0.3]$ cd output/ [hadoop@server1 output]$ ls part-r-00000 _SUCCESS [hadoop@server1 output]$ cat * 1 dfsadmin

    搭建伪分布集群

    1.修改配置,配置Hadoop的核心属性

    [hadoop@server1 hadoop-3.0.3]$ cd etc/hadoop/ [hadoop@server1 hadoop]$ vim core-site.xml 19 <configuration> 20 <property> 21 <name>fs.defaultFS</name> 22 <value>hdfs://172.25.26.11:9000</value> 23 </property> 24 </configuration>

    [hadoop@server1 hadoop]$ vim hdfs-site.xml 19 <configuration> 20 <property> 21 <name>dfs.replication</name> 22 <value>1</value> 23 </property> 24 </configuration>

    2.设置免密登陆

    [hadoop@server1 hadoop]$ ssh-keygen

    [hadoop@server1 hadoop]$ ssh-copy-id 172.25.26.11

    发送密钥。 4.启动hdf,格式化名称节点

    [hadoop@server1 hadoop]$ pwd /home/hadoop/hadoop-3.0.3/etc/hadoop [hadoop@server1 hadoop]$ vim slaves

    [hadoop@server1 hadoop-3.0.3]$ pwd /home/hadoop/hadoop-3.0.3 [hadoop@server1 hadoop-3.0.3]$ bin/hdfs namenode -format

    [hadoop@server1 hadoop-3.0.3]$ sbin/start-dfs.sh [hadoop@server1 hadoop-3.0.3]$ jps

    在浏览器查看:

    [hadoop@server1 hadoop-3.0.3]$ bin/hdfs dfs -mkdir /user [hadoop@server1 hadoop-3.0.3]$ bin/hdfs dfs -mkdir /user/hadoop [hadoop@server1 hadoop-3.0.3]$ bin/hdfs dfs -ls /user [hadoop@server1 hadoop-3.0.3]$ bin/hdfs dfs -put input/

    创建目录,将input目录内容上传。 点击utilities,在点击browse file system,查看内容。

    [hadoop@server1 hadoop-3.0.3]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce- \ examples-3.0.3.jar grep input output 'dfs[a-z.]+' [hadoop@server1 hadoop-3.0.3]$ bin/hdfs dfs -ls [hadoop@server1 hadoop-3.0.3]$ bin/hdfs dfs -cat output/* [hadoop@server1 hadoop-3.0.3]$ bin/hdfs dfs -get output

    hadoop完全分布式集群部署

    server1关闭服务,切换到超级用户

    在server1,server2和servre3端安装nfs-utils:

    [root@server1 ~]# yum install -y nfs-utils [root@server1 ~]# vim /etc/exports 1 /home/hadoop *(rw,anonuid=800,anongid=800)

    [root@server1 ~]# /etc/init.d/rpcbind start [root@server1 ~]# /etc/init.d/nfs start

    启动服务。

    [root@server1 ~]# showmount -e 172.25.26.11

    刷新挂载。 在server2和server3:

    [root@server2 ~]# yum install -y nfs-utils [root@server2 ~]# /etc/init.d/rpcbind start [root@server2 ~]# /etc/init.d/nfs start [root@server2 ~]# useradd -u 800 hadoop [root@server2 ~]# mount 172.25.26.11:/home/hadoop/ /home/hadoop/ [root@server2 ~]# df [root@server2 ~]# su - hadoop [hadoop@server2 ~]$ ls

    安装nfs,启动服务,建立hadoop用户,挂载之后发现,server1hadoop用户家目录文件已经同步过来了。

    测试:

    [hadoop@server1 ~]$ ssh 172.25.26.12

    在server1使用hadoop用户进行连接不需要密码。

    [hadoop@server1 ~]$ ln -s hadoop-3.03 hadoop

    做软链接。

    [hadoop@server1 ~]$ cd hadoop/etc/hadoop/ [hadoop@server1 hadoop]$ vim hdfs-site.xml

    [hadoop@server1 hadoop]$ vim slaves

    设定从设备。

    [hadoop@server1 ~]$ cd hadoop [hadoop@server1 hadoop]$ bin/hdfs namenode -format [hadoop@server1 hadoop]$ sbin/start-dfs.sh

    初始化,并开启服务。

    添加节点

    在server4:

    [root@server4 ~]# yum install nfs-utils -y

    [hadoop@server4 ~]$ cd hadoop/etc/hadoop/ [hadoop@server4 hadoop]$ vim slaves

    [hadoop@server4 ~]$ cd hadoop [hadoop@server4 hadoop]$ sbin/hadoop-daemon.sh start datanode

    开启数据节点

    [hadoop@server4 hadoop]$ bin/hdfs dfsadmin -report

    查看添加的节点server4. 用同样的方法,将server2和server3加入节点。

    hadoop+zookeeper高可用集群

    hdfs实现高可用:

    主机ipserver1172.25.26.11server2172.25.26.12server3172.25.26.13server4172.25.26.14server5172.25.26.15

    需要用到5个虚拟机。

    [root@server5 ~]# yum install nfs-utils -y [root@server5 ~]# /etc/init.d/rpcbind start [root@server5 ~]# /etc/init.d/nfs start [root@server5 ~]# useradd -u 800 hadoop [hadoop@server5 ~]$ mount 172.25.26.11:/home/hadoop/ /home/hadoop/

    添加用户,开启服务。 和前面一样配置server5,可以正常连接server1的家目录。 在server1进行配置:

    [root@server1 ~]# su - hadoop [hadoop@server1 ~]$ tar zxf zookeeper-3.4.9.tar.gz [hadoop@server1 ~]$ cd zookeeper-3.4.9/conf [hadoop@server1 conf]$ cp zoo_sample.cfg zoo.cfg 1 tickTime=2000 2 initLimit=10 3 syncLimit=5 4 dataDir=/tmp/zookeeper 5 clientPort=2181 6 server.2=172.25.26.12:2888:3888 7 server.3=172.25.26.13:2888:3888 8 server.4=172.25.26.14:2888:3888

    修改配置文件,将server2,server3,server4写入集群。因为5台主机都使用nfs文件系统,所以几台主机的配置是一样的。 删除server2上tmp目录的文件,建立zookeeper目录,并创建myid文件,写入一个数字,范围0~255。同样的在server3和server4也进行一样的操作。 在server2,server3,server4节点启动服务:

    [hadoop@server4 ~]$ cd zookeeper-3.4.9 [hadoop@server4 zookeeper-3.4.9]$ bin/zkServer.sh start

    在3台主机进行一样的操作,其中会有两台主机的Mode是follower,一台是Leader。

    在server1端进行配置:

    [hadoop@server1 ~]$ cd hadoop/etc/hadoop/ [hadoop@server1 hadoop]$ vim core-site.xml 19 <configuration> 20 <property> 21 <name>fs.defaultFS</name> 22 <value>hdfs://masters</value> 23 </property> 24 <property> 25 <name>ha.zookeeper.quorum</name> 26 <value>172.25.26.12:2181,172.25.26.13:2181,172.25.26.14:2181</value> 27 </property> 28 </configuration> [hadoop@server1 hadoop]$ vim hdfs-site.xml 19 <configuration> 20 <property> 21 <name>dfs.replication</name> 22 <value>3</value> 23 </property> <!-- 指定 hdfs 的 nameservices 为 masters,和 core-site.xml 文件中的设置保持一致 --> 24 <property> 25 <name>dfs.nameservices</name> 26 <value>masters</value> 27 </property> <!-- masters 下面有两个 namenode 节点,分别是 h1 和 h2 (名称可自定义)--> 28 <property> 29 <name>dfs.ha.namenodes.masters</name> 30 <value>h1,h2</value> 31 </property> <!-- 指定 h1 节点的 rpc 通信地址 --> 32 <property> 33 <name>dfs.namenode.rpc-address.masters.h1</name> 34 <value>172.25.26.11:9000</value> 35 </property> <!-- 指定 h1 节点的 http 通信地址 ,注意版本不同端口也会不同--> 36 <property> 37 <name>dfs.namenode.http-address.masters.h1</name> 38 <value>172.25.26.11:9870</value> 39 </property> <!-- 指定 h2 节点的 rpc 通信地址 --> 40 <property> 41 <name>dfs.namenode.rpc-address.masters.h2</name> 42 <value>172.25.26.15:9000</value> 43 </property> <!-- 指定 h2 节点的 http 通信地址 --> 44 <property> 45 <name>dfs.namenode.http-address.masters.h2</name> 46 <value>172.25.26.15:9870</value> 47 </property> <!-- 指定 NameNode 元数据在 JournalNode 上的存放位置 --> 48 <property> 49 <name>dfs.namenode.shared.edits.dir</name> 50 <value>qjournal://172.25.26.12:8485;172.25.26.13:8485;172.25.26.14:8485/masters</value> 51 </property> <!-- 指定 JournalNode 在本地磁盘存放数据的位置 --> 52 <property> 53 <name>dfs.journalnode.edits.dir</name> 54 <value>/tmp/journaldata</value> </property> <!-- 开启 NameNode 失败自动切换 --> 55 <property> 56 <name>dfs.ha.automatic-failover.enabled</name> 57 <value>true</value> 58 </property> <!-- 配置失败自动切换实现方式 --> 59 <property> 60 <name>dfs.client.failover.proxy.provider.masters</name> 61 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> 62 </property> <!-- 配置隔离机制方法,每个机制占用一行--> 63 <property> 64 <name>dfs.ha.fencing.methods</name> 65 <value> 66 sshfence 67 shell(/bin/true) 68 </value> 69 </property> <!-- 使用 sshfence 隔离机制时需要 ssh 免密码 --> 70 <property> 71 <name>dfs.ha.fencing.ssh.private-key-files</name> 72 <value>/home/hadoop/.ssh/id_rsa</value> 73 </property> <!-- 配置 sshfence 隔离机制超时时间 --> 74 <property> 75 <name>dfs.ha.fencing.ssh.connect-timeout</name> 76 <value>30000</value> 77 </property> 78 </configuration> [hadoop@server1 hadoop]$ vim slaves

    启动hdfs集群: 在三个 DN 上依次启动 zookeeper 集群(即server2,3,4)

    [hadoop@server2 zookeeper-3.4.9]$ bin/zkServer.sh start

    在三个 DN 上依次启动 journalnode(第一次启动 hdfs 必须先启动 journalnode)

    [hadoop@server2 ~]$ cd hadoop [hadoop@server2 hadoop]$ sbin/hadoop-daemon.sh start journalnode [hadoop@server2 hadoop]$ jps

    在server格式话hdfs集群:

    [hadoop@server1 hadoop]$ bin/hdfs namenode -format [hadoop@server1 hadoop]$ scp -r /tmp/hadoop-hadoop 172.25.26.15:/tmp

    将文件复制到server5的tmp目录。

    格式化 zookeeper (只需在 h1 上执行即可)

    [hadoop@server1 hadoop]$ bin/hdfs zkfc -formatZK [hadoop@server1 hadoop]$ sbin/start-dfs.sh

    格式化后启动服务。 查看各个节点状态:

    server1: [hadoop@server1 hadoop]$ jps 12372 Jps 7050 DFSZKFailoverController 12332 NameNode server2: [hadoop@server2 hadoop]$ jps 1664 JournalNode 2325 Jps 1535 QuorumPeerMain 2212 DataNode server3: [hadoop@server3 hadoop]$ jps 1918 Jps 1651 JournalNode 1755 DataNode 1543 QuorumPeerMain server4: [hadoop@server4 hadoop]$ jps 2050 DataNode 1475 QuorumPeerMain 1600 JournalNode 2152 Jps server5: [hadoop@server5 dfs]$ jps 1306 DFSZKFailoverController 1511 Jps 1376 NameNode

    测试:

    server1为作为h1,server5为h2,此时server1为active,server5为stabdby,server5做为备用节点。

    最新回复(0)