CDH5伪分布式环境搭建

说明:

  1. 本文描述的是基于Windows+虚拟机+CentOS的Hadoop+HBase的开发环境搭建过程,使用的Hadoop版本是CDH5(Cloudera Distribution including Apache Hadoop,CDH),旨在说明HADOOP的伪分布式环境搭建关键步骤。CDH5与Hadoop的关系,Hadoop、Hbase、Zookeeper之间的关系,及文中涉及的一些工具、命令的使用等与本文有关系不是特别密切的东西都没有详细说明,想了解更多请:http://www.google.com

  2. 本文旨在学习Hadoop,而且所有操作基本都是在虚拟机中进行,所以方便起见所有操作直接用root用户。

基础环境

操作系统

CDH5的环境要求可以参见:CDH 5 Requirements and Supported Versions 虚拟机可以用VMWare或VirtualBox,详细安装过程请自行Google ,本文所用的环境为Win8+VMWare+CentOS6.4 +CDH5:
虚拟机安装CentOS6.4方便起见推荐使用安装minimal版,小巧玲珑百度网盘下载

  1. minimal版的CentOS网络默认没有打开
    用以下命令打开:
    ifconfig eth0 up
    dhclient eth0

    可以修改/etc/sysconfig/network-scripts/ifcfg-eth0ONBOOT=no 改成ONBOOT=yes开机打开网络,如果要设置静态IP可以参考以下内容进行做修改

     DEVICE=eth0
     BOOTPROTO=static
     ONBOOT=yes
     HWADDR=00:0C:29:30:35:C5
     TYPE=Ethernet
     NAME="System etho0"
     UUID=fdaced38-14e2-4b7e-905e-01eebc698573
     NM_CONTROLLED=yes
     BROADCAST=192.168.242.255
     IPADDR=192.168.242.129
     NETMASK=255.255.255.0
     GATEWAY=192.168.242.2
     IPV6INIT=no
     DNS1=192.168.242.2
    
  1. 为方便之后的操作,可能还需要以下操作,这一步不是必须的

    yum update 先更新一下会自动选最快的源
    常用软件安装
    yum install vim wget
    下面这些你可能会能也会用到
    yum install lsof make ntp tcpdump time zip unzip git
    yum groupinstall "Development Tools"

  2. 为方便与宿主机共享文件,可以安装VMwareTools,这一步也不是必须的

    在虚拟机启动前先设置好共享目录然后

     mkdir  /mnt/cdrom
     mount /dev/cdrom /mnt/cdrom
     cd /mnt/cdrom
     tar -zxvf VMwareTools-xxxxx.tar.gz -C /tmp
     cd /tmp/vmware-tools-distrib
    
     ./vmware-install.pl   #安装
     一路回车选默认值直接到**Would you like to enable VMware automatic kernel modules? [no]**这个地可能需要yes    
    

    安装完成后重启,在/mnt/hgfs/就是可以看到共享的宿主机的目录

    不行的话可以尝试手工挂载

     mount -t vmhgfs .host:/ /mnt/hgfs/ 
     编辑 /etc/fstab,添加下面一行
     .host:/ /mnt/hgfs               vmhgfs  defaults  0 0
    

注意:

  • /etc/sysconfig/network中HOSTNAME的值初始值是安装的时候提供的主机名,而在/etc/hosts中又没有提供相应的映射,Hadoop各组件之件默认会用HOSTNAE+端口号进行通信,所以默认情况下会出错,并且我们需要的是宿主机中进行开发测试,也就是需要外部访问此伪分布式集群,所以你需要在/etc/hosts文件中加入一条映射:
1
192.168.242.129   centos.migle

以上需要按实际情况做修改192.168.242.129是文中虚拟机地址, centos.migle是文中虚拟机HOSTNAME,下文中不再特别说明,如有出现请按自已实际对应做修改

估计不用虚拟机IP和HOSTNAME做映射也是可以,用一个新名字映射虚拟机IP也是可以的!!

  • CentOS默认iptables是开的,可以这样查看状态service iptables status 而本文描述的是在虚拟机中安装的Hadoop,会在宿主机中通过WEB UI或客户端的形式访问虚拟机中的Hadoop所以为方便起见把Iptables给关了:service stop iptables 可以直接设成开机不启动chkconfig iptables off免得麻烦

软件环境

  1. JDK安装
    先检查是否已经安装java -version环境变量是否已经设置echo $JAVA_HOME 如果没安装继续看下面,如果都没问题进入
    下一步

    1. 下载 :http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
    2. 安装:rpm -i jdk-7u55-linux-x64.rpm

    3. 环境变量设置:/etc/profile 添加以下内容:

1
2
3
export JAVA_HOME=/usr/java/jdk1.7.0_55    
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar      
export PATH=$PATH:$JAVA_HOME/bin
>> *重新登录或  `source /etc/profile` 生效* 
  1. ssh server

伪分布式运行应该是不需要SSH Server的,安装主要是为方便在宿主机中用XShell连接虚拟机,不过好处是CentOS自带,不用额外安装

Hadoop

安装

  1. 设置软件源
1
2
3
wget http://archive.cloudera.com/cdh5/one-click-install/redhat/6/x86_64/cloudera-cdh-5-0.x86_64.rpm
sudo yum --nogpgcheck localinstall cloudera-cdh-5-0.x86_64.rpm  
sudo rpm --import http://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera
  1. 安装:
    sudo yum install hadoop-conf-pseudo
  2. 检查安装:
    rpm -ql hadoop-conf-pseudo
    hadoop version

配置

CDH5把Hadoop的配置文件都是在/etc/hadoop/conf下面放着伪分布部署时会有一个名为conf.pseudo的符号链接如果你需要在宿主机中访问,默认配置不用改变
CDH5的Hadoop部署只需要修改core-site.xml一个文件的一个位置,如果你不需要在虚拟机外部分访问,可以不用修改

  • 修改:core-site.xml
1
2
3
4
5
  <property>
    <name>fs.defaultFS</name>
    <!--把localhost修改成VM的IP,本文中修改为:192.168.242.129,如果配置成VM的HOSTNAME,在VM上操作没问题,但宿主机用JAVA API操作的时候会报报错!!-->
    <value>hdfs://localhost:8020</value>
  </property>
  • 格式化HDFS:sudo -u hdfs hdfs namenode -format

    可以看看: /etc/hadoop/conf.pseudo/hdfs-site.xml
    namenode的data分别保存在:
    /var/lib/hadoop-hdfs/cache/hdfs/dfs/name
    /var/lib/hadoop-hdfs/cache/hdfs/dfs/data

  • 启动服务: for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done

    下次开机会自动启动

  • 宿主机浏览器里打开:http://centos.migle:50070/ 如果看到类似以下界面,说明问题成功了一小步!..

    如果使用虚拟机的HOSTNAME则需要在宿主机的hosts文件中加入相应映射,否则请直接用IP地址
    CDH5伪分布式环境搭建_第1张图片psudo-50070

  • 创建相关目录

1
2
3
4
5
sudo -u hdfs hadoop fs -mkdir -p /tmp/hadoop-yarn/staging/history/done_intermediate
sudo -u hdfs hadoop fs -chown -R mapred:mapred /tmp/hadoop-yarn/staging 
sudo -u hdfs hadoop fs -chmod -R 1777 /tmp 
sudo -u hdfs hadoop fs -mkdir -p /var/log/hadoop-yarn
sudo -u hdfs hadoop fs -chown yarn:mapred /var/log/hadoop-yarn

查看结果: hadoop fs -ls -R / 也可以在WEB界面中查看

安装的时候会自动创建hadoop,hdfs,yarn,mapred等用户

hadoop fs 会改给出HDFS的命令的帮助,和相应的Linux名字和相应功能都很像,参数也比较简单

  • 启动YARN服务
1
2
3
sudo service hadoop-yarn-resourcemanager start   
sudo service hadoop-yarn-nodemanager start   
sudo service hadoop-mapreduce-historyserver start

下次开机会自动启动

jps后会有类似如下的输出:

1
2
3
4
5
6
13988 SecondaryNameNode  
14627 ResourceManager  
15051 JobHistoryServer  
14705 NodeManager  
13878 NameNode  
13785 DataNode

如有以上输出,说明配置基本完成,进行下一步测试

开发测试

本地MR任务测试

为管理方便给root用户在HDFS上创建个目录,并赋权

1
2
sudo -u hdfs hadoop fs -mkdir -p /user/root
sudo -u hdfs hadoop fs -chown root /user/root

/etc/profile 中添加个环境变量
export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
export CLASSPATH=$CLASSPATH:$HADOOP_MAPRED_HOME

hadoop的JAR都在HADOOP_MAPRED_HOME目录下,但不知道这个环境变量是用来干什么的

创建一个test.txt的文件加上几行内容

1
2
3
echo "hello" >> test.txt
echo "hadoop" >> test.txt
echo "hi,hadoop" >> test.txt

上传到hdfs中:hadoop fs -put -f test.txt /user/root/
查看文件:hadoop fs -ls -R /user/root/
查看文件内容 hadoop fs -cat /user/root/test.txt
如下图:
CDH5伪分布式环境搭建_第2张图片cdh5-put-lsr-cat

运行一个自带MR例子,
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar wordcount test.txt output

hadoop-mapreduce-examples.jar源码在Hadoop的源码包里有

结果会在output目录下生成output是相对路径,绝对

/user/root/output

查看结果:
hadoop fs -ls -R output
hadoop fs -cat /user/root/output/part-r-00000
CDH5伪分布式环境搭建_第3张图片Alt text

远程HDFS JAVA API

代码见:https://github.com/longforfreedom/StudyHadoop

HBASE

安装:

1
2
3
4
sudo yum install zookeeper-server
sudo yum install hbase-master
sudo yum install hbase
sudo yum install hbase-regionserver

可选:
sudo yum install hbase-thrift ##thrift接口需要
sudo yum install hbase-rest ##rest接口

查看:rpm -ql hbase

配置

  1. 创建相关目录
    zookeeper的dataDir
1
2
mkdir -p /var/lib/zookeeper
chown -R zookeeper /var/lib/zookeeper/

hbase目录ms会自动创建
sudo -u hdfs hadoop fs -mkdir /hbase
sudo -u hdfs hadoop fs -chown hbase /hbase

  1. 配置:
    两个配置文件 /etc/hadoop/conf/hdfs-site.xml/etc/hbase/conf/hbase-site.xml

    • /etc/hadoop/conf/hdfs-site.xml中添加

      dfs.datanode.max.xcievers
      4096

      单机小测试不改这个应该不会出错!!
      修改hdfs-site.xml需要重启Hadoop

    • /etc/hbase/conf/hbase-site.xml 添加以下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>

<property>
<name>hbase.rootdir</name>
<!--按实际情况修改-->
<value>hdfs://centos.migle:8020/hbase</value>
</property>

<property> 
<name>hbase.zookeeper.quorum</name>      
<value>centos.migle</value>    
</property>
  1. 启动:

    • 启动Zookeeper
      sudo service zookeeper-server init #第一次启动时执行以后再不需要
      sudo service zookeeper-server start

      测试zookeeper:zookeeper-client -server localhost:2181

    • 启动Hbase
      sudo service hbase-master start
      sudo service hbase-regionserver start

下次开机会自动启动

宿主机中的访问:http://centos.migle:60010/
CDH5伪分布式环境搭建_第4张图片cdh5-60010

开发测试

HBASE SHELL 基本操作

hbase shell 进入HBASE SHELL,提示符会变成类似:hbase(main):002:0>以下命令都在HBASE SHELL执行.

  • 查看状态 :status
  • 查看版本:version
  • 创建表:create 'mtable','cf' 指定表名和列族,多个列族用“,”分隔如:create 'mtable','cf','cf2'
  • 插入数据: put '表名','rowKey','列名','列值'
    put 'mtable','rowKey1','cf:acc_nbr','18797384480'
    put 'mtable','rowKey1','cf:name','migle'
    列可以动态创建: 列格式是:列族:列名
  • 查看数据:
    单行:
    get 'mtable' , 'rowKey1'
    get 'mtable','rowKey1','cf:acc_nbr'
    get 'mtable','rowKey1','cf'
    所有: scan 'mtable'
  • 行数:count 'mtable'
  • 更新数据:put 'mtable','1','cf:acc_nbr','18797384481'
  • 删除数据:delete 'mtable','1','cf:name'
  • 清空表: truncate 'mtable'
  • 查看表结构:describe 'mtable'
  • 修改表结构:
    1. 添加一个列族:
1
2
3
   disable 'mtable'  
   alter 'mtable', NAME => 'cf2'  
   enable 'mtable'
2. 删除列族: 
1
2
3
disable 'mtable'   
alter 'mtable', 'delete' => 'cf2'  
enable 'mtable'
  • 删除表:
1
2
disable 'mtable'
drop 'mtable'

JAVA API远程测试

代码见:https://github.com/longforfreedom/StudyHadoop

Python


@TODO

安装 thrift
thrift依赖
sudo yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby—-devel
/usr/lib/hbase/include/thrift
http://blog.csdn.net/guxch/article/details/12163047

其它:

  1. 在虚拟机中不要把HOSTNAME映射成127.0.0.1否则宿主机中JAVA API不能访问HBASE!!
  2. 可以pom.xml中加入cloudera的仓库,但直接用Apache版本的好像也没问题
1
2
3
4
5
6
  	<repositories>
    	<repository>
      		<id>cloudera</id>
      		<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
    	</repository>
  	</repositories>

参考资料

你可能感兴趣的:(hadoop)