目錄java
前言node
1、 搭建環境mysql
1.1集羣規劃linux
2、 集羣的相關配置web
2.1 新建用戶hadoopsql
2.2 更改主機名shell
2.3 主機和IP作相關映射數據庫
2.4 SSH免密碼登陸apache
2.5 時間配置bootstrap
2.6 總體安裝目錄安排
3、 Hadoop HA環境搭建
3.1 JDK配置
3.2 安裝配置Zookeeper集羣
3.3 安裝配置hadoop HA集羣
4、 Hive+MySQL 的安裝與配置
4.1 Hive的安裝部署
4.2 MySQL數據庫安裝配置
4.3 修改hive-site.xml
4.4 拷貝mysql驅動包到hive的lib目錄下
5、 HBase徹底分佈式集羣搭建
5.1 解壓安裝
5.2 修改hbase-site.xml
5.3 修改regionserver
5.4 將Hbase目錄分發到其餘節點
5.5 啓動進程
6、 Flume安裝部署
6.1 解壓安裝
6.2 修改flume-env.sh
6.3 配置文件拷貝
7、 Kafka安裝部署
7.1 安裝Scala
7.2 解壓安裝Kafka
7.3 修改配置文件
7.4 啓動服務
8、 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、安裝,可用於批量數據的收集、轉換、清洗、分析、存儲、查詢。
相關軟件:
下載地址: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 |
說明:
一、本次搭建,安排了兩個NameNode節點,分別是一、2號機,兩臺NameNode,一臺處於active狀態,另外一臺處於standby狀態。ActiveNameNode對外提供服務,Standby NameNode不對外提供服務,僅同步active namenode狀態,以便可以在它失敗時進行快速切換。
二、Hadoop 官方提供了兩種 HDFSHA的解決方案,一種是NFS,另外一種是QJM。在本次搭建中,使用QJK,主備NameNode經過JournalNode同步數據,只要成功寫入多數JournalNode即認爲寫入成功,因此要配置奇數個JournalNode,咱們配置了3個。
三、本次搭建上,配置了2個ResourceManager,一個是Active,一個是Standby,狀態由zookeeper進行協調
2、集羣的相關配置
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
而後分別將hadoop0一、hadoop0二、hadoop0三、hadoop0四、hadoop0五、hadoop0六、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/目錄下
3、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.一、解壓hadoop安裝包到目錄/opt/modules/下 (所機器所有統一這個目錄)
3.3.二、指定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.八、將配置好的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.九、 先啓動0五、0六、07節點zookeeper
$ bin/zkServer.sh start
3.3.十、 再啓動0一、0二、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測試
4、 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
啓動hadoop0五、hadoop0六、hadoop07機器HregionServer
$ bin/hbase-daemon.sh start regionserver
六 Flume安裝部署
分別在hadoop0二、hadoop0三、hadoop0四、hadoop0五、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安裝部署
在hadoop0三、hadoop0四、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