一、X86 和 ARM
众所周知,当前 CPU 的主流系统架构分为 X86 架构和 ARM 架构。其中 X86 架构的所有权归属于 Intel 公司,而 ARM 架构则是开源的。
X86 架构的系统推出已经近 30 年,在这 30 年来互联网领域发展飞快,X86 架构也伴随着互联网的腾飞经过了高速发展的黄金时期,用户的应用、软件配套、软件开发等工具的配套和兼容都非常成熟,但由于 X86 架构的所有权问题,所有使用该架构的用户都需向 Intel 公司付费方可使用。
而开源的 ARM 架构在近年来尤为受到关注,面对当前日益复杂的国际环境以及基于 ARM 架构本身在功耗上的优异表现,国内外大量企业自研基于 ARM 架构的服务器芯片,越来越多的应用和软件配套也适配 ARM 架构。
二、Hadoop 集群搭建解决方案
CDH(Cloudra's Distribution Apache Of Hadoop)是 Apache Hadoop 和相关项目的最完整,经过测试和最流行的发行版。
CDH 是一个 WEB 操作平台,它集成了丰富的 Hadoop 生态,基于 CDH 版本的各种 Hadoop 框架和组件都能较为轻松并且高效的集成至 Hadoop 集群中。基于 CDH 的易用性和高效性,在 X86 架构下,绝大多数的公司和个人都会基于 CDH 进行大数据 Hadoop 集群的搭建与部署,但 CDH 本身并未提供基于 ARM 架构的版本,所以在当前火热的 ARM 架构和大数据发展下,如何在基于 ARM 架构的集群上搭建 Hadoop 集群是一个需要解决的问题。
当前基于 ARM 架构的 Hadoop 集群搭建有多种解决方案:
上述解决方案中,基于 Hadoop 开源版本的部署,会更加的贴近于 Hadoop 生态的蓬勃发展,并且能够更好地基于需求进行整个 Hadoop 集群的升级或优化。本文将介绍如何基于 Hadoop 开源版本完成一个大数据 Hadoop 集群的搭建。
三、Hadoop 组件和本地安装
得益于当前 ARM 架构的蓬勃发展,当前国内基于 ARM 架构投入研发的公司也越来越多,伴随着大家的研发与开源贡献,当前主流并且较为核心的 Hadoop 框架都已有支持 ARM 架构的版本。
本文将介绍如何安装 Zookeeper、Hadoop、Hive 和 Spark 用于实现基于开源 Hadoop 框架的大数据集群搭建。
3.1、配置免密和时钟同步
Hadoop 集群内部通信,需设置各个机器互相免密登录,并且各机器之间应确保时钟同步。
设置免密可通过修改 .ssh/authorized_keys 文件,设置 ssh 访问,在此不详细赘述。
设置 NTP 时间同步是用于确保分布式集群的时间一致性,在此不详细赘述。
模拟集群模式至少需要 3 台机器,默认以 node1,node2 和 node3 来指代,其中 node1 作为 master 节点。
3.2、JAVA
3.2.1 简介
Java 是搭建 Hadoop 集群最基础的配置,当前业界使用较为主流的是 JAVA8 和 JAVA11,由于当前 Hadoop 开源框架主流版本依旧使用 JAVA8,故本文使用 JAVA8。
3.2.2 解压并移动
上传 JAVA 包至 /usr/local 目录下,本文使用的是 zulu-java8-aarch64 的包。
tar -zxvf /usr/local/java8.tar.gz
mv /usr/local/java8 /opt/java
3.2.3 修改环境变量
vim ~/.bashrc
export JAVA_HOME=/opt/java
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:${JRE_HOME}/lib
export PATH=$JAVA_HOME/bin:$PATH
source ~/.bashrc
3.2.4 验证
java -version
3.3 Zookeeper
3.3.1 简介
Zookeeper 是一个分布式、开源的分布式应用程序协调服务,Hadoop 集群的各个组件的通信都依赖于 Zookeeper,所以首先安装 Zookeeper。
3.3.2 解压并移动
上传 Zookeeper 包至 /usr/local 目录下,本文使用的是 zk-3.4.14 版本。
tar -zxvf /usr/local/zookeeper.tar.gz
mv /usr/local/zookeeper /opt/zookeeper
3.3.3 修改 conf 下配置
cd /opt/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
dataDir=/opt/zookeeper/data
server.1=node1:2888:3888
server.1=node1:2888:3888
server.1=node1:2888:3888
3.3.4 其他配置
cd /opt/zookeeper
mkdir data
echo 1 > /opt/zookeeper/data/myid(node1 为 1,node2 为 2,node3 为 3)
3.3.5 scp 至各机器并修改 myid
scp -r /opt/zookeeper node2:/opt/zookeeper
其他机器相同操作
ssh node2
echo 2 > /opt/zookeeper/data/myid
3.3.6 添加环境变量
export ZOOKEEPER_HOME=/opt/zookeeper/zookeeper-3.4.14
export PATH=$ZOOKEEPER_HOME/bin:$PATH
# 更新
source ~/.bashrc
3.3.7 启动
cd /opt/zookeeper/bin
./zkServer.sh start
3.3.8 查看状态
jps
有一个进程名为 QuorumPeerMain
cd /opt/zookeeper/bin
./zkServer.sh status
3.4、Hadoop
3.4.1 简介
Hadoop 生态其实最初起源于 Hadoop 这个框架,Hadoop 中包括分布式文件存储系统 HDFS(Hadoop Distributed File System)、集群管理系统 YARN(Yet Another Resource Negotiator)和计算框架 MR(MapReduce)。
3.4.2 解压并移动
上传 Hadoop 包至 /usr/local 目录下,本文使用的是 hadoop-3.3.5-arrch64 版本。
tar -zxvf /usr/local/hadoop.tar.gz
mv /usr/local/hadoop /opt/hadoop
3.4.3 配置环境变量
vim ~/.bashrc
export HADOOP_HOME=/opt/hadoop/hadoop-3.3.5
export HADOOP_USER_NAME=user
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 更新
source ~/.bashrc
3.4.4 验证环境变量
cd /opt/hadoop/bin
./hadoop version
3.4.5 修改 hadoop-env.sh 文件
export JAVA_HOME=/opt/java
# 修改启动用户为 root
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export YARN_PROXYSERVER_USER=root
3.4.6 配置 core-site.xml、hdfs-site.xml、yarn-site.xml 和 mapred-site.xml
cd /opt/hadoop/etc/hadoop
core-site.xml
core-site.xml 文件中的主要是集群全局参数,用于定义系统级别的参数,如 HDFS 的 namenode 地址、Hadoop 临时目录等。
fs.defaultFS
hdfs://node1:8020
fs.trash.interval
1
io.compression.codecs
org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.DeflateCodec,org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.Lz4Codec
hadoop.security.authentication
simple
hadoop.security.authorization
false
hadoop.rpc.protection
authentication
hadoop.security.auth_to_local
DEFAULT
hadoop.proxyuser.oozie.hosts
*
hadoop.proxyuser.oozie.groups
*
hadoop.proxyuser.flume.hosts
*
hadoop.proxyuser.flume.groups
*
hadoop.proxyuser.HTTP.hosts
*
hadoop.proxyuser.HTTP.groups
*
hadoop.proxyuser.hive.hosts
*
hadoop.proxyuser.hive.groups
*
hadoop.proxyuser.hue.hosts
*
hadoop.proxyuser.hue.groups
*
hadoop.proxyuser.httpfs.hosts
*
hadoop.proxyuser.httpfs.groups
*
hadoop.proxyuser.hdfs.groups
*
hadoop.proxyuser.hdfs.hosts
*
hadoop.proxyuser.yarn.hosts
*
hadoop.proxyuser.yarn.groups
*
hadoop.security.group.mapping
org.apache.hadoop.security.ShellBasedUnixGroupsMapping
hadoop.security.instrumentation.requires.admin
false
net.topology.script.file.name
/etc/hadoop/conf.cloudera.yarn/topology.py
io.file.buffer.size
65536
hadoop.ssl.enabled
false
hadoop.ssl.require.client.cert
false
true
hadoop.ssl.keystores.factory.class
org.apache.hadoop.security.ssl.FileBasedKeyStoresFactory
true
hadoop.ssl.server.conf
ssl-server.xml
true
hadoop.ssl.client.conf
ssl-client.xml
true
hdfs-site.xml
hdfs-site.xml 文件是关于 HDFS 的配置信息,其中重点包括 namenode 节点地址、second namenode 节点地址、hdfs 的副本数和 block 块大小等。
dfs.namenode.name.dir
/opt/hadoop/hadoop-3.3.5/data/namenode
dfs.namenode.servicerpc-address
node1:8022
dfs.namenode.secondary.http-address
node2:8022
dfs.https.address
node1:9871
dfs.datanode.data.dir
/opt/hadoop/hadoop-3.3.5/data/datanode
dfs.https.port
9871
dfs.namenode.http-address
node1:9870
dfs.replication
3
dfs.blocksize
134217728
dfs.client.use.datanode.hostname
false
fs.permissions.umask-mode
022
dfs.client.block.write.locateFollowingBlock.retries
7
dfs.namenode.acls.enabled
false
dfs.client.read.shortcircuit
false
dfs.domain.socket.path
/var/run/hdfs-sockets/dn
dfs.client.read.shortcircuit.skip.checksum
false
dfs.client.domain.socket.data.traffic
false
dfs.datanode.hdfs-blocks-metadata.enabled
true
yarn.site.xml
yarn-site.xml 文件是 YARN 的配置文件信息,主要包括 resource manager 地址和 yarn 日志存放地址等。
yarn.resourcemanager.hostname
node1
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.nodemanager.local-dirs
file:///home/shaocx/.bigdata/hadoop/data/nm
yarn.log.server.url
http://node1:19888/jobhistory/logs/
yarn.log-aggregation-enable
true
yarn.web-proxy.address
node1:54321
yarn.log-aggregation.retain-seconds
-1
yarn.nodemanager.remote-app-log-dir
/logs
yarn.nodemanager.pmem-check-enabled
false
yarn.nodemanager.vmem-check-enabled
false
mapred-site.xml
mapred-site.xml 文件是 MapReduce 的参数配置文件,其中中的包括使用 yarn 进行 job 的调度管理、job 的历史文件存放位置等。
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
node1:10020
mapreduce.jobhistory.webapp.address
node1:19888
yarn.app.mapreduce.am.env
HADOOP_MAPRED_HOME=/opt/hadoop/hadoop-3.3.5
mapreduce.map.env
HADOOP_MAPRED_HOME=/opt/hadoop/hadoop-3.3.5
mapreduce.reduce.env
HADOOP_MAPRED_HOME=/opt/hadoop/hadoop-3.3.5
mapreduce.job.ubertask.enable
true
3.4.7 修改 workers 文件
vim /opt/hadoop/etc/hadoop/workers
node1
node2
node3
3.4.8 scp 文件至各节点并配置
scp -r /opt/hadoop node2:/opt/hadoop
其他节点相同操作
各节点设置环境变量
vim ~/.bashrc
3.4.9 初始化
cd /opt/hadoop/bin
./hadoop namenode -format
3.4.10 启动
cd /opt/hadoop/sbin
./start-all.sh
3.4.11 各节点状态查看
Master
jps
Jps
ResourceManager
QuorumPeerMain
NameNode
NodeManager
WebAppProxyServer
DataNode
Second Namenode
jps
SecondaryNameNode
NodeManager
Jps
DataNode
QuorumPeerMain
Worker
jps
DataNode
NodeManager
Jps
QuorumPeerMain
3.5、Mysql
3.5.1 简介
Mysql 的安装是为了使用 Mysql 作为 Hive 的基础库。
3.5.2 解压
上传 Mysql 压缩包只 /usr/local 目录下,使用的是 mysql-5.7.27-aarch64 版本的包。
tar -zxvf /usr/local/mysql-5.7.27-aarch64.tar.gz
3.5.3 新建 log 文件夹
mkdir -p /usr/local/mysql/logs
3.5.4 赋权 mysql 账号可访问 mysql 文件夹
chmod -R mysql:mysql /usr/local/mysql
3.5.5 修改初始化启动免密登录
cd /usr/local/mysql
vim my.cnf
[mysqld]下增加 skip-grant-tables
3.5.6 初始化
cd /usr/local/mysql/bin
./mysqld --initialize --console
3.5.7 启动
./mysqld -start
3.6、Hive
3.6.1 简介
Hive 是基于 Hadoop 之上的一个分布式数据仓库工具,可能经常能够听到说数仓的数据存储与 Hive 中,这其实是不准确的。Hive 本质是让开发人员能够使用类 SQL 的 HiveQL 对存储于 HDFS 上的文件能够进行快速操作,Hive 会将 HiveQL 转化为在 YARN 上 运行的 MapReduce 任务从而实现读取或操作。
3.6.2 解压并移动
上传 Hive 包至 /usr/local 目录下,使用的是 hive-3.1.2 版本的包。
tar -zxvf /usr/local/hive.tar.gz
mv /usr/local/hive /opt/hive
3.6.3 配置文件
cd /opt/hive/conf
cp hive-default.xml.template hive-site.xml
vim hive-site.xml
删除 hive-site.xml 第 3215 行的 "&8"。
将 hive-site.xml 中 "system:" 替换为 "",如 {system:java.io.tmpdir} 替换为 {java.io.tmpdir}
hive-site.xml 最后追加数据库连接信息
javax.jdo.option.ConnectionUserName
root
javax.jdo.option.ConnectionPassword
password
javax.jdo.option.ConnectionURL
jdbc:mysql://node1:3306/hive
javax.jdo.option.ConnectionDriverName
com.mysql.cj.jdbc.Driver
hive.metastore.schema.verification
false
3.6.4 创建数据库
在 Mysql 下创建 hive 库
3.6.5 数据初始化
上传 mysql-connector-java-8.0.15.jar 至 /opt/hive/lib 目录下
cd /opt/hive/bin
./schematool -dbType mysql -initSchema
3.6.6 修改环境变量
vim ~/.bashrc
export HIVE_HOME=/opt/hive/apache-hive-3.1.2-bin
export PATH=$PATH:$HIVE_HOME/bin:$PATH
source ~/.bashrc
3.6.7 验证
查看 Mysql 下的 hive 库下是否新增 74 张表。
启动 Hive
cd /opt/hive/bin
./hive
3.7 Spark
3.7.1 简介
Spark 是一个类似于 MapReduce 的分布式快速计算框架,用于解决 MapReduce 的查询效率问题,Spark 将中间的查询结果读取到内存中用于后续继续计算,大大提高了查询效率。
3.7.2 解压并移动
上传 Spark 包至 /usr/local 下,使用的是 spark-3.3.2-hadoop3-scala2.13 版本,从包名可以看出这是基于 Hadoop3 和 Scala2.13 版本的 Spark-3.3.2。
tar -zxvf /usr/local/spark
mv /usr/local/hive /opt/spark
3.7.3 修改 spark-env 文件
cd /opt/spark/conf
cp spark-env.sh.template spark-env.sh
vim spark-env.sh
export JAVA_HOME=/opt/java
export HADOOP_HOME=/opt/hadoop
export HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
export HADOOP_LOG_DIR=/opt/hadoop/logs
3.7.4 修改 spark-defaults.conf 文件
cp spark-defaults.conf.template spark-defaults.conf
vim spark-defaults.conf
spark.master yarn
spark.eventLog.enabled true
spark.driver.memory 5g
3.7.5 启动
cd /opt/spark/bin
./spark-shell
一段启动日志后,Spark 启动成功并进入操作控制台,可以执行增删改查命令。
一个基于开源 Hadoop 框架的基础的大数据集群也就搭建完成了。
推荐阅读
利用流量保障搜索质量的实践
Rc-form: 消失的“Ta”
Redis Bigkey 排查
Kubernetes Gateway API
架构方法论
招贤纳士
政采云技术团队(Zero),Base 杭州,一个富有激情和技术匠心精神的成长型团队。规模 500 人左右,在日常业务开发之外,还分别在云原生、区块链、人工智能、低代码平台、中间件、大数据、物料体系、工程平台、性能体验、可视化等领域进行技术探索和实践,推动并落地了一系列的内部技术产品,持续探索技术的新边界。此外,团队还纷纷投身社区建设,目前已经是 google flutter、scikit-learn、Apache Dubbo、Apache Rocketmq、Apache Pulsar、CNCF Dapr、Apache DolphinScheduler、alibaba Seata 等众多优秀开源社区的贡献者。
如果你想改变一直被事折腾,希望开始折腾事;如果你想改变一直被告诫需要多些想法,却无从破局;如果你想改变你有能力去做成那个结果,却不需要你;如果你想改变你想做成的事需要一个团队去支撑,但没你带人的位置;如果你想改变本来悟性不错,但总是有那一层窗户纸的模糊……如果你相信相信的力量,相信平凡人能成就非凡事,相信能遇到更好的自己。如果你希望参与到随着业务腾飞的过程,亲手推动一个有着深入的业务理解、完善的技术体系、技术创造价值、影响力外溢的技术团队的成长过程,我觉得我们该聊聊。任何时间,等着你写点什么,发给 zcy-tc@cai-inc.com
微信公众号
文章同步发布,政采云技术团队公众号,欢迎关注