Hadoop记录-Apache hadoop+spark集群部署
Hadoop+Spark集群部署指南
(多节点文件分发、集群操作建议salt/ansible)
1.集群规划
节点名称 主机名 IP地址 操作系统
Master centos1 192.168.0.1 CentOS 7.2
Slave1 centos2 192.168.0.2 CentOS 7.2
Slave2 centos2 192.168.0.3 Centos 7.2
2.基础环境配置
2.1 hostname配置
1)修改主机名
在192.168.0.1 root用户下执行:
hostnamectl set-hostname centos1
在192.168.0.2 root用户下执行:
hostnamectl set-hostname centos2
在192.168.0.3 root用户下执行:
hostnamectl set-hostname centos3
2)加入主机映射
在目标服务器(192.168.0.1 192.168.0.2 192.168.0.3)root用户下执行:
vim /etc/hosts
192.168.0.1 centos1
192.168.0.2 centos2
192.168.0.3 centos3
2.2 关闭selinux
在目标服务器(192.168.0.1 192.168.0.2 192.168.0.3)root用户下执行:
sed -i '/^SELINUX/s/=.*/=disabled/' /etc/selinux/config
setenforce 0
2.3 修改Linux最大打开文件数
在目标服务器(192.168.0.1 192.168.0.2 192.168.0.3)root用户下执行:
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
2.4 关闭防火墙
在目标服务器(192.168.0.1 192.168.0.2 192.168.0.3)root用户下执行
systemctl disable firewalld.service
systemctl stop firewalld.service
systemctl status firewalld.service
2.5初始化服务器
1)初始化服务器
在目标服务器(192.168.0.1 192.168.0.2 192.168.0.1 192.168.0.3)root用户下执行
groupadd -g 6000 hadoop
useradd -s /bin/bash -G hadoop -m hadoop
passwd hadoop
mkdir -p /usr/app/jdk
chown –R hadoop:hadoop /usr/app
2)配置sudo
在目标服务器(192.168.0.1 192.168.0.2 192.168.0.3)root用户下执行
vim /etc/sudoers.d/hadoop
hadoop ALL=(ALL) ALL
hadoop ALL=(ALL) NOPASSWD: ALL
Defaults !env_reset
3)配置ssh无密登录
在192.168.0.1 192.168.0.2 192.168.0.3 hadoop用户下执行
su hadoop
ssh-keygen -t rsa
合并id_rsa_pub文件
在192.168.0.1 hadoop用户下执行
cat ~/.ssh/id_rsa.pub >> /home/hadoop/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys hadoop@192.168.0.2:/home/hadoop/.ssh
输入密码:hadoop
在192.168.0.2 hadoop用户下执行
cat ~/.ssh/id_rsa.pub >> /home/hadoop/.ssh/authorized_keys
scp ~/.ssh/authorized_keys hadoop@192.168.0.3:/home/hadoop/.ssh
输入密码:hadoop
在192.168.0.3 hadoop用户下执行
cat ~/.ssh/id_rsa.pub >> /home/hadoop/.ssh/authorized_keys
scp ~/.ssh/authorized_keys hadoop@192.168.0.1:/home/hadoop/.ssh
scp ~/.ssh/authorized_keys hadoop@192.168.0.2:/home/hadoop/.ssh
覆盖之前的文件
输入密码:hadoop
在192.168.0.1 192.168.0.2 192.168.0.3 hadoop用户下执行
ssh hadoop@192.168.0.1
ssh hadoop@192.168.0.2
ssh hadoop@192.168.0.3
3.程序包准备
#上传以下程序包到服务器上
jdk-8u192-linux-x64.tar.gz
hadoop-2.8.5.tar.gz
scala-2.11.12.tar.gz
spark-2.4.1-bin-hadoop2.7.tar.gz
zookeeper-3.4.5.tar.gz
#解压
tar xvf hadoop-2.8.5.tar.gz -C /usr/app
tar xvf scala-2.11.12.tar.gz -C /usr/app
tar xvf spark-2.4.1-bin-hadoop2.7.tar.gz -C /usr/app
tar xvf zookeeper-3.4.5.tar.gz -C /usr/app
tar xvf jdk-8u192-linux-x64.tar.gz -C /usr/app/jdk
mv hadoop-2.8.5 hadoop
mv scala-2.11.12 scala
mv spark-2.4.1-bin-hadoop2.7 spark
mv zookeeper-3.4.5 zookeeper
#配置/etc/profile
export JAVA_HOME=/usr/app/jdk/jdk1.8.0_192
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/usr/app/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export SPARK_HOME=/usr/app/spark/spark-2.4.1-bin-hadoop2.7
export PATH=$SPARK_HOME/bin:$PATH
4.Zookeeper集群部署
#在192.168.0.1 192.168.0.2 192.168.0.3 hadoop用户下执行
cd /usr/app/zookeeper/conf
cat >> zoo.cfg << EOF
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/app/zookeeper/data/zookeeper
dataLogDir=/usr/app/zookeeper/logs
clientPort=2181
maxClientCnxns=1000
server.1= 192.168.0.1:2888:3888
server.2= 192.168.0.2:2888:3888
server.3= 192.168.0.3:2888:3888
EOF
#master节点写1 slave节点依次类推
echo 1>> /usr/app/zookeeper/data/zookeeper/myid
#启动
nohup /usr/app/zookeeper/bin/zkServer.sh start &
5.Hadoop集群部署
#在192.168.0.1 192.168.0.2 192.168.0.3 hadoop用户下执行
cd /usr/app/hadoop/etc/hadoop
在hadoop-env.sh、yarn-env.sh
加入:export JAVA_HOME=/usr/app/jdk/jdk1.8.0_192
到/usr/app/Hadoop/etc/hadoop目录下,根据实际情况修改里面的IP主机名、目录等。
core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/app/hadoop/tmp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.DefaultCodec,
org.apache.hadoop.io.compress.BZip2Codec,
org.apache.hadoop.io.compress.SnappyCodec
</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>192.168.0.1:2181,192.168.0.2:2181,192.168.0.3:2181</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value></value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>192.168.0.1:</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>192.168.0.1:</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>192.168.0.2:</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>192.168.0.2:</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://192.168.0.1:8485;192.168.0.2:8485;192.168.0.3:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/app/hadoop/data/journaldata</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/app/hadoop/data/dfs/nn/local</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/app/hadoop/data/dfs/dn/local</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>shell(/bin/true)</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value></value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>rmCluster</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>192.168.0.1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>192.168.0.2</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>192.168.0.1:2181,192.168.0.2:2181,192.168.0.3:2181</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<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>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property> <property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property> <property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>20480</value>
</property>
<property>
<name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name>
<value>97.0</value>
</property>
</configuration>
slaves加入192.168.0.1 192.168.0.2 192.168.0.3
hadoop-env.sh加入
export JAVA_HOME=/usr/app/jdk/jdk1.8.0_192
export HADOOP_HEAPSIZE=12288
export HADOOP_PORTMAP_OPTS="-Xmx4096m $HADOOP_PORTMAP_OPTS"
export HADOOP_CLIENT_OPTS="-Xmx4096m $HADOOP_CLIENT_OPTS"
yarn-env.sh加入
export JAVA_HOME=/usr/app/jdk/jdk1.8.0_192
JAVA_HEAP_MAX=-Xmx2048m
#新建目录
mkdir –p /usr/app/Hadoop/tmp
mkdir –p /usr/app/Hadoop/data/dfs/nn/local
mkdir –p /usr/app/Hadoop/data/dfs/nn/local
#启动
在192.168.0.1 192.168.0.2 192.168.0.3 hadoop用户下执行
hadoop-daemon.sh start journalnode
在192.168.0.1 hadoop用户下执行
hdfs namenode –format
hadoop-daemon.sh start namenode
在192.168.0.2 hadoop用户下操作
hdfs namenode –bootstrapStandby
在192.168.0.1 hadoop用户下执行
hdfs zkfc –formatZK
在192.168.0.2 hadoop用户下操作
hadoop-daemon.sh start namenode
在192.168.0.1 192.168.0.2 hadoop用户下操作
hadoop-daemon.sh start zkfc
在192.168.0.1 192.168.0.2 hadoop用户下操作
yarn-daemon.sh start resourcemanager
在192.168.0.1 192.168.0.2 192.168.0.3 hadoop用户下操作
yarn-daemon.sh start nodemanager
在192.168.0.1 192.168.0.2 192.168.0.3 hadoop用户下操作
hadoop-daemon.sh start datanode
#验证
http://192.168.0.1:50070查看hadoop状态
http://192.168.0.1:8088查看yarn集群状态
6.Spark集群部署
#在192.168.0.1 192.168.0.2 192.168.0.3 hadoop用户下执行
cd /usr/app/spark/conf
在spark-env.sh加入
export JAVA_HOME=/usr/app/jdk/jdk1.8.0_192
export SCALA_HOME=/usr/app/scala
export HADOOP_HOME=/usr/app/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://mysqlcluster/tmp/spark/event"
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${HADOOP_HOME}/lib/native
export PYSPARK_PYTHON=/usr/app/python/venv/bin/python
export PYSPARK_DRIVER_PYTHON=/usr/app/python/venv/bin/python
在spark-defaults.conf加入
spark.master yarn
spark.eventLog.enabled true
spark.eventLog.dir hdfs://fate-cluster/tmp/spark/event
# spark.serializer org.apache.spark.serializer.KryoSerializer
# spark.driver.memory 5g
# spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
spark.yarn.jars hdfs://mycluster/tmp/spark/jars/*.jar
在slaves加入192.168.0.2 192.168.0.3
/usr/app/spark/spark-2.4.1-bin-hadoop2.7/jars
hdfs dfs -mkdir -p /tmp/spark/jars
hdfs dfs -mkdir -p /tmp/spark/event
hdfs dfs -put \*jar /tmp/spark/jars
#启动
/usr/app/spark/sbin/start-all.sh
#验证
/usr/app/spark/bin/spark-shell --master yarn --deploy-mode client
Hadoop记录-Apache hadoop+spark集群部署的更多相关文章
- Spark集群部署
Spark是通用的基于内存计算的大数据框架,可以和hadoop生态系统很好的兼容,以下来部署Spark集群 集群环境:3节点 Master:bigdata1 Slaves:bigdata2,bigda ...
- GIS+=地理信息+云计算技术——Spark集群部署
第一步:安装软件 Spark 1.5.4:wget http://www.apache.org/dyn/closer.lua/spark/spark-1.5.2/spark-1.5.2 ...
- Hadoop记录-安装ambari hdp集群
#!/bin/sh #配置用户sudo权限(参考/etc/sudoers文件,在/etc/sudoers.d/新建一个用户配置文件,注意要注销) #需要在/etc/sudoers末尾追加:sfapp ...
- Spark集群部署(standLone)模式
安装部署: 1. 配置spark为1个master,2个slave的独立集群(Standlone)模式, 可以在VMWare中构建3台运行Ubuntu的机器作为服务器: master主机配置如下: ...
- SPARK安装三:SPARK集群部署
使用2.3.0版本,因为公司生产环境是这个版本 一.下载安装 cd /opt wget https://archive.apache.org/dist/spark/spark-2.3.0/spark- ...
- Docker中提交任务到Spark集群
1. 背景描述和需求 数据分析程序部署在Docker中,有一些分析计算需要使用Spark计算,需要把任务提交到Spark集群计算. 接收程序部署在Docker中,主机不在Hadoop集群上.与Spa ...
- hbase高可用集群部署(cdh)
一.概要 本文记录hbase高可用集群部署过程,在部署hbase之前需要事先部署好hadoop集群,因为hbase的数据需要存放在hdfs上,hadoop集群的部署后续会有一篇文章记录,本文假设had ...
- hadoop+spark集群搭建入门
忽略元数据末尾 回到原数据开始处 Hadoop+spark集群搭建 说明: 本文档主要讲述hadoop+spark的集群搭建,linux环境是centos,本文档集群搭建使用两个节点作为集群环境:一个 ...
- Hadoop 2.6.0 集群部署
Hadoop的集群部署和单节点部署类似,配置文件不同,另外需要修改网络方面的配置 首先,准备3台虚拟机,系统为CentOS 6.6,其中一台为namenode 剩余两台为 datanode: 修改主机 ...
随机推荐
- static 关键字在java语言中的特性
一,将自己注入到一个静态变量中实现静态类,如下写法 以上方法的目的是要实现一个静态类,方便用类名获取对象实例,一般情况下调用普通方法需要对象实例.这对象要么new出来,要么spring的注入如下是 ...
- Linux操作系统启动故障排错之"/etc/fstab"文件被删除恢复案例
Linux操作系统启动故障排错之"/etc/fstab"文件被删除恢复案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.模拟故障 [root@yinzhe ...
- 解决PHP处理图片时内存占用过高问题
用过GD库的同学可能都知道,使用imagecreatetruecolor()函数创建一个真彩色的画布是第一步.但是,如果画布的宽高超过平常的宽高,会带来极大的内存消耗.比如,一个9600×4800的画 ...
- c++中关联容器map的使用
C++关联容器<map>简单总结(转) 补充: 使用count,返回的是被查找元素的个数.如果有,返回1:否则,返回0.注意,map中不存在相同元素,所以返回值只能是1或0. 使用find ...
- OLED液晶屏幕(4)串口读取文字并分割,液晶屏幕显示
ESP8266-07 0.93存 液晶屏 128*64 驱动芯片 ssd1306 接线 VCC-5v GND-GND SCL-D1(SCL) SDA-D2(SDA) 安装两个库 #include & ...
- LeetCode 826. Most Profit Assigning Work
原题链接在这里:https://leetcode.com/problems/most-profit-assigning-work/ 题目: We have jobs: difficulty[i] is ...
- JS开发——文件夹的上传和下载
文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...
- 如何调试 Windows 服务
概要 本文分步介绍了如何使用 WinDbg 调试程序 (windbg.exe) 调试 Windows 服务. 要调试 Windows 服务,可以在服务启动后将 WinDbg 调试程序附加到托管该服务的 ...
- SQL基础-约束&索引
一.约束 1.约束简介 约束(constraint): 表中数据的限制条件. 完整性 有效性 约束的种类: 主键约束 外键约束 唯一约束 检查约束 非空约束 2.主键约束 主键约束: 唯一标识表中每一 ...
- CSP内容安全策略总结及如何抵御 XSS 攻击
跨域脚本攻击 XSS 是最常见.危害最大的网页安全漏洞.为了防止它们,要采取很多编程措施,非常麻烦.很多人提出,能不能根本上解决问题,浏览器自动禁止外部注入恶意脚本?这就是"网页安全政策&q ...