Hadoop伪分布式环境以及开发环境搭建

  1. Hadoop EcoSystem
    Hadoop伪分布式环境以及开发环境搭建

  2. 环境准备
    VMTools: WMware 10.0
    OS:ubuntu 12.04LTS
    Hadoop: hadoop-0.20.205.0
    Hive: hive-0.9.0

  3. Hadoop伪分布式安装
    3.1 Hive与HADOOP协作关系图
    Hadoop伪分布式环境以及开发环境搭建
    3.2 Hadoop运行模式介绍
    Hadoop集群有三种运行模式,分别为单机模式,伪分布模式,完全分布式模式。本书将重点介绍完全分布式模式下Hadoop的安装与配置。

  4. 单机模式
    单机模式是Hadoop的默认模式。在该模式下无需运行任何守护进程,所有程序都在单个JVM上执行。该模式主要用于开发调试MapReduce程序的应用逻辑。

  5. 伪分布模式
    在伪分布模式下,Hadoop守护进程运行在一台机器上,模拟一个小规模的集群。该模式在单机模式的基础上增加了代码调试功能,允许你检查NameNode,DataNode,JobTracker,TaskTracker等模拟节点的运行情况。

  6. 完全分布式模式
      单机模式和伪分布模式均用于开发与调试的目的。真实Hadoop集群的运行采用的是全分布模式。
    3.3 系统安装以及JDK配置
    略.
    2.3 Ubuntu下安装流程

  7. 新建用户用于Hadoop测试。
    1) 添加用户hadoop
    sudo addgroup hadoop
    sudo adduser –ingroup hadoop hadoop
    2) 为hadoop用户添加权限
    打开/etc/sudoers文件
    sudo gedit /etc/sudoers
    给hadoop用户赋予root用户同样的权限

  8. 配置SSH
    SSH用于集群中主从服务器之间执行指令时无需输入登陆密码。
    安装单机以及伪分布模式可忽略此步。

  1. 安装SSH
    sudo apt-get install openssh-server
  2. 安装完成后,启动ssh服务,并验证服务进程是否启动
    Hadoop伪分布式环境以及开发环境搭建
  3. 生成公私钥
    ssh-****** –t rsa –P “”
    完成后会在~/.ssh目录下生成两个文件:id_rsa和id_rsa.pub,前者为私钥,后者为公钥,然后将公钥id_rsa.pub添加到authorized_keys授权文件中
    cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
    然后使用ssh登录不用输入密码:
    Hadoop伪分布式环境以及开发环境搭建
    输入exit登出。
  1. 安装hadoop-0.20.205.0
  1. 解压安装包hadoop-0.20.205.0-bin.tar.gz
    Hadoop伪分布式环境以及开发环境搭建
  2. 在/usr/local新建文件夹hadoop,并修改文件权限为hadoop用户所有
    sudo mkdir hadoop
    sudo chown –R hadoop:hadoop hadoop
  3. 将安装文件移至hadoop目录
    mv hadoop-0.20.205.0/* /usr/local/hadoop
  4. 修改hostname
    Hadoop伪分布式环境以及开发环境搭建
    修改如下:
    Hadoop伪分布式环境以及开发环境搭建
  5. 添加环境变量
    Hadoop伪分布式环境以及开发环境搭建
    在.bashrc文件底部添加:
    export JAVA_HOME=/usr/lib/java/jdk1.7.0_79
    export JRE_HOME=JAVAHOME/jreexportCLASSPATH=.:{JAVA_HOME}/jre export CLASSPATH=.:{JAVA_HOME}/lib:JREHOME/libexportHADOOPHOME=/usr/local/hadoopexportHIVEHOME=/usr/local/hiveexportPATH={JRE_HOME}/lib export HADOOP_HOME=/usr/local/hadoop export HIVE_HOME=/usr/local/hive export PATH={JAVA_HOME}/bin:HADOOPHOME/bin:{HADOOP_HOME}/bin:{HIVE_HOME}/bin:$PATH
    输入env可查看环境是否添加成功,如果没有,注销用户再试。
  6. 单机模式安装完毕,可以运行hadoop自带的例子WordCount运行此过程
    mkdir input
    cp conf/* input
    Hadoop伪分布式环境以及开发环境搭建
    运行结束后
    cat output/* 查看结果
  7. 伪分布模式需要做一些配置,设定*-site.xml
    进入/usr/local/hadoop/conf目录,设定的文件包括core-site.xml, hdfs-site.xml, mapred-site.xml。
    core-site.xml: Hadoop Core的配置项,例如HDFS和MapReduce常用的I/O设置等。
    hdfs-site.xml: Hadoop 守护进程的配置项,包括namenode,辅助namenode和datanode等。
    mapred-site.xml: MapReduce 守护进程的配置项,包括jobtracker和tasktracker。

core-site.xml:
Hadoop伪分布式环境以及开发环境搭建
fs.default.name为节点网络配置信息;
hadoop.tmp.dir用于缓存namenode格式化的信息

hdfs-site.xml:
Hadoop伪分布式环境以及开发环境搭建
dfs.name.dir为存放hdfs元数据结构,可设置多个,用于备份;
dfs.data.dir为存放hdfs中的数据,其他同上;
dfs.replication: 设置hdfs的副本数量。

mapred-site.xml:
Hadoop伪分布式环境以及开发环境搭建
mapred.job.tracker为设置master节点的jobtracker网路配置信息。
修改主从服务器中的配置信息:
Hadoop伪分布式环境以及开发环境搭建
Hadoop伪分布式环境以及开发环境搭建
8) 格式化HDFS
初次运行hadoop时一定要有此操作。格式化namenode, secondarynamenode, tasktracker
指令:
hadoop namenode –format
9) 启动Hadoop
Hadoop伪分布式环境以及开发环境搭建
通过jps命令查看进程是否启动成功:
Hadoop伪分布式环境以及开发环境搭建
以上信息表示启动成功。
10) 可重新运行wordcount例子,看下结果。
11) 所有的设置已完成,Hadoop也启动了,现在可以通过下面的操作来查看服务是否正常,在Hadoop中用于监控集群健康状态的Web界面:
http://hadoop:50030/ - Hadoop 管理介面
http:// hadoop:50060/ - Hadoop Task Tracker 状态
http:// hadoop:50070/ - Hadoop DFS 状态
12) 结束hadoop时,可通过stop-all.sh脚本关闭Hadoop的守护进程。
4. 安装hive-0.9.0
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,并将sql语句转换为MapReduce任务进行运行。

  1. 解压hive-0.9.0-bin.tar.gz
    Hadoop伪分布式环境以及开发环境搭建
  2. 在/usr/local目录下新建目录hive,并将hive安装文件移动至新建目录中
    sudo mkdir hive
    mv hive-0.9.0-bin/* /usr/local/hive
  3. 设置目录权限以及环境变量,参见hadoop设置。
  4. 修改/hive/conf下面的模板文件:
    cp hive-env.sh.template hive-env.sh
    cp hive-default.xml.template hive-site.xml

hive-env.sh, 设置hadoop目录
Hadoop伪分布式环境以及开发环境搭建
Hive-site.xml, 配置hive元数据存放位置,metastore使用本地模式
Hadoop伪分布式环境以及开发环境搭建
Hadoop伪分布式环境以及开发环境搭建
Hadoop伪分布式环境以及开发环境搭建

hive.metastore.warehouse.dir:hive数据在hdfs文件系统中的存储目录;
hive.metastore.local:为true时,metastore为本地模式,metastore服务和hive服务在同一进程中运行;当为false时,metastore服务可配置为远程模式,此时,metastore服务和hive服务分开启动。
Java.jdo.option.ConnectionURL,
javax.jdo.option.ConnectionDriverName,
javax.jdo.option.ConnectionUserName,
javax.jdo.option.ConnectionPassword:四个配置项用于配置metastore元数据的存放位置,使用关系型数据库进行存放;例子中使用postgresql数据库,hive默认使用derby。
5) 启动hive, 并创建表test1
Hadoop伪分布式环境以及开发环境搭建

访问时,报目录访问权限错误,将hadoop的安全模式关闭
Hadoop dfsadmin –safemode leave
6) 验证表是否创建成功(两种方法)

  1. hadoop fs –ls /user/hive/warehouse
  2. http://localhost:50070/ 查看表对应的文件夹是否存在
  1. hive web界面访问方式
    http://localhost:9999/hwi/
  2. 将数据导入hdfs-> load data local inpath ‘/home/hadoop/test.txt’ into table test1;
  3. Metastore服务远程配置
    Hadoop伪分布式环境以及开发环境搭建
    hive.metastore.uris:配置客户端访问后端服务的uri。
    此时,hive分3个服务启动:
  1. hive –service metastore :启动hive元数据存储服务
  2. hive –service hiveserver:启动hive服务
  3. hive :启动客户端
    3.Hadoop开发环境搭建
    3.1 开发环境准备
    OS: win 7
    IDE: eclipse 4.4
    Ant:apache-ant-1.9.6
    Hadoop eclipse-plugin:手动编译生成
    3.2 编译生成Hahoop的eclipse插件
    Ant配置过程略。
    插件编译基于hadoop-0.20.205.0.tar.gz源代码包。
  4. 将目录切换到/src/contrib./eclipse-plugin
    Hadoop伪分布式环境以及开发环境搭建
  5. 打开build.xml
    样例:
    设定参数以及编译所需eclipse的jar包
    Hadoop伪分布式环境以及开发环境搭建
    hadoop.root: hadoop的根目录;
    eclipse.name: eclipse的根目录,编译的插件和eciipse的版本有关系,不同版本的hadoop插件不能共用;
    version: hadoop版本号。

编译插件代码:
Hadoop伪分布式环境以及开发环境搭建

编译成jar包:
Hadoop伪分布式环境以及开发环境搭建
3. 打开META-INF/MANIFEST.MF
添加jar包:
Hadoop伪分布式环境以及开发环境搭建
4. 然后使用ant生成jar包
Hadoop伪分布式环境以及开发环境搭建
编译成功后,会在/build/contrib/eclipse-plugin/生成jar包。
5. 将jar放到eclipse目录plugins下,重启eclipse。

3.3 Eclipse配置hadoop开发环境

  1. 打开”window”->”preferences”,选择”Hadoop Map/Reduce”页签
    Hadoop伪分布式环境以及开发环境搭建
    选择hadoop的安装目录
  2. 将eclipse切换到Map/Reduce风格。
    Hadoop伪分布式环境以及开发环境搭建
    可以看到:
    Hadoop伪分布式环境以及开发环境搭建
    Hadoop伪分布式环境以及开发环境搭建
  3. 在Map/Reduce Locations右键点击New Hadoop Location:
    Hadoop伪分布式环境以及开发环境搭建
    在Map/Reduce Master下面的Host填写远程主机ip,端口号填写hadoop运行环境所配置的端口,DFS Master同理;
    User name填写运行hadoop的用户名。
    连接成功后,可以看到hdfs的目录,如图所示:
    Hadoop伪分布式环境以及开发环境搭建

如果连接时,提示如下错误:
Hadoop伪分布式环境以及开发环境搭建
将报错的jar包中的class文件直接放在插件的classes目录里。

3.4 编写hadoop的MapReduce代码

  1. 新建一个MapReduce的项目
    Hadoop伪分布式环境以及开发环境搭建
  2. 编写样例代码WordCount
    样例代码参见hadoop-examples-0.20.205.0.jar
  3. 然后运行项目即可,Run on Hadoop。运行前如果输出的目录存在,请先将其删除。运行结果如下:
    Hadoop伪分布式环境以及开发环境搭建
    Hadoop伪分布式环境以及开发环境搭建
  4. 运行时提示文件访问权限错误时(本地ubuntu环境不会出现此错误),将FileUtil.java从hadoop-core模块单独提出来
    Hadoop伪分布式环境以及开发环境搭建
    将checkReturnValue方法里面的代码注释掉,
    Hadoop伪分布式环境以及开发环境搭建
    然后重新运行即可。

4.MongoDB数据导入HDFS
MongoDB数据导入是使用hadoop的Map/Reduce方法进行导入。
4.1环境准备
Mongodb数据库:mongodb-win32-x86_64-2008plus-2.6.11
Mongodb数据导入HDFS的API : mongo-hadoop-0.20-1.2.0
Mongodb的Java驱动 :mongo-java-driver-2.8.0.jar
Mongodb客户端: rockmongo-on-windows

4.2 MongoDB数据准备
使用rockmongo准备数据,例如:
Hadoop伪分布式环境以及开发环境搭建
Hadoop伪分布式环境以及开发环境搭建
数据库以及表名为local.hadoop, 数据中只有一个字段key。
4.3 数据导入代码

  1. 将mongodb的java驱动以及mongo-hadoop中的jar放在hadoop根目录/lib/下,并在项目中buildpath中也添加如上的jar包。
  2. 导入代码如下:
    Hadoop伪分布式环境以及开发环境搭建
    编写map方法将mongodb中的数据取出来。
    Hadoop伪分布式环境以及开发环境搭建
    在main方法中,指明mongodb数据库地址,库以及表,以及数据输入输出的过滤类等。
  3. 执行完毕后,可以在output文件夹里面看到从mongodb中导出的数据。