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-3
1.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参数给删掉就不会出现上面的提示了。
-----------------------------------------------------------------------------