捏造化与云盘算实行

打印 上一主题 下一主题

主题 534|帖子 534|积分 1602

一、实行目标

学习Hadoop 开源云盘算平台的安装、配置和应⽤。训练MapReduce 并⾏盘算程序编程。
二、实行内容

2.1 部署方式
Hadoop紧张有两种安装方式,即传统解压包方式和Linux标准方式。安装Hadoop的同时,还要明确工作情况的构建模式。Hadoop部署情况分为单机模式、伪分布模式和分布式模式三种。下面紧张举行单机模式和分布式安装
2.2 部署步调(简述)
步调1:订定部署规划;
步调2:部署前工作;
步调3:部署Hadoop;
步调4:测试Hadoop。
2.3 准备情况
由于分布式盘算需要用到许多机器,部署时用户须提供多台机器。本节利用Linux较成熟的发行版CentOS部署Hadoop,须注意的是新装系(CentOS)的机器不可以直接部署Hadoop,须做些设置后才可部署,这些设置紧张为:改机器名,添加域名映射,关闭防火墙,安装JDK。
2.4 关于Hadoop依靠软件
Hadoop部署前提仅是完成修改机器名、添加域名映射、关闭防火墙和安装JDK这四个操作,其他都不需要。
2.5 传统解压包部署
相对于标准Linux方式,解压包方式部署Hadoop有利于用户更深入理解Hadoop体系架构,发起先采用解压包方式部署Hadoop,熟悉后可采用标准Linux方式部署Hadoop。以下将实现在三台机器上部署Hadoop。
三、实行步调及结果分析

1.1 Linux服务器的安装


  • 通过安装VMware安装Linux机器,点击创建新捏造机,选择自界说配置

  • 选择稍后安装操作系统

  • 选择CentOS 7

  • 选择安装路径

  • CPU核数默认即可

  • 捏造机内存设置

  • 网络配置选择

  • 新建捏造磁盘
默认即可

  • 完成创建
10.挂载操作系统
通过捏造机设置挂载操作系统
设置完成,启动捏造机举行配置
11.举行网络配置
登录捏造机,编辑网络配置文件
输入编辑下令
编辑文件
更改配置后,重启网络服务
12.克隆机器
13.更改克隆机器地点
三台机器ip地点分别为192.168.51.129、192.168.51.130、192.168.51.131
克隆机器ip均为192.168.51.129,启动捏造机编辑网络配置文件的ip地点即可
下令:vi /etc/sysconfig/network-scripts/ifcfg-ens33
修改内容:
第三台机器同理。
1.2 部署大数据集群前的情况准备

1.2.1 关闭防火墙

输入下令:systemctl stop firewalld
systemctl disable firewalld
1.2.2 机器关闭selinux

执行以下下令:vim /etc/sysconfig/selinux
修改配置:SELINUX=disabled
1.2.3 机器更改主机名

三台机器执行下令:
hostnamectl set-hostname Hadoop01
将机器名修改为Hadoop01,三台机器执行如下:
1.2.4 主机名与IP地点的映射

执行下令:
vi /etc/hosts
修改配置:
1.2.5 时钟同步


  • 安装npdate
执行下令:yum -y install ntpdate

  • 阿里云同步服务器
执行下令:ntpdate ntp4.aliyun.com

  • 定时任务
执行下令:crontab -e
添加如下内容:
1.2.6 添加普通用户

三台linux服务器同一添加普通用户hadoop,并给以sudo权限,同一设置普通用户的密码为 123456

  • 执行如下下令
useradd hadoop
passwd hadoop

  • 为普通用户添加sudo权限
执行如下下令:
visudo
增加如下内容
hadoop ALL=(ALL) ALL
1.2.7 关机重启

执行下令:sudo reboot -h now
1.2.8 hadoop用户免密码登录


  • 机器在hadoop用户下执行以下下令生成公钥与私钥
执行如下下令:
ssh-keygen -t rsa

  • 三台机器在hadoop用户下,执行下令拷贝公钥到hadoop01服务器
执行下令:ssh-copy-id hadoop01

  • hadoop01服务器将公钥拷贝给hadoop02与hadoop03
hadoop01服务器执行如下下令:
cd /home/hadoop/.ssh/
scp authorized_keys hadoop02PWD
scp authorized_keys hadoop03PWD

  • 验证;从恣意节点是否能免秘钥登岸其他节点
1.2.9 安装JDK

执行下令:cd /kkb/soft
解压压缩包:tar - xzvf jdk-8u361-linux-x64.tar.gz -C /kkb/install(在本地利用WinSCP上传压缩包到捏造机)
修改配置:sudo vim /etc/profile
使配置生效,执行下令:
  1. source /etc/profile
复制代码
查看是否安装乐成,下令:java -version
1.3 Hadoop集群的安装

配置文件代码

1.3.1 修改系统配置文件

Hadoop01执行下令:
  1. cd /kkb/install/hadoop-3.3.1/etc/hadoop/
  2. vim hadoop-env.sh
复制代码
修改配置,添加export JAVA_HOME=/kkb/install/jdk1.8.0_361
1.3.2 修改core-site.xml

Hadoop01执行以下下令:
  1. vim core-site.xml
复制代码
修改文件,添加配置:
1.3.3 修改hdfs-site.xml

Hadoop01执行下令:
  1.   vim hdfs-site.xml
复制代码
修改文件:
1.3.4 修改mapred-site.xml

hadoop01执行如下下令:
  1.   vim mapred-site.xml
复制代码
修改文件:
1.3.5 修改yarn-site.xml

hadoop01执行如下下令:
  1. vim yarn-site.xml
复制代码
修改文件:

1.3.6 修改workers文件

hadoop01执行如下下令:
  1. vim workers
复制代码
修改文件,原内容替换如下:

1.3.7 创建文件存放目录

Hadoop01执行如下下令创建目录:
  1. mkdir -p /kkb/install/hadoop-3.3.1/hadoopDatas/tempDatas
  2. mkdir -p /kkb/install/hadoop-3.3.1/hadoopDatas/namenodeDatas
  3. mkdir -p /kkb/install/hadoop-3.3.1/hadoopDatas/datanodeDatas
  4. mkdir -p /kkb/install/hadoop-3.3.1/hadoopDatas/dfs/nn/edits
  5. mkdir -p /kkb/install/hadoop-3.3.1/hadoopDatas/dfs/snn/name
  6. mkdir -p /kkb/install/hadoop-3.3.1/hadoopDatas/dfs/nn/snn/edits
复制代码
1.3.8 安装包的分发scp与rsync

1.3.8.1 通过scp直接拷贝

通过scp举行不同服务器之间的文件或文件夹的复制
hadoop01执行如下下令:
  1.   cd /kkb/install/
  2. scp -r hadoop-3.3.1/ hadoop02:$PWD
  3. scp -r hadoop-3.3.1/ hadoop03:$PWD
复制代码
1.3.8.2 通过rsync来实现增量拷贝

rsync 远程同步工具
rsync紧张用于备份和镜像。具有速度快、制止复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去
捏造机都执行如下下令举行安装rsync工具:
  1. ```bash
  2. sudo yum -y install rsync
  3. ```
复制代码
基本语法
hadoop01执行以下下令同步zk安装包
  1. rsync -av /kkb/soft/apache-zookeeper-3.6.2-bin.tar.gz node02:/kkb/soft/
复制代码
下令 选项参数 要拷贝的文件路径/名称 目标用户@主机:目标路径/名称
选项参数说明
选项功能-a归档拷贝-v显示复制过程 1.3.8.3 xsync集群分发脚本

(1)需求:循环复制文件到所有节点的相同目录下
(2)需求分析:
(a)rsync下令原始拷贝:
rsync -av /opt/module hadoop@hadoop01:/opt/
(b)期望脚本:
xsync要同步的文件名称
(c)期望脚本在任何路径都能利用
(3)脚本实现
(a)在/home/hadoop目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:
hadoop01执行如下下令:
cd ~
cd /home/hadoop/bin
touch xsync
vim xsync
​ 文件内容如下:
b)修改脚本 xsync 具有执行权限
chmod +x xsync
(c)测试脚本
xsync /home/hadoop/bin
(d)将脚本复制到/usr/local/bin中,以便全局调用
sudo cp xsync /usr/local/bin
1.3.9 配置hadoop的情况变量

捏造机均执行如下下令:
sudo vim /etc/profile
修改文件,添加配置:
修改完成后使配置生效
执行下令:
source /etc/profile

1.3.10 格式化集群

要启动 Hadoop 集群,需要启动 HDFS 和 YARN 两个集群。
注意:首次启动HDFS时,必须对其举行格式化操作。本质上是一些清理和准备工作,因为此时的 HDFS 在物理上照旧不存在的。格式化操作只有在首次启动的时候需要,以后再也不需要了
hadoop01执行一遍即可
下令如下:
hdfs namenode -format 或 hadoop namenode –format
1.3.11 集群启动

启动集群有两种方式:
① 脚本一键启动;
②单个进程逐个启动
1.3.11.1 启动HDFS、YARN、Historyserver

如果配置了 etc/hadoop/workers 和 ssh 免密登录,则可以利用程序脚本启动所有Hadoop 两个集群的相关进程,在主节点所设定的机器上执行。
启动集群
主节点hadoop01节点上执行以下下令
启动集群
start-dfs.sh
start-yarn.sh
mapred --daemon start historyserver
停止集群(主节点hadoop01节点上执行):
stop-dfs.sh
stop-yarn.sh
mapred --daemon stop historyserver
1.3.11.2 一键启动hadoop集群的脚本

为了便于一键启动hadoop集群,我们可以编写shell脚本
在hadoop01服务器的/home/hadoop/bin目录下创建脚本
执行下令:
​ cd /home/hadoop/bin/
vim hadoop.sh
文件内容如下:
修改脚本权限
执行如下下令:
chmod 777 hadoop.sh
[hadoop@hadoop01 bin]$ ./hadoop.sh start # 启动hadoop集群
[hadoop@hadoop01 bin]$ ./hadoop.sh stop # 停止hadoop集群
1.3.12 验证集群

1.3.12.1 查看网站

(1)Web端查看HDFS的NameNode
(a)浏览器中输入:http://hadoop01:9870
​ (b)查看HDFS上存储的数据信息
(2)Web端查看YARN的ResourceManager
(a)浏览器中输入:http://hadoop01:8088
(b)查看YARN上运行的Job信息
(3)查看JobHistory
浏览器输入:http://hadoop01:19888/jobhistory
注意:未配置本地电脑hosts文件的根据ip地点举行修改,将主机名称改为ip地点
1.3.12.2 查看进程脚本

我们也可以通过jps在每台机器上面查看进程名称,为了方便我们以后查看进程,我们可以通过脚本一键查看所有机器的进程
在hadoop01服务器的/home/hadoop/bin目录下创建文件xcall
执行下令:
​ vim xcall
文件内容如下:
修改脚本权限并分发
下令如下:
​ chmod 777 /home/hadoop/bin/xcall
xsync /home/hadoop/bin/
将脚本复制到/usr/local/bin中,以便全局调用
sudo cp xcall /usr/local/bin
调用脚本
​ xcall jsp
各节点进程如下图:
1.3.12.3 运行一个mr例子

执行下令:
hadoop jar /kkb/install/hadoop-3.3.1/share/hadoop/mapreduce/
hadoop-mapreduce-examples-3.3.1.jar pi 5 5
结果如下:
四、[MapReduce]编程实行:单词计数统计实现

需求:现有数据格式如下,每一行数据之间都是利用空格举行分割,求取每个单词出现的次数
  1. hadoop hadoop
  2. banzhang  
  3. xue
  4. cls cls  
  5. jiao
  6. ss ss ss
  7. yhy yhy
复制代码
2.1 创建maven工程并导入以下jar包

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <modelVersion>4.0.0</modelVersion>
  6.     <groupId>org.example</groupId>
  7.     <artifactId>WordCount</artifactId>
  8.     <version>1.0-SNAPSHOT</version>
  9.     <properties>
  10.         <maven.compiler.source>8</maven.compiler.source>
  11.         <maven.compiler.target>8</maven.compiler.target>
  12.         <hadoop.version>3.0.0</hadoop.version>
  13.     </properties>
  14.     <dependencies>
  15.         <dependency>
  16.             <groupId>org.apache.hadoop</groupId>
  17.             <artifactId>hadoop-client</artifactId>
  18.             <version>${hadoop.version}</version>
  19.         </dependency>
  20.         <dependency>
  21.             <groupId>org.apache.hadoop</groupId>
  22.             <artifactId>hadoop-common</artifactId>
  23.             <version>${hadoop.version}</version>
  24.         </dependency>
  25.         <dependency>
  26.             <groupId>org.apache.hadoop</groupId>
  27.             <artifactId>hadoop-hdfs</artifactId>
  28.             <version>${hadoop.version}</version>
  29.         </dependency>
  30.         <dependency>
  31.             <groupId>org.apache.hadoop</groupId>
  32.             <artifactId>hadoop-mapreduce-client-core</artifactId>
  33.             <version>${hadoop.version}</version>
  34.         </dependency>
  35.         <!-- https://mvnrepository.com/artifact/junit/junit -->
  36.         <dependency>
  37.             <groupId>junit</groupId>
  38.             <artifactId>junit</artifactId>
  39.             <version>4.11</version>
  40.             <scope>test</scope>
  41.         </dependency>
  42.         <dependency>
  43.             <groupId>org.testng</groupId>
  44.             <artifactId>testng</artifactId>
  45.             <version>RELEASE</version>
  46.         </dependency>
  47.         <dependency>
  48.             <groupId>log4j</groupId>
  49.             <artifactId>log4j</artifactId>
  50.             <version>1.2.17</version>
  51.         </dependency>
  52.     </dependencies>
  53.     <build>
  54.         <plugins>
  55.             <plugin>
  56.                 <groupId>org.apache.maven.plugins</groupId>
  57.                 <artifactId>maven-compiler-plugin</artifactId>
  58.                 <version>3.1</version>
  59.                 <configuration>
  60.                     <source>1.8</source>
  61.                     <target>1.8</target>
  62.                     <encoding>UTF-8</encoding>
  63.                     <!--   <verbal>true</verbal>-->
  64.                 </configuration>
  65.             </plugin>
  66.             <plugin>
  67.                 <groupId>org.apache.maven.plugins</groupId>
  68.                 <artifactId>maven-shade-plugin</artifactId>
  69.                 <version>2.4.3</version>
  70.                 <executions>
  71.                     <execution>
  72.                         <phase>package</phase>
  73.                         <goals>
  74.                             <goal>shade</goal>
  75.                         </goals>
  76.                         <configuration>
  77.                             <minimizeJar>true</minimizeJar>
  78.                         </configuration>
  79.                     </execution>
  80.                 </executions>
  81.             </plugin>
  82.         </plugins>
  83.     </build>
  84. </project>
复制代码
2.2 界说WordCountMapper类

  1. package com.hadoop.mapreduce.wordcount;
  2. import org.apache.hadoop.io.IntWritable;
  3. import org.apache.hadoop.io.LongWritable;
  4. import org.apache.hadoop.io.Text;
  5. import org.apache.hadoop.mapreduce.Mapper;
  6. import java.io.IOException;
  7. /**
  8. * KEYIN, map阶段输入的key的类型:LongWritable
  9. * VALUEIN,map阶段输入value类型:Text
  10. * KEYOUT,map阶段输出的Key类型:Text
  11. * VALUEOUT,map阶段输出的value类型:IntWritable
  12. */
  13. public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
  14.     private Text outK = new Text();
  15.     private IntWritable outV = new IntWritable(1);
  16.     @Override
  17.     protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
  18.         // 1 获取一行
  19.         String line = value.toString();
  20.         // 2 切割
  21.         String[] words = line.split(" ");
  22.         // 3 循环写出
  23.         for (String word : words) {
  24.             // 封装outk
  25.             outK.set(word);
  26.             // 写出
  27.             context.write(outK, outV);
  28.         }
  29.     }
  30. }
复制代码
2.3 界说WordCountReducer类

  1. package com.hadoop.mapreduce.wordcount;
  2. import org.apache.hadoop.io.IntWritable;
  3. import org.apache.hadoop.io.Text;
  4. import org.apache.hadoop.mapreduce.Reducer;
  5. import java.io.IOException;
  6. /**
  7. * KEYIN, reduce阶段输入的key的类型:Text
  8. * VALUEIN,reduce阶段输入value类型:IntWritable
  9. * KEYOUT,reduce阶段输出的Key类型:Text
  10. * VALUEOUT,reduce阶段输出的value类型:IntWritable
  11. */
  12. public class WordCountReducer extends Reducer<Text, IntWritable,Text,IntWritable> {
  13.     private IntWritable outV = new IntWritable();
  14.     @Override
  15.     protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
  16.         int sum = 0;
  17.         // 累加
  18.         for (IntWritable value : values) {
  19.             sum += value.get();
  20.         }
  21.         outV.set(sum);
  22.         // 写出
  23.         context.write(key,outV);
  24.     }
  25. }
复制代码
2.4 界说WordCountDriver类

  1. package com.atguigu.mapreduce.wordcount2;
  2. import org.apache.hadoop.conf.Configuration;
  3. import org.apache.hadoop.fs.Path;
  4. import org.apache.hadoop.io.IntWritable;
  5. import org.apache.hadoop.io.Text;
  6. import org.apache.hadoop.mapreduce.Job;
  7. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  8. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  9. import java.io.IOException;
  10. public class WordCountDriver {
  11.     public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
  12.         // 1 获取job
  13.         Configuration conf = new Configuration();
  14.         Job job = Job.getInstance(conf);
  15.         // 2 设置jar包路径
  16.         job.setJarByClass(WordCountDriver.class);
  17.         // 3 关联mapper和reducer
  18.         job.setMapperClass(WordCountMapper.class);
  19.         job.setReducerClass(WordCountReducer.class);
  20.         // 4 设置map输出的kv类型
  21.         job.setMapOutputKeyClass(Text.class);
  22.         job.setMapOutputValueClass(IntWritable.class);
  23.         // 5 设置最终输出的kV类型
  24.         job.setOutputKeyClass(Text.class);
  25.         job.setOutputValueClass(IntWritable.class);
  26.         // 6 设置输入路径和输出路径
  27.         FileInputFormat.setInputPaths(job, new Path(args[0]));
  28.         FileOutputFormat.setOutputPath(job, new Path(args[1]));
  29.         // 7 提交job
  30.         boolean result = job.waitForCompletion(true);
  31.         System.exit(result ? 0 : 1);
  32.     }
  33. }
复制代码
运行结果:
输出结果:
2.5 集群测试

将程序举行打成jar包
修改不带依靠的jar包名称为wc.jar,并拷贝该jar包到Hadoop集群的/kkb/install/hadoop-3.1.3路径。
执行WordCount程序:
hadoop jar wc.jar com.hadoop.mapreduce.wordcount.WordCountDriver /input /output
运行结果:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

罪恶克星

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表