win7下eclipse调试Fedora虚拟机的伪分布式hadoop+hbase

 

        最近公司战略调整,终于可以轻松点研究hadoop相关技术。了解hadoop,首先需要搭建hadoop运行环境。

由于资源有限,于是就在单机windows和vmware虚拟机下进行伪分布式实战操作。闲话少说,分享下我的环境搭建过程吧,希望对大家有所帮助。

主要分为如下几部分:

一、环境版本要求和准备

二、Fedora13服务器hadoop安装过程

三、Fedora13服务器Hbase配置安装过程

四、Windowseclipse配置hadoop插件

五、Eclipse运行WordCount项目

 

一、环境版本要求和准备:

1.   为避免hadoop版本不匹配造成的ipc协议错误,windows7下的hadoop版本尽量和fedora下的hadoop版本保持一致,调试环境为hadoop-1.2下载地址为:

http://apache.dataguru.cn/hadoop/common/hadoop-1.2.1/

2.   Windows7中的eclipse版本为:Helios Service Release 2

3.   客户端操作系统:win7 vmware虚拟操作系统为: Fedora-13-i386

备注:fedora-10默认是没有安装telnet-server*.rpm的,安装完Fedora后需要安装telnet-server驱动。

A.检查系统telnet-serverrpm包是否安装:#rpm –q telnet-server  如果返回结果为空,进行BCD操作步骤:

B.安装telnet-server,命令如下:#rpm -ivh telnet-server-0.17-47.el6_3.1.i686.rpm

C. 配置文件/etc/xinetd.d/telnet,将"disable = yes"改为 "disable = no"。如果需要修改最大连接数为3,那就需要在里面加入 instance = 3。如下:

# vi /etc/xinetd.d/telnet 

service telnet
{flags = REUSE
  socket_type = stream       
  wait = no
  user = root
  server = /usr/sbin/in.telnetd
  log_on_failure += USERID
  disable = yes   <----- 修改成no
}

D.启动服务:# /etc/rc.d/init.d/xinetd restart

或者:#service xinetd restart

E.开放防火墙端口:# vi /etc/sysconfig/iptables,添加如下端口:

以上端口开放,可以从windows下的web或者eclipse来访问hadoop相关服务。以下红色部分必须放开,否则eclipse调试报错

HDFS端口:

参数

描述

默认

配置文件

例子值

fs.default.name

namenode RPC交互端口

8020

core-site.xml

hdfs://0.0.0.0:8020/

dfs.http.address

 NameNode web管理端口

50070

hdfs-site.xml 

0.0.0.0:50070

dfs.datanode.address

datanode 控制端口

50010 

hdfs-site.xml 

0.0.0.0:50010

dfs.datanode.ipc.address

datanode的RPC服务器地址和端口

 50020

hdfs-site.xml

0.0.0.0:50020

dfs.datanode.http.address

datanode的HTTP服务器和端口

 50075

hdfs-site.xml 

0.0.0.0:50075

MR端口:

参数

描述

默认

 配置文件

例子值

mapred.job.tracker

job tracker交互端口 

8021

mapred-site.xml

hdfs://0.0.0.0:8021/

mapred.job.tracker.http.address

job trackerweb管理端口

50030

mapred-site.xml 

0.0.0.0:50030

mapred.task.tracker.http.address

task tracker的HTTP端口

50060

mapred-site.xml

0.0.0.0:50060

 

 

 

 

 

 

F.重启防火墙iptables服务:#service iptables restart   

windows端验证以上端口是否可以telnet通过。

二、Fedora服务器hadoop安装过程:

1. 配置ssh本地登录证书

注:单机伪分布模式运行情况下,Hadoop不会使用SSH进行通信,可以省略如下步骤:

[root@localhost hadoop-1.2.1]# which ssh

/usr/bin/ssh

[root@localhost hadoop-1.2.1]# which ssh-keygen

/usr/bin/ssh-keygen

[root@localhost hadoop-1.2.1]# which sshd

/usr/sbin/sshd

[root@localhost hadoop-1.2.1]# ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

/home/hadoop/hadoop-1.2.1/.ssh/id_rsa

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in

 /home/hadoop/hadoop-1.2.1/.ssh/id_rsa.

Your public key has been saved in

 /home/hadoop/hadoop-1.2.1/.ssh/id_rsa.pub.

The key fingerprint is:

51:67:a7:2d:58:09:60:eb:3e:f8:18:bf:8c:56:96:a0 root@localhost.localdomain

The key's randomart image is:

+--[ RSA 2048]----+

|        o.o.+..  |

|       . o =.+   |

|        o . o .  |

|      .. .   .   |

|     . .S.       |

|    E  o+        |

|      ooo        |

|      .B .       |

|     .o =.       |

+-----------------+

最终将在/home/hadoop/.ssh/路径下生成私钥id_rsa和公钥id_rsa.pub

id_rsa.pub

[root@localhost hadoop-1.2.1]#

cd /home/hadoop/hadoop-1.2.1/.ssh

[root@localhost .ssh]#ls –l

total 8

-rw-------. 1 root root 1675 Nov 25 20:58 id_rsa

-rw-r--r--. 1 root root  408 Nov 25 20:58 id_rsa.pub

修改sshd服务配置文件:

[root@localhost .ssh]# vi /etc/ssh/sshd_config

修改如下内容:

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile      .ssh/authorized_keys

保存并退出,然后重启sshd服务

[root@localhost .ssh]# service sshd restart

ssh证书公钥拷贝至/home/hadoop/hadoop-1.2.1/.ssh/authorized_keys文件中

[root@localhost .ssh]# ls

id_rsa  id_rsa.pub

[root@localhost .ssh]# cat id_rsa.pub >> authorized_keys

root用户需要修改~/.ssh/authorized_keys文件的权限为644~/.ssh文件夹的权限为700/home/hadoop文件夹的权限为700权限正确是成功认证的先决条件

[root@localhost .ssh]# chmod 644 authorized_keys

[root@localhost .ssh]# ssh 192.168.11.129

The authenticity of host '192.168.11.129 (192.168.11.129)' can't be established.

RSA key fingerprint is

9c:7a:90:bf:ab:7a:22:fb:5c:7b:2c:7c:06:eb:a6:ee.

Are you sure you want to continue connecting (yes/no)?yes

Warning: Permanently added '192.168.11.129' (RSA) to the list of known hosts.

root@192.168.11.129's password:

Last login: Sun Nov 23 19:10:12 2014 from 192.168.11.1

2.在安装hadoop应用服务前,需要安装JDK运行环境

[root@localhost ~]# java -version

java version "1.8.0_25"

Java(TM) SE Runtime Environment (build 1.8.0_25-b17)

Java HotSpot(TM) Client VM (build 25.25-b02, mixed mode, sharing)

如果没有安装需要到http://java.com/zh_CN/download/help/linux_install.xml下载安装包jre-7u71-linux-i586.tar.gz

 Java文件将安装在当前目录jre1.7.0_07目录中,解压缩 tarball 并安装 Java

tar zxvf jre-7u7-linux-i586.tar.gz

rpm –ivh jre-7u7-linux-i586.rpm

设置java环境变量(若为开发者使用,建议将所有用户的shell都有权使用这些环境变量)

·用文本编辑器打开/etc/profile·profile文件末尾加入:

export JAVA_HOME=/usr/java/jre1.8.0_25

export PATH=$JAVA_HOME/bin:$PATH

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

    a. 你要将/usr/java/jre1.8.0_25 改为你的jre安装目录
 b. linux下用冒号“:”来分隔路径
 c. $PATH / $CLASSPATH / $JAVA_HOME 是用来引用原来的环境变量的值。在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种常见的错误。
 d. CLASSPATH中当前目录“.”不能丢,把当前目录丢掉也是常见的错误。
 e. export是把这三个变量导出为全局变量。
 f. 大小写必须严格区分。

使环境变量的更改马上起作用:source /etc/profile

检查环境变量更改是否生效: java -version

3.安装hadoop

Hadoop官网下载hadoop-1.2.1.tar.gz并上传至服务器/home/hadoop路径下

1.  [root@localhost ~]$ tar -xzf hadoop-1.2.1.tar.gz  

2.  [root@localhost ~]$ rm -rf hadoop-1.2.1.tar.gz   

3.  [root@localhost ~]$ cd hadoop-1.2.1/conf/  

4.  [root@localhost  conf]$ vi hadoop-env.sh 

JAVA_HOME指向第二步安装的JDK所在目录

1.  # The java implementation to use.  Required.  

2.  export JAVA_HOME=/usr/java/jre1.8.0_25 

保存并退出

[root@localhost ~]$ vi ~/.bash_profile 

4.修改hadoop配置文件

伪分布式使用IP地址而不是主机名或localhost的好处是不需要修改/etc/hosts,当然全分布式还是需要修改的。

修改core-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

   <property>

       <name>fs.default.name</name>

       <value>hdfs://192.168.11.129:8020</value>

   </property>

</configuration>

修改mapred-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

  <property>

      <name>mapred.job.tracker</name>

      <value>192.168.11.129:8021</value>

  </property>

</configuration>

修改hdfs-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

   <property>

        <name>dfs.name.dir</name>

        <value>/home/hadoop/dfsname</value>

   </property>

   <property>

        <name>dfs.data.dir</name>

        <value>/home/hadoop/dfsdata</value>

   </property>

   <property>

      <name>dfs.replication</name>

      <value>1</value>

   </property>

   <property>

      <name>dfs.permissions</name>

      <value>false</value>

      <description>permissions is false</description>

   </property>

</configuration>

通过以上步骤hadoop即安装配置完成,进入hadoop-1.21.1主目录的bin目录下

#./hadoop namenode -format   //格式化hadoopnamenode,很多时候namenode启动不起来可以试试格式化一下。

#./start-all.sh     //启动hadoop的各个监护进程。

可以通过http://localhost:50070  http://localhost:50030 查看namenodejobtracker

#./stop-all.sh    //关闭hadoop的各个监护进程

三、Fedora服务器Hbase配置安装过程:

我用的版本是Hbase-0.94.23,下载网http://apache.etoak.com//hbase/hbase-0.94.23/     Hbase-0.94.233解压到系统主目录下,伪分布式的配置如下:

 (1)编辑{HBASE_HOME}/conf/hbase-env.sh文件,设置JAVA_HOMEHBASE_CLASSPATH变量

        export JAVA_HOME=/usr/java/jre1.8.0_25 (自己的JAVA_HOME主目录)

        export HBASE_CLASSPATH=/home/hbase/hadoop-0.94.23/conf   (自己的HADOOP_HOME主目录)

(2)编辑{HBASE_HOME}/conf/hbase-site.xml文件,增加以下内容

<property>

<name>hbase.rootdir</name>

<value>hdfs://192.168.11.129:8020/hbase</value>   

</property>

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>

注:以上表格中标红色的路径一定要跟hadoopcore-site.xmlfs.default.name中的路径相同,否则会出错

 (3)替换Hbase中的jar

需要用{HADOOP_HOME}下的hadoop-1.21.1-core.jar替换掉{HBASE_HOME}/lib目录下的hadoop-core-0.20-append-r1056497.jar

如果不替换jar文件Hbase启动时会因为hadoopHbase的客户端协议不一致而导致HMaster启动异常。报错如下:

localhost: Exception in thread "main" org.apache.hadoop.ipc.RPC$VersionMismatch: Protocol org.apache.hadoop.hdfs.protocol.ClientProtocol version mismatch. (client = 42, server = 41),所以如果遇到以上错误,就通过替换jar包解决。

 完成以上操作,就可以正常启动Hbase了。

启动顺序:先启动Hadoop——>再启动Hbase

关闭顺序:先关闭Hbase——>再关闭Hadoop

启动Hbase的命令,进入到hbase安装主目录的bin目录下

 # ./start-hbase.sh    //启动hbase

 # ./hbase shell        //进入shell模式

 # ./stop-all.sh          //停止hbase

如果在操作Hbase的过程中发生错误,可以通过hbase安装主目录下的logs子目录查看错误原因。

注意:

 (1)hbase的运行需要用到zookeeper,而hbase-0.94.23自带了zookeeper,所以可以使用hbase自带的zookeeper,在conf/hbase-env.sh文件中  export HBASE_MANAGES_ZK=true 

true表示使用hbase自带的zookeeper,如果不想使用其自带的zookeeper,自己下载包安装的化,该项设置为false

当然如果自己安装zookeeper,启动及关闭先后顺序为:启动Hadoop—>启动ZooKeeper集群—>启动HBase—>停止HBase—>停止ZooKeeper集群—>停止Hadoop

 (2) hbase启动时报错:localhost: Exception in thread "main" org.apache.hadoop.ipc.RPC$VersionMismatch: Protocol org.apache.hadoop.hdfs.protocol.ClientProtocol version mismatch. (client = 42, server = 41) 

原因就是上面hbase安装第三步中提到的没有替换jar包的原因。

四、Windowseclipse配置hadoop插件:

1.复制hadoop-eclipse-plugin-1.2.1.jar eclipse安装目录/plugins/下。 

说明:hadoop源文件中不提供相关插件,需要本地编译打包
2.重启eclipse,配置hadoop installation directory 
如果安装插件成功,打开Window-->Preferens,你会发现Hadoop Map/Reduce选项,在这个选项里你需要配置Hadoop installation directory,配置完成后退出。

3.配置Map/Reduce Locations

Window-->Show View中打开Map/Reduce Locations 
Map/Reduce Locations中新建一个Hadoop Location。在这个View中,右键-->New Hadoop Location

在弹出的对话框中你需要配置Location name,如Hadoop,还有Map/Reduce MasterDFS Master

这里面的HostPort分别为你在mapred-site.xmlcore-site.xml中配置的地址及端口。如:

配置完后退出。

点击DFS Locations-->Hadoop,如果能显示文件夹(2)说明配置正确;如果显示"拒绝连接",请检查你的配置。

 五、Eclipse运行WordCount项目:

1.新建WordCount项目
File-->New-->Other-->Map/Reduce Project 
项目名可以随便取,如WordCount 
复制 hadoop安装目录/src/example/org/apache/hadoop/example/WordCount.java到刚才新建的项目下面。
2.上传模拟数据文件夹 
为了运行程序,我们需要一个输入的文件夹,和输出的文件夹。
A)在本地新建word.txt

mapreduce java hadoop hbase

java cdd  python c

java cmmd javascript 

helloworld hadoop 

 B)通过hadoop的命令在HDFS上创建/tmp/workcount目录,命令如下:bin/hadoop fs -mkdir /tmp/wordcount

C)通过copyFromLocal命令把本地的word.txt复制到HDFS上,命令如下:

bin/hadoop fs -copyFromLocal /home/grid/word.txt  /tmp/wordcount/word.txt

3.运行Wordcount项目

A)在新建的项目Hadoop,点击WordCount.java,右键-->Run As-->Run Configurations 
B)在弹出的Run Configurations对话框中,点Java Application,右键-->New,这时会新建一个application名为WordCount 
C)配置运行参数,点Arguments,在Program arguments中输入“你要传给程序的输入文件夹和你要求程序将计算结果保存的文件夹”,如:

hdfs://192.168.11.129:8020/tmp/wordcount/word.txt    hdfs://192.168.11.129:8020/tmp/wordcount/out

如果运行时报java.lang.OutOfMemoryError: Java heap space配置VM arguments(Program arguments)

-Xms512m -Xmx1024m -XX:MaxPermSize=256m

4.点击Run,运行程序
点击Run,运行程序,过段时间将运行完成,等运行结束后,查看运行结果,使用命令: bin/hadoop fs -ls /tmp/wordcount/out查看例子的输出结果。

发现有两个文件夹和一个文件,使用命令查看part-r-00000文件:

bin/hadoop fs -cat /tmp/wordcount/out/part-r-00000可以查看运行结果。

如果这一步有问题,请看最后的注意事项(2

注意事项:

1eclipse可能会报无法连接的错:"Map/Reduce location status updater". org/codehaus/jackson/map/JsonMappingException

经过查询,是由于hadoopeclipse插件里面缺少了一些包,按照这篇文章的说明修改包后,重新运行成功。

2)可能会报错:

12/04/24 15:32:44 ERROR security.UserGroupInformation: PriviledgedActionException as:Administrator cause:java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\Administrator-519341271\.staging to 0700
Exception in thread "main" java.io.IOException: Failed to set permissions of path: \tmp\hadoop-Administrator\mapred\staging\Administrator-519341271\.staging to 0700
    at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:682)
这是由于Windows下文件权限问题,在Linux下可以正常运行,不存在这样的问题。

参考:http://blog.csdn.net/keda8997110/article/details/8533633

解决方法是修改src\core\org\apache\hadoop\fs\RawLocalFileSystem.java,注释掉 checkReturnValue(有些粗暴,在Window下,可以不用检查)

1

2

3

4

5

6

7

private void checkReturnValue(boolean rv, Path p, FsPermission permission) 

  throws IOException {

 /*if (!rv) {

    throw new IOException("Failed to set permissions of path: " + p + " to " + 

                            String.format("%04o", permission.toShort()));

   }*/

}

然后重新编译、打包 hadoop-core-1.21.21.0.jar,再次运行即可成功。关于这个重新编译hadoop的方法我上面的压缩包里也有教程文档。

目前为止还没有完全用到hbase,但后续可以利用该环境研究hadoop+hbase。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值