zoukankan      html  css  js  c++  java
  • 大数据测试之hadoop集群配置和测试

    大数据测试之hadoop集群配置和测试

     

    一、准备(所有节点都需要做):
    系统:Ubuntu12.04
    java版本:JDK1.7
    SSH(ubuntu自带)
    三台在同一ip段的机器,设置为静态IP
    机器分配:一台master,两台slave

    主机信息是(hosts文件添加如下信息):
    192.168.88.123 h1
    192.168.88.124 h2
    192.168.88.125 h3
    其中第一项是内网IP ,第二项是主机名

    各节点作用:
    h1:NameNode、JobTracker
    h2:DataNode、TaskTracker
    h3:DataNode、TaskTracker

    a.安装SSH:
    sudo apt-get install ssh
    测试:ssh localhost
    输入当前用户的密码回车 没异常说明安装成功
    b.开启SSHD服务:
    安装:sudo apt-get install openssh-server
    确认是否启动:
    ps -e | grep ssh
    找到到sshd,有即启动了。
    c.创建Hadoop用户(名为grid)
    adduser grid

    二、配置Hadoop
      1.无密码登陆
      在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个datanode上的各种守护进程的,这就须要在节点之间执行指令的时候是不须要输入密码的形式,故我们须要配置SSH运用无密码公钥认证的形式。
     首先设置namenode的ssh为无需密码的、自动登陆。
      换切到grid用户
      su grid
      cd
      ssh-keygen -t rsa
      完成后会在grid目录产生隐藏文件.ssh,通过ls查看,然后
      cp id_rsa.pub authorized_keys
      测试
      ssh h1
      第一次会提示确认继续连接,打yes,这会把该服务器添加到你的已知主机列表中
      同样在h2,h3上做以上操作
      最后,如何使各个节点相互访问不需要密码,将三个节点的authorized_keys文件里面的内容合成一个文件然后替换掉原来的,替换完毕后可以用 
      ssh XX(XX为主机名)
      相互测试是否连接成功。


      2.配置Hadoop文件:
    在hadoop/conf目录下修改文件有hadoop-env.sh,core-site.xml,hdfs-site.xml,mapred-site.xml,master,slaves
    hadoop-env.sh
    修改JAVA_HOME路径
    export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45
    记得去掉前面的#
    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://h1:49000</value>
    </property>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/grid/var</value>
    </property>
    </configuration>


    1)fs.default.name是NameNode的URI。hdfs://主机名:端口/
    2)hadoop.tmp.dir :Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。

    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/grid/name1,/home/grid/name2</value> 
    <description> </description>
    </property>
    <property>
    <name>dfs.data.dir</name>
    <value>/home/grid/data1,/home/grid/data2</value>
    <description> </description>
    </property>
    <property>
    <name>dfs.replication</name>
    <value>2</value>
    </property>
    </configuration>
    1) dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。 当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。
    2) dfs.data.dir是DataNode存放块数据的本地文件系统路径,逗号分割的列表。 当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
    3)dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。

    注意:此处的name1、name2、data1、data2目录不能预先创建,hadoop格式化时会自动创建,如果预先创建反而会有问题。

    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>h1:49001</value> 
    </property>
    <property>
    <name>mapred.local.dir</name>
    <value>/home/grid/var</value>
    </property>
    </configuration>
    1)mapred.job.tracker是JobTracker的主机(或者IP)和端口。主机:端口。


    配置masters和slaves主从结点
    master

    slaves
    h2
    h3

    配置完毕,把配置好的hadoop文件夹拷贝到其他集群的机器上,并保证其他机器的JDK 安装路径一致(如果不一致就另外再修改配置文件conf/hadoop-env.sh憋)

    scp -r /home/grid/hadoop-0.20.2 grid@h2:/home/grid

    scp -r /home/grid/hadoop-0.20.2 grid@h2:/home/grid
    三、启动Hadoop

    1、先格式化一个新的分布式文件系统

    cd

    bin/hadoop namenode -format

    成功后系统输出:

    INFO common.Storage: Storagedirectory /opt/hadoop/hadoopfs/name2 has been successfully formatted.

    这一行,看到successfully单词木有,格式化成功。

    执行完后可以到master机器上看到/home/hadoop//name1和/home/hadoop//name2两个目录。

    2.启动所有节点

    在主节点master上面启动hadoop,主节点会启动所有从节点的hadoop。

    cd

    bin/start-all.sh(同时启动HDFS和Map/Reduce)

    输出:

    grid@h1:~/hadoop-0.20.2$ bin/start-all.sh
    starting namenode, logging to /home/grid/hadoop-0.20.2/bin/../logs/hadoop-grid-namenode-h1.out
    h2: starting datanode, logging to /home/grid/hadoop-0.20.2/bin/../logs/hadoop-grid-datanode-h2.out
    h3: starting datanode, logging to /home/grid/hadoop-0.20.2/bin/../logs/hadoop-grid-datanode-h3.out
    h1: starting secondarynamenode, logging to /home/grid/hadoop-0.20.2/bin/../logs/hadoop-grid-secondarynamenode-h1.out
    starting jobtracker, logging to /home/grid/hadoop-0.20.2/bin/../logs/hadoop-grid-jobtracker-h1.out
    h2: starting tasktracker, logging to /home/grid/hadoop-0.20.2/bin/../logs/hadoop-grid-tasktracker-h2.out
    h3: starting tasktracker, logging to /home/grid/hadoop-0.20.2/bin/../logs/hadoop-grid-tasktracker-h3.out
    没有出现什么Error或Warming之类的就表示运行成功了

    运行成功后看看程序是否正常

    /usr/lib/jvm/jdk1.7.0_45/bin//jps

    可以看到在h1结点上有进程

    2928 NameNode
    3319 Jps
    3105 SecondaryNameNode
    3184 JobTracker

    很熟悉的字眼我就不多说了,在slaves结点上也检测下是否正常,会有

    TaskTracker,DataNode

    若没缺少以上进程即配置有问题。

    四、测试

    建一个目录,里面建两个txt文件,用hadoop项目现有的hadoop-0.20.2-examples.jar例子测试txt里面单词的出现次数。

    cd

    mkdir input

    cd input

    echo "hello world" > test1.txt

    echo "hello hadoop" > test2.txt

    建完文件后,将文件放到HDFS系统的in目录上

    cd ../hadoop-0.20.2

    bin/hadoop dfs -put ../input in

    测试了,运行

    bin/hadoop jar hadoop-0.20.2-examples.jar wordcount in out

    会出现一系列的运行信息
    grid@h1:~/hadoop-0.20.2$ bin/hadoop jar hadoop-0.20.2-examples.jar wordcount in out
    14/10/12 14:04:05 INFO input.FileInputFormat: Total input paths to process : 2
    14/10/12 14:04:06 INFO mapred.JobClient: Running job: job_201312261337_0006
    14/10/12 14:04:07 INFO mapred.JobClient: map 0% reduce 0%
    14/10/12 14:04:14 INFO mapred.JobClient: map 50% reduce 0%
    14/10/12 14:04:15 INFO mapred.JobClient: map 100% reduce 0%
    14/10/12 14:04:23 INFO mapred.JobClient: map 100% reduce 100%
    14/10/12 14:04:25 INFO mapred.JobClient: Job complete: job_201312261337_0006
    14/10/12 14:04:25 INFO mapred.JobClient: Counters: 17
    14/10/12 14:04:25 INFO mapred.JobClient: Job Counters 
    14/10/12 14:04:25 INFO mapred.JobClient: Launched reduce tasks=1
    14/10/12 14:04:25 INFO mapred.JobClient: Launched map tasks=2
    14/10/12 14:04:25 INFO mapred.JobClient: Data-local map tasks=2
    14/10/12 14:04:25 INFO mapred.JobClient: FileSystemCounters
    14/10/12 14:04:25 INFO mapred.JobClient: FILE_BYTES_READ=55
    14/10/12 14:04:25 INFO mapred.JobClient: HDFS_BYTES_READ=25
    14/10/12 14:04:25 INFO mapred.JobClient: FILE_BYTES_WRITTEN=180
    14/10/12 14:04:25 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=25
    14/10/12 14:04:25 INFO mapred.JobClient: Map-Reduce Framework
    14/10/12 14:04:25 INFO mapred.JobClient: Reduce input groups=3
    14/10/12 14:04:25 INFO mapred.JobClient: Combine output records=4
    14/10/12 14:04:25 INFO mapred.JobClient: Map input records=2
    14/10/12 14:04:25 INFO mapred.JobClient: Reduce shuffle bytes=61
    14/10/12 14:04:25 INFO mapred.JobClient: Reduce output records=3
    14/10/12 14:04:25 INFO mapred.JobClient: Spilled Records=8
    14/10/12 14:04:25 INFO mapred.JobClient: Map output bytes=41
    14/10/12 14:04:25 INFO mapred.JobClient: Combine input records=4
    14/10/12 14:04:25 INFO mapred.JobClient: Map output records=4
    14/10/12 14:04:25 INFO mapred.JobClient: Reduce input records=4

    没有什么Error或Warming之类的字眼特别是有
    map 100% reduce 100%
    表示成功运行了,结果可一输入

    bin/hadoop dfs -cat out/*

    看到结果

    hadoop 1
    hello 2
    world 1

  • 相关阅读:
    C# 操作配置文件
    C# Excel操作类
    没有找到 mspdb100.dll 的解决办法
    工厂方法模式
    .Net互操作2
    The certificate used to sign “AppName” has either expired or has been revoked. An updated certificate is required to sign and install the application解决
    手机抓包xcode自带命令行工具配合wireshark实现
    expecting SSH2_MSG_KEX_ECDH_REPLY ssh_dispatch_run_fatal问题解决
    使用ssh-keygen设置ssh无密码登录
    远程复制文件到服务器
  • 原文地址:https://www.cnblogs.com/poptest/p/5239399.html
Copyright © 2011-2022 走看看