基于nfs的hadoop集群,web快速部署
未经本人允许不得转载。
我的开源中国博客地址:https://my.oschina.net/u/3685854/blog/1863003
目录
1.准备工作
1.1系统环境
服务器运行的系统版本:CentOS-7.4
1.2集群规模
服务器数量:6台
1.3集群网络
服务器网络:n1:192.168.xxx.xxx(内网ip);
n2:192.168.xxx.xxx(内网ip);
n3:192.168.xxx.xxx(内网ip);
n4:192.168.xxx.xxx(内网ip);
n5:192.168.xxx.xxx(内网ip);
n6:192.168.xxx.xxx(内网ip);
1.4服务器软件
服务器软件版本:nginx-1.8.1
appache-tomcat-9.0.2
jdk-1.8.0_144
hadoop-2.7.5
zookeeper-3.4.10
hbase-1.2.6
nfs-utils-1.3.0-0.54.el7.x86_64
1.5YUM源选择
yum源:阿里yum源
1.6安装包位置
目录:/usr/local/src
1.7整体架构
主机名 |
n1 |
n2 |
n3 |
n4 |
n5 |
n6 |
角色 |
nginx1 hadoop1 zookeeper1 hbase1 nfs |
nginx2 hadoop2 zookeeper2 hbase2 nfs |
tomcat1 hadoop3 zookeeper3 hbase3 nfs |
tomcat2, hadoop4 hbase4 nfs |
tomcat3, hadoop5 hbase5 nfs |
tomcat4, hadoop6 hbase6 nfs |
|
n1 |
n2 |
n3 |
n4 |
n5 |
n6 |
NameNode |
Y |
N |
N |
N |
N |
N |
SecondaryNameNode |
N |
Y |
N |
N |
N |
N |
DataNode |
Y |
Y |
Y |
Y |
Y |
Y |
HMaster |
Y |
N |
N |
N |
N |
N |
HRegionServer |
Y |
Y |
Y |
Y |
Y |
Y |
QuorumPeerMain |
Y |
Y |
Y |
N |
N |
N |
NodeManager |
Y |
Y |
Y |
Y |
Y |
Y |
Bootstrap |
Y |
N |
Y |
Y |
Y |
Y |
ResourceManager |
Y |
N |
N |
N |
N |
N |
2.NFS搭建
2.1安装nfs
yum -y install nfs-utils rpcbind
2.2服务器端配置
2.2.1创建共享目录
在目录/usr/local下创建共享目录public,并设置其权限
mkdir /usr/local/publish
chmod 777 /usr/local/public
注意权限,要使user拥有目录的权限
2.2.2编辑export文件
vim /etc/exports
/usr/local/public *(rw,sync,no_root_squash,no_all_squash) |
参数值 |
内容说明 |
rw ro |
该目录分享的权限是可擦写 (read-write) 或只读 (read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关。 |
sync async |
sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘! |
no_root_squash root_squash |
客户端使用 NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行! |
all_squash |
不论登入 NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) ! |
anonuid anongid |
anon 意指 anonymous (匿名者) 前面关于 *_squash 提到的匿名用户的 UID 设定值,通常为 nobody(nfsnobody),但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd 当中! anonuid 指的是 UID 而 anongid 则是群组的 GID 。 |
2.2.3配置生效
exportfs -r
2.2.4启动rpcbind、nfs服务
systemctl start rpcbind
systemctl start nfs
2.2.5测试共享
showmount -e localhost
参数值 |
内容说明 |
a |
显示目前主机与客户端的 NFS 联机分享的状态; |
e |
显示某部主机的 /etc/exports 所分享的目录数据。 |
2.3客户端配置
2.3.1安装nfs-utils客户端
yum -y install nfs-utils
2.3.2创建挂在目录
mkdir /usr/local/public
2.3.3查看服务器抛出的共享目录信息
showmount -e n1
2.3.4挂载共享目录
mount -t nfs n1:/usr/local/public /usr/local/public -o proto=tcp -o nolock
2.3.5卸载,配置端口(选做)
卸载:umount /usr/local/public
查看端口:rpcinfo -p localhost
配置端口:vim /etc/sysconfig/nfs
RQUOTAD_PORT=30001 |
LOCKD_TCPPORT=30002 |
LOCKD_UDPPORT=30002 |
MOUNTD_PORT=30003 |
STATD_PORT=30004 |
3.NFT搭建
3.1服务端配置
3.1.1YUM安装NTP
yum install -y ntp
3.1.2配置ntp.conf
vim /etc/ntp.conf
#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 |
server |
127.127.1.1 |
#注释以server开头的行并添加此条 |
3.1.3重启NTP
systemctl restart ntpd.service
3.1.4查看NTP状态
systemctl status ntpd.service
3.2客户端配置
3.2.1安装ntpdate
yum install -y ntpdate
3.2.2同步服务端时间
ntpdate n1
4.JDK
4.1安装位置
目录:/usr/local/public/jdk
4.2安装配置
4.2.1解压jdk到指定目录
在目录/usr/local/src下:
tar -zxvf jdk-8u144-linux-x64.tar.gz -C ../public/jdk/
4.2.2修改系统配置文件profile
在目录/etc/profile下:
vim /etc/profile
文件末尾追加
export JAVA_HOME=/usr/local/public/jdk/jdk1.8.0_144 export JRE_HOME=/usr/local/public/jdk/jdk1.8.0_144/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH |
4.2.3生效系统配置
source /etc/profile
4.2.4验证系统配置
java -version
5.SSH免密登陆
5.1新增用户并设置组及密码
useradd -g root user
passwd user (密码:123456)
5.2ssh的安全设置
配置安全规则,自行百度。实验不用做
5.3给每台机器命名
vim /etc/hostname
n1 |
需要重启生效
5.4配置每台hosts映射
vim /etc/hosts
192.168.xxx.xxx n1 192.168.xxx.xxx n2 192.168.xxx.xxx n3 192.168.xxx.xxx n4 192.168.xxx.xxx n5 192.168.xxx.xxx n6 |
5.5生成**文件
需要切换到user用户执行
ssh-****** -t rsa
5.6配置authorized_keys文件
将每台服务器上的公钥id_rsa.pub添加到每台服务器的authorized_keys内
目录:~/.ssh/
vim authorized_keys
6.NGINX搭建
6.1安装位置
目录:/usr/local/public/nginx
6.2安装配置
6.2.1安装依赖
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel psmisc
6.2.2创建安装目录及相关目录
mkdir /usr/local/public/nginx
mkdir /usr/local/logs/nginx
mkdir /usr/local/pids/nginx
注意权限,要使user拥有目录的权限
6.2.3创建用户和用户组
useradd nginx
6.2.4解压安装包到指定目录
在目录/usr/local/src下:
tar -zxvf nginx-1.8.1.tar.gz -C ../public/nginx
6.2.5配置安装环境及依赖
在目录/usr/local/public/nginx/nginx-1.8.1/下:
./configure --user=nginx --group=nginx --prefix=/usr/local/public/nginx --with-http_stub_status_module --with-http_ssl_module
6.2.6编译安装
make && make install
6.2.7配置文件
在目录/usr/local/public/nginx/conf下:
编辑nginx.conf文件:
vim nginx.conf
error_log /usr/local/logs/nginx/error.log; error_log /usr/local/logs/nginx/error.log notice; error_log /usr/local/logs/nginx/error.log info; pid /usr/local/pids/nginx/nginx.pid; |
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /usr/local/logs/nginx/access.log main; |
upstream tomcatall { server n3:8080 weight=1; server n4:8080 weight=1; server n5:8080 weight=1; server n6:8080 weight=1; } server { listen 8080; server_name localhost; charset utf-8; access_log /usr/local/logs/nginx/host.access.log main; location / { proxy_pass http://tomcatall; proxy_redirect default; } |
6.2.8nginx的启动和关闭
在每台nginx服务器上以用户user操作,
在目录/usr/local/public/nginx下:
启动: ./sbin/nginx -c conf/nginx.conf
关闭: killall -9 nginx
7.TOMCAT搭建
7.1安装位置
目录:/usr/local/public/tomcat
7.2安装配置
7.2.1创建目录
mkdir /usr/local/public/tomcat
mkdir /usr/local/logs/tomcat
mkdir /usr/local/pids/tomcat
注意权限,要使user拥有目录的权限
7.2.2解压到指定目录
tar -zxvf apache-tomcat-9.0.2.tar.gz -C ../public/tomcat
7.2.3配置tomcat-users.xml
在目录/usr/local/public/tomcat/apache-tomcat-9.0.2/conf下:
vim tomcat-users.xml
结尾修改如下:
<role rolename="manager-gui"/> <role rolename="admin-gui"/> <user username="user" password="123456" roles="manager-gui,admin-gui"/> |
7.2.4配置catalina.sh
vim catalina.sh
# Get standard environment variables PRGDIR=`dirname "$PRG"` CATALINA_PID=/usr/local/pids/tomcat/tomcat.pi |
if [ -z "$CATALINA_OUT" ] ; then CATALINA_OUT=/usr/local/logs/tomcat/catalina.out fi |
7.2.5配置logging.properties
vim logging.properties
1catalina.org.apache.juli.AsyncFileHandler.level = FINE 1catalina.org.apache.juli.AsyncFileHandler.directory = /usr/local/logs/tomcat 1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina. 1catalina.org.apache.juli.AsyncFileHandler.maxDays = 90
2localhost.org.apache.juli.AsyncFileHandler.level = FINE 2localhost.org.apache.juli.AsyncFileHandler.directory = /usr/local/logs/tomcat 2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost. 2localhost.org.apache.juli.AsyncFileHandler.maxDays = 90
3manager.org.apache.juli.AsyncFileHandler.level = FINE 3manager.org.apache.juli.AsyncFileHandler.directory = /usr/local/logs/tomcat 3manager.org.apache.juli.AsyncFileHandler.prefix = manager. 3manager.org.apache.juli.AsyncFileHandler.maxDays = 90
4host-manager.org.apache.juli.AsyncFileHandler.level = FINE 4host-manager.org.apache.juli.AsyncFileHandler.directory = /usr/local/logs/tomcat 4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager. 4host-manager.org.apache.juli.AsyncFileHandler.maxDays = 90 |
7.2.6配置server.xml
vim server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve"directory="/usr/local/logs/tomcat" |
7.2.7将相关jar文件放入libs下
在目录/usr/local/src下:
cp ./*.jar ../public/tomcat/apache-tomcat-9.0.2/lib
7.2.8服务的开启与关闭
在每台tomcat服务器(n3,n4,n5,n6)上以用户user操作,
在目录/usr/local/public/tomcat/apache-tomcat-9.0.2/bin下:
启动:./ startup.sh
停止:./ shutdown.sh
8.HADOOP搭建
8.1安装位置
目录:/usr/local/public/hadoop
8.2安装配置
8.2.1创建目录
mkdir /usr/local/public/hadoop
mkdir /usr/local/logs/hadoop
mkdir /usr/local/pids/hadoop
mkdir -p /usr/local/tmp/hadoop
mkdir -p /usr/local/dfs/{data,name}
注意权限,要使user拥有目录的权限
8.2.2解压到指定目录
在目录/usr/local/src下:
tar -zxvf hadoop-2.7.5.tar.gz -C ../public/hadoop
8.2.3配置hadoop-env.sh
在目录/usr/local/public/hadoop/hadoop-2.7.5/etc/hadoop下:
vim hadoop-env.sh
# Where log files are stored. $HADOOP_HOME/logs by default. export HADOOP_LOG_DIR=/usr/local/logs/hadoop # Where log files are stored in the secure data environment. export HADOOP_SECURE_DN_LOG_DIR=/usr/local/logs/hadoop |
export HADOOP_PID_DIR=/usr/local/pids/hadoop export HADOOP_SECURE_DN_PID_DIR=/usr/local/pids/hadoop |
新增
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_144 export HADOOP_CONF_DIR=/usr/local/hadoop/hadoop-2.7.5/etc/hadoop/ |
8.2.4配置core-site.xml
在目录/usr/local/public/hadoop/hadoop-2.7.5/etc/hadoop下:
vim core-site.xml
<configuration> <!-- HDFS file path --> <!-- HDFS默认的连接地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://n1的ip地址:9000</value> </property> <!-- 流文件的配置大小,默认是4K太小了,这里将这个值改的大 --> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <!--生成临时结果的配置路径,需要创建目录tmp--> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/local/tmp/hadoop</value> <description>Abasefor other temporary directories.</description> </property> </configuration> |
8.2.5配置hdfs-site.xml
在目录/usr/local/public/hadoop/hadoop-2.7.5/etc/hadoop下:
vim hdfs-site.xml
<configuration> <!-- 设置namenode的http通讯地址 --> <property> <name>dfs.namenode.http-address</name> <value>n1的ip地址:50070</value> </property> <!-- 设置secondarynamenode的http通讯地址 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>n2的ip地址:50090</value> </property> <!-- 设置namenode存放的路径 --> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/dfs/name</value> </property> <!-- 设置hdfs副本数量 --> <property> <name>dfs.replication</name> <value>1</value> </property> <!-- 设置datanode存放的路径 --> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/dfs/data</value> </property> <!-- 设置是否可以通过web站点进行Hdfs管理 --> <property> <name>dfs.webhdfs.enabled</name> <value>false</value> </property> <!-- 设置是否开放权限 --> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration> |
8.2.6配置mapred-site.xml
在目录/usr/local/public/hadoop/hadoop-2.7.5/etc/hadoop下:
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<!-- 第一个就是制定当前Hadoop的并行运行计算架构,这里为yarn,第二个就是Job运行的历史记录Server,第三个就是历史运行记录的Web服务器。 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>n1的ip地址:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>n1的ip地址:19888</value> </property> |
8.2.7配置yarn-site.xml
在目录/usr/local/public/hadoop/hadoop-2.7.5/etc/hadoop下:
vim yarn-site.xml
<!-- reducer取数据的方式是mapreduce_shuffle --> <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> <!-- 设置 resourcemanager 在哪个节点--> <property> <name>yarn.resourcemanager.hostname</name> <value>n1的ip地址</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>n1的ip地址:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>n1的ip地址:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>n1的ip地址:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>n1的ip地址:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>n1的ip地址:8088</value> </property> |
8.2.8配置slaves
在目录/usr/local/public/hadoop/hadoop-2.7.5/etc/hadoop下:
vim slaves
n1的IP地址 n2的IP地址 n3的IP地址 n4的IP地址 n5的IP地址 n6的IP地址 |
8.2.9配置yarn-env.sh
vim yarn-env.sh
# default log directory & file if [ "$YARN_LOG_DIR" = "" ]; then YARN_LOG_DIR=/usr/local/logs/hadoop fi |
8.2.10hadoop集群的相关操作
在目录/usr/local/public/hadoop/hadoop-2.7.5下:
格式化 ./bin/hdfs namenode -format(第一次启动一定要先格式化)
启动dfs ./sbin/start-dfs.sh
停止dfs ./sbin/stop-dfs.sh
启动yarn ./sbin/start-yarn.sh
停止yarn ./sbin/stop-yarn.sh
启动集群 ./sbin/start-all.sh
停止集群 ./sbin/stop-all.sh
启动balancer ./sbin/start-balancer.sh
停止balancer ./sbin/stop-balancer.sh
启动secure-dns ./sbin/start-secure-dns.sh
停止secure-dns ./sbin/stop-secure-dns.sh
查看启动状态 jps
9.ZOOKEEPER搭建
9.1安装位置
目录:/usr/local/public/zookeeper
9.2安装配置
9.2.1创建目录
mkdir /usr/local/public/zookeeper
mkdir /usr/local/zookeeper_data
mkdir /usr/local/logs/zookeeper
注意权限,要使user拥有目录的权限
9.2.2解压zookeeper到指定目录
在目录/usr/local/src下:
tar -zxvf zookeeper-3.4.10.tar.gz -C ../public/zookeeper
9.2.3配置zoo.cfg
在目录/usr/local/public/zookeeper/zookeeper-3.4.10/conf下:
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
dataDir=/usr/local/zookeeper_data dataLogDir=/usr/local/logs/zookeeper server.1=n1的IP地址:2888:3888 server.2=n2的IP地址:2888:3888 server.3=n3的IP地址:2888:3888 |
9.2.4创建myid并写入
在目录/usr/local/zookeeper_data下:
touch myid
echo “1” > myid
9.2.5修改n2和n3的myid
在n2和n3的目录/usr/local/zookeeper_data下:
echo “2” > myid 仅在n2操作
echo “3” > myid 仅在n3操作
该数字取决于zoo.cfg中server后的数字。
9.2.6zookeper集群的相关操作
启动集群时必须在每台zookeeper服务器上分别启动,第二个启动的为主,其余为从。
在目录/usr/local/public/zookeeper/zookeeper-3.4.10/bin下:
启动 ./zkServer.sh start
停止 ./zkServer.sh stop
查看 ./zkServer.sh status
10.HBASE搭建
10.1安装位置
目录:/usr/local/public/hbase
10.2安装配置
10.2.1创建安装目录
mkdir /usr/local/public/hbase
mkdir /usr/local/logs/hbase
mkdir /usr/local/pids/hbase
注意权限,要使user拥有目录的权限
10.2.2解压hbase到指定目录
在目录/usr/local/src下:
tar -zxvf hbase-1.2.6-bin.tar.gz -C ../public/hbase/
10.2.3配置hbase-env.sh
在目录/ usr/local/public/hbase/hbase-1.2.6/conf下:
vim hbase-env.sh
export JAVA_HOME=/usr/local/public/jdk/jdk1.8.0_144/ export HBASE_MANAGES_ZK=false |
# Configure PermSize. Only needed in JDK7. You can safely remove it for JDK8+ #export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m" #export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m" |
export HBASE_LOG_DIR=/usr/local/logs/hbase |
export HBASE_PID_DIR=/usr/local/pids/hbase |
10.2.4配置hbase-site.xml
在目录/usr/local/public/hbase/hbase-1.2.6/conf下:
vim hbase-site.xml
<property> <name>hbase.rootdir</name> <value>hdfs://n1的IP地址:9000/hbase</value> <!--hbase目录的位置,打开之后,你会发现eclipse的hadoop目录里边多了个hbase目录--> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> <!--分布式集群--> </property> <property> <name>hbase.zookeeper.quorum</name> <value>n1的IP地址,n2的IP地址,n3的IP地址</value> <!--这是集群里边的机器--> </property> <property> <name>dfs.replication</name> <value>1</value> </property> |
10.2.5配置regionservers
在目录/usr/local/public/hbase/hbase-1.2.6/conf下:
vim regionservers
n1的IP地址 n2的IP地址 n3的IP地址 n4的IP地址 n5的IP地址 n6的IP地址 |
10.2.6hbase集群的相关操作
在目录/usr/local/public/hbase/hbase-1.2.6/bin下:
启动 ./start-hbase.sh
停止 ./stop-hbase.sh
11.集群开启关闭顺序
11.1开启集群
在n1启动hadoop集群——在n1,n2和n3分别启动zookeeper——在n1启动hbase集群
11.1.1启动hadoop集群
在n1的目录/usr/local/public/hadoop/hadoop-2.7.5/sbin下:
./start-all.sh
11.1.2启动zookeeper集群
在n1的目录/usr/local/public/zookeeper/zookeeper-3.4.10/bin下:
./zkServer.sh start
在n2的目录/usr/local/public/zookeeper/zookeeper-3.4.10/bin下:
./zkServer.sh start
在n3的目录/usr/local/public/zookeeper/zookeeper-3.4.10/bin下:
./zkServer.sh start
11.1.3启动hbase集群
在n1的目录/usr/local/public/hbase/hbase-1.2.6/bin下:
./start-hbase.sh
11.2关闭集群
在n1关闭hbase集群——在n1,n2和n3分别关闭zookeeper——在n1关闭hadoop’集群
11.2.1关闭hbase集群
在n1的目录/usr/local/public/hbase/hbase-1.2.6/bin下:
./stop-hbase.sh
11.2.2关闭zookeeper集群
在n1的目录/usr/local/public/zookeeper/zookeeper-3.4.10/bin下:
./zkServer.sh stop
在n2的目录/usr/local/public/zookeeper/zookeeper-3.4.10/bin下:
./zkServer.sh stop
在n3的目录/usr/local/public/zookeeper/zookeeper-3.4.10/bin下:
./zkServer.sh stop
11.2.3关闭hadoop集群
在n1的目录/usr/local/public/hadoop/hadoop-2.7.5/sbin下:
./stop-all.sh