1、環境準備java
操做系統版本:
centos7 64位
hadoop版本:
hadoop-2.7.3
hbase版本:
node
hbase-1.2.4linux
一、機器及角色shell
IP | 角色 | |||||||||
192.168.11.131 | Namenode | DFSZKFailoverController | ResourceManager | Jobhistory | HMaster | QuorumPeerMain | ||||
192.168.11.132 | Namenode | DFSZKFailoverController | HMaster | QuorumPeerMain | ||||||
192.168.11.133 | Datanode | NodeManager | JournalNode | HRegionServer | QuorumPeerMain | |||||
192.168.11.134 | Datanode | NodeManager | JournalNode | HRegionServer | QuorumPeerMain | |||||
192.168.11.135 | Datanode | NodeManager | JournalNode | HRegionServer | QuorumPeerMain |
master1:apache
# hostnamectl set-hostname master1bootstrap
其餘主機名分別配置爲master二、slave一、slave二、slave3centos
二、全部節點關閉防火牆及selinux瀏覽器
說明:bash
命令前面#表示在root用戶下的操做,$表示在hduser用戶下操做的。app
查看防火牆狀態
# firewall-cmd --state
running
關閉防火牆
# systemctl stop firewalld.service
防火牆配置爲禁用狀態
# systemctl disable firewalld.service
當即關閉selinux(臨時)
# setenforce 0
永久關閉selinux
# vi /etc/sysconfig/selinux
SELINUX=enforcing --> disabled
三、配置yum源
全部節點配置yum源
# cd
# mkdir apps
http://mirrors.163.com/centos/7/os/x86_64/Packages/wget-1.14-15.el7.x86_64.rpm
# rpm -i wget-1.14-15.el7.x86_64.rpm
# cd /etc/yum.repos.d
# wget http://mirrors.aliyun.com/repo/Centos-7.repo
# mv Centos-7.repo CentOS-Base.repo
# scp CentOS-Base.repo root@192.168.11.131:/etc/yum.repos.d/
# scp CentOS-Base.repo root@192.168.11.132:/etc/yum.repos.d/
# scp CentOS-Base.repo root@192.168.11.133:/etc/yum.repos.d/
# scp CentOS-Base.repo root@192.168.11.134:/etc/yum.repos.d/
# yum clean all
# yum makecache
# yum update
四、配置ntp時間同步,master1爲ntp服務端,其餘爲ntp客戶端
全部節點安裝ntp
# yum install -y ntp
ntp server端:
首先配置當前時間
# date -s "2018-05-27 23:03:30"
編輯配置文件
# vi /etc/ntp.conf
在註釋下添加兩行
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0
fudge 127.127.1.0 stratum 11
註釋下面
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
啓動ntp服務並配置爲開機自啓動
# systemctl start ntpd.service
# systemctl enable ntpd.service
ntp客戶端(其他四臺都爲ntp客戶端):
# vi /etc/ntp.conf
一樣註釋下添加兩行
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
server 192.168.11.131
fudge 127.127.1.0 stratum 11
四行添加註釋
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# systemctl start ntpd.service
# systemctl enable ntpd.service
手動同步時間
# ntpdate 192.168.11.131
28 May 07:04:50 ntpdate[1714]: the NTP socket is in use, exiting
對出現的報錯作處理
# lsof -i:123
-bash: lsof: command not found
# yum install -y lsof
# lsof -i:123
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ntpd 1693 ntp 16u IPv4 25565 0t0 UDP *:ntp
ntpd 1693 ntp 17u IPv6 25566 0t0 UDP *:ntp
ntpd 1693 ntp 18u IPv4 25572 0t0 UDP localhost:ntp
ntpd 1693 ntp 19u IPv4 25573 0t0 UDP localhost.localdomain:ntp
ntpd 1693 ntp 20u IPv6 25574 0t0 UDP localhost:ntp
ntpd 1693 ntp 21u IPv6 25575 0t0 UDP localhost.localdomain:ntp
殺掉ntp的進程,注意ntp進程id各不相同,按實際狀況處理
# kill -9 1693
再次同步時間成功
# ntpdate 192.168.11.131
27 May 23:06:14 ntpdate[1728]: step time server 192.168.11.131 offset -28808.035509 sec
五、修改主機名和hosts文件
全部節點修改主機名(永久)
# hostnamectl set-hostname master1~slave3
臨時修改主機名
# hostname master1~slave3
主節點修改hosts文件
# vi /etc/hosts
192.168.11.131 master1
192.168.11.132 master2
192.168.11.133 slave1
192.168.11.134 slave2
192.168.11.135 slave3
把hosts文件覆蓋到其餘機器
# scp /etc/hosts root@192.168.11.132~135:/etc/
全部節點建立管理用戶和組
建立組和用戶
# groupadd hduser
# useradd -g hduser hduser
# passwd hduser
2、配置hadoop環境
一、建立目錄並賦權
每臺機器上建立以下文件夾
# mkdir /data1
# mkdir /data2
修改權限
# chown hduser:hduser /data1
# chown hduser:hduser /data2
# su hduser
$ mkdir -p /data1/hadoop_data/hdfs/namenode
$ mkdir -p /data2/hadoop_data/hdfs/namenode
$ mkdir -p /data1/hadoop_data/hdfs/datanode(NameNode不要)
$ mkdir -p /data2/hadoop_data/hdfs/datanode(NameNode不要)
$ mkdir -p /data1/hadoop_data/pids
$ mkdir -p /data2/hadoop_data/pids
$ mkdir -p /data1/hadoop_data/hadoop_tmp
$ mkdir -p /data2/hadoop_data/hadoop_tmp
二、無密驗證
master1和master2節點操做
# su - hduser
$ ssh-keygen -t rsa
$ cd ~/.ssh
$ cat id_rsa.pub >> authorized_keys
master1節點操做
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hduser@master2
master2節點操做
$ scp ~/.ssh/authorized_keys hduser@master1:~/.ssh/
slave一、slave2和slave3節點建立.ssh目錄
# mkdir /home/hduser/.ssh
# chown hduser:hduser /home/hduser/.ssh
master1節點操做
$ scp ~/.ssh/authorized_keys hduser@slave1:~/.ssh
$ scp ~/.ssh/authorized_keys hduser@slave2:~/.ssh
$ scp ~/.ssh/authorized_keys hduser@slave3:~/.ssh
master1和master2節點驗證
驗證方法,分別在兩個節點,ssh登錄本機(hdusser用戶)及其餘四個節點,看看是否是無密登錄。
若是未經過驗證,全部機器執行下面命令
$ chmod 600 ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh
三、全部節點配置java環境
$ mkdir -p /data1/usr/src
上傳包到/data1/usr/src目錄下
$ cd /data1/usr/src
$ tar xf jdk1.7.0_79.tar -C /data1/usr/
$ vi ~/.bashrc
export JAVA_HOME=/data1/usr/jdk1.7.0_79
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar
export PATH=$PATH:$JAVA_HOME/bin
$ source ~/.bashrc
四、mastar1節點配置hadoop
下載hadoop-2.7.3.tar.gz,上傳到/data1/usr/src
http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
$ cd /data1/usr/src
$ tar -zxf hadoop-2.7.3.tar.gz -C /data1/usr/
編輯hadoop-env.sh
$ vi /data1/usr/hadoop-2.7.3/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/data1/usr/jdk1.7.0_79
export HADOOP_PID_DIR=/data1/hadoop_data/pids
export HADOOP_PID_DIR=/data2/hadoop_data/pids
export HADOOP_MAPRED_PID_DIR=/data1/hadoop_data/pids
編輯mapred-env.sh
$ vi /data1/usr/hadoop-2.7.3/etc/hadoop/mapred-env.sh
export HADOOP_MAPRED_PID_DIR=/data2/hadoop_data/pids
編輯yarn-env.sh
$ vi /data1/usr/hadoop-2.7.3/etc/hadoop/yarn-env.sh
export YARN_PID_DIR=/data2/hadoop_data/pids
編輯core-site.xml
$ vi /data1/usr/hadoop-2.7.3/etc/hadoop/core-site.xml
<configuration>
<!-- 指定hdfs的nameservice爲masters -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://masters</value>
</property>
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/data2/hadoop_data/hadoop_tmp</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>master1:2181,master2:2181,slave1:2181,slave2:2181,slave3:2181</value>
</property>
</configuration>
編輯hdfs-site.xml
$ vi /data1/usr/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice爲masters,須要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>masters</value>
</property>
<!-- h1下面有兩個NameNode,分別是master1,master2 -->
<property>
<name>dfs.ha.namenodes.masters</name>
<value>master1,master2</value>
</property>
<!-- master1的RPC通訊地址 -->
<property>
<name>dfs.namenode.rpc-address.masters.master1</name>
<value>master1:9000</value>
</property>
<!-- master1的http通訊地址 -->
<property>
<name>dfs.namenode.http-address.masters.master1</name>
<value>master1:50070</value>
</property>
<!-- master2的RPC通訊地址 -->
<property>
<name>dfs.namenode.rpc-address.masters.master2</name>
<value>master2:9000</value>
</property>
<!-- master2的http通訊地址 -->
<property>
<name>dfs.namenode.http-address.masters.master2</name>
<value>master2:50070</value>
</property>
<!-- 指定NameNode的存放位置 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data2/hadoop_data/hdfs/namenode</value>
</property>
<!-- 指定DataNode的存放位置 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data1/hadoop_data/hdfs/datanode,data2/hadoop_data/hdfs/datanode</value>
</property>
<!-- 指定NameNode的元數據在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://slave1:8485;slave2:8485;slave3:8485/masters</value>
</property>
<!-- 指定JournalNode在本地磁盤存放數據的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/data2/hadoop_data/journal</value>
</property>
<!-- 開啓NameNode失敗自動切換 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失敗自動切換實現方式 -->
<property>
<name>dfs.client.failover.proxy.provider.masters</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔離機制方法,多個機制用換行分割,即每一個機制暫用一行-->
<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/hduser/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔離機制超時時間 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<!-- 這個地方是爲Hbase的專用配置,最小爲4096,表示同時處理文件的上限,不配置會報錯 -->
<property>
<name>dfs.datanode.max.xcievers</name>
<value>8192</value>
</property>
<property>
<name>dfs.qjournal.write-txns.timeout.ms</name>
<value>60000</value>
</property>
</configuration>
編輯yarn-site.xml
$ vi /data1/usr/hadoop-2.7.3/etc/hadoop/yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 開啓RM高可靠 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>RM_HA_ID</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分別指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>master2</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!-- 指定zk集羣地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master1:2181,master2:2181,slave1:2181,slave2:2181,slave3:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
編輯mapred-site.xml
$ cp /data1/usr/hadoop-2.7.3/etc/hadoop/mapred-site.xml.template /data1/usr/hadoop-2.7.3/etc/hadoop/mapred-site.xml
$ vi /data1/usr/hadoop-2.7.3/etc/hadoop/mapred-site.xml
<configuration>
<!-- 指定mr框架爲yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
編輯slaves
$ vi /data1/usr/hadoop-2.7.3/etc/hadoop/slaves
slave1
slave2
slave3
同步hadoop配置到其餘節點
$ for ip in `seq 2 5`;do scp -rpq /data1/usr/hadoop-2.7.3 192.168.11.13$ip:/data1/usr;done
五、各節點zookeeper配置
http://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
上傳包到/data1/usr/src目錄下
建立目錄
$ mkdir -p /home/hduser/storage/zookeeper
$ cd /data1/usr/src
$ tar -zxf zookeeper-3.4.6.tar.gz -C /data1/usr
編輯zoo.cfg
$ cp /data1/usr/zookeeper-3.4.6/conf/zoo_sample.cfg /data1/usr/zookeeper-3.4.6/conf/zoo.cfg
$ vi /data1/usr/zookeeper-3.4.6/conf/zoo.cfg
dataDir=/home/hduser/storage/zookeeper
server.1=master1:2888:3888
server.2=master2:2888:3888
server.3=slave1:2888:3888
server.4=slave2:2888:3888
server.5=slave3:2888:3888
master1-slave3各節點依次作操做
$ echo "1" > /home/hduser/storage/zookeeper/myid
$ echo "2" > /home/hduser/storage/zookeeper/myid
$ echo "3" > /home/hduser/storage/zookeeper/myid
$ echo "4" > /home/hduser/storage/zookeeper/myid
$ echo "5" > /home/hduser/storage/zookeeper/myid
各節點啓動ZK服務
$ cd /data1/usr/zookeeper-3.4.6/bin
$ ./zkServer.sh start
六、slave一、slave2和slave3啓動journalnode
$ cd /data1/usr/hadoop-2.7.3/sbin
$ ./hadoop-daemon.sh start journalnode
用jps確認啓動結果
七、在master1上格式化zookeeper節點格式化(第一次)
$ cd /data1/usr/hadoop-2.7.3
$ ./bin/hdfs zkfc -formatZK
八、在master1上執行命令格式化文件系統
./bin/hadoop namenode -format
九、在master1上啓動namenode和zkfc服務
./sbin/hadoop-daemon.sh start namenode
./sbin/hadoop-daemon.sh start zkfc
十、須要在master2(備節點)上執行數據同步
./bin/hdfs namenode –bootstrapStandby
在master1上拷貝文件到master2
scp -r /data2/hadoop_data/hdfs/namenode hduser@master2:/data2/hadoop_data/hdfs/
十一、在master2上啓動namenode和zkfc服務
./sbin/hadoop-daemon.sh start namenode
./sbin/hadoop-daemon.sh start zkfc
十二、設置master1爲active
./bin/hdfs haadmin -transitionToActive master1
./bin/hdfs haadmin -getServiceState master1
1三、在master1上啓動datanode
./sbin/hadoop-daemons.sh start datanode
1四、啓動HDFS(第二次之後)
在master1上執行命令:
./sbin/start-dfs.sh
1五、啓動YARN
在master1上執行命令:
./sbin/start-yarn.sh
1六、啓動Jobhistory
./sbin/mr-jobhistory-daemon.sh start historyserver
1七、驗證
驗證namenode
http://master1:50070
Overview 'master1:9000' (active)
http://master2:50070
Overview 'master2:9000' (standby)
1八、驗證文件系統
上傳文件
./bin/hadoop fs -put /data1/usr/hadoop-2.7.3/etc/hadoop /test/hadoop
./bin/hadoop fs -ls /test
1九、namenode的備份驗證
殺死master1,master2變爲active
20、驗證yarn
./bin/hadoop jar /data1/usr/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test/hadoop /test/out
3、安裝HBASE
下載hbase-1.2.4-bin.tar.gz,解壓
$ cd /data1/usr/src
$ tar -zxvf hbase-1.2.4-bin.tar.gz -C /data1/usr/
三、建立目錄
$ mkdir -p /data1/hadoop_data/hbase_tmp
$ mkdir -p /data2/hadoop_data/hbase_tmp
二、配置master1的hbase環境
配置hbase-env.sh
$ vi /data1/usr/hbase-1.2.4/conf/hbase-env.sh
export JAVA_HOME=/data1/usr/jdk1.7.0_79
export HBASE_PID_DIR=/data2/hadoop_data/pids
export HBASE_MANAGES_ZK=false
export HADOOP_HOME=/data1/usr/hadoop-2.7.3
三、配置hbase-site.xml
$ vi /data1/usr/hbase-1.2.4/conf/hbase-site.xml
<!-- 指定HBase在HDFS上面建立的目錄名hbase -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://masters/hbase</value>
</property>
<!-- 開啓集羣運行方式 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master.port</name>
<value>60000</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/data2/hadoop_data/hbase_tmp</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master1,master2,slave1,slave2,slave3</value>
</property>
四、配置regionservers
$ vi /data1/usr/hbase-1.2.4/conf/regionservers
slave1
slave2
slave3
五、配置backup-masters
$ vi /data1/usr/hbase-1.2.4/conf/backup-masters
master2
六、移除 HBase 裏面的沒必要要 log4j 的 jar 包
cd ${HBASE_HOME}/lib
mv slf4j-log4j12-1.7.5.jar slf4j-log4j12-1.7.5.jar.bak
七、將master1的hbase環境傳輸到其餘節點
$ for ip in `seq 2 5`;do scp -rpq /data1/usr/hbase-1.2.4 192.168.11.13$ip:/data1/usr;done
八、master1上啓動Hbase(hadoop集羣已啓動)
$ cd /data1/usr/hbase-1.2.4/bin
$ ./start-hbase.sh
九、驗證
查看hbase是否在HDFS文件系統建立成功
$ /data1/usr/hadoop-2.7.3/bin/hadoop fs -ls /
執行: bin/hbase shell 能夠進入Hbase管理界面、
輸入 status 查看狀態
建立表
create 'test', 'cf'
顯示錶信息
list 'test'
表中插入數據
put 'test', 'row1', 'cf:a', 'value1'
put 'test', 'row2', 'cf:b', 'value2'
put 'test', 'row3', 'cf:c', 'value3'
查詢表
scan 'test'
取一行數據
get 'test', 'row1'
失效表
disable 'test'
刪除表
drop 'test'
瀏覽器輸入http://master1:16010能夠打開Hbase管理界面
http://192.168.11.131/master-status
十、啓動thrift2
hbase-daemons.sh start thrift2
各節點用jps確認服務是否啓動,通常啓動失敗的緣由是配置有誤。