当前位置:   article > 正文

菜鸟配置hadoop集群模式_集群进入hadoop模式

集群进入hadoop模式

前言

这个本来是本人的云计算应用的课程作业,好吧!我承认我倒腾了半天,不过还是捣腾出来了,特此记之,方便后人。

环境配置

1.hadoop配置
首先安装虚拟机VMware Workstation Pro,然后安装镜像Ubuntu 14.04.3 LTS,系统安装完毕手动安装VMware Tools工具。
(1).首先更新软件包,执行命令:

sudo apt-get update
  • 1

在这里插入图片描述
(2).配置jdk,首先从本机桌面拖拽到虚拟机桌面;执行命令:

sudo mkdir /usr/lib/jvm  # 新建文件夹
sudo tar zxvf /home/ubuntu/Desktop/jdk-7-linux-i586.tar.gz  -C/usr/lib/jvm # 解压文件
  • 1
  • 2

在这里插入图片描述

(3).进入配置文件,更改配置环境:

sudo gedit /etc/profile
  • 1

在文件最后添加如下代码,注意路径按照自己的:

export JAVA_HOME=/usr/lib/jvm/jdk1.7.0
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
  • 1
  • 2
  • 3
  • 4

(4).重启系统,使配置文件生效:

sudo shutdown -r now
  • 1

(5).查看是否安装配置成功:

java -version
  • 1

在这里插入图片描述

(6).复制hadoop-0.22.0.tar.gz文件到桌面,然后解压到指定路径下:

sudo tar zxvf /home/ubuntu/Desktop/hadoop-0.22.0.tar.gz -C/home/ubuntu # 解压
mv /home/ubuntu/hadoop-0.22.0 /home/ubuntu/Hadoop # 重命名文件
  • 1
  • 2

(7).打开hadoop目录下面的conf文件夹,更改环境变量:

sudo gedit /home/ubuntu/Hadoop/conf/hadoop-env.sh
  • 1

#export JAVA_HOME=/usr/lib/jvm/java-7-sun改为export JAVA_HOME=/usr/lib/jvm/jdk1.7.0,如下:
在这里插入图片描述
(8).配置ssh,命令如下:

sudo apt-get install ssh
  • 1

在这里插入图片描述
sudo apt-get install rsync

单机模式操作

  1. 实验介绍
    在一台虚拟机上配置hadoop的环境,最终运行hadoop的测试文件。
  2. 实验过程
    首先进入之前的hadoop的安装目录,然后输入如下命令:
mkdir input
cp conf/*.xml input
bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
  • 1
  • 2
  • 3

在这里插入图片描述

  1. 实验结果
    查看实验结果,执行如下命令:
cat output/*
  • 1

在这里插入图片描述

伪分布模式操作

(1).更改conf目录下的配置文件。
conf/core-site.xml文件
添加如下代码:

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

文件内容如下图所示:
在这里插入图片描述
conf/hdfs-site.xml文件
添加如下代码:

<configuration>
     <property>
            <name>dfs.replication</name>
        <value>1</value>
     </property>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

文件内容如下图所示:

conf/mapred-site.xml文件
添加如下代码:

<configuration>
      <property>
           <name>mapred.job.tracker</name> 
       <value>localhost:9001</value>
      </property>
</configuration> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

文件内容如下图所示:
在这里插入图片描述
(2).查看是否能够免密登录。
在这里插入图片描述

ssh localhost
  • 1

如果提示需要输入密码,则执行如下命令:

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
  • 1
  • 2

(3).格式化一个新的分布式文件系统:

bin/hadoop namenode -format
  • 1

在这里插入图片描述

(4).启动hadoop守护进程:

bin/start-all.sh
  • 1

在这里插入图片描述

(5).将输入文件拷贝到分布式文件系统,并运行实例程序:

bin/hadoop fs -put conf input
bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
  • 1
  • 2

在这里插入图片描述

(6).查看输出文件:
方式一:从分布式系统拷贝到本地进行查看:

bin/hadoop fs -get output output
cat output/*
  • 1
  • 2

在这里插入图片描述

方式二:在分布式文件系统上查看输出文件:

bin/hadoop fs -cat output/*
  • 1

在这里插入图片描述

(7).web页面查看管理界面。
hdfs管理界面查看:(http://localhost:50070)
在这里插入图片描述
Reduce Administrationg管理界面查看:(http://localhost:50030)
在这里插入图片描述
(8).完成全部操作后,停止守护进程。

bin/stop-all.sh
  • 1

集群模式操作

前提:集群在原有的单击模式下进行修改,复制虚拟机并新建若干个虚拟机(此处为2个),配置好jdk环境并添加环境变量,安装ssh并实现自身的免密登录,教程见上。
(1).更改每台虚拟机的主机名,此处我们设置主节点为master,子节点分别为slave1,slave2,之后依次类推。主节点命令如下:

sudo gedit /etc/hostname
  • 1

在这里插入图片描述

(2).更改主机名后,为每台虚拟机分别设置hosts映射;并注释127.0.1.1 ubuntu,具体配置依照自身情况进行设置。个人配置如下,执行命令并进行修改:

sudo gedit /etc/hosts
  • 1

在这里插入图片描述

(3).配置hosts文件后,每台虚拟机都进行重新操作,保证配置文件生效。重启后交叉测试ping,保证每台虚拟机都能够相互连通,此处测试其一,ping后Ctrl+C进行取消:

ping slave1
  • 1

在这里插入图片描述

(4).为主节点进入子节点设置免密登录。
在每个子节点中分别执行如下命令(注意“ubuntu@master”是指主节点的“用户名@主机名”,可以直接在Terminal前面看到):

cd ~/.ssh 
ls
scp ubuntu@master:~/.ssh/id_dsa.pub ./master_dsa.pub # 上传命令
  • 1
  • 2
  • 3

由于我之前进行了配置,默认需要进行确定并输入密码进行验证,此处省略。
在这里插入图片描述
(5).配置后,在主节点上测试是否能远程免密连接所有子节点,此处测试其一。若命令行之前的标识发生改变则进入成功,注意操作完需要exit进行退出操作。

ssh slave1 # 远程连接
yes # 确定
exit # 退出子节点
  • 1
  • 2
  • 3

在这里插入图片描述

(6).添加hadoop的环境变量,按自身的条件进行设置,然后source使配置文件生效。

sudo gedit /etc/profile # 修改文件
source /etc/profile
  • 1
  • 2

在这里插入图片描述

(7).查看配置文件是否成效。

hadoop version
  • 1

在这里插入图片描述

(8).配置hadoop集群配置文件。
core-site.xml文件
在这里插入图片描述
hdfs-site.xml文件

在这里插入图片描述

mapred-site.xml文件
需要注意的是此处的IP为主节点的IP地址。
在这里插入图片描述
hadoop-en.sh文件
在这里插入图片描述
masters文件
主节点的IP地址。
在这里插入图片描述
slaves文件
子节点的IP地址。
在这里插入图片描述
(9).向各节点复制配置好的hadoop目录,使其配置一致。注意此处的本地路径和上传路径。每个子节点都需要上传。

scp -r ./hadoop slave1:~
scp -r ./Hadoop slace2:~
  • 1
  • 2

(10).格式化一个新的分布式文件系统:

bin/hadoop namenode -format
  • 1

(11).启动hadoop守护进程:

bin/start-all.sh
  • 1

(12).使用jps命令查看集群是否正常运行:
主节点应该为4个进程:
在这里插入图片描述
子节点应该为3个进程(每个节点都需要查看):

实验介绍

输入两个文件,一个代表工厂表,包含工厂名列和地址编号列;另一个代表地址表,包含地址名列和地址编号列。要求从输入数据中找出工厂名和地址名的对应关系,输出“工厂名——地址名”表,按工厂名排序输出。数据文件自己设计样例。

实验过程

(1).按要求编写Relevance.java文件,放在主节点的/home/ubuntu/achieve目录下, 测试文件address和factory文件放在achieve目录下的input文件夹下,代码见第六部分。
address文件
在这里插入图片描述

addressID    addressname
1    Beijing
2    Guangzhou
3    Shenzhen
4    Xian
5    Wuhan
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

factory文件

factoryname    addressed
Beijing Red Star    1
Shenzhen Thunder    3
Guangzhou Honda    2
Huasheng Henghui    4
Beijing Rising    1
Micro pie Technology     5
Xian San yi     4
Guangzhou Development Bank    2
Tencent    3
Back of Beijing    1
douyu TV    5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

(2).编译Relevance.java程序。执行命令为:

javac -classpath /home/ubuntu//hadoop/hadoop-0.20.2-core.jar Relevance.java -d /home/ubuntu/achieve
  • 1

(3).将class文件打包成jar包。

jar cvf Relevance.jar *.class
  • 1

(4).上传测试文件进入hdfs中。

hadoop fs -put input/ /user/ubuntu/input
  • 1

(5).运行程序,会显示job运行时的一些信息。

hadoop jar Relevance.jar Relevance
  • 1

(6).查看运行结果。

hadoop fs -cat output/*
  • 1

(7).关于hadoop守护进程。

stop-all.sh
  • 1

实验源码

import java.io.IOException;
import java.util.*;

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;
import org.apache.hadoop.util.GenericOptionsParser;

public class Relevance {
	public static int time = 0;
	public static class Map extends Mapper<Object, Text, Text, Text> {
		public void map(Object key, Text value, Context context)
			throws IOException, InterruptedException {
		String line = value.toString();
		String relationtype = new String();
	if(line.contains("factoryname")||line.contains("addressed")) {
			return;
		} 
		StringTokenizer itr = new StringTokenizer(line);
		String mapkey = new String();
		String mapvalue = new String();
		int i = 0;
		while (itr.hasMoreTokens()) {
		String token = itr.nextToken();
		if (token.charAt(0) >= '0' && token.charAt(0) <= '9') {
			mapkey = token;
			if (i > 0) {
				relationtype = "1";
			} else {
				relationtype = "2";
			} 
			continue;
		} 
			mapvalue += token + " ";
			i++;
		} 
		context.write(new Text(mapkey), new Text(relationtype + "+"+ mapvalue));
		}
	}

	public static class Reduce extends Reducer<Text, Text, Text, Text> {
		public void reduce(Text key, Iterable<Text> values, Context context)
		throws IOException, InterruptedException {
			if (time == 0) {
				context.write(new Text("factoryname"), new Text("addressname"));
				time++;
			}
			int factorynum = 0;
			String[] factory = new String[10];
			int addressnum = 0;
			String[] address = new String[10];
			Iterator ite = values.iterator();
			while (ite.hasNext()) {
				String record = ite.next().toString();
				int len = record.length();
				int i = 2;
				if (len == 0) {
					continue;
				} 
				char relationtype = record.charAt(0);
				if (relationtype == '1') {
				factory[factorynum] = record.substring(i);
				factorynum++;
				} 
				if (relationtype == '2') {
				address[addressnum] = record.substring(i);
				addressnum++;
				}
			}
			if (factorynum != 0 && addressnum != 0) {
				for (int m = 0; m < factorynum; m++) {
					for (int n = 0; n < addressnum; n++) {
					context.write(new Text(factory[m]),
						new Text(address[n]));
					}
				}
			}
		}
	} 

	public static void main(String[] args) throws Exception {
		Configuration conf = new Configuration();
		conf.set("mapred.job.tracker", "192.168.177.128:9001");
		Job job = new Job(conf, "Multiple Table Join");
		job.setJarByClass(MTjoin.class);
		job.setMapperClass(Map.class);
		job.setReducerClass(Reduce.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(Text.class);
		FileInputFormat.addInputPath(job,new Path("/user/ubuntu/input"));
		FileOutputFormat.setOutputPath(job,new Path("/user/ubuntu/output"));
		System.exit(job.waitForCompletion(true) ? 0 : 1);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100

后记

还不睡觉,真的等着猝死啊,虽然还有很多事情没做,不管了,先美美的睡一觉!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/776577
推荐阅读
相关标签
  

闽ICP备14008679号