HDFS HA、YARN HA、Zookeeper、HBase HA、Mysql、Hive、Sqool、Flume-ng、storm、kafka、redis、mongodb、spark
0、集群规划
主机名 IP 安装的软件 运行的进程
hadoop01 192.168.1.201 jdk、hadoop NameNode、DFSZKFailoverController(zkfc)、ResourceManager
hadoop02 192.168.1.202 jdk、hadoop NameNode、DFSZKFailoverController(zkfc)、(ResourceManager)
hadoop03 192.168.1.203 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
hadoop04 192.168.1.204 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
hadoop05 192.168.1.205 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
1、安装虚拟机
centOS6.5mini安装
界面选择:Install or upgrade an existing system
界面选择:SKIP
界面选择:basic storage devices
界面选择:yes,discard any data
界面选择:hostname
界面选择:configure network
界面选择:勾选connect automatically
界面选择:IPv4 setting并配置IP
界面选择:manual
界面选择:去掉system clock users UTC
界面选择:勾选user all space
界面选择:勾选write changes to disk
root 登录,添加用户和密码
#useradd hadoop
#passwd hadoop
查看网络配置 使ONBOOT=yes
#more /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static" ###
HWADDR="00:0C:29:3C:BF:E7"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"
IPADDR="192.168.1.44" ###
NETMASK="255.255.255.0" ###
GATEWAY="192.168.1.1" ###
#service network restart
克隆网络问题
1、修改 /etc/udev/rules.d/70-persistent-net.rules 文件,删除掉 关于 eth0 的信息。修改 第二条 eth1 的网卡的名字为 eth0.
2、修改文件/etc/udev/rules.d/70-persistent-net.rules中的MAC地址和/etc/sysconfig/network-scripts/ifcfg-eth0中的MAC地址要与虚拟机网卡的MAC地址相对应。
#自动选择最快的源
#yum -y install yum-fastestmirror
#升级系统
#yum update
#安装wget
#yum -y install wget
2、基础配置
修改三台节点主机名
[root@hadoop1 ~]#hostname hadoop1 (5台机子)
[root@hadoop1 ~]#vi /etc/sysconfig/network
HOSTNAME=hadoop1 2 3 4 5 (5台机子)
添加用户
useradd hadoop (5台机子均hadoop)
添加hosts 记录
vi /etc/hosts (5台机子)
192.168.1.201 hadoop01
192.168.1.201 hadoop02
192.168.1.201 hadoop03
192.168.1.201 hadoop04
192.168.1.201 hadoop05
完成以上重启系统
配置免密码登陆
#HDFS首先要配置hadoop01到hadoop02、hadoop03、hadoop04、hadoop05的免密码登陆
#在hadoop01上生产一对钥匙
Hadoop下执行 cd
ssh-keygen -t rsa
#在hadoop01上生产一对钥匙
ssh-keygen -t rsa
#将公钥拷贝到其他节点,包括自己
ssh-coyp-id hadoop01
ssh-coyp-id hadoop02
ssh-coyp-id hadoop03
ssh-coyp-id hadoop04
ssh-coyp-id hadoop05
#YARN配置hadoop01到hadoop04、hadoop05、hadoop06、hadoop07的免密码登陆(HDFS已配)
#在hadoop01上生产一对钥匙
ssh-keygen -t rsa
#将公钥拷贝到其他节点
ssh-coyp-id hadoop03
ssh-coyp-id hadoop04
ssh-coyp-id hadoop05
#注意:两个namenode之间要配置ssh免密码登陆,别忘了配置hadoop02到hadoop01的免登陆
在hadoop02上生产一对钥匙
ssh-keygen -t rsa
ssh-coyp-id -i hadoop01
查找已安装的Java $su –root
#rpm –qa|grep jdk
#yum install rsync 远程同步
安装 #yum install lrzsz
下载 #sz file 上传 #rz -y
解压jdk #tar -zxvf jdk1.7.0_79
移至 #mv jdk1.7.0_79 /usr/
#chmod 777 -R jdk1.7.0_79
添加环境变量 #vi /etc/profile
##java
export JAVA_HOME=/usr/jdk1.7.0_79
export CLASSPATH=:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
重新加载
#source /etc/profile
# java -version
#java
传入其他节点 #scp /usr/jdk1.7.0_79 hadoop@hadoop1:/usr
关闭防火墙
Root 下 #chkconfig iptables off
查看 #chkconfig|grep ipt
修改文件 #vi /etc/selinux/config
SELINUX=disabled 重启系统 (立刻关闭: service iptables status/stop)
关闭图形界面
#init 3
#vi /etc/inittab
id:3:initdefault
添加sudo
#vi /etc/sudoers 添加
hadoop ALL=(ALL) ALL
3、安装配置zooekeeper集群(在hadoop01上)
3.1解压
tar -zxvf zookeeper-3.4.5.tar.gz -C /mytest/
3.2修改配置
cd /mytest/zookeeper-3.4.5/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改:dataDir=/mytest/zookeeper-3.4.5/tmp
在最后添加:
server.1=hadoop03:2888:3888
server.2=hadoop04:2888:3888
server.3=hadoop05:2888:3888
保存退出
然后创建一个tmp文件夹
mkdir /mytest/zookeeper-3.4.5/tmp
再创建一个空文件
touch /mytest/zookeeper-3.4.5/tmp/myid
最后向该文件写入ID
echo 1 > /mytest/zookeeper-3.4.5/tmp/myid
3.3将配置好的zookeeper拷贝到其他节点(首先分别在hadoop04、hadoop05根目录下创建一个mytest目录:mkdir /mytest)
scp -r /mytest/zookeeper-3.4.5/ hadoop04:/mytest/
scp -r /mytest/zookeeper-3.4.5/ hadoop05:/mytest/
注意:修改hadoop04、hadoop05对应/mytest/zookeeper-3.4.5/tmp/myid内容
hadoop04:
echo 2 > /mytest/zookeeper-3.4.5/tmp/myid
hadoop05:
echo 3 > /mytest/zookeeper-3.4.5/tmp/myid
4、安装配置hadoop集群(在hadoop01上操作)
4.1解压
tar -zxvf hadoop-2.6.0.tar.gz -C /mytest/
4.2配置HDFS
#hadoop2.0的配置文件全部在$HADOOP_HOME/etc/hadoop下
cd /mytest/hadoop-2.6.0/etc/hadoop
4.2.1修改hadoo-env.sh
export JAVA_HOME=/usr/jdk1.7.0_79
4.2.2修改core-site.xml
<configuration>
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/mytest/hadoop-2.6.0/tmp</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop03:2181,hadoop04:2181,hadoop05:2181</value>
</property>
</configuration>
4.2.3修改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>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>hadoop01:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>hadoop01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>hadoop02:9000</value>
</property>
<!-- nn2的http通信地址 -->
<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://hadoop03:8485;hadoop04:8485;hadoop05:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/mytest/hadoop-2.6.0/journal</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>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<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>
4.2.4修改mapred-site.xml
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
4.2.5修改yarn-site.xml
<configuration>
<!-- 开启RM高可靠 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</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>hadoop01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop02</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop03:2181,hadoop04:2181,hadoop05:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
4.2.6修改slaves(slaves是指定子节点的位置,因为要在hadoop01上启动HDFS、在hadoop01启动yarn,所以hadoop01上的slaves文件指定的是datanode的位置,hadoopt01上的slaves文件指定的是nodemanager的位置)
mytest03
mytest04
hadoop05
#将hadoop添加到环境变量中
vim /etc/profile
##hadoop
export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
#export JAVA_LIBRARY_PATH=$JAVA_LIBRARY_PATH:$HADOOP_HOME/lib/native
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
4.4将配置好的hadoop拷贝到其他节点
scp -r /mytest/ hadoop02:/
scp -r /mytest/ hadoop03:/
scp -r /mytest/hadoop-2.6.0/ root@hadoop04:/mytest/
scp -r /mytest/hadoop-2.6.0/ root@hadoop05:/mytest/
同步profile
5、启动和验证
###注意:严格按照下面的步骤
5.1启动zookeeper集群(分别在hadoop03、hadoop04、hadoop05上启动zk)
cd /mytest/zookeeper-3.4.5/bin/
./zkServer.sh start
#查看状态:一个leader,两个follower
./zkServer.sh status
5.2启动journalnode(分别在在hadoop03、hadoop04、hadoop05上执行)
cd /mytest/hadoop-2.6.0
sbin/hadoop-daemon.sh start journalnode
#运行jps命令检验,hadoop03、hadoop04、hadoop05上多了JournalNode进程
5.3格式化HDFS
#在hadoop01上执行命令:
hdfs namenode -format
#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/mytest/hadoop-2.6.0/tmp,然后将/mytest/hadoop-2.6.0/tmp拷贝到hadoop02的/mytest/hadoop-2.6.0/下。
scp -r tmp/ hadoop02:/mytest/hadoop-2.6.0/
##也可以这样,建议hdfs namenode -bootstrapStandby
5.4格式化ZK(在hadoop01上执行即可)
hdfs zkfc -formatZK
5.5启动HDFS(在hadoop01上执行)
sbin/start-dfs.sh
5.6启动YARN(#####注意#####:是在hadoop01上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们占资源,所以把他们分开了,要分别启动)
01#sbin/start-yarn.sh
02#sbin/yarn-deamon.sh start resourcemanager
到此,hadoop-2.6.0配置完毕,可以统计浏览器访问:
http://192.168.1.201:50070
NameNode 'hadoop01:9000' (active)
http://192.168.1.202:50070
NameNode 'hadoop02:9000' (standby)
5.7验证HDFS HA
首先向hdfs上传一个文件
hadoop fs -put /etc/profile /profile
hadoop fs -ls /
然后再kill掉active的NameNode
kill -9 <pid of NN>
通过浏览器访问:http://192.168.1.202:50070
NameNode 'hadoop02:9000' (active)
这个时候hadoop02上的NameNode变成了active
在执行命令:
hadoop fs -ls /
-rw-r--r-- 3 root supergroup 1926 2014-02-06 15:36 /profile
刚才上传的文件依然存在!!!
手动启动那个挂掉的NameNode
sbin/hadoop-daemon.sh start namenode
通过浏览器访问:http://192.168.1.201:50070
NameNode 'hadoopt01:9000' (standby)
验证YARN:
运行一下hadoop提供的demo中的WordCount程序:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out
6、安装HBase
6.1.上传hbase安装包
#rz -y
6.2.解压
6.3.配置hbase集群,要修改3个文件(首先zk集群已经安装好了)
注意:要把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下
6.3.1修改hbase-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_79
//告诉hbase使用外部的zk
export HBASE_MANAGES_ZK=false
vim hbase-site.xml
<configuration>
<!-- 指定hbase在HDFS上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://ns1/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop03:2181,hadoop04:2181,hadoop05:2181</value>
</property>
</configuration>
vim regionservers
hadoop03
hadoop04
hadoop05
6.3.2拷贝hbase到其他节点
scp -r /mytest/hbase-0.96.2-hadoop2/ hadoop02:/mytest/
scp -r /mytest/hbase-0.96.2-hadoop2/ hadoop03:/mytest/
scp -r /mytest/hbase-0.96.2-hadoop2/ hadoop04:/mytest/
scp -r /mytest/hbase-0.96.2-hadoop2/ hadoop05:/mytest/
6.4.将配置好的HBase拷贝到每一个节点并同步时间。
6.5.启动所有的hbase(hadoop01上)
分别启动zk
./zkServer.sh start
启动hbase集群
start-dfs.sh
启动hbase,在主节点上运行:
start-hbase.sh
6.6.通过浏览器访问hbase管理页面
192.168.1.201:60010
6.7.为保证集群的可靠性,要启动多个HMaster(hadoop02上)
hbase-daemon.sh start master
7、Mysql、Hive安装
7.1.上传tar包
7.2.解压
tar -zxvf hive-0.9.0.tar.gz -C /cloud/
7.3.配置mysql metastore(切换到root用户)
配置HIVE_HOME环境变量
rpm -qa | grep mysql
rpm -e mysql-libs-5.1.66-2.el6_3.i686 --nodeps
rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rpm
rpm -ivh MySQL-client-5.1.73-1.glibc23.i386.rpm
修改mysql的密码
/usr/bin/mysql_secure_installation
(注意:删除匿名用户,允许用户远程连接)
登陆mysql
mysql -u root -p
7.4.配置hive
cp hive-default.xml.template hive-site.xml
修改hive-site.xml(删除所有内容,只留一个<property></property>)
添加如下内容:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop01: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>root</value>
<description>password to use against metastore database</description>
</property>
7.5.安装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下
如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
mysql -uroot -p
#(执行下面的语句 *.*:所有库下的所有表 %:任何IP地址或主机都可以连接)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
FLUSH PRIVILEGES;
7.6.建表(默认是内部表)
create table trade_detail(id bigint, account string, income double, expenses double, time string) row format delimited fields terminated by '\t';
建分区表
create table td_part(id bigint, account string, income double, expenses double, time string) partitioned by (logdate string) row format delimited fields terminated by '\t';
建外部表
create external table td_ext(id bigint, account string, income double, expenses double, time string) row format delimited fields terminated by '\t' location '/td_ext';
7.7.创建分区表
普通表和分区表区别:有大量数据增加的需要建分区表
create table book (id bigint, name string) partitioned by (pubdate string) row format delimited fields terminated by '\t';
分区表加载数据
load data local inpath './book.txt' overwrite into table book partition (pubdate='2010-08-22');
load data local inpath '/root/data.am' into table beauty partition (nation="USA");
select nation, avg(size) from beauties group by nation order by avg(size);
8、Sqool安装
1.上传sqoop
2.安装和配置
----修改配置文件 sqoop-env.sh
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/home/hadoop/app/hadoop-2.4.1
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop-2.4.1
#set the path to where bin/hbase is available
export HBASE_HOME=/home/hadoop/app/hbase-0.96.2-hadoop2
#Set the path to where bin/hive is available
export HIVE_HOME=/home/hadoop/app/hive-0.12.0-bin
#Set the path for where zookeper config dir is
export ZOOCFGDIR=/home/hadoop/app/zookeeper-3.4.5/conf
在添加sqoop到环境变量
######将数据库连接驱动拷贝到$SQOOP_HOME/lib里
3.使用
第一类:数据库中的数据导入到HDFS上
sqoop import
--connect jdbc:mysql://192.168.1.10:3306/itcast
--username root --password 123
--table trade_detail
--columns 'id, account, income, expenses'
指定输出路径、指定数据分隔符
sqoop import
--connect jdbc:mysql://192.168.1.10:3306/itcast
--username root --password 123
##要导入数据的表
--table trade_detail
##数据导入hdfs后所存放的目录
--target-dir '/sqoop/td'
##导入的数据字段之间的分隔符
--fields-terminated-by '\t'
指定Map数量 -m
sqoop import
--connect jdbc:mysql://192.168.1.10:3306/itcast
--username root --password 123
--table trade_detail
--target-dir '/sqoop/td1'
--fields-terminated-by '\t'
##指定做导入处理时的map 任务数
-m 2
增加where条件, 注意:条件必须用引号引起来
sqoop import
--connect jdbc:mysql://192.168.1.10:3306/itcast
--username root --password 123
--table trade_detail
--where 'id>3'
--target-dir '/sqoop/td2'
增加query语句(使用 \ 将语句换行)
sqoop import
--connect jdbc:mysql://192.168.1.10:3306/itcast
--username root --password 123
--query 'SELECT * FROM trade_detail where id > 2 AND $CONDITIONS'
--split-by trade_detail.id
--target-dir '/sqoop/td3'
注意:如果使用--query这个命令的时候,需要注意的是where后面的参数,AND $CONDITIONS这个参数必须加上
而且存在单引号与双引号的区别,如果--query后面使用的是双引号,那么需要在$CONDITIONS前加上\即\$CONDITIONS
如果设置map数量为1个时即-m 1,不用加上--split-by ${tablename.column},否则需要加上
第二类:将HDFS上的文件数据导出到数据库的表里面去
sqoop export
--connect jdbc:mysql://192.168.8.120:3306/itcast
--username root --password 123
##你要导出的数据所在的目录
--export-dir '/td3'
##你要导往的目标关系表
--table td_bak
-m 1
##你要导出的文件的字段分隔符
--fields-termianted-by '\t'
4.配置mysql远程连接
GRANT ALL PRIVILEGES ON itcast.* TO 'root'@'192.168.1.201' IDENTIFIED BY '123' WITH GRANT OPTION;
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
FLUSH PRIVILEGES
9、Flume-ng安装
文件a.conf
#定义agent名, source、channel、sink的名称
a4.sources = r1
a4.channels = c1
a4.sinks = k1
#具体定义source
a4.sources.r1.type = spooldir
a4.sources.r1.spoolDir = /home/hadoop/logs
#具体定义channel
a4.channels.c1.type = memory
a4.channels.c1.capacity = 10000
a4.channels.c1.transactionCapacity = 100
#定义拦截器,为消息添加时间戳
a4.sources.r1.interceptors = i1
a4.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
#具体定义sink
a4.sinks.k1.type = hdfs
a4.sinks.k1.hdfs.path = hdfs://ns1/flume/%Y%m%d
a4.sinks.k1.hdfs.filePrefix = events-
a4.sinks.k1.hdfs.fileType = DataStream
#不按照条数生成文件
a4.sinks.k1.hdfs.rollCount = 0
#HDFS上的文件达到128M时生成一个文件
a4.sinks.k1.hdfs.rollSize = 134217728
#HDFS上的文件达到60秒生成一个文件
a4.sinks.k1.hdfs.rollInterval = 60
#组装source、channel、sink
a4.sources.r1.channels = c1
a4.sinks.k1.channel = c1
10 kafka安装
集群安装
1、解压
2、修改server.properties
broker.id=1
zookeeper.connect=hadoop03:2181,hadoop04:2181,hadoop05:2181
3、将zookeeper集群启动
4、在每一台节点上启动broker
bin/kafka-server-start.sh config/server.properties
5、在kafka集群中创建一个topic
bin/kafka-topics.sh --create --zookeeper hadoop03:2181 --replication-factor 3 --partitions 1 --topic order
6、用一个producer向某一个topic中写入消息
bin/kafka-console-producer.sh --broker-list hadoop:9092 --topic order
7、用一个comsumer从某一个topic中读取信息
bin/kafka-console-consumer.sh --zookeeper hadoop03:2181 --from-beginning --topic order
8、查看一个topic的分区及副本状态信息
bin/kafka-topics.sh --describe --zookeeper hadoop03:2181 --topic order
flume和kafka整合:
1.下载
flume-kafka-plus:https://github.com/beyondj2ee/flumeng-kafka-plugin
2.提取插件中的flume-conf.properties文件
修改该文件:#source section
producer.sources.s.type = exec
producer.sources.s.command = tail -f -n+1 /mnt/hgfs/vmshare/test.log
producer.sources.s.channels = c
修改所有topic的值改为test
将改后的配置文件放进flume/conf目录下
在该项目中提取以下jar包放入环境中flume的lib下:
注:这里的flumeng-kafka-plugin.jar这个包,后面在github项目中已经移动到package目录了。找不到的童鞋可以到package目录获取。
完成上面的步骤之后,我们来测试下flume+kafka这个流程有没有走通;
我们先启动flume,然后再启动kafka,启动步骤按之前的步骤执行;接下来我们使用kafka的kafka-console-consumer.sh脚本查看是否有flume有没有往Kafka传输数据;
$bin/kafka-consumer.sh --zookeeper nutch1:2181 --topic test --from-beginning
11 storm安装
1、安装一个zookeeper集群
2、上传storm的安装包,解压
3、修改配置文件storm.yaml
#所使用的zookeeper集群主机
storm.zookeeper.servers:
- "hadoop03"
- "hadoop04"
- "hadoop05"
#nimbus所在的主机名
nimbus.host: "hadoop03"
#默认是前4个
supervisor.slots.ports
-6701
-6702
-6703
-6704
-6705
启动storm
在nimbus主机上
nohup ./storm nimbus 1>/dev/null 2>&1 &
nohup ./storm ui 1>/dev/null 2>&1 &
在supervisor主机上
nohup ./storm supervisor 1>/dev/null 2>&1 &
kafka和storm的整合
1.下载kafka-storm0.8插件:https://github.com/wurstmeister/storm-kafka-0.8-plus
2.使用maven package进行编译,得到storm-kafka-0.8-plus-0.3.0-SNAPSHOT.jar包 --有转载的童鞋注意下,这里的包名之前写错了,现在改正确了!不好意思!
3.将该jar包及kafka_2.9.2-0.8.0-beta1.jar、metrics-core-2.2.0.jar、scala-library-2.9.2.jar (这三个jar包在kafka项目中能找到)
备注:如果开发的项目需要其他jar,记得也要放进storm的Lib中比如用到了mysql就要添加mysql-connector-java-5.1.22-bin.jar到storm的lib下
那么接下来我们把storm也重启下;
完成以上步骤之后,我们还有一件事情要做,就是使用kafka-storm0.8插件,写一个自己的Storm程序;
12、redis
1:官方站点: redis.io 下载最新版或者最新stable版
2:解压源码并进入目录
3: 不用configure
4: 直接make
(如果是32位机器 make 32bit)
注:易碰到的问题,时间错误.
原因: 源码是官方configure过的,但官方configure时,生成的文件有时间戳信息,
Make只能发生在configure之后,
如果你的虚拟机的时间不对,比如说是2012年
解决: date -s ‘yyyy-mm-dd hh:mm:ss’ 重写时间
再 clock -w 写入cmos
5: 可选步骤: make test 测试编译情况
(可能出现: need tcl >8.4这种情况, yum install tcl)
6: 安装到指定的目录,比如 /usr/local/redis
make PREFIX=/usr/local/redis install
注: PREFIX要大写
7: make install之后,得到如下几个文件
redis-benchmark 性能测试工具
redis-check-aof 日志文件检测工(比如断电造成日志损坏,可以检测并修复)
redis-check-dump 快照文件检测工具,效果类上
redis-cli 客户端
redis-server 服务端
8: 复制配置文件
Cp /path/redis.conf /usr/local/redis
9: 启动与连接
/path/to/redis/bin/redis-server ./path/to/conf-file
例:[root@localhost redis]# ./bin/redis-server ./redis.conf
连接: 用redis-cli
#/path/to/redis/bin/redis-cli [-h localhost -p 6379 ]
10: 让redis以后台进程的形式运行
编辑conf配置文件,修改如下内容;
daemonize yes
13、mongodb
1.下载安装包
wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.2.tgz
下载完成后解压缩压缩包
tar zxf mongodb-linux-i686-1.8.2.tgz
2. 安装准备
将mongodb移动到/usr/local/server/mongdb文件夹
mv mongodb-linux-i686-1.8.2 /usr/local/mongodb
创建数据库文件夹与日志文件
mkdir /usr/local/mongodb/data
touch /usr/local/mongodb/logs
3. 设置开机自启动
将mongodb启动项目追加入rc.local保证mongodb在服务器开机时启动
echo "/usr/local/server/mongodb/bin/mongod --dbpath=/usr/local/server/mongodb/data –logpath=/usr/local/server/mongodb/logs –logappend --auth –port=27017" >> /etc/rc.local
4. 启动mongodb
cd到mongodb目录下的bin文件夹启动mongodb
//下面这个是需要权限的登录方式, 用户连接需要用户名和密码
/usr/local/server/mongodb/bin/mongod --dbpath=/usr/local/server/mongodb/data --logpath=/usr/local/server/mongodb/logs --logappend --auth --port=27017 --fork
//这个是不需要密码的
/usr/local/server/mongodb/bin/mongod --dbpath=/usr/local/server/mongodb/data --logpath=/usr/local/server/mongodb/logs --logappend --port=27017 --fork
5. 参数解释: --dbpath 数据库路径(数据文件)
--logpath 日志文件路径
--master 指定为主机器
--slave 指定为从机器
--source 指定主机器的IP地址
--pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。
--logappend 日志文件末尾添加
--port 启用端口号
--fork 在后台运行
--only 指定只复制哪一个数据库
--slavedelay 指从复制检测的时间间隔
--auth 是否需要验证权限登录(用户名和密码)
-h [ --help ] show this usage information
--version show version information
-f [ --config ] arg configuration file specifying additional options
--port arg specify port number
--bind_ip arg local ip address to bind listener - all local ips
bound by default
-v [ --verbose ] be more verbose (include multiple times for more
verbosity e.g. -vvvvv)
--dbpath arg (=/data/db/) directory for datafiles 指定数据存放目录
--quiet quieter output 静默模式
--logpath arg file to send all output to instead of stdout 指定日志存放目录
--logappend appnd to logpath instead of over-writing 指定日志是以追加还是以覆盖的方式写入日志文件
--fork fork server process 以创建子进程的方式运行
--cpu periodically show cpu and iowait utilization 周期性的显示cpu和io的使用情况
--noauth run without security 无认证模式运行
--auth run with security 认证模式运行
--objcheck inspect client data for validity on receipt 检查客户端输入数据的有效性检查
--quota enable db quota management 开始数据库配额的管理
--quotaFiles arg number of files allower per db, requires --quota 规定每个数据库允许的文件数
--appsrvpath arg root directory for the babble app server
--nocursors diagnostic/debugging option 调试诊断选项
--nohints ignore query hints 忽略查询命中率
--nohttpinterface disable http interface 关闭http接口,默认是28017
--noscripting disable scripting engine 关闭脚本引擎
--noprealloc disable data file preallocation 关闭数据库文件大小预分配
--smallfiles use a smaller default file size 使用较小的默认文件大小
--nssize arg (=16) .ns file size (in MB) for new databases 新数据库ns文件的默认大小
--diaglog arg 0=off 1=W 2=R 3=both 7=W+some reads 提供的方式,是只读,只写,还是读写都行,还是主要写+部分的读模式
--sysinfo print some diagnostic system information 打印系统诊断信息
--upgrade upgrade db if needed 如果需要就更新数据库
--repair run repair on all dbs 修复所有的数据库
--notablescan do not allow table scans 不运行表扫描
--syncdelay arg (=60) seconds between disk syncs (0 for never) 系统同步刷新磁盘的时间,默认是60s
Replication options:
--master master mode 主复制模式
--slave slave mode 从复制模式
--source arg when slave: specify master as <server:port> 当为从时,指定主的地址和端口
--only arg when slave: specify a single database to replicate 当为从时,指定需要从主复制的单一库
--pairwith arg address of server to pair with
--arbiter arg address of arbiter server 仲裁服务器,在主主中和pair中用到
--autoresync automatically resync if slave data is stale 自动同步从的数据
--oplogSize arg size limit (in MB) for op log 指定操作日志的大小
--opIdMem arg size limit (in bytes) for in memory storage of op ids指定存储操作日志的内存大小
Sharding options:
--configsvr declare this is a config db of a cluster 指定shard中的配置服务器
--shardsvr declare this is a shard db of a cluster 指定shard服务器
6. 进入数据库的CLI管理界面
cd到mongodb目录下的bin文件夹,执行命令./mongo
运行如下:
[root@namenode mongodb]# ./bin/mongo
MongoDB shell version: 1.8.2
connecting to: test
> use test;
switched to db test
14、spark
5.1 解压
root@Master:/tools# tar -zxf spark-1.6.0-bin-hadoop2.6.tgz -C /usr/local/spark/
root@Master:/tools# cd /usr/local/spark/spark-1.6.0-bin-hadoop2.6/conf/
root@Master:/tools# tar -xzvf scala-2.10.6.tgz
5.2 修改配置文件
5.2.1修改spark-env.sh
root@Master:/usr/local/spark/spark-1.6.0-bin-hadoop2.6#mv spark-env.sh.template spark-env.sh
root@Master:/usr/local/spark/spark-1.6.0-bin-hadoop2.6# vim spark-env.sh
在最后添加以下内容
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_60
export SCALA_HOME=/usr/local/scala/scala-2.10.4
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.6.0
export HADOOP_CONF_DIR=/usr/local/hadoop/hadoop-2.6.0/etc/hadoop
export SPARK_MASTER_IP=Master
#export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=Master:2181,Worker1:2181,Worker2:2
181 -Dspark.deploy.zookeeper.dir=/spark"
export SPARK_WORKER_MEMORY=1g
export SPARK_EXECUTOR_MEMORY=1g
export SPARK_DRIVER_MEMORY=1G
export SPARK_WORKER_CORES=2
5.2.2 修改 slaves
root@Master:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/conf#mv slaves.template slaves
root@Master:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/conf# vim slaves
Worker1
Worker2
Worker3
Worker4
5.2.3 修改 spark-defaults.conf
root@Master:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/conf#mv spark-defaults.conf.template spark-defaults.conf
root@Master:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/conf# vim spark-defaults.conf
spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
spark.eventLog.enabled true
spark.eventLog.dir hdfs://Master:9000/historyServerforSpark
spark.yarn.historyServer.address Master:18080
spark.history.fs.logDirectory hdfs://Master:9000/historyServerforSpark
============================ SetUp Spark=============================
Configuration
spark-env.sh
HADOOP_CONF_DIR=/opt/data02/hadoop-2.6.0-cdh5.4.0/etc/hadoop
JAVA_HOME=/opt/modules/jdk1.7.0_67
SCALA_HOME=/opt/modules/scala-2.10.4
#######################################################
SPARK_MASTER_IP=hadoop-spark.dragon.org
SPARK_MASTER_PORT=7077
SPARK_MASTER_WEBUI_PORT=8080
SPARK_WORKER_CORES=1
SPARK_WORKER_MEMORY=1000m
SPARK_WORKER_PORT=7078
SPARK_WORKER_WEBUI_PORT=8081
SPARK_WORKER_INSTANCES=1
slaves
hadoop-spark.dragon.org
spark-defaults.conf
spark.master spark://hadoop-spark.dragon.org:7077
Start Spark
Start Master
sbin/start-master.sh
Start Slaves
sbin/start-slaves.sh
WEB UI
http://hadoop-spark.dragon.org:8080
============================ Test Spark=============================
scala> val rdd=sc.textFile("hdfs://hadoop-spark.dragon.org:8020/user/hadoop/data/wc.input")
scala> rdd.cache()
scala> val wordcount=rdd.flatMap(_.split(" ")).map(x=>(x,1)).reduceByKey(_+_)
scala> wordcount.take(10)
scala> val wordsort=wordcount.map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1))
scala> wordsort.take(10)
5.6 一键分发到各个服务器上去
root@Master:~# vim fenfa.sh
#!/bin/sh
for i in 1 2 3 4
do
#scp -rq /usr/local/hadoop/ root@Worker$i:/usr/local/
scp -rq /usr/local/spark/ root@Worker$i:/usr/local/
done
root@Master:~# sh fenfa.sh
5.7.需要到hdfs 系统上创建/historyServerforSpark目录
root@Master:/# hadoop fs -mkdir /historyServerforSpark
root@Master:/# hadoop fs -ls /
5.8.启动spark集群
root@Master:~# cd /usr/local/spark/spark-1.6.0-bin-hadoop2.6/sbin/
root@Master:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/sbin# ./start-all.sh
5.9.启动history-serve
root@Master:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/sbin# ./start-history-server.sh
测试集群工作状态的一些指令 :
bin/hdfs dfsadmin -report 查看hdfs的各节点状态信息
bin/hdfs haadmin -getServiceState nn1 获取一个namenode节点的HA状态
sbin/hadoop-daemon.sh start namenode 单独启动一个namenode进程
./hadoop-daemon.sh start zkfc 单独启动一个zkfc进程