龙空技术网

干货系列:HadooP大数据实验平台搭建过程(内部版)

唠白科 433

前言:

如今看官们对“java实验报告步骤”可能比较注意,同学们都需要知道一些“java实验报告步骤”的相关知识。那么小编在网络上汇集了一些有关“java实验报告步骤””的相关文章,希望看官们能喜欢,同学们快快来了解一下吧!

hadoop平台已经是很常见的业务场景,再一般企业内部做大数据相关应用,或者实验分布式存储等,可以自行搭建。本文档是应用于实验平台,所以在虚拟化中新建三个虚拟机用于hadoop各角色。

本文思路是先贴架构,再贴基础环境,在贴配置:

第1章 Hadoop原理

hadoop架构是这样子的

HDFS的读写流程是这样子的

实验平台是这样子的

第2章 系统配置磁盘信息

[root@master01 ~]# fdisk -l |grep /dev/Disk /dev/sda: 599.0 GB, 598999040000 bytesDisk /dev/sdb: 479.0 GB, 478998953984 bytesDisk /dev/sdc: 479.0 GB, 478998953984 bytesDisk /dev/sdd: 1199.0 GB, 1198999470080 bytesDisk /dev/sde: 1199.0 GB, 1198999470080 bytesDisk /dev/sdg: 1199.0 GB, 1198999470080 bytesDisk /dev/sdf: 1199.0 GB, 1198999470080 bytes
操作系统版本
[root@master01 ~]# cat /etc/redhat-releaseCentOS Linux release 7.3.1611 (Core)[root@master01 ~]#
系统分区
[root@master01 ~]# cat /etc/redhat-releaseCentOS Linux release 7.3.1611 (Core)[root@master01 ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/cl-root 36G 4.4G 31G 13% /devtmpfs 2.0G 0 2.0G 0% /devtmpfs 2.0G 84K 2.0G 1% /dev/shmtmpfs 2.0G 217M 1.8G 12% /runtmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup/dev/sda1 1014M 155M 860M 16% /boottmpfs 394M 48K 394M 1% /run/user/0/dev/sr0 4.1G 4.1G 0 100% /mnt/cdrom192.168.30.210:/volume1/LIUNXSHARE 2.0T 1.4T 612G 70% /app/sourcetmpfs 394M 0 394M 0% /run/user/1000[root@master01 ~]#
主机名
[root@master01 ~]# hostnamectlStatic hostname: localhost.localdomainTransient hostname: slave01Icon name: computer-vmChassis: vmMachine ID: ee20f0dd9ac44a4b918d10b291d43bc7Boot ID: e1239e266ef04764b8651f4f18cc47a5Virtualization: vmwareOperating System: CentOS Linux 7 (Core)CPE OS Name: cpe:/o:centos:centos:7Kernel: Linux 3.10.0-514.el7.x86_64Architecture: x86-64[root@master01 ~]# hostnamectl set-hostname slave01[root@master01 ~]#
网络配置(单网卡)
service NetworkManager stopchkconfig NetworkManager off[root@master01 ~]# vi /etc/resolv.conf
防火墙 seliunx
[root@master01 yum.repos.d]# systemctl stop firewalld.service[root@master01 yum.repos.d]#[root@master01 yum.repos.d]# systemctl disable firewalld.serviceRemoved symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@master01 /]# vi /etc/sysconfig/selinux# This file controls the state of SELinux on the system.# SELINUX= can take one of these three values:# enforcing - SELinux security policy is enforced.# permissive - SELinux prints warnings instead of enforcing.# disabled - No SELinux policy is loaded.SELINUX=disabled# SELINUXTYPE= can take one of these two values:# targeted - Targeted processes are protected,# mls - Multi Level Security protection.SELINUXTYPE=targeted
集群时间同步

是否安装ntp

[hadoop@hadoop0 hadoop-2.7.7]$ ntpbash: ntp: command not found[hadoop@hadoop0 hadoop-2.7.7]$ sudo yum install ntp #安装ntp[hadoop@hadoop0 hadoop-2.7.7]$ sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #linux的时区设置为中国上海时区[hadoop@hadoop0 hadoop-2.7.7]$ sudo ntpdate time.windows.com #与当地网络时间同步12 May 12:33:09 ntpdate[2571]: adjust time server 13.70.22.122 offset 0.029582 sec[hadoop@hadoop0 hadoop-2.7.7]$ date #查看是否同步成功Sun May 12 12:33:16 CST 2019
配置本地yum
[root@master01 app]# mount -o loop CentOS-6.4-x86_64-bin-DVD1.iso /mnt/cdromcd /etc/yum.repos.d/#mv CentOS-Base.repo CentOS-Base.repo.bak (其他repo文件改后缀)mv CentOS-Media.repo CentOS-Media.repo.bakmv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bakmv CentOS-fasttrack.repo CentOS-fasttrack.repo.bakmv CentOS-Vault.repo CentOS-Vault.repo.bak# cat CentOS-Media.repo[c6-media]name=CentOS-$releasever - Mediabaseurl= #表明yum源在/mnt目录下,其它的源(baseurl)注释掉#baseurl=  
清除缓存# yum clean all# yum list
创建用户名
在所有的主机下均建立一个账号hadoop用来运行hadoop ,并将其添加至sudoers中[root@hadoop0 ~]# useradd hadoop #添加用户通过手动输入修改密码[root@hadoop0 ~]# passwd hadoop #更改用户 hadoop 的密码hadoop #密码#passwd: 所有的身份验证令牌已经成功更新。设置hadoop用户具有root权限 修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:[root@hadoop0 ~]# vim /etc/sudoers#找到这里## Allow root to run any commands anywhereroot ALL=(ALL) ALLhadoop ALL=(ALL) ALL
设置SSH信任

关于ssh免密码的设置,要求每两台主机之间设置免密码,自己的主机与自己的主机之间也要求设置免密码。 这项操作可以在hadoop用户下执行,执行完毕公钥在/home/hadoop/.ssh/id_rsa.pub

[hadoop@hadoop0 ~]# ssh-keygen -t rsa[hadoop@hadoop0 ~]# ssh-copy-id hadoop0[hadoop@hadoop0 ~]# ssh-copy-id hadoop1[hadoop@hadoop0 ~]# ssh-copy-id hadoop2node1与node2为namenode节点要相互免密钥 HDFS的HA
[hadoop@hadoop1 ~]# ssh-keygen -t rsa[hadoop@hadoop1 ~]# ssh-copy-id hadoop1[hadoop@hadoop1 ~]# ssh-copy-id hadoop0[hadoop@hadoop1 ~]# ssh-copy-id hadoop2node2与node3为yarn节点要相互免秘钥 YARN的HA
[hadoop@hadoop2 ~]# ssh-keygen -t rsa[hadoop@hadoop2 ~]# ssh-copy-id hadoop2[hadoop@hadoop2 ~]# ssh-copy-id hadoop0[hadoop@hadoop2 ~]# ssh-copy-id hadoop1 
建立目录
[root@slave02 /]# mkdir hadoop[root@slave02 /]# chown -R hadoop:hadoop /hadoop/此目录是hadoop的安装目录,在下面也可以作为数据存放目录
JDK安装
系统默认的RPM方式按照路径如下:[root@slave01 jre]# pwd/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/jre如果手动按照如下:[root@hadoop0 ~]# rpm -qa|grep java #查询是否安装java软件:这里使用官网下载好的tar包传到服务器 /hadoop 下[root@hadoop0 hadoop]# tar -zxvf jdk-8u181-linux-x64.tar.gz[root@hadoop0 hadoop]# mv jdk1.8.0_181 jdk1.8设置JAVA_HOME[root@hadoop0 hadoop]# vim /etc/profile#在文件末尾添加#JAVAexport JAVA_HOME=/hadoop/jdk1.8export JRE_HOME=/hadoop/jdk1.8/jreexport CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/libexport PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/sbin[root@hadoop0 hadoop]# source /etc/profile #重启配置文件生效#检查是否配置成功[hadoop@hadoop0 /]$ java -versionjava version "1.8.0_181"Java(TM) SE Runtime Environment (build 1.8.0_181-b13)Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
hadoop角色规划

读文件

读过程,各角色职责

写文件

写过程,各角色职责

安装hadoop,改核心配置文件

将文件上传到/hadoop下面,解压[hadoop@hadoop0 hadoop]# tar -zxvf hadoop-2.7.7.tar.gz相关配置文件路径:hadoop2.7.7/etc/hadoop/
修改core-site.xml
[hadoop@hadoop0 hadoop]$ vi core-site.xml<configuration><!-- 指定HDFS中NameNode的地址 --><property><name>fs.defaultFS</name><value>hdfs://hadoop0:9000</value></property><!-- 指定hadoop运行时产生文件的存储目录,注意tmp目录需要创建 --><property><name>hadoop.tmp.dir</name><value>/hadoop/hadoop-2.7.7/tmp</value></property></configuration>
修改hadoop-env.sh
[hadoop@hadoop0 hadoop]$ vi hadoop-env.sh修改 export JAVA_HOME=/hadoop/jdk1.8
修改hdfs-site.xml
[hadoop@hadoop0 hadoop]$ vi hdfs-site.xml<configuration><!-- 设置dfs副本数,不设置默认是3个 --><property><name>dfs.replication</name><value>2</value></property><!-- 设置namenode数据存放路径 --><property><name>dfs.name.dir</name><value>/hadoop/hadoop-2.7.7/dfs/name</value></property><!-- 设置datanode数据存放路径 --><property><name>dfs.data.dir</name><value>/hadoop/hadoop-2.7.7/dfs/data</value></property><!-- 设置secondname的端口 --><property><name>dfs.namenode.secondary.http-address</name><value>hadoop1:50090</value></property></configuration>
修改slaves
[hadoop@hadoop0 hadoop]$ vi slaveshadoop0hadoop1hadoop2
修改mapred-site.xml
[hadoop@hadoop0 hadoop]# mv mapred-site.xml.template mapred-site.xml[hadoop@hadoop0 hadoop]$ vi mapred-site.xml<configuration><!-- 指定mr运行在yarn上 --><property><name>mapreduce.framework.name</name><value>yarn</value></property></configuration>
修改yarn-site.xml
[hadoop@hadoop0 hadoop]$ vi yarn-site.xml<configuration><!-- reducer获取数据的方式 --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!-- 指定YARN的ResourceManager的地址 --><property><name>yarn.resourcemanager.hostname</name><value>hadoop0</value></property></configuration>
环境变量及各节点同步
[hadoop@hadoop0 ~]$ sudo vim /etc/profile末尾追加export HADOOP_HOME=/hadoop/hadoop-2.7.7export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin编译生效 source /etc/profile绝大部分操作在namenode上操作,然后将目录下发到各个节点,这样保证了统一。[hadoop@hadoop0 /]# scp -r hadoop/ hadoop@hadoop1:$PWD[hadoop@hadoop0 /]# scp -r hadoop/ hadoop@hadoop2:$PWD结合全文,需要下发的可能有java目录、hadoop目录、profile文件、rc.local文件等。
集群启动测试2.16.1 格式化namenode

会格式化namenode目录,建立数据库文件等

如果集群是第一次启动,需要格式化namenode

[hadoop@hadoop0 hadoop-2.7.7]$ hdfs namenode -format 
2.16.2 启动Hdfs
[hadoop@hadoop0 ~]# start-dfs.shStarting namenodes on [hadoop0]hadoop0: starting namenode, logging to /hadoop/hadoop-2.7.7/logs/hadoop-hadoop-namenode-hadoop0.outhadoop0: starting datanode, logging to /hadoop/hadoop-2.7.7/logs/hadoop-hadoop-datanode-hadoop0.outhadoop2: starting datanode, logging to /hadoop/hadoop-2.7.7/logs/hadoop-hadoop-datanode-hadoop2.outhadoop1: starting datanode, logging to /hadoop/hadoop-2.7.7/logs/hadoop-hadoop-datanode-hadoop1.outStarting secondary namenodes [hadoop1]hadoop1: starting secondarynamenode, logging to /hadoop/hadoop-2.7.7/logs/hadoop-hadoop-secondarynamenode-hadoop1.out
2.16.3 启动Yarn

注意:Namenode和ResourceManger如果不是同一台机器,不能在NameNode上启动 yarn,应该在ResouceManager所在的机器上启动yarn。

[hadoop@hadoop1 ~]# start-yarn.shstarting yarn daemonsstarting resourcemanager, logging to /hadoop/hadoop-2.7.7/logs/yarn-hadoop-resourcemanager-hadoop0.outhadoop2: starting nodemanager, logging to /hadoop/hadoop-2.7.7/logs/yarn-hadoop-nodemanager-hadoop2.outhadoop1: starting nodemanager, logging to /hadoop/hadoop-2.7.7/logs/yarn-hadoop-nodemanager-hadoop1.outhadoop0: starting nodemanager, logging to /hadoop/hadoop-2.7.7/logs/yarn-hadoop-nodemanager-hadoop0.out
2.16.4 Hadoop启动停止方式
1)各个服务组件逐一启动分别启动hdfs组件: hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode启动yarn: yarn-daemon.sh start|stop resourcemanager|nodemanager
2)各个模块分开启动(配置ssh是前提)常用start|stop-dfs.sh start|stop-yarn.sh
3)全部启动(不建议使用)
2.16.5 查看状态

jps查看进程,JPS是java下面的工具,在实验过程中,使用了系统自带的openjdk,是没有改命令的。需要卸载自带的,重新安装后会有jps命令。另外,需要注意环境变量问题。

[hadoop@hadoop0 hadoop-2.7.7]$ jps2162 NodeManager2058 ResourceManager2458 Jps1692 NameNode1820 DataNode
[hadoop@hadoop1 hadoop]$ jps1650 Jps1379 DataNode1478 SecondaryNameNode1549 NodeManager
[hadoop@hadoop2 hadoop]$ jps1506 DataNode1611 NodeManager1711 Jps

在浏览器访问nameNode节点的8088端口和50070端口可以查看hadoop的运行状况;

2.16.6 运行wordcount测试

先在 /usr/local/hadoop/file中创建file.txt1和file.txt2[root@hadoopmaster sbin]# hadoop fs -put /usr/local/hadoop/file/file*.txt input[root@hadoopmaster sbin]# hadoop fs -ls inputFound 2 items-rw-r--r-- 1 root supergroup 30 2019-03-03 23:01 input/file1.txt-rw-r--r-- 1 root supergroup 44 2019-03-03 23:01 input/file2.txt[root@hadoopmaster sbin]# hadoop fs -text input/file1.txthello wordhello javahello c
[root@hadoopmaster mapreduce]# hadoop jar /usr/local/hadoop/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount input output
添加硬盘
系统盘做好raid分区;数据盘raid0,或者jbod模式,单独分区格式化后,设置多个目录,在hdfs文件中挂载<property><name>dfs.data.dir</name><value>/home/hadoop/data0/hdfs,/home/hadoop/data1/hdfs,/home/hadoop/data2/hdfs,/home/hadoop/data3/hdfs,/home/hadoop/data4/hdfs</value></property>
添加文件测试
[hadoop@slave01 dfs]$ hdfs dfs -mkdir /user[hadoop@slave01 dfs]$ hdfs dfs -ls /userFound 2 items-rw-r--r-- 2 hadoop supergroup 5242880 2019-06-18 11:26 /user/file01-rw-r--r-- 2 hadoop supergroup 0 2019-06-18 11:20 /user/test1[hadoop@slave01 dfs]$ dd if=/dev/zero of=file01 bs=1M count=5[hadoop@slave01 dfs]$ hdfs dfs -put file01 /user[hadoop@slave01 dfs]$ du –h

测试记录:

1、 三台环境,2副本。 在namenode上创建5M文件导入,分三次操作:

第1次, 分布在节点1、2

第2次, 分布在节点1、3

第3次, 分布在1、2.

2、 在secnamenode上测试

第1次, 分布在1、2

第2次, 分布在1、2

第3次, 分布在2、3

副本存放策略

标签: #java实验报告步骤