Ambari?自動部署Hadoop集群


自動部署?Ambari

Ambari 跟 Hadoop 等開源軟件一樣,也是 Apache Software Foundation 中的一個項目,並且是頂級項目。就 Ambari 的作用來說,就是創建、管理、監視 Hadoop 的集群,但是這里的 Hadoop 是廣義,指的是 Hadoop 整個生態圈(例如 Hive,Hbase,Sqoop,Zookeeper 等)。它幫助我們更好的去管理Hadoop集群相關的服務,也支持一些擴展,可以讓我們去定制一些服務。
你是不是為了配置hadoop集群傷透了腦筋?為了集群添加機器而頭痛。如果你遇到了Ambari你就會發現,原來他就是你的救世主。
Ambari 自身也是一個分布式架構的軟件,主要由兩部分組成:Ambari Server 和 Ambari Agent。簡單來說,用戶通過 Ambari Server 通知 Ambari Agent 安裝對應的軟件;Agent 會定時地發送各個機器每個軟件模塊的狀態給 Ambari Server,最終這些狀態信息會呈現在 Ambari 的 GUI,方便用戶了解到集群的各種狀態,並進行相應的維護。
Ambari的詳細介紹及相關信息可以瀏覽下面的網址,雖然他很NB,但是不是我們今天的重點!
Ambari——大數據平台的搭建利器

自動部署腳本

為什么Ambari那么NB卻不用呢,其實很想用,畢竟這已經是一個很成熟的軟件了,但是不能用或者說是不方便用。
我司項目都是直接下載的apache開源的hadoop相關源碼,部分軟件進行了自己的修改重新編譯的。這是其一。其二就是ambari需要從repo源。但是某些情況下無外網,無內網源自己去部署程序還得先搭建cdh相關的repo源是一件非常麻煩的事情。。。而且,基本的配置現在基本都定下來了,基本就是更改一下相關軟件的hostname或者ip就可以搞定的事情,沒必要上ambari的大殺器。所以還是自己搞了一坨腳本,其目的就是將各個軟件的tar包ssh到各個服務器節點,然后根據配置進行解壓,復制對應的配置文件到對應的目錄。也能實現集群的部署操作,后面還可以繼續修改,支持主機的添加等功能。
主體邏輯:讀取集群配置,ssh傳輸軟件包到各個服務器,根據配置生成對的配置文件,ssh傳輸到各個服務器各個軟件對應的目錄。齊活了。
下面還是簡單看一下代碼吧,實現相對比較簡單:
集群配置:

{
        "clusterName":"hadoopy",
        "namenode":"namenode-1",
        "datanode": [
        "datanode-1",
        "datanode-2"
        ],
        "regionservers": [
        "datanode-1",
        "datanode-2"
        ],
        "hmaster":"namenode-1",
        "metastore": [
        "namenode-1",
        "datanode-1"
        ],
        "mysql":"datanode-1",
        "azkaban":"datanode-1",
        "ldap":"datanode-1",
        "redis":"datanode-1",
        "coordinator":"namenode-1",
        "workers": [
        "datanode-1",
        "datanode-2"
        ],
        "spark": [
        "datanode-1",
        "datanode-2"
        ],
        "zookeeper": [
        "namenode-1",
        "datanode-1",
        "datanode-2"
        ],
        "hosts": [
        {
        "hostname":"namenode-1",
        "ip":"192.168.0.100",
        "password":"51Weather",
        "port":22
        },
        {
        "hostname":"datanode-1",
        "ip":"192.168.0.101",
         "password":"51Weather",
        "port":22
        },
        {
        "hostname":"datanode-2",
        "ip":"192.168.0.102",
        "password":"51Weather",
        "port":22
        }
        ]
    }

由以上配置可見,我們有三台機器,然后將hadoop,hbase,hive metastore,presto,zookeeper等分別裝到我們配置的機器上去。那我們腳本所做的工作其實跟上篇文章所做的工作差不多,首先需要配置免密,安裝JDK,安裝程序,配置等等。
舉一下hadoop安裝的例子,腳本首先會根據上面的集群配置生成對應的配置文件:

def set_hdfs_site():
        hdfs_site = os.path.join(TMP_DIR,"hdfs-site.xml")
        with open(hdfs_site,"w") as f:
            f.write(HDFS_SITE.replace("KEYTAB_PATH", KEYTAB_PATH))
    def set_core_site(ldap, namenode):
        core_site = os.path.join(TMP_DIR,"core-site.xml")
        with open(core_site,"w") as f:
            f.write(CORE_SITE.replace("NAMENODE", namenode)
            .replace("TMP_DIR", HADOOP_TMP_DIR)
            .replace("LDAP_URI","ldap://{0}".format(ldap)).replace("LDAP_PWD", LDAP_PWD))

然后按照hadoop:

def hadoop(ssh_client):
        hadoop_path = os.path.join(RESOURCES_DIR,'hadoop-2.7.3.tar.gz')
        remote_path ="/home/{0}/{1}".format(USER,'hadoop-2.7.3.tar.gz')
        ssh_client.transport_file(hadoop_path, remote_path)
        ssh_client.exec_shell_command("tar zxf {0}".format(remote_path))
        ssh_client.exec_shell_command("mkdir {0}".format(HADOOP_TMP_DIR))
       ssh_client.exec_shell_command("mkdir /data1",use_root=True)
        ssh_client.exec_shell_command("mkdir /name1",use_root=True)
        src_path = (
        os.path.join(TMP_DIR,"hdfs-site.xml"),
        os.path.join(TMP_DIR,"core-site.xml"),
        os.path.join(TMP_DIR,"mapred-site.xml"),
    os.path.join(TMP_DIR,"yarn-site.xml"),
    os.path.join(TMP_DIR,"hadoop-slaves")
    )
    dist_path = (
    os.path.join(HADOOP_DEFAULT_CONF_PATH,"hdfs-site.xml"),
    os.path.join(HADOOP_DEFAULT_CONF_PATH,"core-site.xml"),
    os.path.join(HADOOP_DEFAULT_CONF_PATH,"mapred-site.xml"),
    os.path.join(HADOOP_DEFAULT_CONF_PATH,"yarn-site.xml"),
    os.path.join(HADOOP_DEFAULT_CONF_PATH,"slaves")
    )
    map(ssh_client.transport_file, src_path, dist_path)
    print("install hadoop seccuss")
全部代碼可以在hadoop_install_github看到,就不贅述了,沒什么技術含量。如果配置已定或者網絡不太方便,我覺得自己寫腳本比用ambari要來的快一些,但是還是要稱贊一下ambari。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM