hadoop集群搭建手册
2018-03-19 20:00
253 查看
(# 为root账户下操作,$ 为hadoop账户下操作)
【 比较好用的工具:ambari https://blog.csdn.net/cy309173854/article/details/58039594 】
创建三个linux虚拟机:hadoop01,hadoop02,hadoop03
(hadoop02、hadoop03可在hadoop01执行完一些基本配置之后,克隆hadoop01的快照得来)
// 重启网络服务
# service network restart
# vi /etc/hosts
// 修改hadoop这个用户的密码
# passwd hadoop
3 是多用户模式,并且不启动图形界面
找到 root ALL=(ALL) ALL 这一行,然后在他下面添加一行:hadoop ALL=(ALL) ALL
关闭防火墙:service iptables stop
开启防火墙:service iptables start
重启防火墙:service iptables restart
关闭防火墙开机启动:chkconfig iptables off
开启防火墙开机启动:chkconfig iptables on
// 解压至 /usr/local 目录
# tar –zxvf jdk-7u80-linux-x64.tar.gz –C /usr/local
// 修改配置文件
# vi /etc/profile
在最后加入两行:
export JAVA_HOME=/usr/local/jdk1.8.0_73
export PATH=$PATH:$JAVA_HOME/bin
// 重新加载配置文件
# source /etc/profile
// 检查是否安装成功
# java–version
# rpm -qa | grep -i mysql
// 发现有的话就都卸载
# rpm -e --nodeps mysql-libs-5.1.73-5.el6_6.x86_64
// 删除老版本 mysql 的开发头文件和库
# rm -rf /usr/lib/mysql
# rm -rf /usr/include/mysql
// 注意:卸载后/var/lib/mysql 中的数据及/etc/my.cnf 不会删除,确定没用后就手工删除
# rm -rf /etc/my.cnf
# rm-rf /var/lib/mysq
// 上传压缩包
// 解压至 /root/apps
# tar -zxvf mysql-5.6.26-1.linux_glibc2.5.x86_64.rpm-bundle.tar –C /root/apps
// 进入到相应目录
# cd /root/apps
// 安装server
# rpm-ivh MySQL-server-5.6.26-1.linux_glibc2.5.x86_64.rpm
// 安装客户端
# rmp -ivh MySQL-client-5.6.26-1.linux_glibc2.5.x86_64.rpm
// 启动 mysql
# service mysql start
(初始密码在 /root/.mysql_secret 这个文件里)
// 登录之后修改密码
mysql>set PASSWORD=PASSWORD('root')
// 退出登陆验证,看是否改密码成功
mysql>exit
# mysql -uroot -p
// 增加远程登录权限
mysql>GRANT ALL PRIVILEGES ON *.* TO'root'@'
13201
%' IDENTIFIED BY 'root' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES
// 解压至相应目录
$ tar -zxvf zookeeper-3.4.10.tar.gz -C apps/
// 修改配置文件
$ mv apps/zookeeper-3.4.10/conf/zoo_sample.cfg apps/zookeeper-3.4.10/conf/zoo.cfg
$ vi apps/zookeeper-3.4.10/conf/zoo.cfg
// 如果有第四台机器,并且想配置 observer
增加 server.4=hadoop04:2888:3888:observer
// 分发给其它节点
$ scp -r zookeeper-3.4.10/ root@hadoop02:$PWD
$ scp-r zookeeper-3.4.10/ root@hadoop03:$PWD
// 在dataDir=/home/hadoop/data/zkdata中建立服务器id文件
// 例如server.1=hadoop01:2888:3888当中的 id就是 1
// 在hadoop01 /home/hadoop/data/zkdata 中执行
$ echo 1 > myid
// 在hadoop02 /home/hadoop/data/zkdata 中执行
$ echo 2 > myid
// 在hadoop03 /home/hadoop/data/zkdata 中执行
$ echo 3 > myid
参数说明:
tickTime
基本事件单元,以毫秒为单位。它用来控制心跳和超时,默认情况下最小的会话超时时间为两倍的 tickTime。
initLimit
此配置表示,允许 follower (相对于 leader 而言的“客户端”)连接并同步到 leader 的初始化连接时间,它以 tickTime 的倍数来表示。当超过设置倍数的 tickTime 时间,则连接失败。
syncLimit
此配置表示, leader 与 follower 之间发送消息,请求和应答时间长度。如果 follower 在设置的时间内不能与 leader 进行通信,那么此 follower 将被丢弃。
dataDir
存储内存中数据库快照的位置
注意:如果需要保留日志信息,那么可以考虑配置 dataLogDir 的位置,这个位置就是日志的存储目录。通常情况下是分开存储的。并且应该谨慎地选择日志存放的位置,使用专用的日志存储设备能够大大地提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会在很大程度上影响系统的性能。
clientPort
监听客户端连接的端口,默认是 2181,最好不要修改。
最后再增加 zookeeper 的服务器列表信息,格式为:
server.id= 主机名: 心跳端口: 选举端口
例子:server.1=hadoop01:2888:3888
其中 id 虽然可以随便写,但是有两点要求,第一不能重复,第二范围是 1-255,并且对应服务器列表上还得存在对应的 id 文件,具体看上面操作。
// 配置环境变量
$ vi ~/.bash_profile
// 增加两行
export ZOOKEEPER_HOME=/home/hadoop/apps/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER/bin
// 重新加载
$ source ~/.bash_profile
// 启动命令
$ zkServer.shstart
// 查看时间
# date
// 使用 date 命令手动简单同步一下
# date -s "2018-03-19 16:27:50"
// 修改时间后,需要写入硬件 bios 才能在重启之后依然生效
# hwclock -w
方法二:
// 配置 crontab 服务,用 ntpdate 定时同步时间(推荐方式)
# ntpdate 202.120.2.101
如果类似 202.120.2.101 这种网络时间服务器无法访问,那么请自行搭建时间服务器
b) 之后你会发现,在/home/hadoop/.ssh目录下生成了公钥文件
c) 使用一个更简单的方式,使用命令:
ssh-copy-id hadoop02
建立 hadoop01 到 hadoop02 的免密登录
Hadoop01 zookeeper NameNode + DataNode 主节点 NodeManager主节点 MySQL
Hadoop02 zookeeper DataNode +Namenode NodeManager(hdfs备用节点)
Hadoop03 zookeeper DataNode NodeManager + ResourceManager(yarn备用节点)
// 使用hadoop账号,解压至相应目录,此处为 ~/apps
$ tar –zxvf hadoop-2.6.5-centos-6.7.tar.gz –C ~/apps
$ cd /home/hadoop/apps/hadoop-2.6.5/etc/hadoop
// 修改 hadoop-env.sh , 配置 export JAVA_HOME、HADOOP_PID_DIR
$ vi hadoop-env.sh
// 修改 mapred-env.sh
$ vi mapred-env.sh
增加 export HADOOP_MAPRED_PID_DIR=/home/hadoop/apps/hadoop-2.6.5/pid
// 修改 core-site.xml 文件
$ vi core-site.xml
// 修改 hdfs-site.xml
$ vi hdfs-site.xml
<!-- 指定副本数 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!--指定hdfs的nameservice为myha01,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>myha01</value>
</property>
<!-- myha01下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.myha01</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.myha01.nn1</name>
<value>hadoop01:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.myha01.nn1</name>
<value>hadoop01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.myha01.nn2</name>
<value>hadoop02:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.myha01.nn2</name>
<value>hadoop02:50070</value>
</property>
<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/myha01</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/data/journaldata</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.myha01</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>
// 修改 mapred-site.xml
$ vi mapred-site.xml
// 修改 yarn-site.xml
$ vi yarn-site.xml
<!-- 开启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>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<!-- 要运行MapReduce程序必须配置的附属服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 开启YARN集群的日志聚合功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- YARN集群的聚合日志最长保留时长 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<!-- 启用自动恢复 -->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!-- 制定resourcemanager的状态信息存储在zookeeper集群上 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
// 修改 slaves
$ vi slaves
删除localhost,添加hadoop01、hadoop02、hadoop03
// 切换root账户,修改文件夹权限(在所有结点上)
# su root
# chown -R hadoop:hadoop /home/hadoop/
# su hadoop
$ cd /home/hadoop/apps
$ scp -r hadoop-2.6.5 hadoop01:$PWD
$ scp-r hadoop-2.6.5 hadoop02:$PWD
添加:
export HADOOP_HOME=/home/hadoop/apps/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
// 重新加载
# source /etc/profile
$ zkServer.sh start
// 检查启动是否正常
$ zkServer.sh status
// 分别在每个 zookeeper(也就是规划的三个 journalnode 节点)节点上启动 journalnode 进程
$ hadoop-daemon.sh start journalnode
(用 jps 命令查看是否各个 datanode 节点上都启动了 journalnode 进程,如果报错,根据错误提示改进)
// 在第一个 namenode 上执行格式化HDFS操作
$ hadoop namenode –format
(会在 core-site.xml 中配置的临时目录【hadoop.tmp.dir】中生成一些集群的信息,把它拷贝的第二个 namenode 的相同目录下)
// 格式化 ZKFC,在第一台机器上即可
$ hdfszkfc –formatZK
// 启动 HDFS
$ start-dfs.sh
(查看各节点进程是否启动正常,访问 web 页面 hadoop01:50070)
// 启动 YARN
$ start-yarn.sh
(正常启动之后,检查各节点的进程;若备用节点的 resourcemanager 没有启动起来,则手动启动起来 yarn-daemon.sh start resourcemanager,之后访问页面:hadoop02:8088)
访问页面:hadoop02:8088,会出现:
然后自动跳转至 http://hadoop01:8088/cluster
// 解压至相应目录
$ tar -zxvf apache-hive-1.2.1-bin.tar.gz -C ~/apps/
// 修改配置文件
# vi /etc/profile
增加两行:
export HIVE_HOME=/home/hadoop/apps/apache-hive-1.2.1-bin
export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/conf
// 重新加载配置文件
# source /etc/profile
// 登录mysql
# service mysql start
# mysql -uroot -p
// 创建用户hive,密码hive
mysql> GRANT USAGE ON *.* TO 'hive'@'%' IDENTIFIED BY 'hive' WITH GRANT OPTION;
// 创建数据库hive
mysql> create database hive;
// 允许任意ip以hive登陆数据库
mysql> grant all on hive.* to hive@'%' identified by 'hive';
mysql> grant all on hive.* to hive@'localhost' identified by 'hive';
// 刷新权限
mysql> flush privileges;
// 退出
mysql> exit;
// 验证hive用户,密码hive
# mysql -u hive -p
// 查看当前的数据库
mysql> show databases;
若看到有hive这个库,则说明创建成功
// 退出mysql
mysql> exit;
// 修改hive-site.xml
$ cd apps/apache-hive-1.2.1-bin/conf/
$ cp hive-default.xml.template hive-site.xml
$ vi hive-site.xml
(记得建立相应的目录)
// 将 mysql-connector-java-5.1.43-bin.jar 放到hive的lib下面
$ mv mysql-connector-java-5.1.10.jar apps/apache-hive-1.2.1-bin/lib/
// 分发到hadoop02、hadoop03上
$ scp -r apache-hive-1.2.1-bin/ hadoop@hadoop02:$PWD
$ scp -r apache-hive-1.2.1-bin/ hadoop@hadoop03:$PWD
// 把jline-2.12.jar拷贝到hadoop相应的目录下,替代jline-0.9.94.jar,否则启动会报错
$ cp apps/apache-hive-1.2.1-bin/lib/jline-2.12.jar apps/hadoop-2.6.5/share/hadoop/yarn/lib/
$ cd apps/hadoop-2.6.5/share/hadoop/yarn/lib/
$ mv jline-0.9.94.jar jline-0.9.94.jar.bak
// 测试,打开hive客户端
// 解压到相应目录
$ tar -zxvf kafka_2.11-0.8.2.2.tgz -C apps/
// 修改kafka配置文件
$ vi apps/kafka_2.11-0.8.2.2/config/server.properties
// 修改下面4项
// 第一项:这个值要唯一,不同的机器不能相同,hadoop01就写1,hadoop02就写2,hadoop03就写3
broker.id=1
// 第二项:修改hostname
// 第三项:修改日志路径
log.dirs(记得创建相应的文件夹)
// 第四项:此处要写zookeeper集群的ip+端口号,逗号隔开
zookeeper.connect
// 分发至其他节点
$ scp -r kafka_2.11-0.8.2.2/ hadoop@hadoop02:$PWD
$ scp -r kafka_2.11-0.8.2.2/ hadoop@hadoop03:$PWD
// 修改kafka配置文件
$ vi apps/kafka_2.11-0.8.2.2/config/server.properties
// 添加环境变量
# vi /etc/profile
# source /etc/profile
// 使用hadoop用户启动kafka集群
先启动zookeeper集群,然后在kafka集群中的每个节点使用
$ kafka-server-start.sh apps/kafka_2.11-0.8.2.2/config/server.properties &
启动完成后按回车即可
测试:
// 创建topic
$ kafka-topics.sh --create --zookeeper hadoop01:2181,hadoop02:2181,hadoop03:2181 --replication-factor 3 --partitions 1 --topic mykafka
// 查看topic
$ kafka-topics.sh --list --zookeeper hadoop01:2181,hadoop02:2181,hadoop03:2181
// 查看详细信息
$ kafka-topics.sh --describe --zookeeper hadoop01:2181,hadoop02:2181,hadoop03:2181
// 发送消息(hadoop01上执行)
$ kafka-console-producer.sh --broker-list hadoop01:9092 --topic mykafka
// 接收消息(hadoop02上执行)
$ kafka-console-consumer.sh -zookeeper hadoop01:2181,hadoop02:2181,hadoop03:2181 --topic mykafka --from-beginning
// 在hadoop01输入以下内容
test
hello
可以在hadoop02上看到相应的信息
按Ctrl+C退出
// 关闭kafka,在每台上执行
$ kafka-server-stop.sh
// 解压至相应文件
$ tar -zxvf hbase-1.2.4-bin.tar.gz -C ~/apps/
// 进入hbase的conf目录
$ cd ~/apps/hbase-1.2.4/conf/
// 修改配置文件hbase-env.sh
$ vi hbase-env.sh
(建立相应目录:/home/hadoop/data/hbasedata/logs)
// 修改配置文件hbase-site.xml
$ vi hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value>hdfs://myha01/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>60000</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/home/hadoop/data/hbasedata</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop01,hadoop02,hadoop03</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/data/zkdata</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
</property>
<property>
<name>hbase.regionserver.restart.on.zk.expire</name>
<value>true</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>60010</value>
</property>
(建立相应目录:/home/hadoop/data/hbasedata)
// 配置regionservers
$ vi regionservers
// 删除hbase的slf4j-log4j12-1.7.5.jar,解决hbase和hadoop的LSF4J包冲突
$ cd ~/apps/hbase-1.2.4/lib/
$ mv slf4j-log4j12-1.7.5.jar slf4j-log4j12-1.7.5.jar.bak
// 将hbase工作目录同步到集群其它节点
$ cd ~/apps
$ scp -r hbase-1.2.4/ hadoop@hadoop02:$PWD
$ scp -r hbase-1.2.4/ hadoop@hadoop03:$PWD
// 在集群各节点上修改环境变量
# vi /etc/profile
# source /etc/profile
// 改权限(所有节点)
# chown -R hadoop:hadoop /home/hadoop
启动
// 先启动zookeeper集群
$ zkServer.sh start
// 启动HDFS(hadoop01上)
$ start-dfs.sh
// 启动YARN(hadoop01上)
$ start-yarn.sh
// 启动HBase(hadoop01上)
$ start-hbase.sh
启动后hadoop01上使用jps可以看到HMaster和HRegionServer
hadoop02和hadoop03上可以看到HRegionServer
// 关闭HBase的命令(hadoop01上)
$ stop-hbase.sh
// 解压至相应目录
$ tar -zxvf scala-2.11.8.tgz -C ~/apps/
// 在各个节点修改环境变量
# vi /etc/profile
# source /etc/profile
// 在hadoop01查看版本,验证安装是否成功
# scala -version
// 分发到各个节点
$ cd ~/apps
$ scp -r scala-2.11.8/ hadoop@hadoop02:$PWD
$ scp -r scala-2.11.8/ hadoop@hadoop03:$PWD
// 解压至相应文件
$ tar -zxvf spark-2.1.0-bin-hadoop2.6.tgz -C ~/apps/
// 在各个节点修改配置文件
# vi /etc/profile
# source /etc/profile
// 进入到配置文件目录
$ cd apps/spark-2.1.0-bin-hadoop2.6/conf/
// 复制conf文件夹里面spark-env.sh.template一份,改名为spark-env.sh
$ cp spark-env.sh.template spark-env.sh
$ vi spark-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_73
export SCALA_HOME=/home/hadoop/apps/scala-2.11.8
export SPARK_MASTER_IP=hadoop01
export HADOOP_CONF_DIR=/home/hadoop/apps/hadoop-2.6.5/etc/hadoop
export SPARK_DIST_CLASSPATH=/home/hadoop/apps/hadoop-2.6.5/bin/hadoop
export SPARK_CLASSPATH=$HIVE_HOME/lib/mysql-connector-java-5.1.43-bin.jar
export SPARK_PID_DIR=/home/hadoop
// 复制conf文件夹里面slaves.template一份,改名为slaves
$ cp slaves.template slaves
$ vi slaves
// 将hive目录下conf文件夹中的hive-site.xml复制到spark的conf目录下
$ cp ~/apps/apache-hive-1.2.1-bin/conf/hive-site.xml ~/apps/spark-2.1.0-bin-hadoop2.6/conf/
// 将hadoop/etc/hadoop文件中的hdfs-site.xml和core-site.xml文件复制到spark的conf目录下
$ cp ~/apps/hadoop-2.6.5/etc/hadoop/hdfs-site.xml ~/apps/hadoop-2.6.5/etc/hadoop/core-site.xml ~/apps/spark-2.1.0-bin-hadoop2.6/conf/
// 将conf 目录下的spark-defaults.conf.template 复制一份,改名为spark-default.conf
$ cd ~/apps/spark-2.1.0-bin-hadoop2.6/conf
$ cp spark-defaults.conf.template spark-defaults.conf
$ vi spark-defaults.conf
在最下面加上下面这一行
spark.files file:///home/hadoop/apps/spark-2.1.0-bin-hadoop2.6/conf/hdfs-site.xml,file:///home/hadoop/apps/spark-2.1.0-bin-hadoop2.6/conf/core-site.xml
// 分发到各个节点
$ cd ~/apps/
$ scp -r spark-2.1.0-bin-hadoop2.6/ hadoop@hadoop02:$PWD
$ scp -r spark-2.1.0-bin-hadoop2.6/ hadoop@hadoop03:$PWD
// 运行Spark(hadoop01 上)
运行spark 前需启动hadoop 的HDFS 和YARN
$ start-master.sh
$ start-slaves.sh
在hadoop01 上使用jps 命令可以看到Master 和Worker,hadoop02 和03 上可以看到Worder
用浏览器访问hadoop01:8080 可以看到Spark 的web 界面,可以看到3 个worker
// 关闭Spark 的命令(cluster1 上)
$ stop-slaves.sh
$ stop-master.sh
// 解压至相应目录
$ tar -zxvf apache-storm-0.9.7.tar.gz -C ~/apps/
// 在所有节点上添加环境变量
# vi /etc/profile
export STORM_HOME=/home/hadoop/apps/apache-storm-0.9.7
export PATH=$PATH:$STORM_HOME/bin
# source /etc/profile
storm需要python2.6以上的版本
// 查看python版本
# python
可以在最上面一行看到python的版本
// 退出python交互式界面
>>> exit()
如果版本低于2.6,使用yum install python,安装Python2.7
// 更改配置文件
$ vi ~/apps/apache-storm-0.9.7/conf/storm.yaml
修改 storm.zookeeper.servers :
- “cluster1”
- “cluster2”
- “cluster3”
增加 storm.local.dir : “/home/hadoop/data/stormdata”
切记:冒号左右要有空格,否则会报错could not found expected ‘ : ’
storm.local.dir的最左边也要有一个空格(之后要创建相应目录)
// 分发到各个节点上
$ cd ~/apps/
$ scp -r apache-storm-0.9.7/ hadoop@hadoop02:$PWD
$ scp -r apache-storm-0.9.7/ hadoop@hadoop03:$PWD
// 在hadoop01上执行
$ nohup storm ui > /dev/null 2>&1 &
$ nohup storm nimbus > /dev/null 2>&1 &
//在hadoop02、hadoop03上执行
$ nohup storm supervisor > /dev/null 2>&1 &
//在hadoop01、hadoop02、hadoop03上执行
$ nohup storm logviewer > /dev/null 2>&1 &
http://hadoop01:8080
【 比较好用的工具:ambari https://blog.csdn.net/cy309173854/article/details/58039594 】
环境准备
安装虚拟机VMware
使用centOS镜像
创建三个linux虚拟机:hadoop01,hadoop02,hadoop03
(hadoop02、hadoop03可在hadoop01执行完一些基本配置之后,克隆hadoop01的快照得来)
修改主机名
# vi /etc/sysconfig/network修改网卡地址
# vi /etc/sysconfig/network-scripts/ifcfg-eth0// 重启网络服务
# service network restart
添加内网域名映射
// 修改hosts文件# vi /etc/hosts
创建hadoop用户
# useradd hadoop// 修改hadoop这个用户的密码
# passwd hadoop
设置系统的默认启动级别
# vi /etc/inittab3 是多用户模式,并且不启动图形界面
配置 hadoop 用户 sudoer 权限
# vi /etc/sudoers找到 root ALL=(ALL) ALL 这一行,然后在他下面添加一行:hadoop ALL=(ALL) ALL
防火墙设置
查看防火墙状态:service iptables status关闭防火墙:service iptables stop
开启防火墙:service iptables start
重启防火墙:service iptables restart
关闭防火墙开机启动:chkconfig iptables off
开启防火墙开机启动:chkconfig iptables on
安装jdk
上传 jdk-7u80-linux-x64.tar.gz(本人使用secureCRT,配置连接虚拟机进行操作)// 解压至 /usr/local 目录
# tar –zxvf jdk-7u80-linux-x64.tar.gz –C /usr/local
// 修改配置文件
# vi /etc/profile
在最后加入两行:
export JAVA_HOME=/usr/local/jdk1.8.0_73
export PATH=$PATH:$JAVA_HOME/bin
// 重新加载配置文件
# source /etc/profile
// 检查是否安装成功
# java–version
mysql安装
// 检查以前是否装过 Mysql# rpm -qa | grep -i mysql
// 发现有的话就都卸载
# rpm -e --nodeps mysql-libs-5.1.73-5.el6_6.x86_64
// 删除老版本 mysql 的开发头文件和库
# rm -rf /usr/lib/mysql
# rm -rf /usr/include/mysql
// 注意:卸载后/var/lib/mysql 中的数据及/etc/my.cnf 不会删除,确定没用后就手工删除
# rm -rf /etc/my.cnf
# rm-rf /var/lib/mysq
// 上传压缩包
// 解压至 /root/apps
# tar -zxvf mysql-5.6.26-1.linux_glibc2.5.x86_64.rpm-bundle.tar –C /root/apps
// 进入到相应目录
# cd /root/apps
// 安装server
# rpm-ivh MySQL-server-5.6.26-1.linux_glibc2.5.x86_64.rpm
// 安装客户端
# rmp -ivh MySQL-client-5.6.26-1.linux_glibc2.5.x86_64.rpm
// 启动 mysql
# service mysql start
(初始密码在 /root/.mysql_secret 这个文件里)
// 登录之后修改密码
mysql>set PASSWORD=PASSWORD('root')
// 退出登陆验证,看是否改密码成功
mysql>exit
# mysql -uroot -p
// 增加远程登录权限
mysql>GRANT ALL PRIVILEGES ON *.* TO'root'@'
13201
%' IDENTIFIED BY 'root' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES
zookeeper集群搭建
// 上传安装包// 解压至相应目录
$ tar -zxvf zookeeper-3.4.10.tar.gz -C apps/
// 修改配置文件
$ mv apps/zookeeper-3.4.10/conf/zoo_sample.cfg apps/zookeeper-3.4.10/conf/zoo.cfg
$ vi apps/zookeeper-3.4.10/conf/zoo.cfg
// 如果有第四台机器,并且想配置 observer
增加 server.4=hadoop04:2888:3888:observer
// 分发给其它节点
$ scp -r zookeeper-3.4.10/ root@hadoop02:$PWD
$ scp-r zookeeper-3.4.10/ root@hadoop03:$PWD
// 在dataDir=/home/hadoop/data/zkdata中建立服务器id文件
// 例如server.1=hadoop01:2888:3888当中的 id就是 1
// 在hadoop01 /home/hadoop/data/zkdata 中执行
$ echo 1 > myid
// 在hadoop02 /home/hadoop/data/zkdata 中执行
$ echo 2 > myid
// 在hadoop03 /home/hadoop/data/zkdata 中执行
$ echo 3 > myid
参数说明:
tickTime
基本事件单元,以毫秒为单位。它用来控制心跳和超时,默认情况下最小的会话超时时间为两倍的 tickTime。
initLimit
此配置表示,允许 follower (相对于 leader 而言的“客户端”)连接并同步到 leader 的初始化连接时间,它以 tickTime 的倍数来表示。当超过设置倍数的 tickTime 时间,则连接失败。
syncLimit
此配置表示, leader 与 follower 之间发送消息,请求和应答时间长度。如果 follower 在设置的时间内不能与 leader 进行通信,那么此 follower 将被丢弃。
dataDir
存储内存中数据库快照的位置
注意:如果需要保留日志信息,那么可以考虑配置 dataLogDir 的位置,这个位置就是日志的存储目录。通常情况下是分开存储的。并且应该谨慎地选择日志存放的位置,使用专用的日志存储设备能够大大地提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会在很大程度上影响系统的性能。
clientPort
监听客户端连接的端口,默认是 2181,最好不要修改。
最后再增加 zookeeper 的服务器列表信息,格式为:
server.id= 主机名: 心跳端口: 选举端口
例子:server.1=hadoop01:2888:3888
其中 id 虽然可以随便写,但是有两点要求,第一不能重复,第二范围是 1-255,并且对应服务器列表上还得存在对应的 id 文件,具体看上面操作。
// 配置环境变量
$ vi ~/.bash_profile
// 增加两行
export ZOOKEEPER_HOME=/home/hadoop/apps/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER/bin
// 重新加载
$ source ~/.bash_profile
// 启动命令
$ zkServer.shstart
hadoop集群环境安装
服务器同步时间
方法一:// 查看时间
# date
// 使用 date 命令手动简单同步一下
# date -s "2018-03-19 16:27:50"
// 修改时间后,需要写入硬件 bios 才能在重启之后依然生效
# hwclock -w
方法二:
// 配置 crontab 服务,用 ntpdate 定时同步时间(推荐方式)
# ntpdate 202.120.2.101
如果类似 202.120.2.101 这种网络时间服务器无法访问,那么请自行搭建时间服务器
配置免密登录
a) 在 hadoop 登录状态下,输入命令ssh-keygen 或者 ssh-keygen –t rsab) 之后你会发现,在/home/hadoop/.ssh目录下生成了公钥文件
c) 使用一个更简单的方式,使用命令:
ssh-copy-id hadoop02
建立 hadoop01 到 hadoop02 的免密登录
安装 hadoop(ha)
集群规划
HDFS YARNHadoop01 zookeeper NameNode + DataNode 主节点 NodeManager主节点 MySQL
Hadoop02 zookeeper DataNode +Namenode NodeManager(hdfs备用节点)
Hadoop03 zookeeper DataNode NodeManager + ResourceManager(yarn备用节点)
上传安装包
// 使用hadoop账号,解压至相应目录,此处为 ~/apps
$ tar –zxvf hadoop-2.6.5-centos-6.7.tar.gz –C ~/apps
修改配置文件
// 切换到存有hadoop配置文件的目录$ cd /home/hadoop/apps/hadoop-2.6.5/etc/hadoop
// 修改 hadoop-env.sh , 配置 export JAVA_HOME、HADOOP_PID_DIR
$ vi hadoop-env.sh
// 修改 mapred-env.sh
$ vi mapred-env.sh
增加 export HADOOP_MAPRED_PID_DIR=/home/hadoop/apps/hadoop-2.6.5/pid
// 修改 core-site.xml 文件
$ vi core-site.xml
// 修改 hdfs-site.xml
$ vi hdfs-site.xml
<!-- 指定副本数 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!--指定hdfs的nameservice为myha01,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>myha01</value>
</property>
<!-- myha01下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.myha01</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.myha01.nn1</name>
<value>hadoop01:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.myha01.nn1</name>
<value>hadoop01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.myha01.nn2</name>
<value>hadoop02:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.myha01.nn2</name>
<value>hadoop02:50070</value>
</property>
<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/myha01</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/data/journaldata</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.myha01</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>
// 修改 mapred-site.xml
$ vi mapred-site.xml
// 修改 yarn-site.xml
$ vi yarn-site.xml
<!-- 开启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>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<!-- 要运行MapReduce程序必须配置的附属服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 开启YARN集群的日志聚合功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- YARN集群的聚合日志最长保留时长 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<!-- 启用自动恢复 -->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!-- 制定resourcemanager的状态信息存储在zookeeper集群上 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
// 修改 slaves
$ vi slaves
删除localhost,添加hadoop01、hadoop02、hadoop03
// 切换root账户,修改文件夹权限(在所有结点上)
# su root
# chown -R hadoop:hadoop /home/hadoop/
分发安装包到各节点
// 切换到hadoop账号,进入hadoop安装目录# su hadoop
$ cd /home/hadoop/apps
$ scp -r hadoop-2.6.5 hadoop01:$PWD
$ scp-r hadoop-2.6.5 hadoop02:$PWD
修改配置文件
# vi /etc/profile添加:
export HADOOP_HOME=/home/hadoop/apps/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
// 重新加载
# source /etc/profile
集群初始化操作
// 启动zookeeper集群(分别在hadoop01, hadoop02和hadoop03上执行)$ zkServer.sh start
// 检查启动是否正常
$ zkServer.sh status
// 分别在每个 zookeeper(也就是规划的三个 journalnode 节点)节点上启动 journalnode 进程
$ hadoop-daemon.sh start journalnode
(用 jps 命令查看是否各个 datanode 节点上都启动了 journalnode 进程,如果报错,根据错误提示改进)
// 在第一个 namenode 上执行格式化HDFS操作
$ hadoop namenode –format
(会在 core-site.xml 中配置的临时目录【hadoop.tmp.dir】中生成一些集群的信息,把它拷贝的第二个 namenode 的相同目录下)
// 格式化 ZKFC,在第一台机器上即可
$ hdfszkfc –formatZK
// 启动 HDFS
$ start-dfs.sh
(查看各节点进程是否启动正常,访问 web 页面 hadoop01:50070)
// 启动 YARN
$ start-yarn.sh
(正常启动之后,检查各节点的进程;若备用节点的 resourcemanager 没有启动起来,则手动启动起来 yarn-daemon.sh start resourcemanager,之后访问页面:hadoop02:8088)
访问页面:hadoop02:8088,会出现:
然后自动跳转至 http://hadoop01:8088/cluster
hive安装
// 上传安装包// 解压至相应目录
$ tar -zxvf apache-hive-1.2.1-bin.tar.gz -C ~/apps/
// 修改配置文件
# vi /etc/profile
增加两行:
export HIVE_HOME=/home/hadoop/apps/apache-hive-1.2.1-bin
export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/conf
// 重新加载配置文件
# source /etc/profile
// 登录mysql
# service mysql start
# mysql -uroot -p
// 创建用户hive,密码hive
mysql> GRANT USAGE ON *.* TO 'hive'@'%' IDENTIFIED BY 'hive' WITH GRANT OPTION;
// 创建数据库hive
mysql> create database hive;
// 允许任意ip以hive登陆数据库
mysql> grant all on hive.* to hive@'%' identified by 'hive';
mysql> grant all on hive.* to hive@'localhost' identified by 'hive';
// 刷新权限
mysql> flush privileges;
// 退出
mysql> exit;
// 验证hive用户,密码hive
# mysql -u hive -p
// 查看当前的数据库
mysql> show databases;
若看到有hive这个库,则说明创建成功
// 退出mysql
mysql> exit;
// 修改hive-site.xml
$ cd apps/apache-hive-1.2.1-bin/conf/
$ cp hive-default.xml.template hive-site.xml
$ vi hive-site.xml
(记得建立相应的目录)
// 将 mysql-connector-java-5.1.43-bin.jar 放到hive的lib下面
$ mv mysql-connector-java-5.1.10.jar apps/apache-hive-1.2.1-bin/lib/
// 分发到hadoop02、hadoop03上
$ scp -r apache-hive-1.2.1-bin/ hadoop@hadoop02:$PWD
$ scp -r apache-hive-1.2.1-bin/ hadoop@hadoop03:$PWD
// 把jline-2.12.jar拷贝到hadoop相应的目录下,替代jline-0.9.94.jar,否则启动会报错
$ cp apps/apache-hive-1.2.1-bin/lib/jline-2.12.jar apps/hadoop-2.6.5/share/hadoop/yarn/lib/
$ cd apps/hadoop-2.6.5/share/hadoop/yarn/lib/
$ mv jline-0.9.94.jar jline-0.9.94.jar.bak
// 测试,打开hive客户端
kafka安装
// 上传安装包// 解压到相应目录
$ tar -zxvf kafka_2.11-0.8.2.2.tgz -C apps/
// 修改kafka配置文件
$ vi apps/kafka_2.11-0.8.2.2/config/server.properties
// 修改下面4项
// 第一项:这个值要唯一,不同的机器不能相同,hadoop01就写1,hadoop02就写2,hadoop03就写3
broker.id=1
// 第二项:修改hostname
// 第三项:修改日志路径
log.dirs(记得创建相应的文件夹)
// 第四项:此处要写zookeeper集群的ip+端口号,逗号隔开
zookeeper.connect
// 分发至其他节点
$ scp -r kafka_2.11-0.8.2.2/ hadoop@hadoop02:$PWD
$ scp -r kafka_2.11-0.8.2.2/ hadoop@hadoop03:$PWD
// 修改kafka配置文件
$ vi apps/kafka_2.11-0.8.2.2/config/server.properties
// 添加环境变量
# vi /etc/profile
# source /etc/profile
// 使用hadoop用户启动kafka集群
先启动zookeeper集群,然后在kafka集群中的每个节点使用
$ kafka-server-start.sh apps/kafka_2.11-0.8.2.2/config/server.properties &
启动完成后按回车即可
测试:
// 创建topic
$ kafka-topics.sh --create --zookeeper hadoop01:2181,hadoop02:2181,hadoop03:2181 --replication-factor 3 --partitions 1 --topic mykafka
// 查看topic
$ kafka-topics.sh --list --zookeeper hadoop01:2181,hadoop02:2181,hadoop03:2181
// 查看详细信息
$ kafka-topics.sh --describe --zookeeper hadoop01:2181,hadoop02:2181,hadoop03:2181
// 发送消息(hadoop01上执行)
$ kafka-console-producer.sh --broker-list hadoop01:9092 --topic mykafka
// 接收消息(hadoop02上执行)
$ kafka-console-consumer.sh -zookeeper hadoop01:2181,hadoop02:2181,hadoop03:2181 --topic mykafka --from-beginning
// 在hadoop01输入以下内容
test
hello
可以在hadoop02上看到相应的信息
按Ctrl+C退出
// 关闭kafka,在每台上执行
$ kafka-server-stop.sh
hbase安装
// 上传安装包// 解压至相应文件
$ tar -zxvf hbase-1.2.4-bin.tar.gz -C ~/apps/
// 进入hbase的conf目录
$ cd ~/apps/hbase-1.2.4/conf/
// 修改配置文件hbase-env.sh
$ vi hbase-env.sh
(建立相应目录:/home/hadoop/data/hbasedata/logs)
// 修改配置文件hbase-site.xml
$ vi hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value>hdfs://myha01/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>60000</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/home/hadoop/data/hbasedata</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop01,hadoop02,hadoop03</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/data/zkdata</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
</property>
<property>
<name>hbase.regionserver.restart.on.zk.expire</name>
<value>true</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>60010</value>
</property>
(建立相应目录:/home/hadoop/data/hbasedata)
// 配置regionservers
$ vi regionservers
// 删除hbase的slf4j-log4j12-1.7.5.jar,解决hbase和hadoop的LSF4J包冲突
$ cd ~/apps/hbase-1.2.4/lib/
$ mv slf4j-log4j12-1.7.5.jar slf4j-log4j12-1.7.5.jar.bak
// 将hbase工作目录同步到集群其它节点
$ cd ~/apps
$ scp -r hbase-1.2.4/ hadoop@hadoop02:$PWD
$ scp -r hbase-1.2.4/ hadoop@hadoop03:$PWD
// 在集群各节点上修改环境变量
# vi /etc/profile
# source /etc/profile
// 改权限(所有节点)
# chown -R hadoop:hadoop /home/hadoop
启动
// 先启动zookeeper集群
$ zkServer.sh start
// 启动HDFS(hadoop01上)
$ start-dfs.sh
// 启动YARN(hadoop01上)
$ start-yarn.sh
// 启动HBase(hadoop01上)
$ start-hbase.sh
启动后hadoop01上使用jps可以看到HMaster和HRegionServer
hadoop02和hadoop03上可以看到HRegionServer
// 关闭HBase的命令(hadoop01上)
$ stop-hbase.sh
scala安装
// 上传安装包// 解压至相应目录
$ tar -zxvf scala-2.11.8.tgz -C ~/apps/
// 在各个节点修改环境变量
# vi /etc/profile
# source /etc/profile
// 在hadoop01查看版本,验证安装是否成功
# scala -version
// 分发到各个节点
$ cd ~/apps
$ scp -r scala-2.11.8/ hadoop@hadoop02:$PWD
$ scp -r scala-2.11.8/ hadoop@hadoop03:$PWD
spark安装
// 上传安装包// 解压至相应文件
$ tar -zxvf spark-2.1.0-bin-hadoop2.6.tgz -C ~/apps/
// 在各个节点修改配置文件
# vi /etc/profile
# source /etc/profile
// 进入到配置文件目录
$ cd apps/spark-2.1.0-bin-hadoop2.6/conf/
// 复制conf文件夹里面spark-env.sh.template一份,改名为spark-env.sh
$ cp spark-env.sh.template spark-env.sh
$ vi spark-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_73
export SCALA_HOME=/home/hadoop/apps/scala-2.11.8
export SPARK_MASTER_IP=hadoop01
export HADOOP_CONF_DIR=/home/hadoop/apps/hadoop-2.6.5/etc/hadoop
export SPARK_DIST_CLASSPATH=/home/hadoop/apps/hadoop-2.6.5/bin/hadoop
export SPARK_CLASSPATH=$HIVE_HOME/lib/mysql-connector-java-5.1.43-bin.jar
export SPARK_PID_DIR=/home/hadoop
// 复制conf文件夹里面slaves.template一份,改名为slaves
$ cp slaves.template slaves
$ vi slaves
// 将hive目录下conf文件夹中的hive-site.xml复制到spark的conf目录下
$ cp ~/apps/apache-hive-1.2.1-bin/conf/hive-site.xml ~/apps/spark-2.1.0-bin-hadoop2.6/conf/
// 将hadoop/etc/hadoop文件中的hdfs-site.xml和core-site.xml文件复制到spark的conf目录下
$ cp ~/apps/hadoop-2.6.5/etc/hadoop/hdfs-site.xml ~/apps/hadoop-2.6.5/etc/hadoop/core-site.xml ~/apps/spark-2.1.0-bin-hadoop2.6/conf/
// 将conf 目录下的spark-defaults.conf.template 复制一份,改名为spark-default.conf
$ cd ~/apps/spark-2.1.0-bin-hadoop2.6/conf
$ cp spark-defaults.conf.template spark-defaults.conf
$ vi spark-defaults.conf
在最下面加上下面这一行
spark.files file:///home/hadoop/apps/spark-2.1.0-bin-hadoop2.6/conf/hdfs-site.xml,file:///home/hadoop/apps/spark-2.1.0-bin-hadoop2.6/conf/core-site.xml
// 分发到各个节点
$ cd ~/apps/
$ scp -r spark-2.1.0-bin-hadoop2.6/ hadoop@hadoop02:$PWD
$ scp -r spark-2.1.0-bin-hadoop2.6/ hadoop@hadoop03:$PWD
// 运行Spark(hadoop01 上)
运行spark 前需启动hadoop 的HDFS 和YARN
$ start-master.sh
$ start-slaves.sh
在hadoop01 上使用jps 命令可以看到Master 和Worker,hadoop02 和03 上可以看到Worder
用浏览器访问hadoop01:8080 可以看到Spark 的web 界面,可以看到3 个worker
// 关闭Spark 的命令(cluster1 上)
$ stop-slaves.sh
$ stop-master.sh
storm安装
// 上传安装包// 解压至相应目录
$ tar -zxvf apache-storm-0.9.7.tar.gz -C ~/apps/
// 在所有节点上添加环境变量
# vi /etc/profile
export STORM_HOME=/home/hadoop/apps/apache-storm-0.9.7
export PATH=$PATH:$STORM_HOME/bin
# source /etc/profile
storm需要python2.6以上的版本
// 查看python版本
# python
可以在最上面一行看到python的版本
// 退出python交互式界面
>>> exit()
如果版本低于2.6,使用yum install python,安装Python2.7
// 更改配置文件
$ vi ~/apps/apache-storm-0.9.7/conf/storm.yaml
修改 storm.zookeeper.servers :
- “cluster1”
- “cluster2”
- “cluster3”
增加 storm.local.dir : “/home/hadoop/data/stormdata”
切记:冒号左右要有空格,否则会报错could not found expected ‘ : ’
storm.local.dir的最左边也要有一个空格(之后要创建相应目录)
// 分发到各个节点上
$ cd ~/apps/
$ scp -r apache-storm-0.9.7/ hadoop@hadoop02:$PWD
$ scp -r apache-storm-0.9.7/ hadoop@hadoop03:$PWD
// 在hadoop01上执行
$ nohup storm ui > /dev/null 2>&1 &
$ nohup storm nimbus > /dev/null 2>&1 &
//在hadoop02、hadoop03上执行
$ nohup storm supervisor > /dev/null 2>&1 &
//在hadoop01、hadoop02、hadoop03上执行
$ nohup storm logviewer > /dev/null 2>&1 &
http://hadoop01:8080
相关文章推荐
- Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程~
- Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程
- Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程
- Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程~(心血之作啊~~)
- Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程~(心血之作啊~~) .
- Hadoop集群搭建手册
- Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程~(心血之作啊~~)
- Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程
- Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程~(心血之作啊~~)
- Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程
- Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程
- Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程~(心血之作啊~~)
- Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程~(心血之作啊~~)
- Centos 7.2 安装 Ambari 2.2.2 + HDP 2.4.2 搭建Hadoop集群
- hadoop、spark、zookeeper、hive集群搭建脚本
- Hadoop集群搭建示意图即相应配置文件汇总
- hadoop2.4.1集群搭建
- hadoop2.5.2的本地模式、伪分布式集群、分布式集群和HDFS系统的高可用的环境搭建
- hadoop2.x 伪分布式环境搭建 | 适用于hadoop伪分布式集群环境搭建
- Ubantu下搭建Hadoop2.x完全分布式集群