HadoopDB集群配置方法

2019-03-28 14:19|来源: 网络

本文介绍在2个节点上安装配置HadoopDB方法。各节点的名称分别为Cluster01(192.168.0.1),Cluster02(192.168.0.2)。

以下若是用 hadoop@Cluster0X:~ 代表 Cluster01 ~ Cluster02 都要做的.


参考资料1:HadoopDB Quick Start Guide

参考资料2:HadoopDB安装使用 http://www.linuxidc.com/Linux/2011-11/47671.htm

1  首先在各节点上安装Hadoop-0.20.2, 参考 http://www.linuxidc.com/Linux/2011-11/47672.htm

2  各节点安裝设置 PostgreSQL:

 

  • 安裝并为数据库建立 hadoop 帐号,假定使用密碼为 1234
  • hadoop@Cluster0X:~$ sudo apt-get install postgresql
  • hadoop@Cluster0X:~$ sudo vim /etc/postgresql/8.4/main/pg_hba.conf
    • #local   all         all                               ident
      local   all         all                               trust
      # IPv4 local connections:
      #host    all         all         127.0.0.1/32          md5
      host    all         all         127.0.0.1/32          password
      host    all         all         192.168.0.1/24          password            # 加上Cluster 機器 IP 範圍
      # IPv6 local connections:
      #host    all         all         ::1/128               md5
      host    all         all         ::1/128               password
  • hadoop@Cluster0X:~$ sudo /etc/init.d/postgresql-8.4 restart
  • hadoop@Cluster0X:~$ sudo su - postgres
  • postgres@Cluster0X:~$ createuser hadoop
    • Shall the new role be a superuser? (y/n) y
      postgres@Cluster01:~$ psql
      psql (8.4.2)
      Type "help" for help.

      postgres=# alter user hadoop with password '1234';
      ALTER ROLE
      postgres=# /q
  • 測試其他機器可否連線
    • hadoop@Cluster01:~$ createdb testdb
    • hadoop@Cluster02:~$ psql -h Cluster01 testdb 
      • 如果能够连接上,则出现以下提示:
        • 口令:
          psql (8.4.2)
          SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
          Type "help" for help.

          testdb=#

 

3 设置HadoopDB 

    首先从http://sourceforge.net/projects/hadoopdb/files/下载hadoopdb,解压后,其中包含hadoopdb.jar。

    然后再从http://jdbc.postgresql.org/download.html下载postgresql-8.4-701.jdbc4.jar。 

  • hadoop@Cluster0X:~$ cp hadoopdb.jar HADOOP_HOME/lib/
  • hadoop@Cluster0X:~$ cp postgresql-8.4-701.jdbc4.jar HADOOP_HOME/lib/
  • hadoop@Cluster0X:~$ vim HADOOP_HOME/conf/core-site.xml
    • core-site.xml 文件中添加以下内容:
      <property>
      <name>hadoopdb.config.file</name>
      <value>HadoopDB.xml</value>
      <description>The name of the HadoopDB cluster configuration file</description>
      </property>

      <property>
      <name>hadoopdb.fetch.size</name>
      <value>1000</value>
      <description>The number of records fetched from JDBC ResultSet at once</description>
      </property>

      <property>
      <name>hadoopdb.config.replication</name>
      <value>false</value>
      <description>Tells HadoopDB Catalog whether replication is enabled.
      Replica locations need to be specified in the catalog.
      False causes replica information to be ignored.</description>
      </property>

     

    • hadoop@Cluster01:~$ vim nodes.txt
    • 将集群中的所有节点IP写入此文件:
      • 192.168.0.1
      • 192.168.0.2
    • hadoop@Cluster01:~$ vim  Catalog.properties
      • #Properties for Catalog Generation
        ##################################
        nodes_file=nodes.txt
        # Relations Name and Table Name are the same
        relations_unchunked=raw
        relations_chunked=poi
        catalog_file=HadoopDB.xml
        ##
        #DB Connection Parameters
        ##
        port=5432
        username=hadoop
        password=1234
        driver=org.postgresql.Driver
        url_prefix=jdbc/:postgresql/://
        ##
        #Chunking properties
        ##
        # the number of databases on a node
        chunks_per_node=2
        # for udb0 ,udb1 ( 2 nodes = 0 ~ 1 )
        unchunked_db_prefix=udb
        # for cdb0 ,cdb1, ... , cdb5 (2 nodes x 3 chunks = 0~5 )
        chunked_db_prefix=cdb
        ##
        #Replication Properties
        ##
        dump_script_prefix=/root/dump_
        replication_script_prefix=/root/load_replica_
        dump_file_u_prefix=/mnt/dump_udb
        dump_file_c_prefix=/mnt/dump_cdb
        ##
        #Cluster Connection
        ##
        ssh_key=id_rsa-gsg-keypair
    • hadoop@Cluster01:~$ java -cp lib/hadoopdb.jar edu.yale.cs.hadoopdb.catalog.SimpleCatalogGenerator Catalog.properties
      • 产生的 HadoopDB.xml 类似下面:
      • <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <DBClusterConfiguration xmlns="http://edu.yale.cs.db.hadoop/DBConfigurationSchema">
            <Nodes Password="1234" Username="hadoop" Driver="org.postgresql.Driver" Location="
         192.168.0.1 ">
                <Relations id="raw">
                    <Partitions url="jdbc:postgresql://
         192.168.0.1 :5432/udb0" id="0"/>
                </Relations>
                <Relations id="poi">
                    <Partitions url="jdbc:postgresql://
         192.168.0.1 :5432/cdb0" id="0"/>
                    <Partitions url="jdbc:postgresql://
         192.168.0.1 :5432/cdb1" id="1"/>
                </Relations>
            </Nodes>
            <Nodes Password="1234" Username="hadoop" Driver="org.postgresql.Driver" Location="
         192.168.0.2 ">
                <Relations id="raw">
                    <Partitions url="jdbc:postgresql://
         192.168.0.2 :5432/udb1" id="1"/>
                </Relations>
                <Relations id="poi">
                    <Partitions url="jdbc:postgresql://
         192.168.0.2 :5432/cdb2" id="2"/>
                    <Partitions url="jdbc:postgresql://
         192.168.0.2 :5432/cdb3" id="3"/>
                </Relations>
            </Nodes>
        </DBClusterConfiguration>
    • 将HadoopDB.xml放入HDFS中:
    • hadoop@Cluster01:~$ hadoop dfs -put HadoopDB.xml HadoopDB.xml

    4 数据加载

    • 在此以 raw 这个 talbe 当作例子进行讲解。根据前面HadoopDB.xml的内容,集群中的两个节点,第一个节点的数据库名称为udb0 ,第二个节点为udb1,首先分别创建这两个数据库:
      • hadoop@Cluster01:~$ createdb udb0
        hadoop@Cluster02:~$ createdb udb1
    • 在对应数据库上建立raw 这个table:
      • hadoop@Cluster01:~$ psql udb0
        udb0=# 
        CREATE TABLE raw (
        ID int,
        NAME varchar(300)
        );
      • 同理如 Cluster02
    • 先将本地文件系统中的数据put到HDFS中:
    • $ hadoop fs -put  localfile  input_in_hdfs/
    • 数据切割: 使用 HadoopDB 所提供的切割工具将数据切割成n份(一般,n是集群有节点数目),以下例子中:n=2,每一份数据的分割符是'/n':
    • $ hadoop jar lib/hadoopdb.jar edu.yale.cs.hadoopdb.dataloader.GlobalHasher input_in_hdfs out_in_hdfs 2 '/n' 0
    • 在各个节点上,将切割后的数据,从hdfs中传到各个节点的本地文件系统中:
    • $ hadoop fs -get out_in_hdfs/part-00000 /home/hadoop/p0
    • 将本地文件载入到数据库中:
    • hadoop@Cluster01:~$ psql udb0 
      udb0=# COPY RAW FROM '/home/hadoop/p0' WITH DELIMITER E'/t' ;
    • 同理如 Cluster02

    5 SMS安装配置

        第3步下载的hadoopdb解压后包含SMS_dist.tar.gz文件夹。

        SMS的安装方法很简单:首先将其解压,然后打开bin目录下的hive-config.sh文件,再最后加上一句:

        export HADOOP_HOME="此处写hadoop的安装路径"。

    • 然后在hive上建立上面raw这个table对应的数据库:
    • 假設 Hive 使用的数据將儲存在 HDFS 的 /db
    • hadoop@Cluster01:~ $ hadoop dfs -mkdir /db
    • hadoop@Cluster01:~ $ SMS_dist/bin/hive
      CREATE EXTERNAL TABLE raw  (
      ID int,
      NAME string
      )
      ROW FORMAT DELIMITED
      FIELDS TERMINATED BY '|'
      STORED AS
      INPUTFORMAT 'edu.yale.cs.hadoopdb.sms.connector.SMSInputFormat'
      OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
      LOCATION '/db/raw';
    • /db/raw中的raw是指table的名称

    5  以上设定完后,即可在一台机器上(Ex: Cluster1) 執行 $ SMS_dist/bin/hive 看看成果

    • hadoop@Cluster01:~ $ SMS_dist/bin/hive
      hive> show tables;
      hive> select name from raw;
  • 相关问答

    更多
    • Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中。这篇教程介绍了利用Docker在单机上快速搭 建多节点 Hadoop集群的详细步骤。作者在发现目前的Hadoop on Docker项目所存在的问题之后,开发了接近最小化的Hadoop镜像,...
    • Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中。这篇教程介绍了利用Docker在单机上快速搭 建多节点 Hadoop集群的详细步骤。作者在发现目前的Hadoop on Docker项目所存在的问题之后,开发了接近最小化的Hadoop镜像,...
    • Redis是足够高效的。 和Memecached对比,在数据量较小大情况下,Redis性能更优秀。 数据量大到一定程度的时候,Memecached性能稍好。
    • 1)、网络地址转换(LVS/NAT) 中科红旗linux技术支持服务中心---西安站 http://linux.xab.ac.cn 中国科学院西安网络中心 中科红旗linux培训认证中心
    • Redis是足够高效的。 和Memecached对比,在数据量较小大情况下,Redis性能更优秀。 数据量大到一定程度的时候,Memecached性能稍好。
    • 在过去,大数据处理主要是采用标准化的刀片式服务器和存储区域网络(SAN)来满足网格和处理密集型工作负载。然而随着数据量和用户数的大幅增长,基础设施的需求已经发生变化,硬件厂商必须建立创新体系,来满足大数据对包括存储刀片,SAS(串行连接SCSI)开关,外部SATA阵列和更大容量的机架单元的需求。即寻求一种新的方法来存储和处理复杂的数据,Hadoop正是基于这样的目的应运而生的。Hadoop的数据在集群上均衡分布,并通过复制副本来确保数据的可靠性和容错性。因为数据和对数据处理的操作都是分布在服务器上,处理指令 ...
    • 集群允许转换以及转换中的步骤在多个服务器上并发执行。在使用kettle集群时,首先需要定义的是Cluster schema。所谓的Cluster schema就是一系列的子服务器的集合。在一个集群中,它包含一个主服务器(Master)和多个从属服务器服务器(slave)。如下图所示:   子服务器(Slave servers)允许你在远程服务器上执行转换。建立一个子服务器需要你在远程服务器上建立一个叫做“Carte”的 web 服务器,该服务器可以从Spoon(远程或者集群执行)或者转换任务中接受输入。   ...
    • 当今计算机技术已经进入以网络为中心的时代。互联网的高速发展,用户数量及网络流量的迅速增长使得越来越多服务器显得负担沉重,对网络服务器的可扩展性和 可用性提出了更高的要求。简单的提高硬件性能并不能真正解决这个问题。为此,必须采用多服务器和负载均衡技术才能满足大量并发访问的需要。 集群技术就是将 多台计算机组织起来进行协同工作来模拟一台功能更强大的服务器的技术。 集群是在一组计算机上运行相同的软件并虚拟成一台主机系统为客户端与应用提供服务。 计算机通过缆线物理连接并通过集群软件实现程序上的连接,可以使计算机实现 ...
    • 默认情况下,集群服务的文件安装在运行 Windows Server 2003 企业版或 Windows Server 2003 数据中心版的计算机上。在 Windows 的早期版本中,此功能包含在“添加/删除程序”工具中. 您无法删除集群服务,但是可以使其恢复未配置的状态: 1启动集群管理器 (CluAdmin.exe)。 2.用鼠标右键单击节点,然后单击“停止集群服务”()。 注意:如果此服务器是集群中的最后一个节点,请勿执行此步骤。 3.用鼠标右键单击节点,然后单击“退出节点”。 该步骤会使集群返回到其 ...
    • 1.把两台单节点的通过命令addNode.sh + 主机名 +soap端口 加入到dmgr中,使成为受管节点。 2.建立集群。 3.配置数据源,使作用域作用在集群上。 4.发布应用,选择集群进行发布。 5.修改插件。 大概就这样,具体你有什么困难再一点一点提吧,