Hadoop环境配置

来源:互联网 发布:三网通软件 编辑:程序博客网 时间:2024/05/16 15:15

Alex的说明

  • 本页主要讨论Hadoop的搭建和使用,以及其中可能出现的问题。您可以了解:
    • 如何快速试用Hadoop?比如手头只有一台装有Windows的计算机,用VMware中的Ubuntu虚拟机去体验Hadoop。
    • 如何在一个简易集群上搭建Hadoop?比如在局域网内几台普通配置计算机上搭建。
    • 如何在Hadoop上开发应用?比如在Windows上的Eclipse远程调试,可能需要编译Hadoop。
  • 本页所做工作均通过本人测试。但配置方法条条大路通罗马,可能出现各种问题,本页也无法以偏概全,希望大家实践后能及时纠正和补充。

准备工作

版本选择

  • 不同的版本号前缀表示版本所属的系列,比如稳定版或alpha、beta版。
    • 1.0.X - current stable version, 1.0 release
    • 1.1.X - current beta version, 1.1 release
    • 2.X.X - current alpha version
    • 0.23.X - simmilar to 2.X.X but missing NN HA.
    • 0.22.X - does not include security
    • 0.20.203.X - old legacy stable version
    • 0.20.X - old legacy version
  • 本页选择稳定版之1.0.4(05-Oct-2012)

支持的OS平台

  • Hadoop最好运行在GNU/Linux环境之上,其开发和编译也需GNU/Linux的支持。本页使用常见的Ubuntu Desktop 12.04.2 LTS作为安装、编译等的演示平台。
  • Hadoop对Win32的支持不够好。本页使用Windows(7)上的Eclipse开发MapReduce应用,并在远端的Hadoop(VMware虚拟机或集群)上调试。

创建Hadoop账户

  • Hadoop要求所有机器节点上Hadoop的部署目录结构要相同,并且都有一个相同用户名的帐户。
  • 创建一个名为hadoop的用户并加入hadoop用户组:
    sudo addgroup hadoopsudo adduser --ingroup hadoop hadoop...Full Name []: hadoop...
  • 为hadoop用户赋予sudo权限,在/etc/sudoers如下位置加入hadoop ALL=(ALL) ALL:
    ...# Members of the admin group may gain root privileges%admin ALL=(ALL) ALLhadoop ALL=(ALL) ALL...

JDK安装

  • Hadoop是用Java编写的,运行需要JVM支持,编译也需要安装JDK。
    • 测试命令:
    java -versionjavac -version
    • Hadoop要求JDK的版本最好大于1.6。

apt-get方式

  • Ubuntu从10.04版本起去掉了sun-java6-jre,sun-java6-jdk的源,标准库只有openJDK了,所以直接运行会提示:
    sudo apt-get install sun-java6-jdk...Package sun-java6-jdk is not available, but is referred to by another package.This may mean that the package is missing, has been obsoleted, oris only available from another sourceE: Package 'sun-java6-jdk' has no installation candidate
  • 尝试使用8.04 LTS中的JDK源,在/etc/apt/sources.list中添加如下源,并update。
    deb http://us.archive.ubuntu.com/ubuntu/ hardy multiversedeb-src http://us.archive.ubuntu.com/ubuntu/ hardy multiverse
  • 在apt-get install的过程中,可能有4个包打包下载仍然没有源:

    • java-common_0.38_all.deb
    • odbcinst1debian2_2.2.14p2-1ubuntu1_i386.deb
    • odbcinst_2.2.14p2-1ubuntu1_i386.deb
    • unixodbc_2.2.14p2-1ubuntu1_i386.deb
  • 安装完成的版本为:1.6.0_06

下载bin包手动安装

  • Hadoop要求JDK的版本大于1.6,本页选择Java SE Development Kit 6 Update 45。
    • Oracle官网下载相关包为:jdk-6u45-linux-i586.bin

  • 执行如下命令安装(解压)。
    chmod u+x jdk-6u45-linux-i586.bin./jdk-6u45-linux-i586.bin
  • 用得到的名为jdk1.6.0_45的文件夹,创建JVM目录。
    sudo mkdir -p /usr/lib/jvmsudo mv jdk1.6.0_45 /usr/lib/jvm/
  • 配置(所有用户的)环境变量,编辑/etc/profile,末尾加入如下,并注销注销生效。
    export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_45export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  • 设置一个Hadoop可用的符号链接/usr/lib/jvm/java-6-sun
    sudo ln -s /usr/lib/jvm/jdk1.6.0_45/ /usr/lib/jvm/java-6-sun

SSH server安装

  • Hadoop通过SSH来对整个集群执行远程操作。
  • 测试命令:
    ssh localhost
  • 若出现如下提示,则没有安装或启动SSH server服务:
    ssh: connect to host localhost port 22: Connection refused
  • Ubuntu默认安装openssh-client,但没有安装server,则需安装对应版本的openssh-server:
    sudo apt-get install openssh-server
  • 若已安装SSH server,可查看有无名为“sshd”的进程:
    ps -A|grep ssh
  • 若没有,则尝试启动SSH进程:
    /etc/init.d/ssh -start

安装Hadoop

  • 在Apache提供的镜像地址下载相关包。

Debian包方式

  • 下载:hadoop_1.0.4_1-i386.deb

  • 执行命令安装:(或图形界面下双击安装)
    sudo dpkg -i hadoop_1.0.4-1_i386.deb
  • 测试命令:
    hadoop version
  • 安装目录说明:
    • /etc/hadoop/:配置文件
    • /usr/sbin/:启动和终止hadoop运行
    • /var/log/hadoop/:日志,需要hadoop用户的读写权限:
    sudo chown hadoop:hadoop /var/log/hadoop/
    • /var/run/hadoop:默认运行创建pid的目录,需要非root用户(hadoop用户)有对/var/run/(/run/)的读写权限。但该目录属于Ubuntu的tmpfs,因此最好重设pid目录位置。编辑/etc/hadoop/hadoop-env.sh
    # The directory where pid files are stored. /tmp by default.export HADOOP_PID_DIR=/home/hadoop/pidsexport HADOOP_SECURE_DN_PID_DIR=/home/hadoop/pids
    • /usr/share/hadoop/:主要文件(如hadoop-core-1.0.4.jar)存放目录
    • /usr/share/hadoop/templates/conf/:配置文件模板

运行Hadoop

三种运行模式

  1. 独立模式(local mode/standalone):把Hadoop作为一个Java程序在单个JVM上执行,此时Hadoop不是分布式的,无需运行守护进程(demon),有利于调试。
  2. 伪分布模式(pseudo-distributed mode):Hadoop运行在单个机器节点上,每个守护程序分别运行在不同的Java进程上,从而模拟集群的行为。
  3. 全分布模式(fully distributed mode):Hadoop守护进程运行在一个集群上。

hadoop-server-roles.png

  • 本页关注的运行模式:
    • 单机(或单虚拟机)运行Hadoop,并在该机编译运行Hadoop应用。(伪分布模式)
    • 单机(或单虚拟机)运行Hadoop,在另外一台计算机(Windows7)上用Eclipse编译调试运行Hadoop应用。(伪分布模式)
    • 在多台计算机组成的集群上运行Hadoop,在另外一台计算机(Windows7)上用Eclipse编译调试运行Hadoop应用。(全分布模式)

网络配置

  • Ubuntu自带的防火墙可能阻止对Hadoop所需端口的访问。简单起见,可关闭ufw和iptables
    sudo ufw disablesudo iptables -P INPUT ACCEPTsudo iptables -P FORWARD ACCEPTsudo iptables -P OUTPUT ACCEPT
  • 对于全分布模式,假设集群中有三台计算机。为了便于配置,分别设置一个主机名用于解析。

    IP(参考实际情况)

    主机名

    作用

    运行的守护进程

    49.123.105.71

    dancy-ubuntu

    主&从节点

    NameNode,JobTracker,DataNode,TaskTracker

    49.123.105.179

    yang-ubuntu

    从节点

    DataNode,TaskTracker

    49.123.105.2

    xuxiao-ubuntu

    从节点

    DataNode,TaskTracker

    • 根据每个节点的主机名,修改其/etc/hosts如下:(此步可略过,但之后的配置文件均需直接写IP,容易乱)
    49.123.105.71 dancy-ubuntu49.123.105.179 yang-ubuntu49.123.105.2 xuxiao-ubuntu
    • 注释掉用于本机回环测试的127.0.1.1

Hadoop配置文件编写

  • 在/etc/hadoop/下,参考下表编写配置文件(若没有则新建):

    配置文件

    属性名称

    含义

    独立模式

    伪分布模式

    全分布模式

    core-site.xml

    fs.default.name

    NameNode所在主机地址

    file:///

    hdfs://localhost:9000

    hdfs://namenode:9000

    core-site.xml

    hadoop.tmp.dir

    Hadoop运行时临时目录

    默认为/tmp/

    hdfs-site.xml

    dfs.replication

    数据块的复制次数

    N/A

    1

    slave节点数(≤3)

    hdfs-site.xml

    dfs.permissions

    是否启用权限

    N/A

    远程调试时设置为false

    hdfs-site.xml

    dfs.block.size

    数据块大小(Byte)

    默认为67108864(即64MB)

    mapred-site.xml

    mapred.job.tracker

    JobTracker所在主机地址

    local

    localhost:9001

    jobtracker:9001

    masters

    N/A

    主节点列表

    localhost

    主节点IP或主机名表

    slaves

    N/A

    从节点列表

    localhost

    从节点IP或主机名表

  • 独立模式下core-site.xml,hdfs-site.xml,mapred-site.xml均为空。
  • 例1:伪分布模式的配置文件编写。
    • /etc/hadoop/core-site.xml
    <configuration>    <property>        <name>fs.default.name</name>        <value>hdfs://localhost:9000</value>    </property></configuration>
    • /etc/hadoop/hdfs-site.xml
    <configuration>     <property>         <name>dfs.replication</name>         <value>1</value>     </property></configuration>
    • /etc/hadoop/mapred-site.xml
    <configuration>     <property>         <name>mapred.job.tracker</name>         <value>localhost:9001</value>     </property></configuration>
  • 例2:全分布模式的配置文件编写。参考运行Hadoop->网络配置一节的网络环境。

    • /etc/hadoop/core-site.xml
    <configuration>    <property>        <name>fs.default.name</name>        <value>hdfs://dancy-ubuntu:9000</value>    </property></configuration>
    • /etc/hadoop/hdfs-site.xml
    <configuration>     <property>         <name>dfs.replication</name>         <value>3</value>     </property></configuration>
    • /etc/hadoop/mapred-site.xml
    <configuration>     <property>         <name>mapred.job.tracker</name>         <value>dancy-ubuntu:9001</value>     </property></configuration>
    • /etc/hadoop/masters
    dancy-ubuntu
    • /etc/hadoop/slaves
    dancy-ubuntuyang-ubuntuxuxiao-ubuntu

SSH配置

  • 为了防止Hadoop运行时为了访问集群中的节点而需不断输入密码,一般设置为SSH互信,因此允许hadoop用户无需键入密码即可SSH登录集群内部的机器。
  • 创建一个空口令的公钥/私钥对,并建立authorized_keys(权限为600)
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsacat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  • 此时若ssh localhost而不用输入密码,则配置成功。
  • 在整个集群间共享密钥对,主要是让主节点能SSH从节点时无需键入密码。参考运行Hadoop->网络配置一节的网络环境。

    # 主机dancy-ubuntu执行scp ~/.ssh/authorized_keys yang-ubuntu:/home/hadoop/.ssh/scp ~/.ssh/authorized_keys xuxiao-ubuntu:/home/hadoop/.ssh/
    • 若远程机没有.ssh目录,则先手动创建一个(权限为700),再执行上述命令。
    • 若提示Agent admitted failure to sign using the key,则将私钥加进来:
      ssh-add ~/.ssh/id_rsa

Hadoop基本控制

  • 格式化HDFS文件系统。
    hadoop namenode -format
    • 注:有时需要删除hadoop.tmp.dir(默认为/tmp/hadoop-${user.name})
  • Hadoop守护进程的启动和停止。
    /usr/sbin/start-all.sh/usr/sbin/stop-all.sh
  • 杀掉正在运行的Job
    # 列出正在运行的Jobhadoop job -list# 找到该任务的JobId,杀掉hadoop job -kill [JobId]

运行状态

  • 用jps命令查看Java进程(进程号参考实际情况):
    jps6930 Jps5746 SecondaryNameNode5835 JobTracker5513 DataNode6056 TaskTracker5295 NameNode
    • slaves机的进程只有DataNode和TaskTracker。

  • 通过Web查看(hostname参考实际情况):
    • JobTracker:http://hostname:50030

    • NameNode:http://hostname:50070

    • TaskTracker:http://hostname:50060

  • 日志:/var/log/hadoop/

安全模式

  • 在HDFS启动的时候,会进入安全模式,只需要等待一会儿即可。
    • 安全模式时,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。
    • 安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。

    • 运行期通过命令也可以进入安全模式。
  • 关闭安全模式。
    hadoop dfsadmin -safemode leave

Hadoop Hello World

  • 用Hadoop执行最简单的示例WorldCount。

  • 编译WordCount.java并打包。

    mkdir classesjavac -classpath /usr/share/hadoop/hadoop-core-1.0.4.jar WordCount.java -d classesjar cvf WordCount.jar -C classes/ .
  • 添加输入文件file01和file02到HDFS。
    file01:Hello World Bye Worldfile02:Hello Hadoop Goodbye Hadoop
    hadoop fs -copyFromLocal file01 /input/file01hadoop fs -copyFromLocal file02 /input/file02
  • 查看HDFS中的目录或文件。
    hadoop fs -ls [目录]hadoop fs -cat [文件]
  • 运行示例及查看结果。
    hadoop jar WordCount.jar com.xdream.WordCount /input /outputhadoop fs -cat /output/part-00000 
  • 清除结果(下次运行必须)。
    hadoop fs -rmr /output 

Hadoop编译

  • 【待编辑】

Eclipse远程调试

安装Eclipse插件

  • 【待编辑】

调试伪分布式

修改配置文件

  • 见运行Hadoop->编写配置文件一节。

  • 配置中的localhost仅仅用于单机测试,远程调试替换为节点ip,参考“hosts配置”一节。
  • 注2:远程调试
原创粉丝点击