Hadoop+Spark+Hbase部署整合篇

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/46673079 之前的几篇博客中记录的Hadoop、Spark和Hbase部署过程虽然看起来是没多大问题,但是之后在上面跑任务的时候出现了各种各样的配置问题。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/46673079

之前的几篇博客中记录的Hadoop、Spark和Hbase部署过程虽然看起来是没多大问题,但是之后在上面跑任务的时候出现了各种各样的配置问题。庆幸有将问题记录下来,可以整理出这篇部署整合篇。

确保集群的每台机器用户名都为cloud(或者一样)

为了避免过多重复的解释,这里仅仅示意了怎么配置,关于配置的详情解释可自行百度,必应之~或者参考:
hadoop2.2.0集群安装和配置
HBase集群的安装部署
Spark(一)– Standalone HA的部署

修改各个节点上的/etc/hosts文件确保ip与主机名的映射关系正确

关闭系统防火墙
service iptables stop
chkconfig iptables off
reboot

配置ssh免密码登陆
在每台机器上都执行下列命令
chmod -R 755 /home/cloud
mkdir ~/.ssh
ssh-keygen -t rsa

之后在cloud1上收集各个机器的公钥
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

ssh cloud2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh cloud3 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh cloud4 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh cloud5 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh cloud6 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
将公钥拷贝到其他节节点

scp ~/.ssh/authorized_keys cloud2:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys cloud3:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys cloud4:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys cloud5:~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys cloud6:~/.ssh/authorized_keys
在每台机器上都执行(很重要,注意配置ssh的时候要使用cloud用户来配置)

chmod -R 700 ~/.ssh

Zookeeper安装:

zk服务器集群规模不小于3个节点,要求各服务器之间系统时间要保持一致

设置环境变量

vi /etc/profile

新增

export ZOOKEEPER_HOME=/home/cloud/zk

path后新增

:$ZOOKEEPER_HOME/bin
source /etc/profile

保存文件生效
在另外两个节点slave1和slave2上分别设置改环境变量

进入zk目录

在conf目录下,重命名文件

mv zoo_sample.cfg zoo.cfg

编辑该文件,执行vi zoo.cfg
修改dataDir=/home/cloud/zk/data
新增

server.1=cloud4:2888:3888
server.2=cloud5:2888:3888
server.3=cloud6:2888:3888

ticktickTime=20000 (默认)2-20倍的minSessionTimeout与maxSessionTimeout
注: tickTime 心跳基本时间单位毫秒,ZK基本上所有的时间都是这个时间的整数倍。

zk的详细配置见:
zookeeper配置文件详解

创建文件夹mkdir /home/cloud/zk/data
在data目录下,创建文件myid,内容为1
echo 1 > /home/cloud/zk/data/myid

把zk目录复制到slave1和slave2中

scp -r zk slave1:/home/cloud
scp -r zk slave2:/home/cloud

把cloud5中相应的myid的值改为1
把cloud6中相应的myid的值改为2

启动,在三个节点上分别执行命令./zkServer.sh start
检验,在三个节点上分别执行命令./zkServer.sh status

JDK安装

使用root用户
在usr目录下新建java目录。
将jdk上传到linux中
在/usr/java下

chmod 755 jdk-6u45-linux-i586.bin

./jdk-6u45-linux-i586.bin

mv jdk1.6.0_45 jdk

vi /etc/profile

export JAVA_HOME=/usr/java/jdk
export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile

Hadoop安装

解压Hadoop文件之后,进入conf目录
修改hadoop-env.sh
加入

export JAVA_HOME=/usr/java/jdk

(为了解决网络不好或者其他情况下造成的通信失败,下列有些简单粗暴的配置了连接zk的timeout时间)

修改core-site.xml

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/cloud/hadoop/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name> 
<value>cloud4:2181,cloud5:2181,cloud6:2181</value>
</property>
<property>
<name>ha.zookeeper.session-timeout.ms</name>
<value>6000000</value>
</property>
<property>  
<name>ha.failover-controller.cli-check.rpc-timeout.ms</name>  
<value>6000000</value>  
</property>  
<property>  
<name>ipc.client.connect.timeout</name>  
<value>6000000</value>  
</property>
</configuration>

修改hdfs-site.xml

<configuration>
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>cloud1:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>cloud1:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>cloud2:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>cloud2:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name> 
<value>qjournal://cloud4:8485;cloud5:8485;cloud6:8485/ns1</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/cloud/hadoop/journal</value>
</property>
<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>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/cloud/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<property>
<name>dfs.qjournal.start-segment.timeout.ms</name>
<value>600000000</value>
</property>
<property>
<name>dfs.qjournal.prepare-recovery.timeout.ms</name>
<value>600000000</value>
</property>
<property>
<name>dfs.qjournal.accept-recovery.timeout.ms</name>
<value>600000000</value>
</property>
<property>
<name>dfs.qjournal.prepare-recovery.timeout.ms</name>
<value>600000000</value>
</property>
<property>
<name>dfs.qjournal.accept-recovery.timeout.ms</name>
<value>600000000</value>
</property>
<property>
<name>dfs.qjournal.finalize-segment.timeout.ms</name>
<value>600000000</value>
</property>
<property>
<name>dfs.qjournal.select-input-streams.timeout.ms</name>
<value>600000000</value>
</property>
<property>
<name>dfs.qjournal.get-journal-state.timeout.ms</name>
<value>600000000</value>
</property>
<property>
<name>dfs.qjournal.new-epoch.timeout.ms</name>
<value>600000000</value>
</property>
<property>
<name>dfs.qjournal.write-txns.timeout.ms</name>
<value>600000000</value>
</property>
<property>
<name>ha.zookeeper.session-timeout.ms</name>
<value>6000000</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.resourcemanager.hostname</name>
<value>cloud3</value>
</property>
<property> 
<name>yarn.nodemanager.aux-services</name> 
<value>mapreduce_shuffle</value> 
</property>                                                                                            
</configuration> 

修改slaves
cloud3
cloud4
cloud5
cloud6

将配置好的hadoop拷贝到其他节点

scp -r ~/hadoop/ cloud2:~/
scp -r ~/hadoop/ cloud3:~/
scp -r ~/hadoop/ cloud4:~/
scp -r ~/hadoop/ cloud5:~/
scp -r ~/hadoop/ cloud6:~/

启动Hadoop之前先启动zk
cd ~/zookeeper/bin/

./zkServer.sh start

查看状态:一个leader,两个follower

./zkServer.sh status

启动journalnode(在cloud1上启动所有journalnode,注意:是调用的hadoop-daemons.sh这个脚本,注意是复数s的那个脚本)

cd ~/hadoop

~/hadoop/sbin/hadoop-daemons.sh start journalnode

运行jps命令检验,cloud4、cloud5、cloud6上多了JournalNode进程

格式化HDFS(在bin目录下)

在cloud1上执行命令:

./hdfs namenode -format

格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里

我配置的是~/hadoop/tmp,然后将~/hadoop/tmp拷贝到cloud2的~/hadoop/下。

scp -r ~/hadoop/tmp/ cloud2:~/hadoop/

格式化ZK(在cloud1上执行即可,在bin目录下)

./hdfs zkfc -formatZK

启动HDFS(在cloud1上执行)

~/hadoop/sbin/start-dfs.sh

启动YARN(cloud2)

~/hadoop/sbin/start-yarn.sh

注意:hadoop初次格式化之后要将两个nn节点的tmp/dfs/name文件夹同步

Hbase安装

解压之后配置hbase集群,要修改3个文件(首先zk集群已经安装好了)
注意:要把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下
让hbase节点知道hdfs的映射关系,也可以在hbase-site.xml中配置

修改hbase-env.sh

export JAVA_HOME=/usr/java/jdk
//告诉hbase使用外部的zk 
export HBASE_MANAGES_ZK=false
export HBASE_CLASSPATH=/usr/local/hadoop/conf

vi hbase-site.xml

<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://ns1/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>cloud4:2181,cloud5:2181,cloud6:2181</value>
</property>
<property>
<name>hbase.master</name>
<value>cloud1</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>6000000</value>
</property>
</configuration>

和hdfs的配置一样,说明hbase的子节点都在哪些机器上

vi regionservers
cloud3
cloud4
cloud5
cloud6

把zoo.cfg 拷贝到 hbase-0.90.3/conf/下

拷贝hbase到其他节点
scp -r ~/hbase/ cloud2:~/
scp -r ~/hbase/ cloud3:~/
scp -r ~/hbase/ cloud4:~/
scp -r ~/hbase/ cloud5:~/
scp -r ~/hbase/ cloud6:~/
将配置好的HBase拷贝到每一个节点并同步时间。

Spark安装

安装scala:
tar –zxvf scala-2.10.5.tgz
mv scala-2.10.5 scala

安装spark:
tar -zxvf spark-1.3.0-bin-hadoop2.3.tgz
mv spark-1.3.1 spark

进入spark目录,修改文件slaves
vi conf/slaves
cloud2
cloud3
cloud4
cloud5
cloud6

修改spark-env.sh
vi conf/spark-env.sh

export SPARK_MASTER_IP=cloud1 
export SPARK_WORKER_MEMORY=512m 
export JAVA_HOME=/usr/java/jdk 
export SCALA_HOME=/home/cloud/scala 
export SPARK_HOME=/home/cloud/spark 
export HADOOP_CONF_DIR=/home/cloud/hadoop/etc/hadoop 
export SPARK_LIBRARY_PATH=$SPARK_HOME/lib 
export SCALA_LIBRARY_PATH=SPARK_LIBRARY_PATH 
export SPARK_WORKER_CORES=1 
export SPARK_WORKER_INSTANCES=1 
export SPARK_MASTER_PORT=7077
#错误:节点无法加载到hbase包
#处理方式:sh中加入classpath指向hbasejar路径
export SPARK_CLASSPATH=/home/cloud/hbase/lib/*
export SPARK_DAEMON_JAVA_OPTS="-Dspark.storage.blockManagerHeartBeatMs=6000000"

spark配置详见:
Spark 配置

将cloud1上配置好的spark和scala通过scp复制到其他各个节点上(注意其他节点上的profile文件也要一致)

各个节点的profile文件内容:

export JAVA_HOME=/usr/java/jdk
export HADOOP_HOME=/home/cloud/hadoop
export SCALA_HOME=/home/cloud/scala
export SPARK_HOME=/home/cloud/spark
export HBASE_HOME=/home/cloud/hbase
export PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$HADOOP_HOME/bin:$HBASE_HOME/bin
相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
142 6
|
1月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
64 2
|
13天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
53 2
|
14天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
53 1
|
5天前
|
分布式计算 资源调度 Hadoop
【赵渝强老师】部署Hadoop的本地模式
本文介绍了Hadoop的目录结构及本地模式部署方法,包括解压安装、设置环境变量、配置Hadoop参数等步骤,并通过一个简单的WordCount程序示例,演示了如何在本地模式下运行MapReduce任务。
|
1月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
68 4
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
32 3
|
1月前
|
分布式计算 Hadoop Shell
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
56 3
|
2月前
|
分布式计算 Java Hadoop
java使用hbase、hadoop报错举例
java使用hbase、hadoop报错举例
90 4
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-34 HBase 安装部署 单节点配置 hbase-env hbase-site 超详细图文 附带配置文件
Hadoop-34 HBase 安装部署 单节点配置 hbase-env hbase-site 超详细图文 附带配置文件
69 2