1.首先配置虚拟机,
在node-1上,固定IP,设置好防火墙,然后克隆出节点2和3,修改一下IP和节点hostname。

[root@localhost network-scripts]# vim ifcfg-eth0 
 DEVICE=eth0
 #HWADDR=00:0C:29:57:1E:97(注释掉)
 TYPE=Ethernet
 #UUID=b3b4e88b-6f57-480b-90d5-13506b174a36(注释掉)
 ONBOOT=yes(这个要是yes)
 NM_CONTROLLED=yes
 BOOTPROTO=static
 IPADDR=192.168.23.98
 NETMASK=255.255.255.0
 GATEWAY=192.168.23.1

可以按照上述配置文件来,就可以固定IP和修改节点的IP地址。(靠谱的修改方式)

1.1修改各个虚拟机主机名
 vi /etc/sysconfig/network

 NETWORKING=yes
 HOSTNAME=node-1 
(配置完上述这些就可以用 CRT连接了)
1.2修改主机名和IP的映射关系
 vi /etc/hosts
 (进去把原本的删除)
 192.168.1.101 node-1
 192.168.1.102 node-2
 192.168.1.103 node-3
1.3配置ssh免密登陆
 #生成ssh免登陆密钥 ssh-keygen -t rsa (四个回车)
 执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
 将公钥拷贝到要免密登陆的目标机器上
 ssh-copy-id node-1
 ssh-copy-id node-2
 ssh-copy-id node-31.4同步集群时间
 1.5 同步集群时间
 常用的手动进行时间的同步
 date -s "2017-03-03 03:03:03"
 或者网络同步:
 yum install ntpdate
 ntpdate ntp1.aliyun.com


 【安装rz yum install lrzsz】


2.安装JDK 先创建出/export/servers 目录
 
 2.1上传jdk
 rz jdk-8u65-linux-x64.tar.gz

 2.2解压jdk
 tar -zxvf jdk-8u65-linux-x64.tar.gz -C /root/apps

 2.3将java添加到环境变量中
 vim /etc/profile
 #在文件最后添加
 export JAVA_HOME=/root/apps/jdk1.8.0_65
 export PATH=$PATH:$JAVA_HOME/bin
 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar


 复制jdk、profile到2,3节点

 scp -r jdk root@node-3:/root/export/servers/
 scp /etc/profile root@node-3:/etc/

 #刷新配置
 source /etc/profile

3安装hadoop2.7.4
 上传hadoop的安装包到服务器
 hadoop-2.7.4-with-centos-6.7.tar.gz
 解压安装包
 tar zxvf hadoop-2.7.4-with-centos-6.7.tar.gz

 注意:hadoop2.x的配置文件目录:$HADOOP_HOME/etc/hadoop


 第一个:hadoop-env.sh 
 vi hadoop-env.sh
 export JAVA_HOME=/root/apps/jdk1.8.0_65


 第二个:core-site.xml
 <property>
 <name>fs.defaultFS</name>
 <value>hdfs://node-1:9000</value>
 </property>
 <property>
 <name>hadoop.tmp.dir</name>
 <value>/root/export/servers/hadoop</value>
 </property>


 第三个:hdfs-site.xml 
 <!-- 指定HDFS副本的数量 -->
 <property>
 <name>dfs.replication</name>
 <value>2</value>
 </property> 
 <property>
 <name>dfs.namenode.secondary.http-address</name>
 <value>node-1:50090</value>
 </property>

 第四个:mapred-site.xml 

 mv mapred-site.xml.template mapred-site.xml
 vi mapred-site.xml <!-- 指定mr运行时框架,这里指定在yarn上,默认是local -->
 <property>
 <name>mapreduce.framework.name</name>
 <value>yarn</value>
 </property> 
 第五个:yarn-site.xml
 <property>
 <name>yarn.resourcemanager.hostname</name>
 <value>node-1</value>
 </property>
 <property>
 <name>yarn.nodemanager.aux-services</name>
 <value>mapreduce_shuffle</value>
 </property> 第六个:slaves文件,里面写上从节点所在的主机名字
 vi slaves
 node-1
 node-2
 node-3

 将hadoop添加到环境变量

 vim /etc/proflie
 export JAVA_HOME=/root/apps/jdk1.8.0_65
 export HADOOP_HOME=/root/apps/hadoop-2.7.4
 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin source /etc/profile

 这时候复制hadoop到2,3了。
 scp -r hadoop root@node-2:/root/export/servers
 scp -r hadoop root@node-3:/root/export/servers


 3.3格式化namenode(本质是对namenode进行初始化)
 hdfs namenode format (hadoop namenode -format)

 3.4启动hadoop
 先启动HDFS
 sbin/start-dfs.sh (一定要用这种方式启动,不然有时候namenode启动不了,不要进入sbin文件夹启动)

 再启动YARN
 sbin/start-yarn.sh

 3.5验证是否启动成功
 使用jps命令验证
 27408 NameNode
 28218 Jps
 27643 SecondaryNameNode (secondarynamenode)
 28066 NodeManager
 27803 ResourceManager
 27512 DataNode

 http://192.168.1.101:50070 (HDFS管理界面)
 http://192.168.1.101:8088 (MR管理界面)

【这里登陆node-1:50070 和 node-1:8088 成功的话,hadoop就是安装完成了】-----------------------------------------------------------------------------
Flume安装:
 Flume 的安装非常简单
上传安装包到数据源所在节点上
然后解压 tar -zxvf apache-flume-1.6.0-bin.tar.gz
然后进入 flume 的目录,修改 conf 下的 flume-env.sh,在里面配置 JAVA_HOME
export JAVA_HOME=/root/export/servers/jdk-----------------------------------------------------------------------------
Hive 数据仓库安装部署:
 1.上传tar包 2.解压
 tar -zxvf hive-1.2.1.tar.gz
 3.安装mysql数据库
 推荐yum 在线安装:
 yum安装mysql
 yum install mysql mysql-server mysql-devel  完成后,用 /etc/init.d/mysqld start 启动mysql

 启动mysql控制台: 
 mysql
 mysql>; USE mysql; 
 mysql>; UPDATE user SET Password=PASSWORD('hadoop') WHERE user='root'; 
 mysql>; FLUSH PRIVILEGES; 
 允许远程登录 
 mysql -u root -p 
 输入密码:hadoop 就可以登陆mysql了。
 Enter Password: <your new password> 
 mysql>GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION; 
 完成后就能远程管理mysql了。 mysql服务名字 service mysqld start

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

 UPDATE user SET Password=PASSWORD('hadoop') WHERE user='root'; 4.配置hive:
 vi hive-site.xml 
 添加如下内容:
 <configuration>
 <property>
 <name>javax.jdo.option.ConnectionURL</name>
 <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
 <description>JDBC connect string for a JDBC metastore</description>
 </property>
 <property>
 <name>javax.jdo.option.ConnectionDriverName</name>
 <value>com.mysql.jdbc.Driver</value>
 <description>Driver class name for a JDBC metastore</description>
 </property>
 <property>
 <name>javax.jdo.option.ConnectionUserName</name>
 <value>root</value>
 <description>username to use against metastore database</description>
 </property>
 <property>
 <name>javax.jdo.option.ConnectionPassword</name>
 <value>hadoop</value>
 <description>password to use against metastore database</description>
 </property>
 </configuration>

 5.安装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下
 如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
 mysql -uroot -p
 #(执行下面的语句 *.*:所有库下的所有表 %:任何IP地址或主机都可以连接)
 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
 FLUSH PRIVILEGES; 6. Jline包版本不一致的问题,需要拷贝hive的lib目录中jline.2.12.jar的jar包替换掉hadoop中的 
 /home/hadoop/app/hadoop-2.6.4/share/hadoop/yarn/lib/jline-0.9.94.jar 启动hive
 bin/hive

 Hive几种使用方式:
 1.Hive交互shell bin/hive

 2.Hive JDBC服务(参考java jdbc连接mysql)

 3.hive启动为一个服务器,来对外提供服务
 bin/hiveserver2
 nohup bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err &

 启动成功后,可以在别的节点上用beeline去连接
 bin/beeline -u jdbc:hive2://mini1:10000 -n root

 或者
 bin/beeline
 ! connect jdbc:hive2://mini1:10000

 4.Hive命令 
 hive -e ‘sql’
 bin/hive -e 'select * from t_test'-----------------------------------------------------------------------------
Zookeeper集群搭建:
 安装前需要安装好jdk ##
 检测集群时间是否同步
 检测防火墙是否关闭
 检测主机 ip映射有没有配置 ##下载安装包、解压
 tar -zxvf zookeeper-3.4.5.tar.gz
 mv zookeeper-3.4.5 zookeeper ##修改环境变量(注意:3台zookeeper都需要修改)
 vi /etc/profile
 export ZOOKEEPER_HOME=/home/hadoop/zookeeper
 export PATH=$PATH:$ZOOKEEPER_HOME/bin
 source /etc/profile ##修改Zookeeper配置文件
 cd zookeeper/conf
 cp zoo_sample.cfg zoo.cfg
 vi zoo.cfg
 添加内容:
 dataDir=/root/export/servers/zookeeper/zkdata
 server.1=node-1:2888:3888 ## (心跳端口、选举端口)
 server.2=node-2:2888:3888
 server.3=node-3:2888:3888
 创建文件夹:
 cd /home/hadoop/zookeeper/
 mkdir zkdata
 在data文件夹下新建myid文件,myid的文件内容为:
 cd zkdata
 echo 1 > myid ##分发安装包到其他机器
 scp -r /root/apps root@mini2:/root/
 scp -r /root/apps root@mini3:/root/ ##修改其他机器的配置文件
 修改myid文件
 到mini2上:修改myid为:2
 到mini3上:修改myid为:3 ##启动(每台机器)
 zkServer.sh start
 或者编写一个脚本来批量启动所有机器:
 for host in "mini1 mini2 mini3"
 do
 ssh $host "source/etc/profile;/root/apps/zookeeper/bin/zkServer.sh start"
 done ##查看集群状态
 jps(查看进程)
 zkServer.sh status(查看集群状态,主从信息)

如果启动不成功,可以观察zookeeper.out日志,查看错误信息进行排查

配置文件中参数说明:

tickTime这个时间是作为zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是说每个tickTime时间就会发送一个心跳。

initLimit这个配置项是用来配置zookeeper接受客户端(这里所说的客户端不是用户连接zookeeper服务器的客户端,而是zookeeper服务器集群中连接到leader的follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。

当已经超过10个心跳的时间(也就是tickTime)长度后 zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20秒。

syncLimit这个配置项标识leader与follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。

dataDir顾名思义就是zookeeper保存数据的目录,默认情况下zookeeper将写数据的日志文件也保存在这个目录里;

clientPort这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求;

server.A=B:C:D中的A是一个数字,表示这个是第几号服务器,B是这个服务器的IP地址,C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口,D是在leader挂掉时专门用来进行选举leader所用的端口。

 

-----------------------------------------------------------------------------
HADOOP HA的部署

 

 

-----------------------------------------------------------------------------
【接下来就是spark部分的】
-----------------------------------------------------------------------------
Spark部署安装:
三、 Spark集群安装
3.1 下载spark安装包
下载地址spark官网:http://spark.apache.org/downloads.html
这里我们使用 spark-2.0.2-bin-hadoop2.7版本.

3.2 规划安装目录
/opt/bigdata
3.3 解压安装包
tar -zxvf spark-2.0.2-bin-hadoop2.7.tgz
3.4 重命名目录
mv spark-2.0.2-bin-hadoop2.7 spark
3.5 修改配置文件

配置文件目录在 /opt/bigdata/spark/conf
 vi spark-env.sh 修改文件(先把spark-env.sh.template重命名为spark-env.sh)

#配置java环境变量
export JAVA_HOME=/opt/bigdata/jdk1.7.0_67
#指定spark老大Master的IP
export SPARK_MASTER_HOST=node-1
#指定spark老大Master的端口
export SPARK_MASTER_PORT=7077
 vi slaves 修改文件(先把slaves.template重命名为slaves)
node-2
node-3
3.6 拷贝配置到其他主机
通过scp 命令将spark的安装目录拷贝到其他机器上
scp -r /opt/bigdata/spark hdp-node-02:/opt/bigdata
scp -r /opt/bigdata/spark hdp-node-03:/opt/bigdata

3.7 配置spark环境变量
将spark添加到环境变量,添加以下内容到 /etc/profile
export SPARK_HOME=/opt/bigdata/spark
export PATH=$PATH:$SPARK_HOME/bin
注意最后 source /etc/profile 刷新配置
3.7 启动spark
#在主节点上启动spark
/opt/bigdata/spark/sbin/start-all.sh
-----------------------------------------------------------------------------
kafka:
首先保证集群的时间同步。
集群启动zookeeper。
6.2 三台机器安装kafka集群
6.2.1 下载kafka安装压缩包
http://archive.apache.org/dist/kafka/

6.2.2 上传压缩包并解压
这里统一使用 kafka_2.11-1.0.0.tgz 这个版本
6.2.3 修改kafka配置文件
第一台机器修改kafka配置文件server.properties

broker.id=0
 num.network.threads=3
 num.io.threads=8
 socket.send.buffer.bytes=102400
 socket.receive.buffer.bytes=102400
 socket.request.max.bytes=104857600
 log.dirs=/export/servers/kafka/kafka-logs
 num.partitions=2
 num.recovery.threads.per.data.dir=1
 offsets.topic.replication.factor=1
 transaction.state.log.replication.factor=1
 transaction.state.log.min.isr=1
 log.flush.interval.messages=10000
 log.flush.interval.ms=1000
 log.retention.hours=168
 log.segment.bytes=1073741824
 log.retention.check.interval.ms=300000
 zookeeper.connect=node1:2181,node2:2181,node3:2181
 zookeeper.connection.timeout.ms=6000
 group.initial.rebalance.delay.ms=0
 delete.topic.enable=true
 host.name=node1 第二台机器修改kafka配置文件server.properties
 broker.id=1
 num.network.threads=3
 num.io.threads=8
 socket.send.buffer.bytes=102400
 socket.receive.buffer.bytes=102400
 socket.request.max.bytes=104857600
 log.dirs=/export/servers/kafka/kafka-logs num.partitions=2
 num.recovery.threads.per.data.dir=1
 offsets.topic.replication.factor=1
 transaction.state.log.replication.factor=1
 transaction.state.log.min.isr=1
 log.flush.interval.messages=10000
 log.flush.interval.ms=1000
 log.retention.hours=168
 log.segment.bytes=1073741824
 log.retention.check.interval.ms=300000
 zookeeper.connect=node1:2181,node2:2181,node3:2181
 zookeeper.connection.timeout.ms=6000
 group.initial.rebalance.delay.ms=0
 delete.topic.enable=true
 host.name=node2 第三台机器修改kafka配置文件server.properties
 broker.id=2
 num.network.threads=3
 num.io.threads=8
 socket.send.buffer.bytes=102400
 socket.receive.buffer.bytes=102400
 socket.request.max.bytes=104857600
 log.dirs=/export/servers/kafka/kafka-logs
 num.partitions=2
 num.recovery.threads.per.data.dir=1
 offsets.topic.replication.factor=1
 transaction.state.log.replication.factor=1
 transaction.state.log.min.isr=1
 log.flush.interval.messages=10000
 log.flush.interval.ms=1000
 log.retention.hours=168
 log.segment.bytes=1073741824
 log.retention.check.interval.ms=300000
 zookeeper.connect=node1:2181,node2:2181,node3:2181
 zookeeper.connection.timeout.ms=6000
 group.initial.rebalance.delay.ms=0
 delete.topic.enable=true
 host.name=node3 6.2.4 启动kafka集群
 三台机器启动kafka服务
 ./kafka-server-start.sh ../config/server.properties
 nohup bin/kafka-server-start.sh config/server.properties > /dev/null 2>&1 & 后台启动命令
-----------------------------------------------------------------------------
 flume与kafka的整合:

 实现flume监控某个目录下面的所有文件,然后将文件收集发送到kafka消息系统中
 第一步:flume下载地址
 http://archive.apache.org/dist/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz 第二步:上传解压flume
 第三步:配置flume.conf
 #为我们的source channel sink起名
 a1.sources = r1
 a1.channels = c1
 a1.sinks = k1
 #指定我们的source收集到的数据发送到哪个管道
 a1.sources.r1.channels = c1
 #指定我们的source数据收集策略
 a1.sources.r1.type = spooldir
 a1.sources.r1.spoolDir = /export/servers/flumedata
 a1.sources.r1.deletePolicy = never
 a1.sources.r1.fileSuffix = .COMPLETED
 a1.sources.r1.ignorePattern = ^(.)*\\.tmp$
 a1.sources.r1.inputCharset = GBK
 #指定我们的channel为memory,即表示所有的数据都装进memory当中
 a1.channels.c1.type = memory
 #指定我们的sink为kafka sink,并指定我们的sink从哪个channel当中读取数据
 a1.sinks.k1.channel = c1
 a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
 a1.sinks.k1.kafka.topic = test
 a1.sinks.k1.kafka.bootstrap.servers = node1:9092,node2:9092,node3:9092
 a1.sinks.k1.kafka.flumeBatchSize = 20
 a1.sinks.k1.kafka.producer.acks = 1 启动flume
 bin/flume-ng agent --conf conf --conf-file conf/flume.conf --name a1 -Dflume.root.logger=INFO,console 
-----------------------------------------------------------------------------
spark HA:

-----------------------------------------------------------------------------
spark on yarn:-----------------------------------------------------------------------------
sparkStreaming结合flume操作流程
1 flume push方式
#首先启动spark-streaming应用程序
#再bin/flume-ng agent -n a1 -c conf/ -f conf/flume-push-spark.conf -Dflume.root.logger=INFO,console生产数据命令: while true;do echo hadoop hadoop spark>>/root/test.txt;sleep 2;done 
 
2 flume poll方式
#首先将下载好的spark-streaming-flume-sink_2.11-2.0.2.jar放入到flume的lib目录下
#将scala-library-2.11.8.jar拷贝到flume的lib目录下,
删除flume的lib下自带的scala-library-2.10.1.jar包
#启动flume
bin/flume-ng agent -n a1 -c conf/ -f conf/flume-poll-spark.conf -Dflume.root.logger=INFO,console
#再启动spark-streaming应用程序
-----------------------------------------------------------------------------
sparkStreaming整合kafka
#首先启动zk
bin/kafka-server-start.sh config/server.properties
#创建topic
bin/kafka-topics.sh --create --zookeeper node1:2181 --replication-factor 1 --partitions 2 --topic test
#查看主题
bin/kafka-topics.sh --list --zookeeper node1:2181
#启动一个生产者发送消息
bin/kafka-console-producer.sh --broker-list node1:9092 --topic test 
#启动spark-streaming应用程序
-----------------------------------------------------------------------------
Hbase安装部署:
 1.3 hbase集群搭建
 ----先部署一个zookeeper和hadoop集群
 (1)上传hbase安装包
 (2)解压
 (3)配置hbase集群,要修改4个文件
 注意:要把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下

 (3.1)修改hbase-env.sh
 export JAVA_HOME=/export/servers/jdk
 //告诉hbase使用外部的zk
 export HBASE_MANAGES_ZK=false

 (3.2)修改 hbase-site.xml
 <configuration>
 <!-- 指定hbase在HDFS上存储的路径 -->
 <property>
 <name>hbase.rootdir</name>
 <value>hdfs://node1:9000/hbase</value>
 </property>
 <!-- 指定hbase是分布式的 -->
 <property>
 <name>hbase.cluster.distributed</name>
 <value>true</value>
 </property>
 <!-- 指定zk的地址,多个用“,”分割 -->
 <property>
 <name>hbase.zookeeper.quorum</name>
 <value>node1:2181,node2:2181,node3:2181</value>
 </property>
 </configuration>

 (3.3)修改 regionservers
 node2
 node3
 (3.4) 修改 backup-masters来指定备用的主节点
 [root@itcast01 conf]# vi backup-masters
 node2 (3.5) 配置hbase环境变量
 vi /etc/profile
 export HBASE_HOME=/export/servers/hbase 
 Export PATH=$PATH:$HBASE_HOME/bin (3.6) 拷贝hbase和环境变量到其他节点
 scp -r hbase node2:$PWD
 scp -r hbase node3:$PWD
 scp /etc/profile node2:/etc
 scp /etc/profile node3:/etc (3.7) 让所有节点hbase环境变量生效
 在所有节点上执行:source /etc/profile (4) 将配置好的HBase拷贝到每一个节点并同步时间。
 ntpdate -u cn.pool.ntp.org
 (5) 启动所有的hbase进程
 首先启动zk集群
 ./zkServer.sh start
 启动hdfs集群
 start-dfs.sh
 启动hbase,在主节点node1上运行:
 start-hbase.sh
 (6) 通过浏览器访问hbase管理页面
 node1:16010
 node2:16010 
 (7) 为保证集群的可靠性,要启动多个HMaster
 hbase-daemon.sh start master

注意:使用jdk8的时候,出现了Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0的红色标识。字面意思是MaxPermSize不需要我们配置了,所以我就按照它的方法把default VM arguments中MaxPermSize参数给删掉就不会出现上面的提示了。
-----------------------------------------------------------------------------