Hadoop单点部署与案例开发(微博用户数据分析)

一、环境搭建

1、Hadoop运行环境搭建

1.1 安装虚拟机

(1)下载并安装VMware虚拟机软件。

(2)创建虚拟机,实验环境虚拟机配置如下图所示。

(3)安装Ubuntu系统,安装结果如下图所示。

1.2  配置JDK环境

下载并安装JDK,安装结束后需对java环境进行配置,配置成功结果如下所示。

2、Hadoop安装和部署

(1)创建Hadoop安装文件夹,并切到到此路径下。

(2)从 hadoop.apache.org 下载Hadoop 安装文件,并复制文件到安装Hadoop的文件夹中。下载地址如下图所示,本次试验选取较为稳定的最新版,即2.7.3版。

(3)解压Hadoop文件。

(4)修改配置文件

下面来写配置文件core-site.xml、hdfs-site.xml、hadoop-env.sh三个文件这三个文件都在~/hadoop/hadoop-2.7.3/etc/hadoop/下,在前两个文件中的和中写入如下内容。

第一个文件core-site.xml

请注意/home/ealon/hadoop/tmp文件夹要被替换为计算机当前的用户目录中的tmp文件夹没有请创建。

第二个文件hdfs-site.xml

第三个文件hadoop-env.sh中找到如下行然后写入内容。

接下来在系统环境变量中写入Hadoop的环境变量gedit /etc/environment

#在文件的结尾""之内加上

:/home/ealon/hadoop/hadoop-2.7.3/bin

:/home/ealon/hadoop/hadoop-2.7.3/sbin

(5)重启虚拟机

首先重启系统,待开机后,输入如下命令hadoop version,验证Hadoop环境是否安装成功。当看到屏幕上显示Hadoop的版本号即说明单机模式已经配置完成。如下图所示。

(6)启动HDFS

通过使用伪分布模式,启动HDFS服务。首先需对HDFS进行格式化处理。

显示如下内容即成功格式化。

(7)启动HDFS

(8)查看进程

运行jps命令。如看到屏幕上显示如下内容即说明HDFS已经成功

(9)停止HDFS

通过以上操作,Hadoop环境就基本搭建完毕。

3、Hadoop-Eclipse-Plugin安装与配置

3.1 插件安装

要在 Eclipse 上编译和运行 MapReduce 程序,需要安装 hadoop-eclipse-plugin,可下载 Github 上的 hadoop2x-eclipse-plugin。

下载后,将 release 中的hadoop-eclipse-kepler-plugin-2.6.0.jar复制到 Eclipse 安装目录的 plugins 文件夹中,运行 eclipse -clean 重启 Eclipse 即可。

unzip-qo ~/下载/hadoop2x-eclipse-plugin-master.zip -d ~/下载    # 解压到 ~/下载中

sudocp ~/下载/hadoop2x-eclipse-plugin-master/release/hadoop-eclipse-plugin-2.6.0.jar/usr/lib/eclipse/plugins/    # 复制到 eclipse 安装目录的 plugins 目录下

/usr/lib/eclipse/eclipse-clean    # 添加插件后需要用这种方式使插件生效

3.2 插件配置

在继续配置前请确保已经开启了 Hadoop。

启动 Eclipse 后就可以在左侧的Project Explorer中看到 DFS Locations(若看到的是 welcome 界面,点击左上角的 x 关闭就可以看到了。

插件需要进一步的配置

第一步:选择 Window 菜单下的 Preference。

打开Preference打开Preference

此时会弹出一个窗体,窗体的左侧会多出 Hadoop Map/Reduce 选项,点击此选项,选择 Hadoop 的安装目录(如/usr/local/hadoop,Ubuntu不好选择目录,直接输入就行)。

选择 Hadoop 的安装目录选择Hadoop 的安装目录

第二步:切换 Map/Reduce 开发视图,选择 Window 菜单下选择 Open Perspective ->Other(CentOS 是 Window -> Perspective-> Open Perspective -> Other),弹出一个窗体,从中选择 Map/Reduce 选项即可进行切换。

切换 Map/Reduce 开发视图切换Map/Reduce 开发视图

第三步:建立与 Hadoop 集群的连接,点击 Eclipse软件右下角的 Map/Reduce Locations 面板,在面板中单击右键,选择 New Hadoop Location。

建立与 Hadoop 集群的连接建立与Hadoop 集群的连接

在弹出来的 General 选项面板中,General 的设置要与 Hadoop 的配置一致。一般两个 Host 值是一样的,如果是伪分布式,填写 localhost 即可,另外我使用的Hadoop伪分布式配置,设置 fs.defaultFS 为 hdfs://localhost:9000,则 DFS Master 的 Port 要改为 9000。Map/Reduce(V2) Master 的 Port 用默认的即可,Location Name 随意填写。

最后的设置如下图所示:

Hadoop Location 的设置HadoopLocation 的设置

Advancedparameters 选项面板是对 Hadoop 参数进行配置,实际上就是填写 Hadoop 的配置项(/usr/local/hadoop/etc/hadoop中的配置文件),如我配置了 hadoop.tmp.dir ,就要进行相应的修改。但修改起来会比较繁琐,我们可以通过复制配置文件的方式解决(下面会说到)。

总之,我们只要配置 General 就行了,点击 finish,Map/Reduce Location 就创建好了。

3.3 在 Eclipse 中操作 HDFS 中的文件

配置好后,点击左侧 Project Explorer 中的 MapReduce Location (点击三角形展开)就能直接查看 HDFS 中的文件列表了(HDFS 中要有文件,如下图是 WordCount 的输出结果),双击可以查看内容,右键点击可以上传、下载、删除 HDFS 中的文件,无需再通过繁琐的 hdfs dfs -ls 等命令进行操作了。

使用Eclipse查看HDFS中的文件内容

如果无法查看,可右键点击 Location 尝试 Reconnect 或重启 Eclipse。

3.4 在 Eclipse 中创建 MapReduce 项目

点击 File 菜单,选择 New -> Project…:

创建Project

选择 Map/ReduceProject,点击 Next。

创建MapReduce项目

填写 Projectname 为 WordCount 即可,点击 Finish 就创建好了项目。

填写项目名

此时在左侧的Project Explorer 就能看到刚才建立的项目了。

项目创建完成

接着右键点击刚创建的WordCount 项目,选择 New -> Class

新建Class

需要填写两个地方:在 Package 处填写org.apache.hadoop.examples;在 Name 处填写 WordCount。

填写Class信息

创建 Class 完成后,在 Project 的 src 中就能看到 WordCount.java 这个文件。将如下 WordCount 的代码复制到该文件中。

package org.apache.hadoop.examples;
import java.io.IOException;
import java.util.StringTokenizer;
importorg.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;
importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
importorg.apache.hadoop.util.GenericOptionsParser;
public class WordCount {
 public static class TokenizerMapper
      extends Mapper<Object, Text, Text, IntWritable>{
   private final static IntWritable one = new IntWritable(1);
   private Text word = new Text();
   public void map(Object key, Text value, Context context
                    ) throws IOException,InterruptedException {
     StringTokenizer itr = new StringTokenizer(value.toString());
     while (itr.hasMoreTokens()) {
       word.set(itr.nextToken());
       context.write(word, one);
     }
    }
  }
 public static class IntSumReducer
      extends Reducer<Text,IntWritable,Text,IntWritable> {
   private IntWritable result = new IntWritable();
   public void reduce(Text key, Iterable<IntWritable> values,
                       Context context
                       ) throws IOException,InterruptedException {
     int sum = 0;
     for (IntWritable val : values) {
       sum += val.get();
     }
      result.set(sum);
     context.write(key, result);
    }
  }
 public static void main(String[] args) throws Exception {
   Configuration conf = new Configuration();
   String[] otherArgs = new GenericOptionsParser(conf,args).getRemainingArgs();
    if(otherArgs.length != 2) {
     System.err.println("Usage: wordcount <in> <out>");
     System.exit(2);
    }
   Job job = new Job(conf, "word count");
   job.setJarByClass(WordCount.class);
   job.setMapperClass(TokenizerMapper.class);
   job.setCombinerClass(IntSumReducer.class);
   job.setReducerClass(IntSumReducer.class);
   job.setOutputKeyClass(Text.class);
   job.setOutputValueClass(IntWritable.class);
   FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
    FileOutputFormat.setOutputPath(job,new Path(otherArgs[1]));
   System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}

3.5 通过 Eclipse 运行 MapReduce

在运行 MapReduce 程序前,还需要执行一项重要操作(也就是上面提到的通过复制配置文件解决参数设置问题):将/usr/local/hadoop/etc/hadoop 中将有修改过的配置文件(如伪分布式需要 core-site.xml 和 hdfs-site.xml),以及 log4j.properties 复制到 WordCount 项目下的 src 文件夹(~/workspace/WordCount/src)中:

cp/usr/local/hadoop/etc/hadoop/core-site.xml ~/workspace/WordCount/src

cp/usr/local/hadoop/etc/hadoop/hdfs-site.xml ~/workspace/WordCount/src

cp/usr/local/hadoop/etc/hadoop/log4j.properties ~/workspace/WordCount/src

没有复制这些文件的话程序将无法正确运行,本教程最后再解释为什么需要复制这些文件。

复制完成后,务必右键点击 WordCount 选择 refresh 进行刷新(不会自动刷新,需要手动刷新),可以看到文件结构如下所示:

WordCount项目文件结构

点击工具栏中的 Run 图标,或者右键点击 Project Explorer 中的 WordCount.java,选择 Run As -> Run onHadoop,就可以运行 MapReduce 程序了。不过由于没有指定参数,运行时会提示 “Usage: wordcount “,需要通过Eclipse设定一下运行参数。

右键点击刚创建的 WordCount.java,选择 Run As -> RunConfigurations,在此处可以设置运行时的相关参数(如果 Java Application 下面没有 WordCount,那么需要先双击 Java Application)。切换到 “Arguments” 栏,在 Program arguments 处填写 “input output” 就可以了。

设置程序运行参数

或者也可以直接在代码中设置好输入参数。可将代码 main() 函数的 String[] otherArgs= new GenericOptionsParser(conf, args).getRemainingArgs(); 改为:

//String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();

String[]otherArgs=new String[]{"input","output"}; /* 直接设置输入参数 */

设定参数后,再次运行程序,可以看到运行成功的提示,刷新 DFS Location 后也能看到输出的 output 文件夹。

WordCount 运行结果

至此,你就可以使用 Eclipse 方便的进行 MapReduce程序的开发了。

二、实验内容

通过网络下载userdata.csv微博用户数据,共有14388385条用户数据,包含:用户id,所在省份,性别,是否认证信息。数据截图如下图所示。

项目代码结构如下图所示:

1、用户性别分布

Maper函数:

Reducer函数:

计算结果分布如下图所示:

从图中可以观察到,微博用户中女性所占比例较大,多余男性用户。

2、用户省份分布

该部分Maper函数、Reducer函数与性别统计算法相同,不再赘述,计算结果如下图所示:

从图中可以看出,广东、北京、上海、江苏、浙江等地微博用户量较大。

3、用户实名验证分布

该部分Maper函数、Reducer函数与性别统计算法相同,不再赘述,计算结果如下图所示:

从图中可以看出,非实名用户在微博用户中占绝大部分。

4、主要省市男女比例分布

该部分Maper函数、Reducer函数与性别统计算法基本相同,不再赘述,计算结果如下图所示:

各省市女性用户数量均占所在省市总用户数的一半以上。

三、总结

通过浏览控制台和Web管理端输出结果,算法执行过程未见明显异常或报错。控制台输出结果如下图所示:

Web端面板统计结果如下图所示:

任务执行结果统计如下图所示:

结合水运行业实际需求,智慧港口建设作为我国港口转型升级的重要途径,其所涉及的关键技术就包含港口数据分析与处理。Hadoop技术在互联网行业已广泛应用,但在港口自动化、智能化建设中还未起到关键、核心作用。因此,大数据分析与挖掘技术在港口领域的深度应用,是港口发展的高级阶段。对我国港口而言,通过打造智慧港口,优化提升港口基础设施和管理模式,实现港口功能创新、技术创新和服务创新,已成为我国港口提高国际竞争力,完成转型升级的重要途径。通过对大数据技术在智慧港口中应用研究,是我国港口信息化积累的海量数据发挥其巨大优势,为我国港口管理部门以及港口企业提供决策支撑,具有重要的显示意义。

时间: 2024-10-27 11:50:39

Hadoop单点部署与案例开发(微博用户数据分析)的相关文章

PHP+新浪微博开放平台+新浪云平台(SAE)开发微博应用基础

1.新浪微博开放平台(http://open.weibo.com/wiki/index.php/Quickstart)        开放的是什么:开放平台开放给开发者的是每一个用户的用户关系,开发者不在向传统应用那样面对单个开发者而是面对用户身后的整个好友圈.每一个API都是围绕好友与好友之间的交流来提供相关的功能,如发送微博,查看好友资料等等.        为什么要使用开放平台?开放平台可以加快应用的推广.每个用户可以影响到周围的好友,一旦应用真的优秀,用户可以方便的推荐给好友,好友又可以

平台部署发布案例总结2014/07

/**************************<< 平台部署发布案例总结2014/07 >> ****************************/ VS.NET WEB项目/网站 部署和安装概述 1. Net. WEB项目分类 WEB项目结构分为Web Application Project (web,services,wpf,mvc..) 和Web Site Project 主要的差异在 Web Site Project 可以不必编译就可以修改程式看到結果, 而We

Hadoop分布式部署

准备硬件环境 此次用到三台计算机,三台计算机的系统都是Linux,并且以安装好JAVA.IP地址和角色为: namenode:192.168.0.1 datanode:192.168.0.2 datanode:192.168.0.3 三台计算机之间能够正确解析彼此.因此需要修改/etc/hosts文件,主节点上需要将所有节点的IP地址以及相对应的主机名添加到文件中.作datanode的节点则只需将自己以及主节点的IP地址以及相对应的主机名添加到文件中即可. 安装Hadoop 由于Hadoop要求

基于lucene的案例开发:数据库连接池

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/43272993 通过java程序去连接数据库时,使用的协议是TCP/IP协议,TCP/IP协议需要进行3次握手.如果每一次数据库操作都需要创建一个新的连接,都要进行3次握手,这是十分浪费资源的,程序的效率也不是很高.为了解决这个问题,我们想可不可以自己维护一些数据库连接,需要数据库操作的时候,直接使用这其中的一个连接,用完了,在还给它,这样的话就不需要每次数据库操作都创建一个新的

Hadoop完全分布式的Eclipse开发环境配置

Hadoop安全分布式的Eclipse开发环境配置 安装Eclipse: 详细见教程:http://blog.csdn.net/wang_zhenwei/article/details/48032001 安装Hadoop-Eclipse-Plugin: 下载 hadoop2x-eclipse-plugin ,将 release 中的 hadoop-eclipse-kepler-plugin-2.2.0.jar (虽然标注的是 2.2.0,但在 2.6.0 下是没问题的,应该在 2.x 版本下都可

java和Discuz论坛实现单点登录,通过Ucenter(用户管理中心)

果学网-专注IT在线www.prismcollege.com 1,按照下面各大链接的教程,把Base64,Client,PHPFunctions,UC,XMLHelper加入web程序. 2,修改web.xml,加入 <servlet> <display-name>同步UC Server发出的操作指令</display-name> <servlet-name>UC</servlet-name> <servlet-class>com.e

Hadoop自动化部署脚本

摘自:http://www.wangsenfeng.com/articles/2016/10/27/1477556261953.html 1 概述 最近自己写了一个Hadoop自动化部署脚本,包括Hadoop集群自动化部署脚本和Hadoop增加单节点自动化部署脚本.需要快速部署Hadoop集群的童鞋可以使用该脚本.这些脚本我在用5台虚拟机进行了测试,如果在使用中还有bug,欢迎指出.本文主要介绍Hadoop集群自动化部署脚本,安装的Hadoop版本为2.6.0. 2 依赖 安装Hadoop2.6

Exchange 2016部署实施案例篇-04.Ex基础配置篇(中)

昨天更新了基础配置的上篇<Exchange 2016部署实施案例篇-04.Ex基础配置篇(上)>,欢迎各位老铁多多提出宝贵意见,非常感谢. 虚拟目录 自动发现配置 有的朋友可能知道,虽然在虚拟目录里有自动发现这个选项,但自动发现记录在图形化界面无法配置自动发现地址,如图所示 其实自动发现路径需要使用命令修改,我们先查下现在的自动发现写的是什么鬼 查看自动发现配置情况命令:Get-ClientAccessService | select Name,AutoDiscoverServiceInter

Jmeter HTTP接口案例开发、调试方法

HTTP接口案例案例开发的步骤为: 1.了解要开发案例的业务流程,比如新增案例,是否有其它前置条件,如果有,就需要先开发好前置条件的案例 2.手工开发案例或者通过jmeter录制功能开发案例 3.对案例进行调试,响应结果和预期结果一致,则案例开发完成 对于简单的案例,建议直接手工编写,涉及到上传附件.导入excel,等复杂案例建议录制脚本 一.开发脚本 手工编写脚本 本次案例为新增角色,一般我们使用谷歌浏览器进行页面操作,然后按F12显示接口请求 输入必填项,点击保存按钮,接口请求显示如下,根据