高等数学—元素和极限

实数的定义

高数->连续
线性代数->离散
概率统计
R 实数
Z 整数
Q 有理数 \( q \over p\)\( 且 q,p \in Z \)
分划:
全集为K

\( A \bigcup B = K \) \( A \bigcap B = \emptyset \)

戴德金分划:

将全集Q分为A,B两个集合

Read More

数据挖掘的方法论之CRISP-DM

在1996年,当时数据挖掘市场是年轻而不成熟的,但是这个市场显示了爆炸式的增长。三个在这方面经验丰富的公司DaimlerChrysler、SPSS、NCR发起建立一个社团,目的建立数据挖掘方法和过程的标准。在获得了EC(European Commission)的资助后,他们开始实现他们的目标。为了征集业界广泛的意见共享知识,他们创建了CRISP-DM Special Interest Group(简称为SIG)。

大概在1999年,SIG(CRISP-DM Special Interest Group)组织开发并提炼出CRISP-DM(Cross-Industry Standard Process for Data Mining),同时在Mercedes-Benz和OHRA(保险领域)企业进行了大规模数据挖掘项目的实际试用。SIG还将CRISP-DM和商业数据挖掘工具集成起来。SIG组织目前在伦敦、纽约、布鲁塞尔已经发展到200多个成员。

当前CRISP-DM提供了一个数据挖掘生命周期的全面评述。他包括项目的相应周期,他们的各自任务和这些任务的关系。在这个描述层,识别出所有关系是不可能的。所有数据挖掘任务之间关系的存在是依赖用户的目的、背景和兴趣,最重要的还有数据。SIG 组织已经发布了CRISP-DM Version 1.0 Process Guide and User Manual的电子版,这个可以免费使用。

Figure: Phases of the CRISP-DM Process Model
Figure: Phases of the CRISP-DM Process Model

一个数据挖掘项目的生命周期包含六个阶段。这六个阶段的顺序是不固定的,我们经常需要前后调整这些阶段。这依赖每个阶段或是阶段中特定任务的产出物是否是下一个阶段必须的输入。上图中箭头指出了最重要的和依赖度高的阶段关系。

上图的外圈象征数据挖掘自身的循环本质――在一个解决方案发布之后一个数据挖掘的过程才可以继续。在这个过程中得到的知识可以触发新的,经常是更聚焦的商业问题。后续的过程可以从前一个过程得到益处。

业务理解 (Business Understanding)
最初的阶段集中在理解项目目标和从业务的角度理解需求,同时将这个知识转化为数据挖掘问题的定义和完成目标的初步计划。

数据理解 (Data Understanding)
数据理解阶段从初始的数据收集开始,通过一些活动的处理,目的是熟悉数据,识别数据的质量问题,首次发现数据的内部属性,或是探测引起兴趣的子集去形成隐含信息的假设。

数据准备 (Data Preparation)
数据准备阶段包括从未处理数据中构造最终数据集的所有活动。这些数据将是模型工具的输入值。这个阶段的任务有个能执行多次,没有任何规定的顺序。任务包括表、记录和属性的选择,以及为模型工具转换和清洗数据。

建模(Modeling)
在这个阶段,可以选择和应用不同的模型技术,模型参数被调整到最佳的数值。一般,有些技术可以解决一类相同的数据挖掘问题。有些技术在数据形成上有特殊要求,因此需要经常跳回到数据准备阶段。

评估(Evaluation)
到项目的这个阶段,你已经从数据分析的角度建立了一个高质量显示的模型。在开始最后部署模型之前,重要的事情是彻底地评估模型,检查构造模型的步骤,确保模型可以完成业务目标。这个阶段的关键目的是确定是否有重要业务问题没有被充分的考虑。在这个阶段结束后,一个数据挖掘结果使用的决定必须达成。

部署 (Deployment)
通常,模型的创建不是项目的结束。模型的作用是从数据中找到知识,获得的知识需要便于用户使用的方式重新组织和展现。根据需求,这个阶段可以产生简单的报告,或是实现一个比较复杂的、可重复的数据挖掘过程。在很多案例中,这个阶段是由客户而不是数据分析人员承担部署的工作。

原文链接:http://kb.cnblogs.com/page/76804/

使用Python进行数据分析I 环境准备

下载Python包并安装:https://www.continuum.io/downloads

Alan采用Mac OSX进行操作,这里下载最新版Python 3.5

Mac上安装Python

在Terminal中输入python即可进入python命令行界面通过输出Hello, world!来进行验证,后面我们将需要NumPy, Pandas, Matplotlib, iPython和Seaborn安装包,通过import来查看,no news is good news, 只要不报错就说明已正确安装

>>> print("Hello, world!")  //测试命令
Hello, world!
>>> import numpy
>>> import matplotlib
>>> import pandas
>>> import IPython
>>> import seaborn
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'seaborn'

这里可以看到Seaborn并未正确安装,通过exit()或快捷键Ctrl+D可退出Python命令行,然后执行pip install seaborn来进行安装

 

常见问题
1.socket.timeout: The read operation timed out报错

... ...
pip._vendor.requests.packages.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='pypi.python.org', port=443): Read timed out.

出现这一问题猜测是由于网络连接问题,默认timeout的时间是15秒,可以使用参数–timeout中加大这一设置,如

pip install --timeout 1000 seaborn

为方便Python程序的编写和调试,我们将使用iPython Notebook来进行操作,在Terminal中输入ipython notebook就会自动在浏览器中打开http://localhost:8888/tree,首先我们新建一个文件:

iPython Note中进行新建

默认为code模式,可以在里面直接输入命令并按下Shift+Return来执行命令,以下为演示模式:

iPython Notebook code模式

如上图我们还可以在下拉框中选择Markdown模式来输入注释等内容,我们这里输入以下内容

This is a comment. Text can Be _italic_, **bold**.
# title level 1
## title level 2
* bullet 1
* bullet 2

$\sqrt(2+x)$

按下Shift+Return输出结果如下图所示

iPython Notebook markdown模式

 

【大数据基础】使用Maven编写第一个MapReduce程序

前面讲过了如何使用和配置Maven,那么接下来就使用Maven编写一个MapReduce程序,这里参照某视频教程中的程序进行编写。

首先在前面创建的datacount项目的src/main/java下创建一个类,基本配置如下:

利用Maven创建第一个Java类

以下例子来自于传智播客某视频教程:

使用MapReduce程序分析一段手机访问日志,获取对应的上行流量、下行流量和总流量,以下是日志片段:

手机访问日志

关于日志的字段说明如下:

手机访问日志字段说明

因此我们只需获取列序号为1,8和9的三列数据(第一列序号为0),由于包含多项数据,我们封装了一个DataBean对象来做为Mapper的输出和以及Reducer的输入、输出。

编写文件如下:

DataBean.java

package com.alanhou.hadoop.mr.dc;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.io.Writable;

public class DataBean implements Writable {
	private String telNo;
	private long upPayLoad;
	private long downPayLoad;
	private long totalPayLoad;
	
	//add a construct method without params, otherwise error will show up during execution
	public DataBean(){}
	
	public DataBean(String telNo, long upPayLoad, long downPayLoad) {
		this.telNo = telNo;
		this.upPayLoad = upPayLoad;
		this.downPayLoad = downPayLoad;
		this.totalPayLoad = this.upPayLoad + this.downPayLoad;
	}
	//serialize
	//Notice on type &amp; order
	public void write(DataOutput out) throws IOException {
		out.writeUTF(telNo);
		out.writeLong(upPayLoad);
		out.writeLong(downPayLoad);
		out.writeLong(totalPayLoad);
	}
	//deserialize
	public void readFields(DataInput in) throws IOException {
		this.telNo = in.readUTF();
		this.upPayLoad = in.readLong();
		this.downPayLoad = in.readLong();
		this.totalPayLoad = in.readLong();
	}
	
	@Override
	public String toString() {
		return this.upPayLoad + "\t" + this.downPayLoad + "\t" +this.totalPayLoad;
	}
	public String getTelNo() {
		return telNo;
	}
	public void setTelNo(String telNo) {
		this.telNo = telNo;
	}
	public long getUpPayLoad() {
		return upPayLoad;
	}
	public void setUpPayLoad(long upPayLoad) {
		this.upPayLoad = upPayLoad;
	}
	public long getDownPayLoad() {
		return downPayLoad;
	}
	public void setDownPayLoad(long downPayLoad) {
		this.downPayLoad = downPayLoad;
	}
	public long getTotalPayLoad() {
		return totalPayLoad;
	}
	public void setTotalPayLoad(long totalPayLoad) {
		this.totalPayLoad = totalPayLoad;
	}

}

DataCount.java

package com.alanhou.hadoop.mr.dc;

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
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 DataCount {

	public static void main(String[] args) throws Exception {
		Configuration conf = new Configuration();
		Job job = Job.getInstance(conf);
		job.setJarByClass(DataCount.class);
		job.setMapperClass(DCMapper.class);
		//job.setMapOutputKeyClass(Text.class);
		//job.setMapOutputValueClass(DataBean.class);
		FileInputFormat.setInputPaths(job, new Path(args[0]));
		
		job.setReducerClass(DCReducer.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(DataBean.class);
		FileOutputFormat.setOutputPath(job, new Path(args[1]));
		
		job.waitForCompletion(true);
	}
	
	public static class DCMapper extends Mapper&lt;LongWritable, Text, Text, DataBean&gt;{

		@Override
		protected void map(LongWritable key, Text value, Mapper&lt;LongWritable, Text, Text, DataBean&gt;.Context context)
				throws IOException, InterruptedException {
			String line = value.toString();
			String[] fields = line.split("\t");
			String telNo = fields[1];
			long up = Long.parseLong(fields[8]);
			long down = Long.parseLong(fields[9]);
			DataBean bean = new DataBean(telNo, up, down);
			context.write(new Text(telNo), bean);
		}
		
	}
	
	public static class DCReducer extends Reducer&lt;Text, DataBean, Text, DataBean&gt;{

		@Override
		protected void reduce(Text key, Iterable&lt;DataBean&gt; v2s, Context context)
				throws IOException, InterruptedException {
			long upSum =0;
			long downSum =0;
			for(DataBean bean : v2s){
				upSum += bean.getUpPayLoad();
				downSum += bean.getDownPayLoad();
			}
			DataBean bean = new DataBean("", upSum, downSum);
			context.write(key, bean);
		}
		
	}

}

完成代码编写后导出jar包

在Eclipse项目上右击选择Export,然后在弹出窗口中选择JAR file:

选择导出Java的jar包

点击Next在接下来的窗口中勾选Export all output folders for checked projects并指定导出jar包的名称和路径。点击Finish完成即可:

选择导出路径相关信息

执行程序:
上传HTTP_20130313143750.dat文件,并启动hdfs和yarn服务。接下来上传日志文件到hdfs上并执行程序

hadoop fs -put HTTP_20130313143750.dat /data.doc
hadoop jar example.jar com.alanhou.hadoop.mr.dc.DataCount /data.doc /dataout

通过hadoop fs -cat /dataout/part-r-00000可查看执行结果如下:

DataCount的运行结果

注:其中的WARN信息不影响程序运行,为安装文件的编译问题,如需解决,请参考本地安装Hadoop完整笔记部分。

【大数据基础】如何使用和配置Maven

Alan在安装CentOS时使用的是minimal文件,所以需要先安装图形化界面

yum -y groupinstall "X Window System"
yum groupinstall 'KDE Desktop' -y

如果安装中出现如下报错

Warning: Group KDE Desktop does not exist.
No packages in any requested group available to install or update

请使用yum grouplist(或yum grouplist | grep ‘KDE\|GNOME’进行更精准查询)查看所在机器对应的KDE或GNOME组名是什么,修改组名再进行安装。
安装完成后在命令行输入init 5临时打开图形界面,然后同意协议添加一个用户账号即可进入图形登录页面。若要永久启动时即进入图形界面,需在/etc/inittab文件中进行配置。

CentOS KDE图形化界面

接下来Linux上下载或上传Eclipase安装文件并解压完成完装:

wget http://ftp.yzu.edu.tw/eclipse/technology/epp/downloads/release/mars/1/eclipse-jee-mars-1-linux-gtk-x86_64.tar.gz
tar -xzvf eclipse-jee-mars-1-linux-gtk-x86_64.tar.gz -C /usr/local/

将/usr/local/eclipse/eclipse加到桌面的快捷方式方便之后使用

Linux图形界面添加Eclipse快捷方式

然后双击桌面图标启动eclipse,新建一个maven项目,在新建窗口勾选Create a simple project(skip archetype selection),进入下一个窗口设置Group ID和Artifact ID然后点击完成即可:

设置Maven的Group ID, Artifact ID

创建好项目之后编辑项目的pom.xml文件在<project>标签对中加入hadoop和mapreduce的依赖,保存后系统会自动下载对应的依赖包文件

  <dependencies>
        <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>2.6.0</version>
        </dependency>
        <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-mapreduce-client-core</artifactId>
                <version>2.6.0</version>
        </dependency>
  </dependencies>

如下图所示,原本空的Maven Dependencies下会出现配置后下载导入的jar包

配置pom.xml文件导入依赖包

【大数据基础】第一个MapReduce程序

Hadoop中最重要的两个部分就要属HDFS和MapReduce了,本文我们一起来探讨一下如何来实现MapReduce的入门级程序Word Count。
测试数据
Hello Tom
Hello Jerry
Hello Kitty
Hello World
Hello Tom

如何编写MapReduce Word Count代码?

本例中我们手动写入了输入输出文件路径(setInputPaths, setOutputPath)

编写main方法

package com.alanhou.hadoop.mr;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class WordCount {

	public static void main(String[] args) throws Exception {
		//抽象出一个job对象
		Job job = Job.getInstance(new Configuration());
		//传递main方法所在的类 !important
		job.setJarByClass(WordCount.class);
		//设置我们自定义的mapper及相关属性
		job.setMapperClass(WCMapper.class);
		job.setMapOutputKeyClass(Text.class);
		job.setMapOutputValueClass(LongWritable.class);
                //指令输入文件
		FileInputFormat.setInputPaths(job, new Path("/words.txt"));
		//设置我们自定义的reducer及相关属性
		job.setReducerClass(WCReducer.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(LongWritable.class);
                //指定输出路径
		FileOutputFormat.setOutputPath(job, new Path("/wcout"));
		//传入true执行过程中打印进度和详情
		job.waitForCompletion(true);
	}
}

继承Mapper类

package com.alanhou.hadoop.mr;
import java.io.IOException;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.Mapper;

public class WCMapper extends Mapper<LongWritable, Text, Text, LongWritable>{

	@Override
	protected void map(LongWritable key, Text value, Context context)
			throws IOException, InterruptedException {
		// 接收数据V1
		String line = value.toString();
		//切分数据
		String[] words = line.split(" ");
		//循环
		for(String w:words){
			//出现一次,计作一个1
			context.write(new Text(w), new LongWritable(1));
		}

	}
	
}

继承Reducer类

package com.alanhou.hadoop.mr;
import java.io.IOException;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class WCReducer extends Reducer<Text, LongWritable, Text, LongWritable> {

	@Override
	protected void reduce(Text key, Iterable<LongWritable> v2s,
			Context context) throws IOException, InterruptedException {
		//接收数据
		//定义一个计数器
		long counter = 0;
		//循环v2s
		for(LongWritable i : v2s){
			counter += i.get();
		}
		//输出
		context.write(key, new LongWritable(counter));
	}
	
}

如何导出jar包?

1.在project名称上右击在弹出窗口中点击Export,然后选择Java下的JAR file下一步

在Eclipse中导出jar包

2.在JAR File Specification窗口中选择一个jar包导出路径和文件名,点击Next

选择导出jar包路径

3.紧接中进入JAR Packaging Options窗口,暂不进行任何操作点击Next进入下一步,在下面的JAR Manifest Specification页面Main class部分选择main方法所在类,然后点击Finish完成即可

选择Main类

将jar包上传到Linux服务器上,然后将测试数据上传到hdfs上(hadoop fs -put xx /words.txt)。由于我们在程序中写入了输入文件和输出路径,并且在导出jar包时指定了main方法所在类,仅需输入hadoop jar wordcount.jar等待程序执行即可。
执行过程中会显示如下进度

16/02/03 07:47:10 INFO mapreduce.Job:  map 0% reduce 0%
16/02/03 07:47:18 INFO mapreduce.Job:  map 100% reduce 0%
16/02/03 07:47:28 INFO mapreduce.Job:  map 100% reduce 100%
16/02/03 07:47:29 INFO mapreduce.Job: Job job_1454500331908_0001 completed successfully
16/02/03 07:47:30 INFO mapreduce.Job: Counters: 49
... ...
		BAD_ID=0
		CONNECTION=0
		IO_ERROR=0
		WRONG_LENGTH=0
		WRONG_MAP=0
		WRONG_REDUCE=0
	File Input Format Counters 
		Bytes Read=56
	File Output Format Counters 
		Bytes Written=38

输出结果

Hello	5
Jerry	1
Kitty	1
Tom	2
World	1

【大数据基础】常用命令

操作hdfs的相关命令

比如查看hdfs下的文件使用

hadoop fs -ls hdfs://hadoop01:9000/

hadoop fs -ls /

hadoop fs的其它选项:

[-appendToFile <localsrc> … <dst>]

[-cat [-ignoreCrc] <src> …]

[-checksum <src> …]

[-chgrp [-R] GROUP PATH…]

[-chmod [-R] <MODE[,MODE]… | OCTALMODE> PATH…]

[-chown [-R] [OWNER][:[GROUP]] PATH…]

[-copyFromLocal [-f] [-p] [-l] <localsrc> … <dst>]

[-copyToLocal [-p] [-ignoreCrc] [-crc] <src> … <localdst>]

[-count [-q] [-h] <path> …]

[-cp [-f] [-p | -p[topax]] <src> … <dst>]

[-createSnapshot <snapshotDir> [<snapshotName>]]

[-deleteSnapshot <snapshotDir> <snapshotName>]

[-df [-h] [<path> …]]

[-du [-s] [-h] <path> …]

[-expunge]

[-get [-p] [-ignoreCrc] [-crc] <src> … <localdst>]

[-getfacl [-R] <path>]

[-getfattr [-R] {-n name | -d} [-e en] <path>]

[-getmerge [-nl] <src> <localdst>]

[-help [cmd …]]

[-ls [-d] [-h] [-R] [<path> …]]

[-mkdir [-p] <path> …]

[-moveFromLocal <localsrc> … <dst>]

[-moveToLocal <src> <localdst>]

[-mv <src> … <dst>]

<spanÏ> [-put [-f] [-p] [-l] <localsrc> … <dst>]

[-renameSnapshot <snapshotDir> <oldName> <newName>]

[-rm [-f] [-r|-R] [-skipTrash] <src> …]

[-rmdir [–ignore-fail-on-non-empty] <dir> …]

[-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[–set <acl_spec> <path>]]

[-setfattr {-n name [-v value] | -x name} <path>]

[-setrep [-R] [-w] <rep> <path> …]

[-stat [format] <path> …]

[-tail [-f] <file>]

[-test -[defsz] <path>]

[-text [-ignoreCrc] <src> …]

[-touchz <path> …]

[-usage [cmd …]]

所有hadoop命令在2.0以后的版本都可以使用hdfs来实现,但如果我们输入如下命令会出现报错

[hadoop@hadoop02 ~]$ hdfs fs -ls /
Error: Could not find or load main class fs

实际是hdfs后接的应该是dfs,即hdfs dfs -ls /

HBase常用命令

hbase shell(bin目录下)进入hbase的shell命令窗口

Shell中命令

status(参数’simple’, ‘detailed’)查看状态

version查看HBase版本

whoami查看使用者用户名

list查看现有数据表

create创建数据表(如create ’employee’, ‘professional’, ‘personal’可创建名的employee包含两个column family的数据表)

describe以json格式返回指定表的字段信息(如describe ’employee’)

enable/disable

drop删除表之前需先执行disable指令

put添加或更新数据,如put ’employee’, ‘alan’, ‘professional:telno’, ‘123456789’

get接表名和行名查看数据,如get ’employee’, ‘alan’,甚至还可以加其它过滤,如列名:get ’employee’, ‘alan’, {COLUMNS => ‘professional:telno’}

scan查看数据,如scan ’employee’,显示所添加过的数据

HBase Shell中执行Scan命令

scan命令还可加入参数如scan ’employee’, {VERSIONS => 3}同时显示历史数据,version的数量和我们在执行describe命令时看到的VERSIONS有关

其它

查看namenode是否开启了safe mode

hdfs dfsadmin -safemode get

很多错误会由于selinux未关闭,可通过getenforce进行查看,具体配置在以下文件中:

/etc/selinux/config

【大数据基础】Hadoop集群环境伪分布式配置

本文使用环境为在VirtualBox上安装的CentOS虚拟机。这个安装部分比较简单,不再赘述,对这块不太熟悉的话可以参考【大数据基础】VirtualBox安装CentOS实操,考虑到生产环境多采用64位,本文中也使用64位的系统进行安装。

一、准备工作

在进入前需先做好网络配置,这部分在【大数据基础】VirtualBox安装CentOS实操中也做了介绍。接着需要做的是关闭防火墙,直接输入service iptables stop即可关闭防火墙,但这在重启后就会失效,要设置开机关闭防火墙请在命令行中输入chkconfig iptables off。
chkconfig iptables –list可以查看防火墙开机关闭状态,service iptables status可查看当前防火墙状态。
Linux iptables关闭方法

输入useradd hadoop添加用户hadoop,passwd hadoop两次输入密码来设置hadoop用户密码

Linux添加用户hadoop

二、安装JDK

安装方法一

可以去Oracle官网下载JDK然后上传到虚拟机上,对于可以上网的机器也可以直接通过wget命令下载到服务器上(未安装wget在命令行运行yum install wget -y来进行安装)。

然后为方便管理在/usr目录下创建一个java目录(),将所下载的JDK包直接解到到/usr/java目录

wget http://download.oracle.com/otn-pub/java/jdk/8u66-b17/jdk-8u66-linux-x64.tar.gz
mkdir /usr/java
tar -xzvf jdk-8u66-linux-x64.tar.gz -C /usr/java/

安装方法二

除了通过tar包安装外还可以下载rpm包来完成安装,方法相似

wget http://download.oracle.com/otn-pub/java/jdk/8u66-b17/jdk-8u66-linux-x64.rpm
rpm -ivh jdk-8u66-linux-x64.rpm

配置环境变量

要方便地使用Java就必须要配置环境变量,我们在/etc/profile文件的最后添加如下配置

export JAVA_HOME=/usr/java/jdk1.8.0_66
export PATH=$JAVA_HOME/bin:$PATH

然后输入source /etc/profile在应用刚刚设置的配置,此时在命令行中输入echo $PATH就会发现/usr/java/jdk1.8.0_66/bin已经被添加到了环境变量中,可以在命令行中输入java -version查看版本号来进行验证。

三、安装Hadoop

我们将使用前面创建的hadoop用户来安装Hadoop,执行su – hadoop切换到hadoop用户,然后上传Hadoop安装包或在虚拟机上直接下载Hadoop安装包,然后将安装包解压到hadoop用户的根目录下(/home/hadoop)

root@hadoop01 ~]# su - hadoop
[hadoop@hadoop01 ~]$ wget http://apache.opencas.org/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz
tar -xzvf hadoop-2.6.0.tar.gz 

免登录配置

为方便Hadoop在本地的使用乃至今后管理Hadoop集群,我们会生成一对密钥来实现免登录。在命令行键入ssh-keygen -t rsa并连续4次回车生成密钥(其中的rsa代表加密类型),其中id_rsa文件为私钥,id_rsa.pub文件为公钥(两个文件都在用户根目录的.ssh目录下)。

免登录生成公钥和私钥

实现免登录的原理实际上就是把公钥内容添加到所需免密码登录的主机的authorized_keys文件中,可以使用cat命令也可以使用专用的”ssh-copy-id -i 主机名或ip”来进行配置。当前我们采用伪分布式配置Hadoop,所以配置在本机上

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#上面的命令也可以使用ssh-copy-id -i localhost
chmod 0600 ~/.ssh/authorized_keys

此时发现已由之前ssh localhost需要输入密码变为免密码登录了(第一次登录需要输入设置为安全主机)
免密码登录本机

Hadoop配置文件

光解压Hadoop压缩包还未完成Hadoop的安装,需要修改的主要有以下5个配置文件,这几个文件都在hadoop安装包的etc/hadoop/目录下

cd hadoop-2.6.0/etc/hadoop/

1.hadoop-env.sh

在本文件中主要设置JAVA_HOME,将文件中export JAVA_HOME=${JAVA_HOME}部分的${JAVA_HOME}修改为Java的安装目录(/usr/java/jdk1.8.0_66)

export JAVA_HOME=/usr/java/jdk1.8.0_66

2.core-site.xml
在这个文件中主要配置NameNode的通信地址(fs.defaultFS)和hadoop运行时产生文件的存储路径(hadoop.tmp.dir)

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://hadoop01:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/hadoop/hadoop-2.6.0/tmp</value>
        </property>
</configuration>

3.hdfs-site.xml
在本文件中主要设置hdfs的副本数量,本例中我们搭建的是伪分布式,因而设置为1

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
</configuration>

4.mapred-site.xml
默认是没有这个文件的,但有一个模板文件mapred-site.xml.template,可执行mv mapred-site.xml.template mapred-site.xml。该文件中的配置用于通知框架MapReduce使用的YARN资源管理器

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>

5.yarn-site.xml
该文件中设置Reducer取数据的方式,这里是mapreduce_shuffl

<configuration>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

这样我们就完成了Hadoop的配置,和Hadoop一样,为方便Hadoop命令的使用,也需要配置环境变量,可以在hadoop用户家目录的.bashrc或.bash_profile中进行配置,不过这里我们还是选择在/etc/profile中进行配置吧。这时需要执行exit切换回到root账号,将/etc/profile最后面的内容修改为:

export JAVA_HOME=/usr/java/jdk1.8.0_66
export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

同样为何配置生效source一下该文件。

应用Hadoop

初次使用Hadoop时需要对NameNode进行格式化,只需执行如下命令

hdfs namenode -format

如果出现xxx has been successfully formatted.说明格式化成功

namenode格式化成功

此时还会发现hadoop-2.6.0下出现了一个tmp文件夹,接着启动HDFS和YARN,执行

start-dfs.sh
start-yarn.sh

注:如果前面在环境变量部分配置hadoop下的sbin目录,请切换到sbin目录执行相关命令(cd hadoop-2.6.0/sbin/),此时可使用jps命令查看运行的进程:

 jps命令执行结果

其中的NameNode和DataNode属于HDFS,ResourceManager和NodeManager属于YARN

在浏览器中输入http://192.168.1.110:50070/查看HDFS界面来进行进一步验证

Hadoop在浏览器端查看

输入http://192.168.1.110:8088/可查看YARN的管理界面

Hadoop的YARN管理界面

测试上传文件到HDFS

在hadoop用的家目录下执行

hadoop fs -put hadoop-2.6.0.tar.gz hdfs://hadoop01:9000/test

可将本地的文件上传到hdfs上,在http://192.168.1.110:50070/页面中可查看上传是否成功,可以看到文件已成功上传(也可在命令行中输入hadoop fs -ls /来进行查看)

HDFS查看文件系统

所上传的文件可以通过如下命令进行下载

hadoop fs -get hdfs://hadoop01:9000/test ./test_download

测试MapReduce和YARN
首先切换到mapreduce目下查看其中的jar包

cd hadoop-2.6.0/share/hadoop/mapreduce/

接着我们创建一个words文件用于进行wordcount测试:
vi words
hello tom
hello jerry
hello kitty
hello world
hello tom
将文件上传到hdfs上

hadoop fs -put words hdfs://hadoop01:9000/words

可使用hadoop fs -ls /进行验证
执行运算,结果输出到HDFS的output文件中

hadoop jar hadoop-mapreduce-examples-2.6.0.jar wordcount hdfs://hadoop01:9000/words hdfs://hadoop01:9000/output

计算完成在浏览器端会发现有output有两个文件:_SUCCESS和part-r-00000,查看part-r-00000,内容为
hello 5
jerry 1
kitty 1
tom 2
world 1
这里按照字母顺序列出各个单词出现的次数。

注:如需使用主机名在浏览器中访问需要在本机的host文件中进行配置,Mac在/private/etc/hosts中配置,Windows在C:\WINDOWS\system32\drivers\etc\hosts中配置

四、安装HBase

1.首先下载并解压缩HBase文件

wget http://apache.opencas.org/hbase/stable/hbase-1.1.2-bin.tar.gz
tar -xzvf hbase-1.1.2-bin.tar.gz
mv hbase-1.1.2 hbase

2.然后修改两个配置文件:
a.hbase-env.sh设置JAVA路径

vi hbase/conf/hbase-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_66

b.hbase-site.xml

vi hbase/conf/hbase-site.xml
   <property>
      <name>hbase.rootdir</name>
      <value>hdfs://hadoop01:9000/hbase</value>
   </property>
   <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/home/hadoop/zookeeper</value>
   </property>
#伪分布式
   <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
   </property>

3.可将HBase的bin目录添加到.bash_profile中或者cd到hbase/bin目录下

启动hbase,执行hbase-start.sh,进入shell,执行hbase shell即可看到如下命令行窗口:

HBase Shell指令

此外在浏览器中输入http://hadoop01:16010/(如未绑定host可直接输入IP:http://192.168.1.110:16010/)也可验证HBase是否启动成功

HBase浏览器界面

五、安装Sqoop

1.首先下载并解压缩安装文件

wget http://apache.fayea.com/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
tar -xzvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop

2.配置sqoop-env.sh

cd sqoop/conf
mv sqoop-env-template.sh sqoop-env.sh
vi sqoop-env.sh
#修改对应内容如下
export HADOOP_COMMON_HOME=/home/hadoop/hadoop-2.6.0
export HADOOP_MAPRED_HOME=/home/hadoop/hadoop-2.6.0
export HBASE_HOME=/home/hadoop/hbase

3.安装mysql-connector-java

wget http://ftp.ntu.edu.tw/MySQL/Downloads/Connector-J/mysql-connector-java-5.1.36.tar.gz
tar -xzvf mysql-connector-java-5.1.36.tar.gz
mv mysql-connector-java-5.1.36/mysql-connector-java-5.1.36-bin.jar sqoop/lib/

4.测试连接MySQL并查看其中的数据库
cd 到sqoop/bin目录下或者把该目录添加到bash_profile等文件中,然后执行如下指令并输入数据库密码即可列出所有数据库名称

sqoop-list-databases --connect jdbc:mysql://localhost/ --username root -P

注:执行过程中可能会出现如下错误

Warning: /home/hadoop/sqoop/bin/../../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /home/hadoop/sqoop/bin/../../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.

并不会影响执行结果,可在sqoop/bin目录下的configure-sqoop文件中注释相应部分报错就会消失
通过Sqoop连接MySQL数据库

【大数据基础】VirtualBox安装CentOS实操

首先下载VirtualBox并安装,可在官网根据所使用的系统直接下载:https://www.virtualbox.org/wiki/Downloads。VirtualBox和一般的软件安装并没有什么差别,这里略过不提。

注:本文中使用Mac OS X系统进行操作,但文中的方法也同样适用Windows系统

安装完后打开VirtualBox,点击New添加虚拟机

VirtualBox管理界面

在弹出的窗口中填写名称方便查找并选择需安装的操作系统类型及版本,这里名称填入hadoop01,操作系统选择64位的Linux,完成点击Continue

主机名和操作系统配置

下一个页面为内存大小配置,此处用于配置所创建虚拟机所占用的内存大小,推荐大小为不小于512MB。可通过拖动滑块或直接输入来调整内存大小值,配置完成后点击Continue继续

VirtualBox虚拟机内存大小设置

下一个页面为硬盘配置页面,确定是否创建虚拟硬盘或使用已有的虚拟硬盘,我们选择Create a virtual hard disk now,点击Create进入下一步

VirtualBox配置硬盘

下一个页面选择创建的虚拟硬盘类型,默认为VDI,据说VMDK可跨平台在VMware中导入,这里我们选择VMDK格式,点击Continue进入下一步

VirtualBox选择虚拟硬盘类型

下一个页面用于如何为虚拟磁盘分配电脑的硬盘的资源,一般建议使用动态分配,这样不会占用过多的硬盘资源。点击Continue进入下一步

虚拟磁盘在电脑上的资源分配

此处选择虚拟磁盘保存位置以及可使用的硬盘资源大小。点击Create进入下一步完成VirtualBox上虚拟磁盘的配置

选择保存位置和大小

此时在VirtualBox主界面左侧就会出现刚刚创建的hadoop01,选中该虚拟机,点击Start

hadoop01虚拟机

进入的下一个页面需选择所下载CentOS的iso文件(可根据实际情况在以下地址中选择镜像下载地址:http://isoredirect.centos.org/centos/7/isos/x86_64/),点击Start开启操作系统的安装流程

CentOS操作系统文件选择

接下来进入的是CentOS安装的欢迎界面,选择Install or upgrade an existing system并按下Enter/Return键

CentOS安装欢迎界面

下一个页面为设备检测,可使用Tab键切换到Skip并按下Enter/Return键跳过该步骤

CentOS安装Media Test

紧接着进入欢迎页面和安装向导中使用的语言,选择后点击Next或直接按下Enter/Return键进入下一步(注:如果点击后发现鼠标无法退出虚拟机界面,按下左侧的Command键即可)

CentOS欢迎界面

安装界面语言选择

接下来的页面选择存储设备,一般选择默认的Basic Storage Devices,点击Next或直接按下Enter/Return键进入下一步

存储设备选择

接下来警告是否保存原虚拟磁盘的数据,由于我们是初次安装,可以选择Yes, discard any data,点击按钮或直接按下Enter/Return键进入下一步

是否保留原数据警告

接下来进入主机名和网络配置页面,主机名是指在局域网中显示的名称,这里我们使用hadoop01。在该页面点击Configure Network还可以进行网络配置,为便于对配置文件的了解我们将在安装完成后进行相关配置,点击Next按钮进入下一步

主机名和网络配置

紧接着进入的是时区配置页面,可根据需求进行选择或保持默认,这里我们选择北京时间Asia/Shanghai,点击Next按钮进入下一步

时区配置页面

接下来进入root用户的密码的设置页面,root用户在Linux中拥有最高权限,这个密码相当重要,务必记牢,点击Next按钮进入下一步

Root密码设置页面

下一个页面选择安装类型,我们采用默认的Replace Existing Linux System(s),点击Next或直接按下Enter/Return键进入下一步

覆盖当前Linux系统

此时会弹出一个窗口确认是否写入(Write changes to disk),点击Next或直接按下Enter/Return键进入下一步

确认写入磁盘

紧接着进入到安装进度页面

CentOS安装进程

安装完成进入如下页面,点击Reboot进行重启

CentOS安装重启页面

然后进入的是命令行页面,输入用户名(root)和密码完成登录

CentOS命令行登录页面

此时在主界面中点击Settings>Network,然后配置网卡适配器为Bridged Adapter,如无需上网,可选择Host-only Adapter,Alan使用的是Mac采用无线上网,这里选择en0: Wi-Fi(Airport)

VirtualBox下安装CentOS网络设置
在命令行界面输入vi /etc/sysconfig/network-scripts/ifcfg-eth0进行编辑,主要修改和配置的内容如下:


	BOOTPROTO="static" #动态获取IP值使用dhcp
	ONBOOT="yes"
	IPADDR="192.168.1.110" #根据实际网段和所需配置IP为定
	NETMASK="255.255.255.0" 
	GATEWAY="192.168.1.1" #根据实际网段而定
	DNS1=8.8.8.8 #DNS可不进行配置
	DNS2=8.8.4.4

vi /etc/hosts配置机名和IP映射

192.168.1.110  hadoop01

修改完成后输入service network restart更改生效

很多时候直接在虚拟机上操作不太方便,Mac上可使用Terminal进行连接,Windows上则可使用SecureCRT等工具进行连接。以Terminal为例,直接输入ssh root@192.168.1.110,第一登录需输入入yes添加为安全主机,然后输入root密码即可完成登录:

通过Terminal连接虚拟主机

其它相关文件:

/etc/sysconfig/network配置主机名

/etc/resolv.conf配置域名解析服务器地址

常见问题

Device eth0 does not seem to be present…报错

这种报错常见于在VirtualBox或VMware上克隆虚拟机时,在配置完成后输入service network restart重启时所出现的网络错误,解决的方法是打开/etc/udev/rules.d/70-persistent-net.rules文件,找到如下内容,记下eth1的MAC地址(本例中为08:00:27:19:10:77)

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:19:10:77", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

然后再打开 /etc/sysconfig/network-scripts/ifcfg-eth0 文件编辑,设置HWADDR后的值为刚刚记录下的MAC地址,并设置DEVICE=eth1再重启网络即可