hadoop1.2.1配置与运行子串统计程序

一、虚拟机版本

VirtualBox-4.3.30

二、操作系统

CentOS-6.7-x86_64-bin-DVD1.iso

下载地址1:http://www.centoscn.com/CentosSoft/iso/2015/0813/6001.html

三、安装两个Linux虚拟机

名字取名为hadoop1和hadoop2

具体步骤可以参考百度经验

只是注意细节在创建虚拟机时需要将内存大小修改1024MB,因为过低的内存将无法安装桌面系统,只能以命令行形式进行操作,并且建议不要选择安装最小桌面,选择第一个桌面,最小安装可能会缺少许多有用的程序,比如我最初安装一台是完全桌面hadoop1,另一台是最小桌面hadoop2,导致后面通过命令ssh hadoop1/2可以从hadoop1登陆到hadoop2,hadoop2无法登陆到hadoop1(但是ssh hadoop1的ip地址可以登陆),新建的hadoop3采用完全安装,则可以再hadoop1,3之间互相登陆。

说明:后面也是用hadoop1和hadoop3作为主从节点。虽然hadoop2事实上是可用的,但是自己的计算机无法流畅运行3个虚拟机。

另外一个“VirtualBox中安装CentOS-6.6虚拟机”参考地址1:

http://www.cnblogs.com/zhcncn/p/4071539.html

3.1安装增强功能

虚拟机安装好了之后,可以安装增强功能,不安装的话,虚拟机拉伸窗口不会改变虚拟机界面大小,也无法建立共享文件夹

这时安装增强功能会出现错误:

building the main Guest Additions module            [失败]

是因为缺少必要的包

需要在终端执行命令

终端可拖至桌面,还可设置快捷键  系统/键盘快捷键/桌面/运行终端 点击快捷键,按住ctrl+alt+T 就可以设置如ubantu的运行终端快捷键了。

# yum install make gcc gcc-c++ kernel kernel-devel

安装 gcc ,gcc-c++,kernel,kernel-devel,可能还需要kernel-headers

安装完毕后,再执行之前操作安装增强功能,如果执行过一次了,点击没有反应。可以先弹出光驱,再加载进来,就会提示是否运行其中的程序。

注意:可能还是会提示有如下错误

Building the OpenGL support module                         [失败]

可以不管,重新启动虚拟机,就会生效

3.2创建虚拟机网络

3.3配置共享文件夹

配置共享文件夹的作用:方便本机、虚拟机与虚拟机之间传递文件

各个虚拟机设置的共享路径最好是同一个,这样就有了一个共同可以访问的文件夹了。

现在回到虚拟机在文件系统 /mnt/ 目录下创建一个文件夹 shared(可以自取)

执行命令:sudo mount -t vboxsf computershare(共享文件夹名称) /mnt/shared

就挂载了共享文件夹。

不过每次启动虚拟机都需要执行此命令才会挂载共享文件夹。

四、配置虚拟机网络

网卡1  Eth0是nat转发如果计算机联网可以直接访问外网,但虚拟机间无法ping

网卡2 eth1 是桥接方式 连接上后虚拟机将处于同一个网段

可以相互ping通。但是我们不用动态分配ip我们手动设置ip。

右击网络图标,点击编辑连接

点击IPv4设置,方法设置为手动,添加地址并应用

Hadoop1可以设置为

10.0.1.101  255.255.255.0  10.0.1.0

另一台虚拟机hadoop3可以设置为

10.0.1.103  255.255.255.0  10.0.1.0

最后一步修改hosts

在 /etc/hosts 目录,修改如下:

同样的操作对于另一台虚拟机hadoop2的文件配置也是如此

五、配置SSH免密码登录

1、以root登录,在A机器上执行

ssh-keygen -t rsa

一路回车,不需要输入密码(随意)

执行该操作将在/root/.ssh下生成id_rsa, id_rsa.pub文件,其中id_rsa.pub是公钥。(可以自己设置路径和文件名,为了区别不同公钥可以设置为/root/.ssh/hadoop1_id_rsa)

2、在B机器上做步骤1或自行创建/home/user/.ssh文件夹,将id_rsa.pub拷贝到B机器上

scp id_rsa.pub B:~/.ssh/A.id_rsa.pub

3、将拷贝到B机器上的A.id_rsa.pub复制到authorized_keys文件中

cp  A.id_rsa.pub authorized_keys

或没有authorized_keys用

cat A.id_rsa.pub >> authorized_keys

若有多个主机要访问,使用>>添加到authorized_keys文件中

注意:要进入到相应文件cd .ssh(在查看中显示隐藏文件)

解释:

A将公钥发给B,不是说让B来访问A,而是A就可以访问B了。也就是说B在.ssh文件夹下的authorized_keys保留A的公钥,保存就是把自己让给别人来访问!

同样的操作将B的公钥发给A,这样B也可以访问A了。其实不必做这一步,以为我们之后是将A作为master ,B作为salve,只需要A可以免密码登陆B即可

六、安装jdk

我们使用离线安装jdk1.7,先下载jdk-7u79-linux-x64.gz,

官方地址:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk7-downloads-1880260.html

然后通过共享文件夹,传到虚拟机上,解压到/usr/jdk1.7/目录下,需要解压两次才可以。

想在线安装亦可以,百度相关资料有很多。

最后需要设置环境变量

在/etc/profile目录文件下最后增加如下内容

export JAVA_HOME=/usr/jdk1.7/jdk1.7.0_79

export HADOOP_HOME=/opt/hadoop-1.2.1

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

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

其中hadoop 是后面需要配置hadoop的环境变量而增加,为了方便,一次性加上避免重复修改。从机节点(datanode)不需要,即只要

export JAVA_HOME=/usr/jdk1.7/jdk1.7.0_79

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

Ps:从机加上hadoop_home,也无法执行hadoop命令(⊙﹏⊙)b

后面再介绍

最后为了使其生效,需要执行命令:

#source  /etc/profile

通过#java -version 可以验证是否安装成功

七、安装hadoop1.2.1

实验采用的是hadoop1.2.1,最新版已达2.7.1但是我根据百度经验配置,最后没成功,datanode节点hadoop1(namenode节点)始终认为未启动,而在hadoop2中通过#jps命令却表示已经有datanode进程。后来才发现可能是防火墙没有关闭。但是没机会去验证了,在这个版本的hadoop也需要关闭防火墙。否则会遇到同样的问题,出现问题是”....0 datanode...“问题。

hadoop2.7.1经验地址:

http://jingyan.baidu.com/article/f00622283a76c0fbd3f0c839.html

回到我们的实验,此次hadoop安装我们采用在线安装

先确保连接到网卡1 (eth0),可以访问外网

7.1 下载hadoop1.2.1

使用命令

#wget  http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz

然后移动到/opt/目录

#mv hadoop-1.2.1.tar.gz  /opt/

#cd /opt

解压文件

#tar -zxvf hadoop-1.2.1.tar.gz

#cd hadoop-1.2.1

Ps:采用离线方式,就如同jdk安装方式,先下载后解压到你想要放的目录下。

7.2配置conf

我们需要配置六个文件

进入在hadoop-1.2.1文件下打开conf文件,我们需要配置如下六个文件

7.2.1 hadoop-env.sh

用编辑打开

修改一处为

原文件export是被#注释了,并且需要改成你现在的Java_home地址

7.2.2 masters文件

7.2.3 slaves 文件

7.2.4 core-site.xml

<property>

<name>hadoop.tmp.dir</name> <!-- 工作目录 -->

<value>/data/tmp/hadoop_tmp</value>

</property>

<property>

<name>dfs.name.dir</name>   <!-- 元数据目录 -->

<value>/data/tmp/name</value>

</property>

<property>

<name>fs.default.name</name>    <!-- namenode文件系统 -->

<value>hdfs://hadoop1:9000</value>

</property>

7.2.5 hdfs-site.xml

<property>

<name>dfs.data.dir</name> <!-- 文件系统数据存放目录 -->

<value>/data/appdata/data</value>

</property>

<property>

<name>dfs.name.dir</name> <!-- 文件系统数据存放目录 -->

<value>/data/appdata/name</value>

</property>

<property>

<name>dfs.replication</name> <!-- 文件系统数据存放目录 -->

<value>3</value>

</property>

<property>

<name>dfs.support.append</name> <!-- 文件系统数据存放目录 -->

<value>true</value>

</property>

7.2.6 mapred-site.xml

<property>

<name>mapred.job.tracker</name> <!-- 任务调用器配置 -->

<value>hadoop1:9001</value>

</property>

7.3 拷贝hadoop到其他节点

#scp -r /opt/hadoop-1.2.1 hadoop3:/opt/

7.4初始化

Hadoop环境变量设置见前jdk处,执行#hadoop可以检测hadoop命令是否起作用

在配置好conf之后,我们需要在使用hadoop之前

格式化系统

#hadoop namenode -format

重点提醒:

记得关闭防火墙,每次开机使用hadoop前关闭防火墙

命令

#service iptables stop

进入bin,其目录下有许多程序,

执行#./start-all.sh  启动所有

Hadoop1执行#jps

观察到

Namenode ,secondarynamenode,jobtracker都运行了,表明正常启动如果没有,可能是之前执行了,没有格式化,重新格式化一下。还可能是你防火墙没有关闭

Hadoop2执行#jps

Ps:可能出现有的进程没有启动,比如namenode,datanode,可以多次尝试格式化,./start-all.sh ,./stop-all.sh

7.5 验证hadoop启动成功

可以执行命令

#hadoop dfsadmin -report有结果

八、运行一个hadoop程序

功能:根据wordcount程序改编而成,统计子串数目

SubStringCount.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.input.TextInputFormat;

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

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

public class SubStringCount {

public static class SubStringCountMap extends

Mapper<LongWritable, Text, Text, IntWritable> {

private final IntWritable intvalue = new IntWritable(1);

private Text word = new Text();

private int SubString(String str1, String substr)

{

int counter = 0;

for (int i = 0; i <= str1.length() - substr.length(); i++) {

if (str1.substring(i, i + substr.length()).equals(substr)) {

counter++;i+=substr.length()-1;

}

}

return counter;

}

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

throws IOException, InterruptedException {

String line = value.toString();

StringTokenizer token = new StringTokenizer(line);

//获取参数,SubString

String substring=context.getConfiguration().get("SubString");

word.set(substring);

while (token.hasMoreTokens()) {

int temp=SubString(token.nextToken(),substring);

if(temp>0)

{

intvalue.set(temp);

context.write(word, intvalue);

}

}

}

}

public static class SubStringCountReduce extends

Reducer<Text, IntWritable, Text, IntWritable> {

public void reduce(Text key, Iterable<IntWritable> values,

Context context) throws IOException, InterruptedException {

int sum = 0;

for (IntWritable val : values) {

sum += val.get();

}

context.write(key, new IntWritable(sum));

}

}

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

if(args.length<3)

{

System.err.println("please input three args:<inputfile> <outfile> <substring>");

System.exit(2);

}

Configuration conf = new Configuration();

String  substring=args[2];

conf.set("SubString",substring);

Job job = new Job(conf);

job.setJarByClass(SubStringCount.class);

job.setJobName("substringcount");

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(IntWritable.class);

job.setMapperClass(SubStringCountMap.class);

job.setReducerClass(SubStringCountReduce.class);

job.setInputFormatClass(TextInputFormat.class);

job.setOutputFormatClass(TextOutputFormat.class);

FileInputFormat.addInputPath(job, new Path(args[0]));

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

job.waitForCompletion(true);

}

}

1.在桌面建立一个subStringCountInput文件夹,创建两个文件,里面随意添加些字符串内容

然后在hadoop文件系统下创建一个目录

#hadoop fs -mkdir input_substringcount

并将subStringCountInput的内容上传到dfs文件系统,

#hadoop fs -put subStringCountInput/* input_substringcount/

命令#hadoop fs -ls / 用于查看

附录:

DFS 命令:

hadoop fs -mkdir /tmp/input              在HDFS上新建文件夹

hadoop fs -put input1.txt /tmp/input  把本地文件input1.txt传到HDFS的/tmp/input目录下

hadoop fs -get  input1.txt /tmp/input/input1.txt  把HDFS文件拉到本地

hadoop fs -ls /tmp/output                  列出HDFS的某目录

hadoop fs -cat /tmp/ouput/output1.txt  查看HDFS上的文件

hadoop fs -rmr /home/less/hadoop/tmp/output  删除HDFS上的目录

hadoop dfsadmin -report 查看HDFS状态,比如有哪些datanode,每个datanode的情况

hadoop dfsadmin -safemode leave  离开安全模式

hadoop dfsadmin -safemode enter  进入安全模式

2.生成substringcount.jar

#javac -classpath /opt/hadoop-1.2.1/hadoop-core-1.2.1.jar:/opt/hadoop-1.2.1/lib/commons-cli-1.2.jar -d substring_count_class/   SubStringCount.java

不能直接用javac,因为.java中用到了hadoop的包

#cd substring_count_class/

#jar  -cvf  substringcount.jar  *.class

3.执行

#hadoop jar substring_count_class/substringcount.jar SubStringCount input_substringcount output_substringcount wil(你所要统计的子串)

4.查看结果

#hadoop fs -cat /user/root/output_substringcount/part-r-00000

九、总结

本实验总结了hadoop的安装配置和运行了一个样例程序,仅供参考,可能其中存在谬误的地方,请参考其他人的配置方案。

个人推荐可以看一看慕课网的hadoop课程(1个小时),虽然是单节点方式配置的但对于理解hadoop的架构,工作原理有所帮助。

地址:

Hadoop大数据平台架构与实践--基础篇

http://www.imooc.com/learn/391

另外还可以参考hadoop的配置的文章

地址:

Hadoop1.2.1完全分布模式安装教程

http://www.sxt.cn/u/756/blog/4848

时间: 2024-10-20 06:09:32

hadoop1.2.1配置与运行子串统计程序的相关文章

错误提示窗口-“操作系统当前的配置不能运行此应用程序”

有些Windows系统里的office是精简版的,只适合普通办公处理word和excel,以及PPT,但是我们要研究一些关于数据库的知识时会受到阻碍,自己在网上随便找了一个Access2007的压缩包,安装时,杀毒软件会拒绝安装一些dll,导致安装不完整,软件不能运行,之后打开office中的原三样(word和excel,以及PPT)时,出现以下图片,让人很焦灼!有什么解决办法呢?来来来,总结一下! 第一种方法: 重装法office(完整版:Word.Excel.PowerPoint.Outlo

在Amazon FreeRTOS V10中使用运行时统计信息

在MCU on Eclipse网站上看到Erich Styger在8月2日发的博文,一篇关于在Amazon FreeRTOS V10中使用运行时统计信息的文章,本人觉得很有启发,特将其翻译过来以备参考.原文网址:https://mcuoneclipse.com/2018/08/02/tutorial-using-runtime-statistics-with-amazon-freertos-v10/ FreeRTOS包含一个很好的功能,可以向我提供有关每个任务在系统上运行的时间的信息: Free

在IIS中配置PHP运行环境简单步骤-注意事项

在IIS中配置PHP运行环境简单步骤 安装 IIS 7.0 打开 Control Panel\Programs\Programs and Features\Turn Windows features on or off, 在打开的对话框中勾选上这两个选项: 单击OK等待片刻, IIS就安装完成了. 安装 PHP 5.2.6 1. 下载: PHP 5.2.6 ;  其它版本的 PHP 下载. 2. 将压缩包解压, 放到一个目录中, 比如 D:\php 3. 将 php.ini-dist 复制到 C

(转载)关于ubuntu下java环境配置及其运行

转载地址:http://blog.sina.com.cn/s/blog_6730a3aa0100vsiy.html 其实不需要怎么配置,直接到ubuntu软件中心里面搜jre就行了,安装上. 在终端输入:sudo apt-get install openjdk-6-jdk 再在ubuntu软件中心里面搜索eclipse下载安装即可. 不安装eclipse也行,不过运行什么的都要在终端了..... 下面就运行试试: 1.直接终端运行: 在桌面建立一个文本文档命名为test.java,使用其他编辑器

IIS7中配置FastCGI运行PHP

环境说明: 操作系统:使用windows 2008 server 64位系统,IIS7.5PHP版本:官方下载PHP 5.4.16 VC9 x86 Non Thread SafeZIP版本.PHP路径:C:\php-5.4.16\ 配置步骤: 解压PHP文件,修改目录名放到C盘.目录地址为C:\php-5.4.16 复制php.ini-production改名为php.ini,先参考PHP.ini参数说明修改.并修改PHP对FastCGI支持: winmail站点打开按下图添加相关的选项:选择“

Android adt bundle 开发环境配置及第一个“Hello world”程序运行

    最近在学习Android 顺便记录下学习过程当作复习吧,这是写的第一篇正式博客.  一.jdk环境配置     二.android adt bundle 下载     三.安装SDK     四.模拟器及真机调试     五.第一个程序 Hello world!     六.总结 一.jdk环境配置 jdk下载地址 选中"Accept License Agreement"之后才能下载,如下图: 下载之后 点击安装,一路next 之后配置环境变量 JAVA_HOME,找到jdk安

SQLSERVER读懂语句运行的统计信息

SQLSERVER读懂语句运行的统计信息 对于语句的运行,除了执行计划本身,还有一些其他因素要考虑,例如语句的编译时间.执行时间.做了多少次磁盘读等. 如果DBA能够把问题语句单独测试运行,可以在运行前打开下面这三个开关,收集语句运行的统计信息. 这些信息对分析问题很有价值. 1 SET STATISTICS TIME ON 2 SET STATISTICS IO ON 3 SET STATISTICS PROFILE ON SET STATISTICS TIME ON 请先来看看SET STA

实验 1 Java 运行环境的安装、配置与运行

一.实验目的     1. 掌握下载 Java SDK 软件包.     2. 掌握设置 Java 程序运行环境的方法.     3. 掌握编写与运行 Java 程序的方法.     4. 了解 Java 语言的概貌. 5. 安装.掌握JCreator软件,为学习 Java 语言和进行 Java 程序的实验做好准备工作. 6. 浏览Applet 程序 二.实验要求     1. 安装并设置 Java SDK 软件包.     2. 编写一个简单的 Java 程序,在屏幕上输出"hello,jav

配置和运行 MatchNet CVPR 2015 MatchNet: Unifying Feature and Metric Learning for Patch-Based Matching

配置和运行 MatchNet CVPR 2015 GitHub: https://github.com/hanxf/matchnet 最近一个同学在配置,测试这个网络,但是总是遇到各种问题. 我也尝试了一下,结果也是一堆问题. 这里记录一下. 问题1.  ImportError: No module named leveldb [email protected]:~/Downloads/matchnet-master$ ./run_gen_data.sh Traceback (most rece