前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Alluxio集群搭建并整合MapReduce/Hive/Spark

Alluxio集群搭建并整合MapReduce/Hive/Spark

原创
作者头像
岳涛
修改2021-09-26 17:19:25
1.7K3
修改2021-09-26 17:19:25
举报
文章被收录于专栏:大数据生态大数据生态

说明

本文描述问题及解决方法同样适用于 弹性 MapReduce(EMR)

环境配置

版本

Linux环境:centos7.4

CDH:5.16.1

Java:1.8.0_131

Alluxio:2.3.0

配置

机器数量:50

内存:64G

硬盘:4T

CPU核心数:32

背景

Alluxio是世界上第一个虚拟的分布式存储系统,以内存速度统一了数据访问。它为计算框架和存储系统构建了桥梁,使应用程序能够通过一个公共接口连接到许多存储系统。Alluxio以内存为中心的架构使得数据的访问速度能比现有方案快几个数量级。

其优势

● 通过简化应用程序访问其数据的方式(无论数据是什么格式或位置),Alluxio 能够帮助克服从数据中提取信息所面临的困难。使用 Alluxio 的优势包括:

● 内存速度 I/O:Alluxio 能够用作分布式共享缓存服务,这样与 Alluxio 通信的计算应用程序可以透明地缓存频繁访问的数据(尤其是从远程位置),以提供内存级 I/O 吞吐率。

● 简化云存储和对象存储接入:与传统文件系统相比,云存储系统和对象存储系统使用不同的语义,这些语义对性能的影响也不同于传统文件系统。常见的文件系统操作(如列出目录和重命名)通常会导致显著的性能开销。当访问云存储中的数据时,应用程序没有节点级数据本地性或跨应用程序缓存。将 Alluxio 与云存储或对象存储一起部署可以缓解这些问题,因为这样将从 Alluxio 中检索读取数据,而不是从底层云存储或对象存储中检索读取。

● 简化数据管理:Alluxio 提供对多数据源的单点访问。除了连接不同类型的数据源之外,Alluxio 还允许用户同时连接到不同版本的同一存储系统,如多个版本的 HDFS,并且无需复杂的系统配置和管理。

● 应用程序部署简易:Alluxio 管理应用程序和文件或对象存储之间的通信,将应用程序的数据访问请求转换为底层存储接口的请求。Alluxio 与 Hadoop 兼容,现有的数据分析应用程序,如 Spark 和 MapReduce 程序,无需更改任何代码就能在 Alluxio 上运行。

编译

下载源码

代码语言:javascript
复制
git clone git://github.com/alluxio/alluxio.git

编译开源Hadoop版本

代码语言:javascript
复制
mvn clean install -Phadoop-2 -Dhadoop.version=2.6.0 -DskipTests

编译CDH版本

代码语言:javascript
复制
mvn clean install -Phadoop-2 -Dhadoop.version=2.6.0-cdh5.16.1 -DskipTests

编译成功。

初始化Alluxio

修改配置文件

代码语言:javascript
复制
cp conf/alluxio-site.properties.template conf/alluxio-site.properties

敲黑板

● 由于博主这边的集群使用了安全权限控制,此处涉及四条Kerberos相关的配置,如集群没有使用安全权限控制需自行忽略。

● 如有Alluxio整合Kerberos权限控制的需求,需添加这四条配置。

代码语言:javascript
复制
vim alluxio-site.properties
代码语言:javascript
复制
vim masters
代码语言:javascript
复制
vim workers

分发Alluxio

  • 复制文件夹到每台机器
  • 各个机器alluxio用户相互之间免密登陆

软连接配置

为每个机器设置java软连接,需要在这些目录其中之一配置软连接

代码语言:javascript
复制
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/spark/bin:/opt/spark/sbin:/root/bin

如果配置好了可以忽略,否则:

代码语言:javascript
复制
ln -s /usr/java/jdk1.8.0_131/bin/java /usr/bin/java

如果这里没有配置好的话,后面步骤就会出现如下错误

代码语言:javascript
复制
Error: Cannot find 'java' on path or under $JAVA_HOME/bin.

创建ramdisk文件夹

之前配置的文件夹路径,需要先手动创建出来

格式化Alluxio文件系统

代码语言:javascript
复制
./bin/alluxio format

启动

代码语言:javascript
复制
./bin/alluxio-start.sh all Mount

如果是root用户起的,使用Mount,如果是非root用户起的,用SudoMount。第一次需要这样,之后启动直接./bin/alluxio-start.sh all就可以。

经过较长时间的等待,启动完成

查看web端

代码语言:javascript
复制
http://ip:19999

使用 Alluxio

这里可以把它简单理解为一个文件系统,操作这个文件系统和HDFS非常相似

代码语言:javascript
复制
./bin/alluxio fs 操作命令

比如:

代码语言:javascript
复制
./bin/alluxio fs mkdir /test

这里使用比较简单,大部分参考HDFS操作命令即可。

集成 MapReduce

修改配置文件

Hadoop的core-site.xml

代码语言:javascript
复制
    <!--alluxio集成mapreduce的操作-->
    <property>
        <name>fs.alluxio.impl</name>
        <value>alluxio.hadoop.FileSystem</value>
        <description>The Alluxio FileSystem (Hadoop 1.x and 2.x)</description>
    </property>
    <property>
        <name>fs.AbstractFileSystem.alluxio.impl</name>
        <value>alluxio.hadoop.AlluxioFileSystem</value>
        <description>The Alluxio AbstractFileSystem (Hadoop 2.x)</description>
    </property>

hadoop的hadoop-env.sh

代码语言:javascript
复制
export HADOOP_CLASSPATH=/opt/alluxio/client/alluxio-2.3.0-SNAPSHOT-client.jar:${HADOOP_CLASSPATH}

拷贝jar包到hadoop

代码语言:javascript
复制
cp /opt/alluxio/client/alluxio-2.3.0-SNAPSHOT-client.jar /opt/cloudera/parcels/CDH/lib/hadoop/lib/

● 分发更新后的hadoop配置文件和lib的jar包到每一个hadoop集群节点,重启hadoop和alluxio

检查集成mapreduce是否成功

代码语言:javascript
复制
integration/checker/bin/alluxio-checker.sh mapreduce

集成 Hive

修改配置文件

Hive的hive-env.sh

代码语言:javascript
复制
export HIVE_AUX_JARS_PATH=/opt/alluxio/client/alluxio-2.3.0-SNAPSHOT-client.jar:${HIVE_AUX_JARS_PATH}

在Alluxio上创建Hive表

有不同的方法可以将Hive与Alluxio整合。这一节讨论的是如何将Alluxio作为文件系统的一员(像HDFS)来存储Hive表。这些表可以是内部的或外部的,新创建的表或HDFS中已存在的表。

使用文件在Alluxio中创建新表

Hive可以使用存储在Alluxio中的文件来创建新表。设置非常直接并且独立于其他的Hive表。一个示例就是将频繁使用的Hive表存在Alluxio上,从而通过直接从内存中读文件获得高吞吐量和低延迟。

这里有一个示例展示了在Alluxio上创建Hive的内部表。你可以从http://grouplens.org/datasets/movielens/ 下载数据文件(如:ml-100k.zip)。然后接下该文件,并且将文件u.user上传到Alluxio的ml-100k/下:

代码语言:javascript
复制
./bin/alluxio fs mkdir /ml-100k
./bin/alluxio fs copyFromLocal ~/ml-100k/u.user alluxio://cdh01:19998//ml-100k

然后创建新的内部表:

代码语言:javascript
复制
hive> CREATE TABLE u_user (
userid INT,
age INT,
gender CHAR(1),
occupation STRING,
zipcode STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\u001'
LOCATION 'alluxio://cdh01:19998//ml-100k';

在ALluxio中使用已经存储在HDFS中的表

下面的HiveQL语句会将表数据的存储位置从HDFS转移到Alluxio中:

代码语言:javascript
复制
hive> alter table u_user set location "alluxio://cdh01:19998/user/hive/warehouse/u_user";

将表的元数据恢复到HDFS

下面的HiveQL语句可以将表的存储位置恢复到HDFS中:

代码语言:javascript
复制
hive> alter table TABLE_NAME set location "hdfs://cdh01:8020/user/hive/warehouse/u_user";

集成 Spark

修改配置文件

Spark的spark-defaults.conf

代码语言:javascript
复制
spark.driver.extraClassPath   /opt/alluxio/client/alluxio-2.3.0-SNAPSHOT-client.ja
spark.executor.extraClassPath /opt/alluxio/client/alluxio-2.3.0-SNAPSHOT-client.jar

拷贝jar包到spark

代码语言:javascript
复制
cp /opt/alluxio/client/alluxio-2.3.0-SNAPSHOT-client.jar /opt/cloudera/parcels/CDH/lib/spark/lib/
cp /opt/alluxio/client/alluxio-2.3.0-SNAPSHOT-client.jar /opt/cloudera/parcels/CDH/jars/

● 分发更新后的配置文件和lib的jar包到每一个hadoop集群节点,重启相关服务。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 环境配置
    • 版本
      • 配置
      • 背景
        • 其优势
        • 编译
          • 下载源码
            • 编译开源Hadoop版本
              • 编译CDH版本
              • 初始化Alluxio
                • 修改配置文件
                  • 敲黑板
                    • 分发Alluxio
                      • 软连接配置
                        • 创建ramdisk文件夹
                          • 格式化Alluxio文件系统
                            • 启动
                              • 查看web端
                              • 使用 Alluxio
                              • 集成 MapReduce
                                • 修改配置文件
                                  • Hadoop的core-site.xml
                                  • hadoop的hadoop-env.sh
                                • 拷贝jar包到hadoop
                                  • 检查集成mapreduce是否成功
                                  • 集成 Hive
                                    • 修改配置文件
                                      • Hive的hive-env.sh
                                    • 在Alluxio上创建Hive表
                                      • 使用文件在Alluxio中创建新表
                                    • 在ALluxio中使用已经存储在HDFS中的表
                                      • 将表的元数据恢复到HDFS
                                      • 集成 Spark
                                        • 修改配置文件
                                          • Spark的spark-defaults.conf
                                        • 拷贝jar包到spark
                                        相关产品与服务
                                        大数据
                                        全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
                                        领券
                                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档