小型大資料平臺搭建
目錄
前言
一、 搭建環境
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