Bootstrap

大数据hadoop集群运算

一、集群搭建
1)安装操作系统以及免密环境
所用工具,如图1所示:

图1 vm虚拟机和镜像文件
[1]新建虚拟机,点击下一步,如图1-1-1所示。
在这里插入图片描述

图1-1-1 新建虚拟机
[2]选择“稍后安装操作系统”,点击下一步,如图1-1-2所示。
在这里插入图片描述

图1-1-2 手动安装Linux
[3]选择“客户机操作系统“为Linux,版本选择CentOS8 64位 如图1-1-3所示。
在这里插入图片描述

图1-1-3 选择操作系统
[4]命名虚拟机 如图1-1-4所示。
在这里插入图片描述

图1-1-4 命名虚拟机
[5]指定磁盘容量,使用默认就行,如图1-1-5所示。
在这里插入图片描述

图1-1-5 指定磁盘容量
[6]修改虚拟机配置,如图1-1-6所示。
在这里插入图片描述

图1-1-6 修改虚拟机配置
[6]使用ISO镜像文件,如图1-1-7所示
在这里插入图片描述

图1-1-7 使用镜像文件
[7]点击完成,到这虚拟机就完成创建了,如图1-1-8所示。
在这里插入图片描述

图1-1-8 完成创建
[9]启动虚拟机,选择Install CentOS Linux 8,如图1-1-9所示
在这里插入图片描述

图1-1-9 启动虚拟机
[10]确定虚拟机所使用的语言,点击继续,如图1-1-10所示。
在这里插入图片描述

图1-1-10 使用语言
[11]配置安装目标位置,不做任何改动,点击完成,如图1-1-11所示。
在这里插入图片描述

图1-1-11 配置安装目标位置
[12]配置网络和主机名,打开以太网,如图1-1-12所示。
在这里插入图片描述

图1-1-12 配置网络和主机名
[13]点击开始安装 如图1-1-13所示。
在这里插入图片描述

图1-1-13 开始安装
[14]设置登录密码,可以不用设置登录用户,默认用户root,如图1-1-14所示。
在这里插入图片描述

图1-1-14 设置登录密码
[15]点击重启虚拟机,如图1-1-15所示。
在这里插入图片描述

图1-1-15重启虚拟机
slave01和slave02操作步骤和上面一致

[16]安装jdk,如图1-1-16所示
yum install -y java-1.8.0-openjdk.x86_64
在这里插入图片描述

图1-1-16 完成jdk下载
根据上述设计构建集群免密环境如下:
—————————————————配置master节点———————————————
1)更改hostname
hostnamectl set-hostname master
在这里插入图片描述

2)修改网络地址
先通过ip addr查看系统的ip地址
在这里插入图片描述

然后通过ip route确定网关
vi /etc/sysconfig/network-scripts/ifcfg-ens??
??是根据系统分配的网络适配器(网卡)而定,可以用tab补全文件名
将文件内容dhcp修改为static
增加如下信息
IPADDR=192.168.???.100
NETMASK=255.255.255.0
GATEWAY=192.168.???.2
DNS1=192.168.???.2
在这里插入图片描述

3)配置包含所有节点名称的hosts作为通信依据
vi /etc/hosts
192.168.???.100 master
192.168.???.201 slave01
192.168.???.202 slave02
在这里插入图片描述

4)生成免密所需公钥
ssh-keygen -t rsa
在这里插入图片描述

—————————————————配置slave01—————————————————
1)更改hostname
hostnamectl set-hostname slave01

2)修改网络地址
vi /etc/sysconfig/network-scripts/ifcfg-ens??
??是根据系统分配的网络适配器(网卡)而定,可以用tab补全文件名
将文件内容dhcp修改为static
增加如下信息
IPADDR=192.168.???.201
NETMASK=255.255.255.0
GATEWAY=192.168.???.2
DNS1=192.168.???.2

3)生成免密所需公钥
ssh-keygen -t rsa

4)将公钥传输给master节点
scp -r /root/.ssh/id_rsa.pub root@master:/root/.ssh/slave01.pub
——————————————————配置slave02————————————————
1)更改hostname
hostnamectl set-hostname slave02

2)修改网络地址
vi /etc/sysconfig/network-scripts/ifcfg-ens??
??是根据系统分配的网络适配器(网卡)而定,可以用tab补全文件名
将文件内容dhcp修改为static
增加如下信息
IPADDR=192.168.???.202
NETMASK=255.255.255.0
GATEWAY=192.168.???.2
DNS1=192.168.???.2

3)生成免密所需公钥
ssh-keygen -t rsa

4)将公钥传输给master节点
scp -r /root/.ssh/id_rsa.pub root@master:/root/.ssh/slave02.pub
————————————————生成公钥链——————————————————
在master节点上创建钥匙链
1)创建钥匙链
cat id_rsa.pub >> authorized_keys
cat slave01.pub >> authorized_keys
cat slave02.pub >> authorized_keys

2)将authorized_keys发送到slave01和slave02
scp -r /root/.ssh/authorized_keys root@slave01:/root/.ssh/authorized_keys

scp -r /root/.ssh/authorized_keys root@slave02:/root/.ssh/authorized_keys

—————————————————¬¬¬¬—测试环境—————————————————
若在master节点,则可通过如下指令测试是否配置成功
ssh slave01
若成功,则无需输入密钥
退出登录执行
exit

2)安装Hadoop以及相应配置
[1] 安装wget,如图1-2-1所示。
在这里插入图片描述

图1-2-1 安装wget
[2] 下载hadoop,如图1-2-2所示。
https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.5/
在这里插入图片描述

图1-2-2 下载Hadoop
[3] 使用 tar -xzvf Hadoop-3.3.0.tar.gz命令解压Hadoop,如图1-2-3所示。
cd /home
tar -xzvf hadoop-3.3.0.tar.gz
在这里插入图片描述

图1-2-3 解压Hadoop
[4] 使用yum install -y java-1.8.0-openjdk.x86_64命令安装Hadoop所需的Java环境,如图1-2-4所示。
在这里插入图片描述

图1-2-4 安装JDK
[5]配置环境变量并激活环境变量,如图1-2-5所示。
在这里插入图片描述

图1-2-5 配置并激活环境
[6]配置hadoop-env.sh,如图1-2-6所示。
在这里插入图片描述

图1-2-6 配置hadoop-env.sh
[7]配置core-site.xml,如图1-2-7所示。
在这里插入图片描述

图1-2-7 配置core-site.xml
[8]配置hdfs-site.xml,如图1-2-8所示。
在这里插入图片描述

图1-2-8 配置hdfs-site.xml
[9]配置mapped-site.xml,如图1-2-9所示。
在这里插入图片描述

图1-2-9 配置mapped-site.xml
[10]配置yarn-site.xml,如图1-2-10所示。
在这里插入图片描述

图1-2-10 配置yarn-site.xml
[11]配置workers,如图1-2-11所示。

在这里插入图片描述

图1-2-11 配置workers
至此,Hadoop安装配置完成。

3)Hadoop自带wordcount实例测试
[1]创建HDFS空间,如图1-3-1所示。
在这里插入图片描述

图1-3-1 创建HDFS空间
[2]进行wordcount,如图1-3-2所示。
在这里插入图片描述

图1-3-2 wordcount
[3]进计算完成,如图1-3-3及图1-3-4所示。
在这里插入图片描述

图1-3-3 计算结果
在这里插入图片描述

图1-3-4 输出结果
至此,Hadoop自带wordcount实例测试完成。

二、大规模数据分析
1)数据的来源以及意义
该数据集是由 Allen Institute for AI 与Chan Zuckerberg Initiative,乔治敦大学安全与新兴技术中心,微软研究院以及美国国立卫生研究院国家医学图书馆与美国白宫办公室合作创建的科技政策。涵盖目前所有的冠状病毒文献,旨在通过其丰富的元数据和结构化全文本来促进文本发掘和信息检索系统的开发;汇聚计算机界,生物医学界专家和决策者,以寻求有效的COVID-19的治疗和管理政策。
2)数据的详细介绍
CORD-19的资源超过47,000篇学术文章,其中包括36,000篇以上的全文,涉及COVID-19,SARS-CoV-2和相关的冠状病毒。这份数据集包括csv元数据和json文件,可以用于信息检索,信息抽取,知识图谱,问答对,预训练模型,摘要,推荐,蕴含,辅助文献综述,增强阅读等多个方向。

3)数据分析的目标以及思路
数据分析的目标:统计2020年5月1日,12日,19日,26日到2020年5月31日title中出现词频数,分析出五月份热度比较高的几个词。
分析思路,以及分析的方法:需要以title中的单词作为Key,它的个数作为value值,通过MapReduce方法将出现的单词个数做出累计和,统计每个单词出现次数的情况。

4)数据分析结果展示
将处理过后的数据,通过可视化的方式展示出来,并配合文字描述,说明数据表现的原因。
在这里插入图片描述

通过分析这几个比较高频的词汇得知SARS病毒是危害健康的,SARS病毒应该是以DNA为遗传物质的,SRAS病毒在中国应该大规模发生过,SARS病毒应该是有着方法可以治愈的。
5)附上Java部分的代码
import java.io.IOException;

import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class CovAnalysis {

static class TempMapper extends
        Mapper<LongWritable, Text, Text, IntWritable> {
    public static final IntWritable one = new IntWritable(1);
        public static Text word = new Text();
    @Override
        public void map(LongWritable key, Text value, Context context)
            throws IOException, InterruptedException {
        	String line = value.toString();
        	String[] tmp = line.split(",");
	if(tmp.length>3){
        	String itr_tmp=tmp[3].toString().replaceAll("[^a-zA-Z ]"," ");
        	
        		StringTokenizer itr = new StringTokenizer(itr_tmp);
		while (itr.hasMoreTokens()) {
		        word.set(itr.nextToken());
		        context.write(word, one);
				      }
    }    
    }

}


static class TempReducer extends
        Reducer<Text, IntWritable, Text, IntWritable> {
    private IntWritable result = new IntWritable();
    @Override
    public void reduce(Text key, Iterable<IntWritable> values,
            Context context) throws IOException, InterruptedException {
    	  int sum = 0;
        for (IntWritable value : values) {
            sum += value.get();
        }
        result.set(sum);
        context.write(key, result);
    }
}

public static void main(String[] args) throws Exception {

    String dst = "hdfs://master:9000/cov";
    String dstOut = "hdfs://master:9000/output-cov5";
    Configuration hadoopConfig = new Configuration();
    

    Job job = new Job(hadoopConfig);
    
    

    FileInputFormat.addInputPath(job, new Path(dst));
    FileOutputFormat.setOutputPath(job, new Path(dstOut));

    job.setMapperClass(TempMapper.class);
    job.setReducerClass(TempReducer.class);
    
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    
    job.waitForCompletion(true);
    System.out.println("Finished");
}

}

;