一、软件版本

Hadoop版本号:hadoop-2.6.0.tar;

VMWare版本号:VMware-workstation-full-11.0.0-2305329

Ubuntu版本号:ubuntu-14.04.1-desktop-i386 其他版本也可

Jdk版本号:jdk-6u45-linux-i586.bin

后三项对版本要求不严格,如果使用Hbase1.0.0版本,需要JDK1.8以上版本。

二、安装教程

1、VMWare安装教程

VMWare虚拟机是个软件,安装后可用来创建虚拟机,在虚拟机上再安装系统,在这个虚拟系统上再安装应用软件,所有应用就像操作一台真正的电脑,

请直接到VMWare官方网站下载相关软件

http://www.vmware.com/cn/products/workstation/workstation-evaluation

以上链接如果因为官方网站变动发生变化,可以直接在搜索引擎中搜索VMWare来查找其下载地址,建议不要在非官方网站下载。

安装试用版后有30天的试用期。

2、Ubuntu安装教程

打开VMWare点击创建新的虚拟机

选择典型

点击浏览

选择ubuntu

暂时只建两个虚拟机,注意分别给两个虚拟机起名为Ubuntu1和Ubuntu2;也可以按照自己的习惯取名,但是后续的许多配置文件要相应更改,会带来一些麻烦。

密码也请记牢,后面会经常使用。

3、安装VMWare-Tools

Ubuntu中会显示有光盘插入了光驱

双击打开光盘将光盘中VMwareTools-9.6.1-1378637.tar.gz复制到桌面,复制方法类似windows系统操作。

点击Extract Here

从菜单打开Ubuntu的控制终端

cd Desktop/vmware-tools-distrib/

sudo ./vmware-install.pl

输入root密码,一路回车,重启系统

注意: ubuntu安装后,
root 用户默认是被锁定了的,不允许登录,也不允许“ su”
到 root 。

允许 su 到
root

非常简单,下面是设置的方法:

注意:ubuntu安装后要更新软件源:

cd /etc/apt

sudo apt-get update

安装各种软件比较方便

4、用户创建

创建hadoop用户组:
sudo addgroup hadoop

创建hduser用户:sudo
adduser -ingroup hadoop hduser

注意这里为hduser用户设置同主用户相同的密码

为hadoop用户添加权限:sudo
gedit /etc/sudoers,在root ALL=(ALL) ALL下添加

hduser ALL=(ALL) ALL。

设置好后重启机器:sudo reboot

切换到hduser用户登录;

5、主机配置

Hadoop集群中包括2个节点:1个Master,2个Salve,其中虚拟机Ubuntu1既做Master,也做Slave;虚拟机Ubuntu2只做Slave。

配置hostname:Ubuntu下修改机器名称:
sudo gedit /etc/hostname ,改为Ubuntu1;修改成功后用重启命令:hostname,查看当前主机名是否设置成功;

此时可以用虚拟机克隆的方式再复制一个。(先关机 vmware 菜单--虚拟机-管理--克隆)

注意:修改克隆的主机名为Ubuntu2。

配置hosts文件:查看Ubuntu1和Ubuntu2的ip:ifconfig;

打开hosts文件:sudo
gedit /etc/hosts,添加如下内容:

192.168.xxx.xxx Ubuntu1

192.168.xxx.xxx Ubuntu2

注意这里的ip地址需要学员根据自己的电脑的ip设置。

在Ubuntu1上执行命令:ping
Ubuntu2,若能ping通,则说明执行正确。

6、SSH无密码验证配置

安装ssh服务器,默认安装了ssh客户端:sudo
apt-get install openssh-server;

在Ubuntu1上生成公钥和秘钥:ssh-keygen
-t rsa -P "" ;

查看路径
/home/hduser/.ssh文件里是否有id_rsa和id_rsa.pub;
   将公钥赋给authorized_keys:cat
$HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys;

无密码登录:ssh
localhost;

无密码登陆到Ubuntu2,在Ubuntu1上执行:ssh-copy-id
Ubuntu2,查看Ubuntu2的/home/hduser/.ssh文件里是否有authorized_keys;

在Ubuntu1上执行命令:ssh
Ubuntu2,首次登陆需要输入密码,再次登陆则无需密码;

若要使Ubuntu2无密码登录Ubuntu1,则在Ubutu2上执行上述相同操作即可。

注:若无密码登录设置不成功,则很有可能是文件夹/文件权限问题,修改文件夹/文件权限即可。sudo
chmod 777 “文件夹” 即可。

7、Java环境配置

获取opt文件夹权限:sudo chmod 777 /opt

将java压缩包放在/opt/,root模式执行sudo
./jdk-6u45-linux-i586.bin

配置jdk的环境变量:sudo gedit
/etc/profile,将一下内容复制进去并保存

# java

export
JAVA_HOME=/opt/jdk1.6.0_45

export JRE_HOME=$JAVA_HOME/jre

export
CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

执行命令,使配置生效:source
/etc/profile;

执行命令:java
-version,若出现java版本号,则说明安装成功。

8、hadoop集群安装

8.1 安装

将hadoop压缩包hadoop-2.6.0.tar.gz放在/home/hduser目录下,并解压缩到本地,重命名为hadoop;配置hadoop环境变量,执行:sudo
gedit /etc/profile,将以下复制到profile内:

#hadoop

export
HADOOP_HOME=/home/hduser/hadoop

export
PATH=$HADOOP_HOME/bin:$PATH

执行:source /etc/profile

注意:Ubuntu1、ubuntu2都要配置以上步骤;

8.2 配置

主要涉及的配置文件有7个:都在/hadoop/etc/hadoop文件夹下,可以用gedit命令对其进行编辑。

1进去hadoop配置文件目录

cd 
/home/hduser/hadoop/etc/hadoop/

2配置 hadoop-env.sh文件-->修改JAVA_HOME

gedit hadoop-env.sh

添加如下内容

# The java implementation to use.

export JAVA_HOME=/opt/jdk1.6.0_45

3配置 yarn-env.sh 文件-->>修改JAVA_HOME

添加如下内容

# some Java parameters

export
JAVA_HOME=/opt/jdk1.6.0_45

4配置slaves文件-->>增加slave节点 

(删除原来的localhost)

添加如下内容

Ubuntu1

Ubuntu2

5配置 core-site.xml文件-->>增加hadoop核心配置

(hdfs文件端口是9000、file:/home/hduser/hadoop/tmp)

添加如下内容

<configuration>
 <property>
  <name>fs.defaultFS</name>
  <value>hdfs://Ubuntu1:9000</value>
 </property>

<property>
  <name>io.file.buffer.size</name>
  <value>131072</value>
 </property>
 <property>
  <name>hadoop.tmp.dir</name>
  <value>file:/home/hduser/hadoop/tmp</value>
  <description>Abasefor other temporary
directories.</description>
 </property>

<property>

<name>hadoop.native.lib</name>
  <value>true</value>
  <description>Should native hadoop libraries, if present, be
used.</description>
</property>

</configuration>

6配置  hdfs-site.xml 文件-->>增加hdfs配置信息

(namenode、datanode端口和目录位置)

<configuration>
 <property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>Ubuntu1:9001</value>
 </property>

<property>
   <name>dfs.namenode.name.dir</name>
   <value>file:/home/hduser/hadoop/dfs/name</value>
 </property>

<property>
  <name>dfs.datanode.data.dir</name>
  <value> file:/home/hduser/hadoop/dfs/data</value>
  </property>

<property>
  <name>dfs.replication</name>
  <value>2</value>
 </property>

<property>
  <name>dfs.webhdfs.enabled</name>
  <value>true</value>
 </property>
</configuration>

7配置 mapred-site.xml 文件-->>增加mapreduce配置

(使用yarn框架、jobhistory使用地址以及web地址)

<configuration>
  <property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value>
 </property>
 <property>
  <name>mapreduce.jobhistory.address</name>
  <value>Ubuntu1:10020</value>
 </property>
 <property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value> Ubuntu1:19888</value>
 </property>
</configuration>

8)配置  yarn-site.xml 文件-->>增加yarn功能

<configuration>
  <property>
   <name>yarn.nodemanager.aux-services</name>
   <value>mapreduce_shuffle</value>
  </property>
  <property>
 
 <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
   <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <property>
   <name>yarn.resourcemanager.address</name>
   <value>Ubuntu1:8032</value>
  </property>
  <property>
   <name>yarn.resourcemanager.scheduler.address</name>
   <value>Ubuntu1:8030</value>
  </property>
  <property>
 
 <name>yarn.resourcemanager.resource-tracker.address</name>
   <value>Ubuntu1:8035</value>
  </property>
  <property>
   <name>yarn.resourcemanager.admin.address</name>
   <value>Ubuntu1:8033</value>
  </property>
  <property>
   <name>yarn.resourcemanager.webapp.address</name>
   <value>Ubuntu1:8088</value>
  </property>

</configuration>

9将配置好的Ubuntu1/hadoop/etc/hadoop文件夹复制到到Ubuntu2对应位置(删除Ubuntu2原来的文件夹/hadoop/etc/hadoop)

scp
-r /home/hduser/hadoop/etc/hadoop/
hduser@Ubuntu2:/home/hduser/hadoop/etc/

8.3 验证

下面验证Hadoop配置是否正确:

1格式化namenode:

hduser@Ubuntu1:~$ cd hadoop

hduser@Ubuntu1:~/hadoop$ ./bin/hdfs namenode -format

hduser@Ubuntu2:~$ cd hadoop

hduser@Ubuntu2:~/hadoop$ ./bin/hdfs namenode -format

2)启动hdfs:

hduser@Ubuntu1:~/hadoop$ ./sbin/start-dfs.sh

15/04/27
04:18:45 WARN util.NativeCodeLoader: Unable to load native-hadoop library for
your platform... using builtin-java classes where applicable

Starting
namenodes on [Ubuntu1]

Ubuntu1:
starting namenode, logging to
/home/hduser/hadoop/logs/hadoop-hduser-namenode-Ubuntu1.out

Ubuntu1:
starting datanode, logging to /home/hduser/hadoop/logs/hadoop-hduser-datanode-Ubuntu1.out

Ubuntu2:
starting datanode, logging to
/home/hduser/hadoop/logs/hadoop-hduser-datanode-Ubuntu2.out

Starting
secondary namenodes [Ubuntu1]

Ubuntu1:
starting secondarynamenode, logging to /home/hduser/hadoop/logs/hadoop-hduser-secondarynamenode-Ubuntu1.out

15/04/27
04:19:07 WARN util.NativeCodeLoader: Unable to load native-hadoop library for
your platform... using builtin-java classes where applicable

查看java进程(Java Virtual Machine Process Status Tool)

hduser@Ubuntu1:~/hadoop$ jps

8008 NameNode

8443 Jps

8158 DataNode

8314
SecondaryNameNode

3)停止hdfs:

hduser@Ubuntu1:~/hadoop$ ./sbin/stop-dfs.sh

Stopping
namenodes on [Ubuntu1]

Ubuntu1:
stopping namenode

Ubuntu1:
stopping datanode

Ubuntu2:
stopping datanode

Stopping
secondary namenodes [Ubuntu1]

Ubuntu1:
stopping secondarynamenode

查看java进程

hduser@Ubuntu1:~/hadoop$ jps

8850 Jps

4)启动yarn:

hduser@Ubuntu1:~/hadoop$ ./sbin/start-yarn.sh

starting yarn
daemons

starting
resourcemanager, logging to /home/hduser/hadoop/logs/yarn-hduser-resourcemanager-Ubuntu1.out

Ubuntu2:
starting nodemanager, logging to
/home/hduser/hadoop/logs/yarn-hduser-nodemanager-Ubuntu2.out

Ubuntu1:
starting nodemanager, logging to
/home/hduser/hadoop/logs/yarn-hduser-nodemanager-Ubuntu1.out

查看java进程

hduser@Ubuntu1:~/hadoop$
jps

8911
ResourceManager

9247 Jps

9034
NodeManager

5)停止yarn:

hduser@Ubuntu1:~/hadoop$  ./sbin/stop-yarn.sh

stopping yarn
daemons

stopping
resourcemanager

Ubuntu1:
stopping nodemanager

Ubuntu2:
stopping nodemanager

no
proxyserver to stop

查看java进程

hduser@Ubuntu1:~/hadoop$
jps

9542 Jps

6)查看集群状态:

首先启动集群:./sbin/start-dfs.sh

hduser@Ubuntu1:~/hadoop$
./bin/hdfs dfsadmin -report

Configured
Capacity: 39891361792 (37.15 GB)

Present
Capacity: 28707627008 (26.74 GB)

DFS Remaining:
28707569664 (26.74 GB)

DFS Used: 57344
(56 KB)

DFS Used%: 0.00%

Under replicated
blocks: 0

Blocks with
corrupt replicas: 0

Missing blocks:
0

-------------------------------------------------

Live datanodes
(2):

Name:
192.168.159.132:50010 (Ubuntu2)

Hostname:
Ubuntu2

Decommission
Status : Normal

Configured
Capacity: 19945680896 (18.58 GB)

DFS Used: 28672
(28 KB)

Non DFS Used:
5575745536 (5.19 GB)

DFS Remaining:
14369906688 (13.38 GB)

DFS Used%: 0.00%

DFS Remaining%:
72.05%

Configured Cache
Capacity: 0 (0 B)

Cache Used: 0 (0
B)

Cache Remaining:
0 (0 B)

Cache Used%:
100.00%

Cache
Remaining%: 0.00%

Xceivers: 1

Last contact:
Mon Apr 27 04:26:09 PDT 2015

Name:
192.168.159.131:50010 (Ubuntu1)

Hostname:
Ubuntu1

Decommission
Status : Normal

Configured
Capacity: 19945680896 (18.58 GB)

DFS Used: 28672
(28 KB)

Non DFS Used:
5607989248 (5.22 GB)

DFS Remaining:
14337662976 (13.35 GB)

DFS Used%: 0.00%

DFS Remaining%:
71.88%

Configured Cache
Capacity: 0 (0 B)

Cache Used: 0 (0
B)

Cache Remaining:
0 (0 B)

Cache Used%:
100.00%

Cache
Remaining%: 0.00%

Xceivers: 1

Last contact:
Mon Apr 27 04:26:08 PDT 2015

7)查看hdfshttp://Ubuntu1:50070/

三、运行wordcount程序

1)创建 file目录

hduser@Ubuntu1:~$ mkdir file

2)在file创建file1.txtfile2.txt并写内容(在图形界面)

分别填写如下内容

file1.txt输入内容:Hello world
hi HADOOP

file2.txt输入内容:Hello hadoop
hi CHINA

创建后查看:

hduser@Ubuntu1:~ /hadoop $ cat file/file1.txt

Hello world
hi HADOOP

hduser@Ubuntu1:~ /hadoop $ cat file/file2.txt

Hello hadoop
hi CHINA

3)在hdfs创建/input2目录

hduser@Ubuntu1:~/hadoop$ ./bin/hadoop fs -mkdir /input2

4)将file1.txtfile2.txt文件copyhdfs /input2目录

hduser@Ubuntu1:~/hadoop$ ./bin/hadoop fs -put file/file*.txt
/input2

5)查看hdfs上是否有file1.txtfile2.txt文件

hduser@Ubuntu1:~/hadoop$ bin/hadoop fs -ls /input2/

Found 2 items

-rw-r--r--   2 hduser supergroup         21 2015-04-27 05:54 /input2/file1.txt

-rw-r--r--   2 hduser supergroup         24 2015-04-27 05:54 /input2/file2.txt

6)执行wordcount程序

先启动hdfs和yarn

hduser@Ubuntu1:~/hadoop$ ./bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /input2/
/output2/wordcount1

15/04/27 05:57:17 WARN util.NativeCodeLoader: Unable to
load native-hadoop library for your platform... using builtin-java classes
where applicable

15/04/27 05:57:17 INFO client.RMProxy: Connecting to
ResourceManager at Ubuntu1/192.168.159.131:8032

15/04/27 05:57:19 INFO input.FileInputFormat: Total input
paths to process : 2

15/04/27 05:57:19 INFO mapreduce.JobSubmitter: number of
splits:2

15/04/27 05:57:19 INFO mapreduce.JobSubmitter: Submitting
tokens for job: job_1430138907536_0001

15/04/27 05:57:20 INFO impl.YarnClientImpl: Submitted
application application_1430138907536_0001

15/04/27 05:57:20 INFO mapreduce.Job: The url to track
the job: http://Ubuntu1:8088/proxy/application_1430138907536_0001/

15/04/27 05:57:20 INFO mapreduce.Job: Running job:
job_1430138907536_0001

15/04/27 05:57:32 INFO mapreduce.Job: Job
job_1430138907536_0001 running in uber mode : false

15/04/27 05:57:32 INFO mapreduce.Job:  map 0% reduce 0%

15/04/27 05:57:43 INFO mapreduce.Job:  map 100% reduce 0%

15/04/27 05:57:58 INFO mapreduce.Job:  map 100% reduce 100%

15/04/27 05:57:59 INFO mapreduce.Job: Job
job_1430138907536_0001 completed successfully

15/04/27 05:57:59 INFO mapreduce.Job: Counters: 49

File System
Counters

FILE:
Number of bytes read=84

FILE:
Number of bytes written=317849

FILE:
Number of read operations=0

FILE:
Number of large read operations=0

FILE:
Number of write operations=0

HDFS:
Number of bytes read=247

HDFS:
Number of bytes written=37

HDFS:
Number of read operations=9

HDFS:
Number of large read operations=0

HDFS:
Number of write operations=2

Job Counters

Launched
map tasks=2

Launched
reduce tasks=1

Data-local
map tasks=2

Total
time spent by all maps in occupied slots (ms)=16813

Total
time spent by all reduces in occupied slots (ms)=12443

Total
time spent by all map tasks (ms)=16813

Total
time spent by all reduce tasks (ms)=12443

Total
vcore-seconds taken by all map tasks=16813

Total
vcore-seconds taken by all reduce tasks=12443

Total
megabyte-seconds taken by all map tasks=17216512

Total
megabyte-seconds taken by all reduce tasks=12741632

Map-Reduce
Framework

Map
input records=2

Map
output records=8

Map
output bytes=75

Map
output materialized bytes=90

Input
split bytes=202

Combine
input records=8

Combine output records=7

Reduce
input groups=5

Reduce
shuffle bytes=90

Reduce
input records=7

Reduce
output records=5

Spilled
Records=14

Shuffled
Maps =2

Failed
Shuffles=0

Merged
Map outputs=2

GC
time elapsed (ms)=622

CPU
time spent (ms)=2000

Physical
memory (bytes) snapshot=390164480

Virtual
memory (bytes) snapshot=1179254784

Total
committed heap usage (bytes)=257892352

Shuffle
Errors

BAD_ID=0

CONNECTION=0

IO_ERROR=0

WRONG_LENGTH=0

WRONG_MAP=0

WRONG_REDUCE=0

File Input
Format Counters

Bytes
Read=45

File Output
Format Counters

Bytes
Written=37

7)查看运行结果

hduser@Ubuntu1:~/hadoop$ ./bin/hdfs dfs -cat
/output2/wordcount1/*

CHINA   1

Hello      2

hadoop    2

hi         2

world      1

——————————————

显示出以上结果,表明您已经成功安装了Hadoop!

Eclipse开发环境的建立

1,  需要下载eclipse

2,  需要插件,插件的终极解决方案是

https://github.com/winghc/hadoop2x-eclipse-plugin下载并编译。

也可用提供好的插件。

3,  复制编译好的jar到eclipse插件目录,重启eclipse

4,  配置
hadoop 安装目录

window ->preference ->
hadoop Map/Reduce -> Hadoop installation directory

5,      配置Map/Reduce 视图

window ->Open Perspective ->
other->Map/Reduce -> 点击“OK”

windows → show view →
other->Map/Reduce Locations-> 点击“OK”

6,在“Map/Reduce Locations”
Tab页
点击图标<大象+>或者在空白的地方右键,选择“New Hadoop location…”,弹出对话框“New hadoop location…”,

进行相应配置

MR Master和DFS Master配置必须和mapred-site.xml和core-site.xml等配置文件一致

7,打开Project Explorer,查看HDFS文件系统。

8,新建Map/Reduce任务

需要先启动Hadoop服务

File->New->project->Map/Reduce
Project->Next

编写WordCount类:

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.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 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 {

// Object
key, Text value就是输入的key和value, Context记录输入的key和value

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 {

//reduce函数与map函数基本相同,但value是一个迭代器的形式Iterable<IntWritable>
values,也就是说reduce的输入是一个key对应一组的值的value

int sum = 0;

for (IntWritable val : values)
{

sum += val.get();

}

result.set(sum);

context.write(key, result); //结果例如World, 2

}

}

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

Configuration conf = new
Configuration();

Job job = Job.getInstance(conf,
"word count");//指定job名称,及运行对象

job.setJarByClass(WordCount.class);       job.setMapperClass(TokenizerMapper.class); //指定map函数

job.setCombinerClass(IntSumReducer.class); // combiner整合

job.setReducerClass(IntSumReducer.class);//设定reduce函数

job.setOutputKeyClass(Text.class);//设定输出key数据类型

job.setOutputValueClass(IntWritable.class);//设定输出value数据类型

FileInputFormat.addInputPath(job,
new Path(args[0]));//设定输入目录

FileOutputFormat.setOutputPath(job, new Path(args[1]));

System.exit(job.waitForCompletion(true) ? 0 : 1);

}


音乐记录倒排索引

MapReduce程序开发

1、  我们的任务要求是:

有一批音乐播放记录清单,包含歌曲被播放的用户

tom                            LittleApple

jack                              YesterdayOnceMore

Rose                            MyHeartWillGoOn

jack                              LittleApple

John                             MyHeartWillGoOn

kissinger                     LittleApple

kissinger                     YesterdayOnceMore

2、  我们的任务输出结果是:

完成一个倒排索引形成的文本文件如下

LittleApple                         tom| jack| kissinger

YesterdayOnceMore                   jack|
kissinger

MyHeartWillGoOn             Rose|
John

3、  我们的算法思路是:

将源文件按照每行进行分割,在mapper 过程中以歌曲名(LittleApple)作为key,以用户名(Tom)作为value,在reducer过程中是相同个歌曲码汇总,输出为倒排索引。

tom                            LittleApple

jack                              YesterdayOnceMore

Rose                            MyHeartWillGoOn

Map函数对应的<key,value>是

<LittleApple, Tom>

< YesterdayOnceMore, Jack >

< MyHeartWillGoOn, Rose>

Reduce函数将歌曲汇总

输出是

LittleApple      tom

Jack

Kissinger

最终输出到HDFS为结果

LittleApple                         tom| jack| kissinger

YesterdayOnceMore                   jack|
kissinger

MyHeartWillGoOn             Rose|
John

4、  倒排索引源程序的注释:

import
java.io.IOException;

import
org.apache.hadoop.conf.Configuration;

import
org.apache.hadoop.conf.Configured;

import
org.apache.hadoop.fs.Path;

import
org.apache.hadoop.io.*;

import
org.apache.hadoop.mapreduce.*;

import
org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

import
org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import
org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

import
org.apache.hadoop.util.Tool;

import
org.apache.hadoop.util.ToolRunner;

public
class Test_1 extends Configured implements Tool

{

enum Counter

{

LINESKIP, // 出错的行

}

public static class Map extends
Mapper<LongWritable,Text,Text,Text>

{

public void map(LongWritable key, Text
value, Context context) throws IOException, InterruptedException

{

String
line = value.toString(); // 读取源数据,将其字符串化

try

{

// 数据处理

String[] lineSplit = line.split("
");

//将数据用空格进行分割,例如Tom  LittleApple

String anum = lineSplit[0]; //此处anum为Tom

String bnum = lineSplit[1]; //此处bnum为 LittleApple

context.write(new Text(bnum), new
Text(anum));

// 输出到context的键值对为<LittleApple ,tom>

}

catch
(java.lang.ArrayIndexOutOfBoundsException e)  
//出错保障

{

context.getCounter(Counter.LINESKIP).increment(1);

return;

}

}

}

public static class Reduce extends
Reducer<Text,Text,Text,Text>

{

public void reduce(Text key,
Iterable<Text> values, Context context) throws IOException,
InterruptedException

{

String valueString;

String out = "";

for (Text value : values)

{

valueString = value.toString();

out += valueString +
"|";  //将听同一歌曲用|分隔符隔开累加

//System.out.println("Ruduce:key="+key+"  value="+value);

}

context.write(key, new Text(out));

}

}

@Override

public int run(String[] args) throws
Exception

{

Configuration conf = this.getConf();

Job job = new Job(conf,
"Test_1"); // 任务名

job.setJarByClass(Test_1.class); // 指定Class

FileInputFormat.addInputPath(job, new
Path(args[0])); // 输入路径

FileOutputFormat.setOutputPath(job, new
Path(args[1])); // 输出路径

job.setMapperClass(Map.class); // 调用上面Map类作为Map任务代码

job.setReducerClass(Reduce.class); // 调用上面Reduce类作为Reduce任务代码

job.setOutputFormatClass(TextOutputFormat.class);

job.setOutputKeyClass(Text.class); // 指定输出的KEY的格式

job.setOutputValueClass(Text.class); // 指定输出的VALUE的格式

job.waitForCompletion(true);

return job.isSuccessful()?0:1;

}

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

{

// 运行任务

int res = ToolRunner.run(new
Configuration(), new Test_1(), args);

System.exit(res);

}

}

5、  注意设置输入输出的路径:

可以在eclipse上直接运行,也可打成jar包后运行。

Hadoop完全分布式安装的更多相关文章

  1. hadoop伪分布式安装之Linux环境准备

    Hadoop伪分布式安装之Linux环境准备 一.软件版本 VMare Workstation Pro 14 CentOS 7 32/64位 二.实现Linux服务器联网功能 网络适配器双击选择VMn ...

  2. 【Hadoop学习之三】Hadoop全分布式安装

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop3.1.1 全分布式就是集群,注意配置主机名. ...

  3. [大数据] hadoop全分布式安装

    一.准备工作 在伪分布式的搭建基础上修改配置,搭建全分布式hadoop环境,伪分布式安装参照 hadoop伪分布式安装. 首先准备4台虚拟机,信息如下: 192.168.1.11 namenode1 ...

  4. [hadoop] hadoop-all-in-one-伪分布式安装

    hadoop伪分布式-all-in-one安装 #查看hadoop 版本 [root@hadoop-allinone-200-123 bin]# pwd /wdcloud/app/hadoop-2.7 ...

  5. hadoop 完全分布式安装

    一个完全的hadoop分布式安装至少需要3个zookeeper,3个journalnode,3个datanode,2个namenode组成. 也就是说需要11个节点,但是我云主机有限,只有3个,所以把 ...

  6. Hadoop学习---Ubuntu中hadoop完全分布式安装教程

    软件版本 Hadoop版本号:hadoop-2.6.0-cdh5.7.0: VMWare版本号:VMware 9或10 Linux系统:CentOS 6.4-6.5 或Ubuntu版本号:ubuntu ...

  7. Hadoop伪分布式安装步骤(hadoop0.20.2版本)

    最近在学习hadoop,自己下了个视频教程,他的教学版本是hadoop0.20.2版本,现在的最新版本都到了3.0了,版本虽然有点老,但是还是学了一下,觉得有借鉴的价值. 不废话了,开始介绍: 先说一 ...

  8. apache hadoop 伪分布式安装

    1. 准备工作 1.1. 软件准备 1.安装VMWare 2.在VMWare上安装CentOS6.5 3.安装XShell5,用来远程登录系统 4.通过rpm -qa | grep ssh 检查cen ...

  9. Hadoop完全分布式安装教程

    一.软件版本 Hadoop版本号:hadoop-2.6.0.tar: VMWare版本号:VMware-workstation-full-11.0.0-2305329 Ubuntu版本号:ubuntu ...

随机推荐

  1. Matplotlib学习---用mplot3d画莫比乌斯环(Mobius strip)

    mplot3d是matplotlib里用于绘制3D图形的一个模块.关于mplot3d 绘图模块的介绍请见:https://blog.csdn.net/dahunihao/article/details ...

  2. 【Gym 100812C】Story of Princess (走完图所有边)

    BUPT2017 wintertraining(15) #7A 题意 给你一个图,n个点m条边,求走遍所有边,至少经过几次点,及输出依次经过的点.n and m (2 ≤ n ≤ 10^5, 1 ≤  ...

  3. Leetcode 27.移除元素 By Python

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  4. windows10配置virtualenv

    1.从官网下载pip:https://pypi.python.org/pypi/pip/,下载完成之后,解压到一个文件夹,用CMD控制台进入解压目录,输入:python setup.py instal ...

  5. base64加密图片处理

    场景:下载html中内嵌的base64加密图片 举个例子,博客园的插入图片有两种方式,一是引用图片链接,二是直接粘贴2进制图片文件.以第二种方式的图片则是以base64加密的方式内嵌在html页面中. ...

  6. mysql 单表卡死

    由于单表数据量过大导致的更新操作处于卡死状态,无法打开也无法修改. 此时需要命令行模式连接数据库,注意点:此处连接需要相同的账号 1. $ SHOW PROCESSLIST; 2. $ kill 37 ...

  7. php 写斐波那契数列

    <?php $arr = []; for($i=1;$i<9;$i++){ if($i==1 || $i ==2){ $arr[$i-1] = 1; }else{ $arr[$i-1] = ...

  8. wildfly access log 开启

    对于一个网站来说,访问日志,即access_log,是一项很重要的功能.利用它,我们可以统计出很多有用的信息,我们可以利用log来对整个网站的运行做有效的监控和分析,从而提升网站的性能. 在WildF ...

  9. 洛谷P1463 反素数

    经典题了,很难想到这TM是搜索...... 题意:求[1, n]中约数最多的数中最小的. 解:我们有约数个数定理. 所以考虑通过枚举每个质因数个数来直接计算出约数个数. 然后就可以搜索了. 注意:若p ...

  10. Minieye杯第十五届华中科技大学程序设计邀请赛网络赛 部分题目

    链接:https://pan.baidu.com/s/12gSzPHEgSNbT5Dl2QqDNpA 提取码:fw39 复制这段内容后打开百度网盘手机App,操作更方便哦 D    Grid #inc ...