1. 程式人生 > >小型大資料平臺搭建

小型大資料平臺搭建

目錄

前言

一、 搭建環境

1.1叢集規劃

二、 叢集的相關配置

2.1 新建使用者hadoop

2.2 更改主機名

2.3 主機和IP做相關對映

2.4 SSH免密碼登入

2.5 時間配置

2.6 整體安裝目錄安排

三、 Hadoop HA環境搭建

3.1 JDK配置

3.2 安裝配置Zookeeper叢集

3.3 安裝配置hadoop HA叢集

四、 Hive+MySQL 的安裝與配置

4.1 Hive的安裝部署

4.2 MySQL資料庫安裝配置

4.3 修改hive-site.xml

4.4 拷貝mysql驅動包到hive的lib目錄下

五、 HBase完全分散式叢集搭建

5.1 解壓安裝

5.2 修改hbase-site.xml

5.3 修改regionserver

5.4 將Hbase目錄分發到其他節點

5.5 啟動程序

六、 Flume安裝部署

6.1 解壓安裝

6.2 修改flume-env.sh

6.3 配置檔案拷貝

七、 Kafka安裝部署

7.1 安裝Scala

7.2 解壓安裝Kafka

7.3 修改配置檔案

7.4 啟動服務

八、 Sqoop安裝部署

8.1 解壓Sqoop

8.2 修改sqoop-env.sh

8.3 匯入MySQL驅動包

8.4 測試連線資料庫

 

前言

搭建基於CDH Hadoop高可用性的叢集,主要框架有:HDFS HA、YARN HA、Zookeeper、HBase HA、Mysql、Hive、Sqoop、Flume-ng、kafka、安裝,可用於批量資料的收集、轉換、清洗、分析、儲存、查詢。

相關軟體:

CentOS6.7 64位

jdk-7u80-linux-x64.tar.gz

hadoop-2.5.0-cdh5.3.6.tar.gz

zookeeper-3.4.5-cdh5.3.5.tar.gz

hbase-0.98.6-cdh5.3.5.tar.gz

flume-ng-1.5.0-cdh5.3.6-src.tar.gz

hive-0.13.1-cdh5.3.6.tar.gz

sqoop-1.4.5-cdh5.3.6.tar.gz

kafka_2.12-1.1.0.tgz 

下載地址:http://archive-primary.cloudera.com/cdh5/cdh/5/

 

一 搭建環境

    1.1叢集規劃

主機名

IP

安裝軟體

執行的節點

hadoop01

192.168.60.121

JDK、Hadoop

NameNode、

DFSZKFailoverController、

JournalNode、

hadoop02

192.168.60.122

JDK、Hadoop、Flume

NameNode、

DFSZKFailoverController、

JournalNode、

hadoop03

192.168.60.123

JDK、Hadoop、Kafka、Flume

ResourceManager、

JournalNode、

Kafka

hadoop04

192.168.60.124

JDK、Hadoop、Kafka、Flume

ResourceManager、

DataNode

Kafka

hadoop05

192.168.60.125

JDK、Hadoop、zookeeper、HBase、Kafka、Flume

DataNode、

NodeManager、

QuorumPeerMain、

HMaster、HRegionServer、

Kafka

hadoop06

192.168.60.126

JDK、Hadoop、zookeeper、HBase、Flume

DataNode、

NodeManager、

QuorumPeerMain、

HMaster、HRegionServer

hadoop07

192.168.60.127

JDK、Hadoop、zookeeper、HBase、Hive、MySQL、Sqoop

DataNode、

NodeManager 、

QuorumPeerMain、

HRegionServer、

Runjar

說明:

1、本次搭建,安排了兩個NameNode節點,分別是1、2號機,兩臺NameNode,一臺處於active狀態,另一臺處於standby狀態。ActiveNameNode對外提供服務,Standby NameNode不對外提供服務,僅同步active namenode狀態,以便能夠在它失敗時進行快速切換。

2、Hadoop 官方提供了兩種 HDFSHA的解決方案,一種是NFS,另一種是QJM。在本次搭建中,使用QJK,主備NameNode通過JournalNode同步資料,只要成功寫入多數JournalNode即認為寫入成功,所以要配置奇數個JournalNode,我們配置了3個。

3、本次搭建上,配置了2個ResourceManager,一個是Active,一個是Standby,狀態由zookeeper進行協調

二、叢集的相關配置

    2.1 新建使用者hadoop

在7臺機器都新建hadoop的使用者名稱,都以這個普通使用者的許可權進行操作,設定同樣的口令

adduser hadoop

給使用者hadoop設定sudo許可權

vi /etc/sudoers

        hadoop    ALL=(ALL)       ALL

2.2 更改主機名

叢集所有的機器都要做這個操作。

輸入 vim /etc/sysconfig/network

修改localhost.localdomain主機名稱,每臺名稱都不一樣

例如:  HOSTNAME=hadoop01/2/3/4/5/6/7/

注: 名稱更改了之後輸入reboot重啟才會生效。

2.3 主機和IP做相關對映

    在01機器上操作,設定好無密碼登入後,scp到其它6臺機器上

        vim /etc/hosts

    新增所有主機對映

        192.168.60.121  hadoop01   

        192.168.60.122  hadoop02

        192.168.60.123  hadoop03

        192.168.60.124  hadoop04

        192.168.60.125  hadoop05

        192.168.60.126  hadoop06

        192.168.60.127  hadoop07

 

2.4 SSH免密碼登入

首先在每臺機器上都執行一遍生成祕鑰檔案 

輸入:ssh-keygen -t rsa

然後分別將hadoop01、hadoop02、hadoop03、hadoop04、hadoop05、hadoop06、hadoop07的公匙傳送到hadoop01上,在hadoop01上的實現免密碼登陸。

    hadoop01上操作:ssh-coyp-id hadoop01

hadoop02上操作:ssh-coyp-id hadoop01

hadoop03上操作:ssh-coyp-id hadoop01

hadoop04上操作:ssh-coyp-id hadoop01

hadoop05上操作:ssh-coyp-id hadoop01 

hadoop06上操作:ssh-coyp-id hadoop01

hadoop07上操作:ssh-coyp-id hadoop01

 

然後將hadoop01目錄./.ssh下的authorized_keys檔案scp到其他機器的 /root/.ssh 目錄下

scp authorized_keys  Hadoop02:/home/hadoop/.ssh

scp authorized_keys  Hadoop03:/home/hadoop/.ssh

scp authorized_keys  Hadoop04:/home/hadoop/.ssh

scp authorized_keys  Hadoop05:/home/hadoop/.ssh

scp authorized_keys  Hadoop06:/home/hadoop/.ssh

scp authorized_keys  Hadoop07:/home/hadoop/.ssh

2.5 時間配置

    本次搭建以hadoop01主機的時鐘為準,hadoop01主機開通ntpd服務

     檢視當前系統ntpd服務是否開啟:$ sudo service ntpd status

     開啟服務:$ sudo service ntpd start

     設定開機啟動:$ sudo chkconfig ntpd on

     修改系統配置檔案

$ sudo vi /etc/ntp.conf

第一處修改:修改成自己的網段

Restrict 192.168.60.121 mask 255.255.255.0 nomodify notrap

第二次修改:模擬內網環境,不需要連外網,註釋掉下面引數

第三次修改:將本地服務註釋去掉

修改完儲存退出,重啟ntpd服務生效

$ sudo service ntpd restart

            每臺機器都編寫一個crontab定時任務,每十分鐘執行一次

                0-59/10 * * * * /usr/sbin/ntpdate hadoop01

2.6 整體安裝目錄安排

     所有配置框架都安裝在~/opt/modules/目錄下

三、Hadoop HA環境搭建

3.1 JDK配置

   在01機解壓JDK安裝包

   $ tar –zxvf home/hadoop/opt/software/jdk-7u80-linux-x64.tar.gz –C home/hadoop/opt/modules

   配置JAVA_HOME

   $ sudo vi /etc/profile

   export JAVA_HOME=/home/hadoop/opt/modules/jdk1.7.0_80

   $ sudo source /etc/profile

3.2 安裝配置Zookeeper叢集

   先再hadoop05機器上操作

   解壓Zookeeper到目錄/opt/modules/下

   修改zoo.cfg檔案

        指定本地資料儲存目錄:dataDir=/home/hadoop/opt/modules/zookeeper-3.4.5/data/zkData

        指定所有ZK節點服務端的例項

servier.5=hadoop05:2888:3888

servier.6=hadoop06:2888:3888

servier.7=hadoop07:2888:3888

        在/opt/modules/zookeeper-3.4.5/data/zkData下vi myid檔案,寫1,儲存退出

將配置檔案分發到其他節點

$ scp –r zookeeper-3.4.5/ hadoop06:/opt/modules/

$ scp –r zookeeper-3.4.5/ hadoop07:/opt/modules/

在06和07機器上修改分發好的myid檔案,改成對應的編號:06對應6,07對應7

啟動: $ bin/zkServer.sh start

檢視狀態: $ bin/zkServier.sh status

3.3 安裝配置hadoop HA叢集(在1號機上操作)

3.3.1、解壓hadoop安裝包到目錄/opt/modules/下 (所機器全部統一這個目錄)

3.3.2、指定JAVA_HOME目錄

進入hadoop的配置目錄/home/hadoop/hadoop-2.5.0/etc/hadoop

編輯hadoop-env.sh,指定JAVA_HOME目錄

export JAVA_HOME=/home/hadoop/opt/modules/jdk1.7.0_80

3.3.3 編輯core-site.xml

<!-- Put site-specific propertyoverrides in this file. -->

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://ns1/</value>

 </property>

<property>

 <name>hadoop.tmp.dir</name>

 <value>/home/hadoop/opt/modules/hadoop-2.5.0/tmp</value>

</property>

<property>

<name>ha.zookeeper.quorum</name>

<value>hadoop05:2181,hadoop06:2181,hadoop07:2181</value>

</property>

</configuration>

  3.3.4 編輯hdfs-site.xml

<configuration>

 <!--指定hdfs的nameservice為ns1,需要和core-site.xml中的保持一致 -->

 <property>

<name>dfs.nameservices</name>

<value>ns1</value>

 </property>

<!--ns1下面有兩個NameNode,分別是nn1,nn2 -->

<property>

<name>dfs.ha.namenodes.ns1</name>

<value>nn1,nn2</value>

 </property>

<!—指定兩個namenode的RPC通訊地址 -->

<property>

<name>dfs.namenode.rpc-address.ns1.nn1</name>

<value>hadoop01:9000</value>

</property>

<property>

<name>dfs.namenode.rpc-address.ns1.nn2</name>

<value>hadoop02:9000</value>

</property>

<!--指定兩個namenode的http通訊地址 -->

<property>

<name>dfs.namenode.http-address.ns1.nn1</name>

<value>hadoop01:50070</value>

</property>

<property>

<name>dfs.namenode.http-address.ns1.nn2</name>

<value>hadoop02:50070</value>

</property>

<!--指定NameNode的元資料在JournalNode上的存放位置 -->

<property>

  <name>dfs.namenode.shared.edits.dir</name>

  <value>qjournal://hadoop01:8485;node02:8485;node03:8485/ns1</value>

</property>

<!--指定JournalNode在本地磁碟存放資料的位置 -->

<property>

  <name>dfs.journalnode.edits.dir</name>

  <value>/home/hadoop/opt/modules/hadoop-2.5.0/journaldata</value>

</property>

<!--開啟NameNode失敗自動切換 -->

<property>

  <name>dfs.ha.automatic-failover.enabled</name>

  <value>true</value>

</property>

<!--配置自動切換實現方式 -->

<property>

  <name>dfs.client.failover.proxy.provider.ns1</name>

<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

<!--配置隔離機制方法,本次使用SSH-->

<property>

  <name>dfs.ha.fencing.methods</name>

  <value>sshfence shell(/bin/true)</value>

</property>

  <!--使用sshfence隔離機制時需要ssh免登陸 -->

<property>

  <name>dfs.ha.fencing.ssh.private-key-files</name>

  <value>/home/hadoop/.ssh/id_rsa</value>

</property>

<!--配置sshfence隔離機制超時時間 -->

<property>

  <name>dfs.ha.fencing.ssh.connect-timeout</name>

  <value>30000</value>

</property>

</configuration>

  3.3.5  編輯mapred-site.xml

<configuration>

<property>

    <name>mapreduce.framework.name</name>

    <value>yarn</value>

</property>

<property>

    <name>mapreduce.jobhistory.address</name>

    <value>hadoop01:10020</value>

</property>

<property>

    <name>mapreduce.jobhistory.webapp.address</name>

    <value>hadoop01:19888</value>

</property>

<property>

    <name>mapred.map.tasks</name>

    <value>10</value>

</property>

<property>

    <name>mapred.reduce.tasks</name>

    <value>2</value>

</property>

</configuration>

 3.3.6  編輯 yarn-site.xml

<configuration>

<property>

     <name>yarn.nodemanager.aux-services</name>

     <value>mapreduce_shuffle</value>

</property>

<property>

     <name>yarn.resourcemanager.hostname.rm1</name>

     <value>hadoop03</value>

</property>

<property>

     <name>yarn.resourcemanager.hostname.rm2</name>

     <value>hadoop04</value>

</property>

<property>

     <name>yarn.resourcemanager.ha.enabled</name>

     <value>true</value>

</property>

<property>

     <name>yarn.resourcemanager.cluster-id</name>

     <value>yrc</value>

</property>

<property>

     <name>yarn.resourcemanager.ha.rm-ids</name>

     <value>rm1,rm2</value>

</property>

<property>

     <name>yarn.resourcemanager.zk-address</name>

     <value>hadoop05:2181,hadoop06:2181,hadoop07:2181</value>

</property>

</configuration>

    3.3.7 修改slaves

[hadoop01]$ cat slaves

node05

node06

node07

[hadoop03]$ cat slaves

node05

node06

node07

    3.3.8、將配置好的hadoop拷貝到其它節點

scp -r opt/modules/hadoop hadoop02:opt/modules/hadoop

scp -r opt/modules/hadoop hadoop03:opt/modules/hadoop

其它幾個節點類似

同時也要把 /etc/profile   /etc/hosts 兩個檔案複製到所有節點機上

    3.3.9、 先啟動05、06、07節點zookeeper

            $ bin/zkServer.sh start

    3.3.10、 再啟動01、02、03節點的JournalNode

            $ sbin/hadoop-daemon.sh start journalnode

    3.3.11 hadoop格式化

            在01號上執行 bin/hdfs namenode –format

    3.3.12  同步元資料

啟動01機器的namenode

切換到02機器上執行元資料同步

                $ bin/hdfs namenode –bootstrapStandby

    3.3.13  初始化ZKFC

        先停掉兩臺namenode服務程序,執行

        $ bin/hdfs zkfc –formatZK

        進入ZK客戶端,檢查是否生成了hadoop-ha的節點目錄

    3.3.13  啟動ZKFC監聽器

        在兩臺namenode所在的機器上分別啟動ZKFC監聽器

        $ sbin/hadoop-daemon.sh start zkfc

       3.3.14   測試

              UI頁面檢視

              上傳產品到HDFS測試

              執行WordCount測試

四、 Hive + MySQL 的安裝與配置

    4.1 Hive的安裝部署 (在07機器上)

        4.1.1 解壓安裝Hive到/opt/modules/目錄下

             tart –zxvf hive-0.13.1-cdh5.3.6.tar.gz –C ~/opt/modules

        4.1.2  配置Hive資料儲存目錄

            bin/hdfs dfs –mkdir /tmp

            bin/hdfs dfs –mkdir /uer/hive/warehouse

            bin/hdfs dfs –chmod g+w /tmp

            bin/hdfs dfs –chmod g+w /user/hive/warehouse

        4.1.3   修改hive-env.sh

            # Set HADOOP_HOME

            HADOOP_HOME=/opt/modules/hadoop-2.5.0

            # Hive Configuration Directory

            export HIVE_CONF_DIR=/opt/modules/hive-0.13.1-bin/conf

        4.1.4   啟動Hive

            $ bin/hive

    4.2 MySQL資料庫安裝配置

        4.2.1 安裝mysql (在07機器上)

查詢系統中是否存在MySQL

$ sudo rpm –qa|grep mysql

解除安裝自帶MySQL

$ sudo rpem –e –nodeps ……

yum安裝MySQL

$ sudo yum –y insall mysql-server

檢視MySQL是否開啟

$ sudo service mysqld status

啟動服務

$ sudo service mysqld start

設定開機啟動MySQL

$ sudo chkconfig mysqld on

4.2.2   設定MySQL管理員root的密碼

mysqladmin –u root passward `123456`

進入mysql –uroot –p

4.2.3   設定MySQL連結的許可權

在mysql資料庫user表中插入一條資料

                GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 123456 WITH GRANT OPTION;

刪除表中的資訊

delect from user where host=`127.0.0.1`

delect from user where host=`hadoop07`

delect from user where host=`localhost`

重新整理並退出MySQL

flush privileges;

quit

sudo service mysqld restart

4.3 修改hive-site.xml

<propery>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://beifeng07:3306/metastore?createDateIfNotExist=true</value>

</propery>

 

<propery>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>con.mysql.jdbc.Driver</value>

</propery>

 

<propery>

<name>javax.jdo.option.ConnectionUserName</name>

<value>root</value>

</propery>

 

<propery>

<name>javax.jdo.option.ConnectionPassword</name>

<value>123456</value>

</propery>

4.4 拷貝mysql驅動包到hive的lib目錄下

$ cp –r mysql-connector-java-5.1.27-bin.jar /opt/modules/hive-0.13.1-bin/lib/

 

五  HBase完全分散式叢集搭建

        5.1 解壓安裝 (先在05機器上操作)

            $ tar –zxvf hbase-0.98.6-cdh5.3.5.tar.gz –C ~/opt/modules/

        5.2 修改hbase-site.xml

<propery>

<name>hbase.tmp.dir</name>

<value>/opt/modules/hbase-0.98.6-hadoop2/data/tmp</value>

            </propery>

<propery>

<name>hbase.rootdir</name>

<value>hdfs://hadoop05:8020/hbase</value>

            </propery>

 

<propery>

<name>hbase.cluster.distributed</name>

<value>true</value>

            </propery>

 

<propery>

<name>hbase.zookeeper.quorum</name>

<value>hadoop05,hadoop06,hadoop07</value>

            </propery>

        5.3 修改regionserver,新增

            hadoop05

            hadoop06

            hadoop07

5.4 將Hbase目錄分發到其他節點

$ scp –r hbase-0.98.6-hadoop2/ hadoop06:/opt/modules/

$ scp –r hbase-0.98.6-hadoop2/ hadoop07:/opt/modules/

5.5 啟動程序

    5.5.1 分別啟動hadoop各節點和zookeeper各節點

    5.5.2 啟動hadoop05和hadoop06機器Hmaseter

    $ bin/hbase-daemon.sh start master

啟動hadoop05、hadoop06、hadoop07機器HregionServer

    $ bin/hbase-daemon.sh start regionserver

六  Flume安裝部署

分別在hadoop02、hadoop03、hadoop04、hadoop05、hadoop06機器上操作

6.1 解壓安裝包到/opt/modules/目錄下

    $ tar –zxvf flume-ng-1.5.0-cdh5.3.6-src.tar.gz –C ~/opt/modules/

6.2 修改flume-env.sh

    export JAVA_HOME=/home/hadoop/opt/modules/jdk1.7.0_80

6.3 配置檔案拷貝

    將hadoop的core-site.xml和hdfs-site.xml檔案拷貝到flume/conf下

可通過5臺機器部署扇出或扇入、高可用性操作

 

七  Kafka安裝部署

        在hadoop03、hadoop04、hadoop05機器上操作

7.1 安裝Scala

7.2 解壓安裝Kafka

    $ tar –zxf kafka_2.11-0.8.2.1.tgz –C ~/opt/modules/

7.3 修改配置檔案

    hadoop03上配置檔案為 server3.properties,自定義配置如下

        broker.id=3

            port=9093

    zookeeper.connect=hadoop03:2181,hadoop04:2181,hadoop05:2181/kafka

    hadoop04上配置檔案為 server4.properties,自定義配置如下

        broker.id=4

            port=9094

    zookeeper.connect=hadoop03:2181,hadoop04:2181,hadoop05:2181/kafka

hadoop05上配置檔案為 server5.properties,自定義配置如下

        broker.id=5

            port=9095

    zookeeper.connect=hadoop03:2181,hadoop04:2181,hadoop05:2181/kafka

7.4 啟動服務

    先啟動各zk服務

    $ bin/zkServer.sh start

    再啟動kafka服務

    $ bin/kafka-server-start.sh

八   Sqoop安裝部署

8.1 解壓Sqoop (在hadoop07主機上)

                         tar –zxf sqoop-1.4.5-cdh5.3.6.tar.gz –C ~/opt/modules/

8.2 修改sqoop-env.sh

           指定各框架安裝目錄

           export HADOOP_COMMON_HOME=

export HADOOP_MAPRED_HOME=

export HIVE_HOME=

export HBASE_HOME=

……

8.3 匯入MySQL驅動包

           將MySQL驅動包放到sqoop的lib目錄下

8.4 測試連線資料庫

           bin/sqoop \

list-tables \

--connect jdbc:mysql://hadoop07:3306/metastore \

--username root \

--password 123456